实例分析
public class Test {
static int s;
int i;
int j;
{
int i = 1;
i++;
j++;
s++;
}
public void func(int j){
i++;
j++;
s++;
}
public static void main(String[] args){
Test test1 = new Test();
Test test2 = new Test();
test1.func(10);
test1.func(20);
test2.func(30);
System.out.println("test1:" + test1.i + test1.j + test1.s);
System.out.println("test2:" + test2.i + test2.j + test2.s);
}
}
上面代码的考点
- 就近原则
- 变量分类
- 成员变量:类变量(带static的的成员变量)、实例变量
- 局部变量
- 非静态代码块的执行:每次创建实例对象都会执行
- 方法的调用规则:调用一次执行一次

运行内存分析

局部变量和成员变量的区别
- 作用域
- 局部变量:从声明出开始到所属的}结束
- 实例变量:在当前类中“this”(有时this可以缺省),在其他类中“对象名.var_name”的形式访问
- 类变量:在当前类中“类名.var_name”(有时类名可以缺省),在其他类中“类名.var_name”或“对象名.var_name”形式访问。如上例中的
test1.s
- 生命周期
- 局部变量:每一个线程,每一次调用都是执行都是新的生命周期
- 实例变量:随着对象的创建初始化,随着对象的回收而消亡,每一个对象的实例都是独立的。
- 实例变量:随着类的初始化而初始化,随着类的卸载而消亡,
该类的所以对象的类变量
都是共享
的。如上例中的static int s
。
当局部变量与XX变量重名时,如何区分
- 局部变量与实例变量重名,则在实例变量前面加
this.
- 局部变量与类变量重名,则在类变量前加“
类名.
”