请问:
请教各位 
1,当创建外部类对象的时候 会在堆中为内部类(包括匿名内部类和局部内部类)分配内存空间吗 我的理解:
为内部类分配内存空间 (没有为构造方法分配内存空间) 但外部类没有权限访问内部类对象成员 可以访问构造方法 是因为构造方法实际上静态的 静态方法并不属于对象 属于类所有 利用外部类对象调用内部类构造方法创建内部类对象 如果不是这样 那是怎么分配的呢请各位大哥帮忙指出我的错误 并指正 请说说各位自己的想法 2,final的生命周期超出方法运行的生命周期是什么意思谢谢

解决方案 »

  1.   

    第一个问题:
    会分配内存空间,而且在内部类有一个对封装类的隐含的引用.
    关于你的理解中,方法都是在datasegement中,调的时候是从datasegement中调用的.第二个问题请重新描述一下,听不太懂
      

  2.   

    2,在方法中定义的内部类:在方法中定义的内部类只能访问方法中的final 类型的局部变量,用final 定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期 
    这句话是什么意思
      

  3.   

    真感兴趣的话,不如找本专门讲jvm的书看看
      

  4.   

    什么这句话什么意思,不是说的很清楚了吗?就是说用final定义的局部变量可以在方法结束后仍然存在。
      

  5.   

    1,当创建外部类对象的时候 不会在堆中为非静态内部类(包括匿名内部类和局部内部类)分配内存空间2,final的变量表示地址不变,编译的时候可以直接内联。
      

  6.   

    我的疑问:
    public class Parcel9 { 
    public Destinations destiantions(final String dest){ 
    return new Destinations(){ 
    private String label = dest; 
    public int i = 4; 

    System.out.println(label); 
    System.out.println(i); 

    public String readLabel(){ 
    return label; 

    public void f(){ 
    System.out.println(i); 

    }; 

    public static void main(String[]args){ 
    Parcel9 p = new Parcel9(); 
    Destinations d = p.destiantions("Tasmania"); 


    如果不为匿名类分配内存空间 那么destiantions方法中return 后就什么都没有了啊 这怎么行呢 谢谢
      

  7.   

    我认为会为内部类分配内存空间。当编译运行完程序后,可以查看.class文件,会发现生成外部类名$内部类名.class的文件。为内部类分配空间也不代表内部类和外部类是独立的了,内部类的创建必须依赖外部类的对象。内部类就是外部类的一个成员。
    如果内部类需要从外部类中接受参数,就要求这个参数是终态的。
      

  8.   

    1.会分配空间,只要是加载类,都会划分空间,要么怎么加载?怎么执行?就如楼上所说,会有一个$的临时class.
    2.书上说的用final 定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期,我们可以在在代码中间加载一个含有final修饰的变量,在这个方法结束后再调用该变量看看,这个变量还存在.说明它的生命周期是长于这个方法的.
      

  9.   

    内部类与普通类一样,不同的是1)形式上的不同2)内部类可以直接访问外部类
    楼主要研究底层的东东可以参考sun 的 The Java™ Language Specification
      

  10.   

    非常感谢SageZK的谈话 与SageZK的谈话让小弟我受益匪浅 也谢谢各位好心的朋友回帖