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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

方法中的内部类能不能访问方法中的局部变量,我知道是不能的,加上final就可以,但是具体原因是什么?哪位同学能总结一下,用最言简意赅的语言来总结。

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!

查看全部评分

5 个回复

正序浏览
学习了!谢谢!
回复 使用道具 举报
四五六七八 发表于 2013-12-7 16:19
因为方法中的局部变量有可能比内部类的生命周期短(方法执行完之后,局部变量销毁,而内部类对象有可能仍然 ...

谢谢你哈,我懂了。
回复 使用道具 举报
//内部类,可以等同的当成一个方法来看待
class Test{
        int i;
        void outMethod(int i){ i = 2;}//一个成员方法,可以直接调用成员属性
        class OutTest{
                void outMethod(){
                        i = 2;                        //所以一个成员内部类也可以直接访问成员属性
                }
        }
        public static void main(String[] args) {
                int j = 2;
                final int k =5;
                class InTest{
                        int inMethod(int j){ return j = j + k;}//final因为是不可变的常量,所以给了特权
                }
                InTest it = new InTest();
                j = it.inMethod(j);//所以同样的,方法内部类也只能传参,不能直接拿到变量
                Test t = new Test();
                t.outMethod(j);//在方法内再调用方法,只能通过传参
        }
}

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 很给力!

查看全部评分

回复 使用道具 举报
因为方法中的局部变量有可能比内部类的生命周期短(方法执行完之后,局部变量销毁,而内部类对象有可能仍然存在)
class out{
        public Object show() {
                final int i=0;//使用final是变量存储在常量池,
                class Inner {
                        public void printi(){
                                System.out.println(i);
                        }
                }
                return new Inner();
        }//就像现在这种情况  当show()方法执行完后 如果局部变量i不被声明为final  就会被销毁,而内部类仍然存在(内部类有可能调用局部变量,因此需要final)  
}

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马