成员变量与局部变量的区别
1. 定义位置的比较
成员变量:定义在类中,表示类的属性
局部变量:定义在方法中或者方法声明上(形式参数),用来描述方法的功能
2. 作用域
成员变量:作用于整个类,可以在类的内部任何地方访问(包括方法内部)
局部变量:作用于当前方法内,只能在当前方法中访问,其他方法访问不到
3. 缺省值
【当没有赋值时,系统根据数据类型提供的默认值】
成员变量:有
局部变量:没有,必须手动赋值【注意】:所有变量都必须先赋值,再使用
缺省值
数据类型 缺省值:
——————————————————————————————————————
整型:byte short int long 0
浮点类型:float double 0.0
字符类型:char \u0000
逻辑类型:boolean false字符串类型:String null
4. 在内存中的位置不同
成员变量:堆内存
局部变量:栈内存
5. 生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
6. 修饰符的使用
成员变量:可以加修饰符
局部变量:不可以
7. 重名问题
- 局部变量和成员变量重名:就近原则(局部变量会屏蔽成员变量)
- 使用this.成员变量区分成员变量
- 方法中只有成员变量时,默认也是使用 this 修饰,可以省略不写
- 局部变量之间不能重名,成员变量之间不能重名
8. 代码示例
/**
* @Desc:
成员变量:
* 位置:类中方法外
* 初始值:有默认值
* 生命周期:随着对象的创建而存在,随着对象的消失而消失
* 内存位置:堆内存中
* 局部变量:
* 位置:在方法内或者方法声明上
* 初始值:没有默认值,在使用前一定初始化
* 生命周期:随着方法的调用而存在,随着方法调用完毕而消失
* 内存位置:栈内存中
* 注意事项:
* 成员变量和局部变量名相同,在方法中使用,就近原则
* 成员变量作用范围全局(当前类中)
* 局部变量作用范围局部(当前方法)
*/
public class Varialbe {
//成员变量
int num;
//成员方法
public void show(){
//局部变量
int num2 = 10;
System.out.println(num2);//10
System.out.println(num);//找的是成员变量,有默认值
//成员变量和局部变量名相同,在方法中使用,就近原则
// int num = 100;
//System.out.println(num);
}
//成员方法 main是被jvm所调用(目前来说main一执行的方法)
public static void main(String[] args) {
System.out.println("1111111111111");
}
}
测试:
public class VarialbeDemo {
public static void main(String[] args) {
//创建对象
Varialbe v = new Varialbe();
//对象名.成员变量
System.out.println( v.num);//0
//对象名.成员方法
v.show();
}
}