我们知道java的内部类
局部类要访问局部变量,必须将局部变量声明为final类型。
具体可以看到java内部类的介绍
也就是说
公共类演示{ publicstaticvoidmain (字符串[ ] args ) { doSomething ); } private static void doSomething () { final String str1='Hello '; String str2='World!' ; //方法中的本地内部类class Test { public void out () system.out.println ) str1); system.out.println(str2; } } Test test=new Test (; test.out (; }此方法已运行到system.out.println(str2); 时过境迁
编译会抛出异常,因为str2未声明为final。 cannotrefertothenon-finallocalvariablestr2definedinanenclosingscope
但是,我发现现在成功了
觉得不可思议,查了资料
JDK1.8之后匿名内部类访问方法中的局部变量不用加final修饰
具体而言,https://docs.Oracle.com/Java se/tutorial/Java oo/local classes.html # accessing-members-of-an-enensing