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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mudao 中级黑马   /  2014-10-13 00:57  /  1096 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

晚上回看了老师昨天讲的视频,讲到局部内部类访问局部变量的时候,局部变量是需要使用final修饰,老师解释这个问题的时候,内含局部内部类的外部方法(test())执行完毕,具备内部类创建的对象(inner)并没有消失。我想问这个内部类创建的对象的生命周期是什么时候才结束?(具体代码如下)

/*局部类要注意的细节:
        局部内部类访问局部变量的时候,局部 变量是需要使用final修饰的。
*/

//外部类
class Outer{
        public void test(){
                //局部变量
                final         int y = 100;
                /*  y的生命周期:test方法执行完毕之后马上从内存消失。
                局部内部类访问 局部变量的时候,局部变量是需要使用final修饰,为什么?
                */
                //局部内部类
                class Inner{
                        //成员变量
                                int x = 10;       
                        //成员函数
                        public void print(){
                                System.out.println("这个是局部内部类的print方法..."+y);
                        }
                }
                //创建局部内部类对象
                Inner inner = new  Inner(); // Inner对象生命周期: 反正Inner的对象当test执行完毕之后还不会马上消失。
                                                           // Inner对象的生命周期是比y要长的。
                inner.print();
        }
}

class Demo12
{
        public static void main(String[] args)
        {
                Outer outer = new Outer();
                outer.test();
        }
}


1 个回复

倒序浏览
这么说吧。
只要还有人在引用内部类的对象,那它就会在内存中一直存在下去。所以生命周期当然长啦
而外部方法中的局部变量在方法执行完的时候就消失了,所以如果内部类中有引用局部变量的话,就会找不到局部变量了,所以要用final修饰
被final修饰的局部变量会作为内部类的构造函数的参数传入内部类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马