学习重点
1、就近原则
2、变量的分类
成员变量:类变量、实例变量
局部变量
3、非静态代码块在执行:每次创建实例对象都会执行
4、方法的调用规则: 调用一次执行一次
局部变量和成员变量的区别
1、声明的位置
局部变量: 方法体{} 中,形参,代码块{}中
成员变量: 类方法外
(1)类变量:有static修饰
(2)实例变量:没有static修饰
2、修饰符
局部变量:final
成员变量:public、 protected、private、final、static、volatile、stransient
3、值存储的位置
局部变量:栈
实例变量:堆
类变量: 方法区
4、作用域
局部变量:从声明开始,到所属的 } 结束
实例变量:在当前类中“this”(有时this可以缺省)在其他类中“对象.名”访问
类变量:在当前类名中“类名.”(有时类名.可以缺省),在其他类中“类名.”或者“对象名.”访问
5、生命周期
局部变量:每一个线程,每一次调用执行都是一个新的生命周期
实例变量:随着对象的创建而初始化,随着对象的被回收而消亡,每一个对象的实例变量都是独立的
当局部变量与xx变量重名时,如何区分
(1)局部变量和实例变量重名
在成员变量前面加“this”
(2)局部变量与类变量重名
在类变量前面加“类名.”
代码练习
public class Exam5 {
static int s;
int i;
int j;
{
int i=1;
i++;
j++;
s++;
}
public void test(int j){
j++;
i++;
s++;
}
public static void main(String[] args) {
Exam5 obj1= new Exam5();
Exam5 obj2= new Exam5();
obj1.test(10);
obj1.test(20);
obj2.test(30);
System.out.println("obj1: "+obj1.i+","+obj1.j+","+obj1.s);
System.out.println("obj2: "+obj2.i+","+obj2.j+","+obj2.s);
}
}
运行结果:
obj1: 2,1,5
obj2: 1,1,5
Process finished with exit code 0
结果分析: