这2种方法 我觉得第2种写法 可能更自然些  看起来没有什么不好理解的 这里的
Outer.Inner 这2个部分 就是一个类的作用的限制修饰符  
比如C++里是有namespace的 java里也用类似的类作用域来修饰
这个跟你左边的修饰符是一致的不好理解的就是1  你可以拆开成
Outer o = new Outer()
Outer.Inner i = o.new Inner(); 这样来理解 实际上这样也可以编译过 这样还有问题吗

解决方案 »

  1.   

    就是数据类型而已
    另外如果能用第二种new Outer.Inner()这种写法,那说明Inner是一个static类,这么写是没有问题的,但是如果写成new Outer().new Inner(),理论上也许也是没有问题的,但这是很不好的写法,第一让人以为Inner不是static的,第二白白创建一个Outer对象又用不到,完全就是浪费。
      

  2.   

    这个是内部类的实例化过程啊,java核心技术上讲的吧。不难理解吧,要是不这样写,他回报找不到类的错误的。