黑马程序员技术交流社区

标题: 方法中的内部类能不能访问方法中的局部变量 [打印本页]

作者: LiuKang    时间: 2013-12-7 15:27
标题: 方法中的内部类能不能访问方法中的局部变量
方法中的内部类能不能访问方法中的局部变量,我知道是不能的,加上final就可以,但是具体原因是什么?哪位同学能总结一下,用最言简意赅的语言来总结。
作者: 四五六七八    时间: 2013-12-7 16:19
因为方法中的局部变量有可能比内部类的生命周期短(方法执行完之后,局部变量销毁,而内部类对象有可能仍然存在)
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)  
}

作者: 纷飞尽    时间: 2013-12-7 17:18
//内部类,可以等同的当成一个方法来看待
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);//在方法内再调用方法,只能通过传参
        }
}
作者: LiuKang    时间: 2013-12-7 23:04
四五六七八 发表于 2013-12-7 16:19
因为方法中的局部变量有可能比内部类的生命周期短(方法执行完之后,局部变量销毁,而内部类对象有可能仍然 ...

谢谢你哈,我懂了。
作者: 明日辉煌    时间: 2014-6-6 08:09
学习了!谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2