黑马程序员技术交流社区
标题:
局部内部类注意的问题
[打印本页]
作者:
hezhipengzipp
时间:
2016-2-25 08:24
标题:
局部内部类注意的问题
在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();
}
}
}
作者:
hezhipengzipp
时间:
2016-2-25 08:42
各位请留下你们的足迹,跪求黑马币
作者:
z2585261
时间:
2016-2-25 09:02
顶顶顶顶顶
作者:
cxy8161994
时间:
2016-2-25 14:27
顶顶顶顶顶,66666
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2