局部内部类访问局部变量

 

局部内部类是指位于方法内的类,局部内部类若要访问其所在方法内的变量,则该变量必须是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  阅读(3216)  评论(1编辑  收藏  举报

导航