❤ 面试题

1、自测结果(错误!)
1、先加载 main 方法所在的类 Exam5 的 “静态变量、静态代码块”
2、调用 Exam5 的构造器:super()、实例变量、实例代码块、Exam5()
3、同步骤2(重点:注意实例变量独立重新声明!)
4、obj1.test(10)
static int s = 0; —> s = 1; —> s = 3;
obj1
int i = 0; —> i = 1;(重点:代码块内外存在相同变量,且都有类型声明,如何执行?) —> i = 2
int j = 0; —> j = 1;
obj2
int i = 0; —> i = 1;(重点:代码块内外存在相同变量,且都有类型声明,如何执行?) —> i = 2
int j = 0; —> j = 1;
输出结果
2,1,3
2,1,3
2、正确答案

❤ 考点分析
1、就近原则
- 注意点:同时注意考虑作用域!!
2、変量的分类
- 成员变量:类变量、实例变量
- 局部变量
3、非静态代码块的执行:每次创建实例对象都会执行。
4、方法的调用规则:调用一次执行一次
5、补充:属性赋值的先后顺序
❤ 局部变量与成员变量的区别


一、面试题解析
1、就近原则,同时注意考虑作用域!!



2、可以指定调用者,破除就近原则。
- 例如,加上 this、类名。
- 相似问题:当局部变量与XX变量重名时,如何区分?


二、内存结构图
1、Exam5 obj1 = new Exam5()
注意点如下:
- 实例化其实执行的是
() - 代码块中声明的变量是局部变量,在栈中!
- 就近原则,寻找最近的声明。

2、Exam5 obj2 = new Exam5()

3、obj1.test(10)

4、obj1.test(20)

5、obj2.test(30)

三、内存结构图(自己画的)
1、Exam5 obj1 = new Exam5()

2、Exam5 obj2 = new Exam5()
3、obj1.test(10)
4、obj1.test(20)

5、obj2.test(30)

6、结果输出

☀ 课堂小测
- 回答面试题?考点分析?
- 局部变量与成员变量的区别?
- 当局部变量与XX变量重名时,如何区分?

