有效范围
成员变量:在整个类中都有效,其有效性与它在类体中书写的先后位置无关。
局部变量:只在方法内有效,而且与其声明的位置有关(声明之后开始有效)。
生命周期
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
内存中的位置
成员变量:在堆中
局部变量:在栈中
初始化值
成员变量:有默认值
局部变量:没有默认值,因此在使用局部变量前,必须保证局部变量有具体的值
class InitError{
/**
*整形的成员变量:默认值 0
*浮点型 0.0
*boolean型 false
*引用型 null
*/
int x = 10 , y; //y的默认值值0
void f(){
int m; //m局部变量没有默认值,但编译无错
x = y + m; //无法通过编译,因为在使用m之前未指定m的值
}
}
注意点:
- 当局部变量和成员变量同名时,那么成员变量被隐藏,即该成员变量在这个方法中暂时失效(如果想在方法中使用被隐藏的成员变量,必须使用关键字this)。
class Tom{
int x = 10 , y;
void f(){
int x = 5;
y = x + x; //y得到的值是10,不是20
//y = x + this.x; // y的值为15
}
}
- 对成员变量的操作只能放在方法中。
class A{
int a = 12; //声明的同时赋予初值12,可行
int b;
b = 12; //非法,这是赋值语句(语句不是变量的声明,只能出现在方法体中)
}