Java的局部变量和闭包
请看示例代码:
public class Test {
void test() {
final Object object = new Object();
new Thread() {
@Override
public void run() {
////在局部内部类中使用方法的局部变量
System.out.println(object);
}
}.start();
}
}
- 当test()方法执行完毕时,局部变量object其实已经被释放;
- 在局部内部类中使用方法的局部变量时,实际上是把这个变量拷贝了一份,作为内部类的成员变量
- 被内部类使用的局部变量必须定义为final是为了拷贝的和原来的变量的一致;
给人的感觉:好像是局部变量的”生命期”延长了,这就是java的闭包。
思考:如果局部变量可以不为final的话:
public class Test {
void test() {
final Object object = new Object();
object = new Object();
new Thread() {
@Override
public void run() {
////在局部内部类中使用方法的局部变量
System.out.println(object);
}
}.start();
}
}