❤ 面试题

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图1

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、正确答案

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图2

❤ 考点分析

1、就近原则

  • 注意点:同时注意考虑作用域!!

2、変量的分类

  • 成员变量:类变量、实例变量
  • 局部变量

3、非静态代码块的执行:每次创建实例对象都会执行。

4、方法的调用规则:调用一次执行一次

5、补充:属性赋值的先后顺序

❤ 局部变量与成员变量的区别

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图3
6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图4

一、面试题解析

1、就近原则,同时注意考虑作用域!!

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图5

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图6

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图7

2、可以指定调用者,破除就近原则。

  • 例如,加上 this、类名。
  • 相似问题:当局部变量与XX变量重名时,如何区分?

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图8

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图9

二、内存结构图

1、Exam5 obj1 = new Exam5()

注意点如下:

  • 实例化其实执行的是 ()
  • 代码块中声明的变量是局部变量,在栈中!
  • 就近原则,寻找最近的声明

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图10

2、Exam5 obj2 = new Exam5()

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图11

3、obj1.test(10)

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图12

4、obj1.test(20)

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图13

5、obj2.test(30)

6-第一季-06_尚硅谷_JavaSE面试题:成员变量与局部变量-2021-03-11 - 图14

三、内存结构图(自己画的)

1、Exam5 obj1 = new Exam5()

image.png

2、Exam5 obj2 = new Exam5()

image.png
**

3、obj1.test(10)

image.png

4、obj1.test(20)

image.png

5、obj2.test(30)

image.png

6、结果输出

image.png


☀ 课堂小测

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