对比 | 成员变量 | 局部变量 |
---|---|---|
声明位置 | 在类的范围里定义的变量 | 在方法里定义的变量 |
作用域 | 其所在的整个类 | 从定义的位置开始到其所在语句块结束 |
默认初始值 | 有 | 没有 |
存储 | 未被static修饰的成员变量也叫实例变量,它存储于对象所在的堆内存中,生命周期与对象相同; 被static修饰的成员变量也叫类变量,它存储于方法区中,生命周期与当前类相同。 |
局部变量存储于栈内存中,作用的范围结束,变量空间会自动的释放 |
注意:
如果成员变量与局部变量的名字相同,则在局部变量的作用范围中,优先使用的是该局部变量;如果想使用成员变量,则需要关键字this来引用成员变量。
上代码:
public class Dog {
String dogName = "二哈";
public static void main(String[] args) {
Dog dog = new Dog();
dog.getDogName();
}
public void getDogName() {
// 局部变量与成员变量名字相同,都是dogName
String dogName = "萨摩";
// 此处获取的是局部变量的值,输出“萨摩”
System.out.println(dogName);
// 此处获取的是成员变量的值,输出“二哈”
System.out.println(this.dogName);
}
}