java7局部内部类访问外部变量final,java8不需要将变量设置为final?

为什么局部内部类只能访问外部的final变量?

这里没有写版本号,严谨!!哈哈哈哈哈
生命周期不同,当方法执行结束时,局部内部类如果依旧被引用,那么内部类不会死亡,也就意味着局部内部类访问的是一个不存在的变量,显然不合适。而事实上局部内部类不会产生访问以上问题,因为java编译时将局部内部类访问的变量已经拷贝了一份放进了局部内部类。为什么是final?如果局部变量为基本类型,那么值不能被改变,否则导致和局部变量不一致。如果局部变量为对象,只要保证对象是同一个对象(地址相同),值可以改变。因此用final。

为什么java8不需要设置为final?

只是不需要程序员显式设置而已,事实上只要局部内部类访问,java编译时已经将局部变量设置为final。我在java9中尝试更改局部变量的值会产生报错。

 void NonFinal(){
        int count=5;
        count =6; //这里修改会报错
        class nonF{
            public void print(){
                count =7;
                System.out.println("局部内部类访问非显式设置的final变量:"+count);//因为修改为7,这里也会报错
            }
        }
        nonF n = new nonF();
        n.print();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章