JDK7中匿名内部类中使用局部变量要加final,JDK8中不需要,但jdk会默认加上final

Posted Fight With Me!!!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK7中匿名内部类中使用局部变量要加final,JDK8中不需要,但jdk会默认加上final相关的知识,希望对你有一定的参考价值。

今天看书的时候看到了局部内部类,书上说局部内部类可以访问局部变量,但是必须是final的。因为局部变量在方法调用之后就消失了,使用final声明的话该局部变量会存入堆中,和内部类有一样的声明周期。但是我写了一个局部内部类,竟然可以访问非final的局部变量,请问这是什么回事呢。ps:我的jdk是8 难道和这个有关系?


public class jubuneibulei {
public void p(int a, int b){

class te{
void print(){
System.out.println(a);
}
}
new te().print();
}
public static void main(String[] args) {
 new jubuneibulei().p(111, 222);

}
}


JDK8中不需要,但jdk会默认加上final

以上是关于JDK7中匿名内部类中使用局部变量要加final,JDK8中不需要,但jdk会默认加上final的主要内容,如果未能解决你的问题,请参考以下文章

为什么匿名内部类参数必须为final类型

局部内部类final文章2

java学习之内部类匿名内部类

为啥内部类的private变量可被外部类直接访问

java 匿名内部类

匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型