class TopLevelClass
{    
    NestedTopLevelClass ntlc = new NestedTopLevelClass (5);
    static class NestedTopLevelClass
    {
        int myInstanceField;
        NestedTopLevelClass (int i)
        {
            myInstanceField = i;
        }
    }
}class NestedTopLevelClassDemo
{
    public static void main (String [] args)
    {
        TopLevelClass.NestedTopLevelClass ntlc = new TopLevelClass.NestedTopLevelClass (5);
        
        System.out.println (ntlc.myInstanceField);
    }
}
大家先看以上代码,看了之后再来看问题,看看我的这个问题,我的问题就是.为什么在TopLevelClass类里就可以NestedTopLevelClass   ntlc   =   new   NestedTopLevelClass   (5)   这样来声明呢?不是说必须要使用外部类加+"."+嵌套类的名字吗???但又怪了,在类 
NestedTopLevelClassDemo里面声明就的确要加外部类的名字了(TopLevelClass.NestedTopLevelClass   ntlc   =   new   TopLevelClass.NestedTopLevelClass   (5);), 
再补充一下在TopLevelClass类里也可以TopLevelClass.NestedTopLevelClass   ntlc   =   new   TopLevelClass.NestedTopLevelClass   (5)这样来声明,,大家讲一下,迷茫咯......最后是说下为什么.能从内存里说出个1,2就更好了 顺便问下:如果一个本地内部类企图访问一个本地变量或者是该类所处方法的一个参数,这些本地变量/参数必须是final的为什么,谁能从java的设计模式上面来说一下

解决方案 »

  1.   

    NestedTopLevelClass   这是一个静态的类部类,
    NestedTopLevelClassDemo所以在可以直接用外部类名.类部类名来事例化一个对象
    而在NestedTopLevelClass里面是把类NestedTopLevelClass当成自己的一个成员
    前面也可以加修饰符,private,public,protected都可以
    也是和private string str = new string();是一个道理
    当成一个类的成员了,
    如果你把前面的static去掉,在 NestedTopLevelClassDemo类main()方法里面就得先实例化外部类对象
    再通过外部类对象去实例化类部类。
    NestedTopLevelClass ntl = new NestedTopLevelClass();
    ntl.NestedTopLevelClass ntlc = new ntl.NestedTopLevelClass(5);
    至于在里面可以那样实例化对象,具体我也不清楚,我猜测用该是因为它是静态的缘故吧,
    所以和在NestedTopLevelClassDemo德main方法一样,可以那样实例化了。
    本人解的不是太好,强烈建议去看一下THKINGING IN JAVA,里面说的很详细。
      

  2.   

    哦,谢谢,那解释一final的问题吧
      

  3.   

    final这个我不知道我这个对不对,抛砖引玉吧。
    我理解这里只是java做出的一个规定。
    final就是让被标记的内容无法改变。
    当内部类引用外部变量时,规定内部类可以访问变量。但是不能修改该变量。
      

  4.   

    final在就java中称为最终,相当于C和C++的常量 const
    final class(类) 表示这个类不能被继承
    final variable(变量) 表示这个是个最终量,还是什么的不记得,表示不能被重新赋值,相当于常量
    fianl method (方法) 表示这个方法不能被重写。
    在匿名类部类中用的必须是final。
    你去网上搜一下书吧。
    我自己原来也有,不小心删掉了,不好意思