您的位置:首页 > 其它

为什么匿名内部类和局部内部类只能访问final变量

2017-08-20 00:00 239 查看
最主要的原因是局部变量的生命周期与局部内部类或者匿名内部类的对象的生命周期可能是不一样的,局部变量随方法的出栈而销毁,而局部内部类或者匿名内部类的生命周期可能更长。举个例子:

package com.letter.test;

/**
* @package: com.letter.test
* @describe:
* @author: WX
* @date: 2017年8月20日 下午2:44:37
*/
public class InnerClass {

//此处使用Runnable仅用于举列子。
private static Runnable runnable;

private static void method(){
final String say = "Hello Final!";
runnable = new Runnable() {
public void run() {
//此处say不声明为final类型也可以,但是编译器会自动把say转换为final变量,
//是由于JDK8的原因哈。
System.out.println(say);
}
};
}

public static void main(String[] args){
method();
runnable.run();
}
}

输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息