A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
* 局部内部类能不能访问局部变量?为什么?
* 分析:可以,局部内部类能够访问用final修饰的局部变量。不能访问非final修饰的局部变量。
* 原因:局部变量与局部内部类的生存周期不同。
*                         局部变量存在于栈中,当方法结束时,局部变量就从栈中消失了。
*                         局部内部类的对象只有指向给对象的引用变量全部结束才会变成垃圾被系统回收,局部变量消失时,可能还在被局部内部类的对象使用
*                 所以只有被final修饰变成常量,存在于方法区中,两者的生存周期才能匹配。
*
*/
class Outer {
        Object obj = null;

        public void method() {
                //int a = 1;
                // blog1.Outer.method().Inner
                final int b = 2;
                System.out.println("OuterMethod");
                class Inner {
                        @Override
                        public String toString() {
                                // 沒被final修飾,不能夠內部類訪問。
                                // System.out.println(a);
                                System.out.println("Inner" + b);
                                return b + "";
                        }
                }
                obj = new Inner();
        }
}

public class Proj01 {
        public static void main(String[] args) throws Exception {

                Outer outer = new Outer();
                outer.method();
                outer.obj.toString();

        }
}

评分

参与人数 1黑马币 +4 收起 理由
LiuWei2015 + 4 内部类有点复杂的知识点既然分析这么透彻,.

查看全部评分

1 个回复

正序浏览
注釋少了一點,請見諒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马