在jdk1.8之前 局部内部类访问局部变量时,局部变量需要加final修饰!
Why?局部变量时随着方法的调用而调用,随着方法的调用完毕而消失,而我们知道new出来的对象是保存在堆内存中,并不会立即消失,所以我们需要对所访问的局部变量进行final修饰,加入final修饰后,这个变量就成了常量。
但在用jdk1.8使用时,局部内部类访问局部变量,并不需要对局部变量加final修饰。
使用jdk1.8代码
package Pratice;
//这是jdk1.8版本的,从这个代码可以看出,局部内部类访问局部变量不需要加final修饰
//其实是底层默认加了final进行修饰
package Pratice;
public class Inner {
public void method(){
int a=10;
class InnerText{
public void method2(){
System.out.println(a);
}
}
}
}
用反编译工具xlad可以看到jdk进行的优化
package Pratice;
import java.io.PrintStream;
public class Inner
{
public Inner()
{
}
public void method()
{
int a = 10;
}
// Unreferenced inner class Pratice/Inner$1InnerText
class 1InnerText
{
final Inner this$0;
private final int val$a;
public void method2()
{
System.out.println(a);
}
1InnerText()
{
this$0 = Inner.this;
a = i;
super();
}
}
}
|
|