消息关闭
    暂无新消息!
看了很多网上的资料,一般总结为:
局部内部类的生命周期可能比局部变量长,因为当方法里的局部变量所在方法结束时,该变量即在栈内存中消失;而内部类其实是一个类,只有内存中对它的所有引用都消失后,该内部类才"死亡"
可是:局部内部类的有效范围不也是函数内吗?局部内部类对象为什么会在函数结束后还存在呢?
劳烦大家解惑,有代码实例更好,不胜感激!

5个回答

︿ 1
多谢,代码很宝贵!也就是说,局部内部类比函数内的局部变量生存期长的关键,是实现向上转型
︿ 0
如果你在方法外用到局部内部类,你的局部内部类必须继承自一个公共的外部类。
给你一个例子:


public class InnerClassDemo {

public static void main(String[] args){
Car c = new Car();
               // 新加入一个发动机
c.addEngine("big engine");

               // 在上面那个方法返回后,发动机的实例仍然存在
Part engine = c.getParts()[0]; //获取发动机的实例

System.out.println(engine.getName()); // 打印发动机的名字
}


public static class Car{

// 假设汽车有个实例数组变量装汽车的部件,现在只有一个发动机部件。
private Part[] parts = new Part[1];

               // 制造一个发动机,添加到部件里
public void addEngine(String name){
                       // 为了演示,这里把传入的变量变成大写字母当成局部变量
String capitalName = name.toUpperCase();

                      // 内部类定义一个发动机
class Engine extends Part{

public Engine(){
name = capitalName;
}
}

parts[0] = new Engine();
}

              // 把发动机加入到零件数组
public Part[] getParts(){
return parts;
}
}

public static class Part{
protected String name;

public String getName(){
return this.name;
}
}
}
︿ 0
如果局部内部类引用了局部变量, jvm会保留这个局部变量的副本在内部类的内存中。所以这个局部变量必须是不可变的。