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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Ranger-Master 于 2015-5-24 10:35 编辑

Java培训、Android培训、iOS培训、.Net培训、期待与您交流
/*
局部内部类:在一个方法内部定义的类称作为局部内部类。
如果局部内部类要访问局部变量,那么局部变量必须使用final去修饰。
*/
class Outer{
    public void print(){

    final int y = 100;    // y的生命周期:执行到该语句的时候存在内存中, 方法执行完毕之后消失。
    //局部内部类
    class Inner{

        final  int x = 10;
        public void show(){
                System.out.println("这个是一个局部内部类的show方法.."+y); //问题:给人感觉y的生命周期被延长了。
                /*
                解决办法: 让局部内部类访问局部变量的复制品。   
                */
                }
        }

        //创建一个局部内部类对象
        Inner inner = new Inner(); // Inner对象的生命周期比y的生命周期要长
        inner.show();
        }
}
class Demo
{
        public static void main(String[] args) {

        Outer outer = new Outer();
        outer.print();
        }
}

除了上面的说法,有没有更加直白一点的说法?

求教!






4 个回复

倒序浏览
因为局部变量是存在栈内存中的,方法调用结束就释放了,而内部类的对象是存在堆内存中的,要靠垃圾回收机制回收,如果局部变量不用final修饰的话,可能会出现对象引用了一个不存在的变量
回复 使用道具 举报 2 0
膜拜大神!
回复 使用道具 举报
自己消化过的看着就是更加清晰易懂,必须32个赞
回复 使用道具 举报
必须点赞!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马