局部内部类访问局部变量
局部内部类是指位于方法内的类,局部内部类若要访问其所在方法内的变量,则该变量必须是final修饰的。
public static void main(String[] args) { int a = 3; // 应当使用final修饰变量a class Inner{ public void printA() {System.out.println("a = " + a);} } }
Inner是位于方法main()内的局部内部类,若要访问方法内的局部变量a,则a应当使用final修饰。
被内部类访问的局部变量会被拷贝一份到内部类中,即Inner中存在一个成员变量,用于记录局部变量a的值。若局部变量不是final的,其取值就可以被修改,而Inner对象中保存的是其原来的值,这就会出现数据不同步的问题。
Java为了避免数据不同步的问题,做出了内部类只可以访问final的局部变量的限制。
在java8中,可以不使用final,如果局部变量被内部类访问,那么该局部变量相当于自动使用了final修饰。
posted on 2019-08-06 15:43 Deltadeblog 阅读(3218) 评论(1) 编辑 收藏 举报