1.局部内部类
1 /* 2 局部内部类 3 A:可以直接访问外部类的成员 4 B:在局部位置,可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能 5 6 面试题: 7 局部内部类访问局部变量的注意事项? 8 A:局部内部类访问局部变量必须用final修饰 9 B:为什么呢? 10 局部变量是随着方法的调用而调用,随着调用完毕而消失。 11 而堆内存的内容并不会立即消失。所以,我们加final修饰。 12 加入final修饰后,这个变量就成了常量。既然是常量。你消失了。 13 我在内存中存储的是数据20,所以,我还是有数据在使用。 14 */ 15 class Outer { 16 private int num = 10; 17 18 public void method() { 19 //int num2 = 20; 20 //final int num2 = 20; 21 class Inner {//如果num2不加final,到方法method()调用运行完毕之后,局部变量就会消失,但是堆内存中的new Inner不会立马消失 22 public void show() {//而且对象new Inner()内部还在使用num2,但是前面说过了num2已经提前消失了,所以会出错,要加final 23 System.out.println(num); 24 //从内部类中访问本地变量num2; 需要被声明为最终类型 25 System.out.println(num2);//20---反编译之后你会看到final效果就是System.out.println(20),直接把num2替换成20 26 } 27 } 28 29 //System.out.println(num2); 30 31 Inner i = new Inner(); 32 i.show(); 33 } 34 } 35 36 class InnerClassDemo5 { 37 public static void main(String[] args) { 38 Outer o = new Outer(); 39 o.method(); 40 } 41 }
时间: 2024-11-04 21:56:15