Java的局部变量和闭包

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();
    }
}

猜你喜欢

转载自blog.csdn.net/mingc0758/article/details/80956341
今日推荐