面向对象之属性与局部变量的对比

属性与局部变量的对比

面向对象 — 属性与局部变量的对比

刚刚开始写文章,如果文章对大家有帮助的话,希望可以点赞支持下,能有大家的支持写文章的时候会更有动力,蟹蟹~~~


文章目录

  • 属性与局部变量的对比
  • 前言
  • 一、属性与局部变量的相同点
  • 二、属性与局部变量的不同点
    • 1.在类中声明的位置的不同
    • 2.关于权限修饰符的不同
    • 3.默认初始化值的情况不同
    • 4.在内存中加载的位置不同
  • 三、代码示例


前言

当我们使用class关键字创建类之后,就需要设计类中的结构,其中,属性作为类中所有结构里重要的一部分,在声明的时候也有许多需要注意的地方和细节。首先想和大家说的是,其实属性也可以称为成员变量,而与其相对应的称为局部变量,虽然二者从字面上看似只有两字之差,但实则是有差别之分的。下面就来给大家介绍一下类中的属性与局部变量之间的区别。

一、属性与局部变量的相同点

属性和局部变量都属于是变量的一种体现,所以二者的声明格式、声明和和使用的先后顺序以及作用域的范围都应该遵从于变量的规则来进行。
1)定义变量的格式:数据类型 变量名 = 变量值
2)先声明,后使用
3)变量都有其对应的作用域

二、属性与局部变量的不同点

1.在类中声明的位置的不同

1)属性:直接定义在类的一对{}内
2)局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量

2.关于权限修饰符的不同

1)属性:可以在声明属性时,指明其权限,使用权限修饰符。
2)局部变量:不可以使用权限修饰符。这里可以理解为局部变量和其方法的权限一致。(权限修饰符体现了被调用时的可见性的大小)

3.默认初始化值的情况不同

1)属性:类的属性,根据其类型,都有默认初始化值。

  •  	整型(byte、short、int、long):0
    
  •  	浮点型(float、double):0.0
    
  •  	字符型(char):0  (或'\u0000')
    
  •  	布尔型(boolean):false
    
  •  	引用数据类型(类、数组、接口等):null
    

2)局部变量:没有默认初始化值。意味着,我们在调用局部变量之前,一定要显式赋值。特别地:形参在调用时,我们赋值即可。

4.在内存中加载的位置不同

这里大家需要记住的是,属性和局部变量在内存中加载的位置是不同的,在内存加载的时候,属性(非static)会被加载到堆空间中,而布局变量则会被加载到栈空间中。

三、代码示例

代码如下:

public class Test1 {
	public static void main(String[] args) {
		User u1 = new User();
		System.out.println("name的默认值为:" + u1.name);// 默认值为null
//		System.out.println(u1.age);//error:The field User.age is not visible
		System.out.println("age的默认值为:" + u1.getAge());// 默认值为0
		System.out.println("height的默认值为:" + u1.height);// 默认值为0.0
		System.out.println("isMale的默认值为:" + u1.isMale);// 默认值为false

		u1.eat();// 此方法内无参数,所以在调用时不需要赋值
		u1.talk("中文");// 调用方法时,给方法内的形参赋值
	}
}

class User {
	// 属性(成员变量)直接定义在类的{}内
	String name;
	// 被private修饰的属性为私有化属性,不能够被直接调用
	// 但可通过其set()方法和get()方法进行赋值和调用
	private int age;
	boolean isMale;
	double height;

	// 当形参在被调用时赋值即可
	public void talk(String language) {// language:方法形参,也是局部变量
		System.out.println("我们使用" + language + "交流");
	}

	public void eat() {
		String drink;// 这里如果不显示赋值的话,下面的输出语句就会报错
//		System.out.println(drink);//error:The local variable drink may not have been initialized
		// 给方法内的局部变量显示赋值后才可以输出
		String food = "烙饼";// 方法内的局部变量
		System.out.println("北方人喜欢吃:" + food);
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

输出结果如下:

name的默认值为:null
age的默认值为:0
height的默认值为:0.0
isMale的默认值为:false
北方人喜欢吃:烙饼
我们使用中文交流

你可能感兴趣的:(Java面向对象,java)