在自学视频中看到第九天,讲到内部类定义在局部时,访问它所在的局部中的变量,若该变量不加final关键字会编译报错,视频中也有代码的编译演示。
但我敲了代码,局部变量没加final,能正常编译运行。代码如下:
- class J9_1
- {
- public static void main(String[] args)
- {
- //新建外部类对象调用其中的Func方法
- new Out().Func();
- }
- }
- class Out
- {
- void Func()
- {
- int y =1;
- //定义在局部中的内部类In
- class In
- {
- //定义show方法,输出局部变量y
- void show()
- {
- System.out.println("In:"+y);
- }
- }
- //新建内部类In对象,并调用他的show方法
- new In().show();
- }
- }
复制代码
运行结果是:In:1。
为了解开疑惑,我添加语句y=2,将y再次赋值。会报如下错误:
错误:从内部类引用的本地变量必须是最终变量或实际上的最终变量。
我的结论:
1.内部类定义在局部时,对于它所在局部的变量,只能访问final修饰过的局部变量
2.我用的是jdk1.80_31,若访问没被final修饰过的变量,不会报错,能编译运行。但会自动将该变量添加
final关键字,该变量不能被重复赋值。 |