package myTemp1;class A {
   void m(){
      System.out.println("outer");
   }
}public class TestInners {
   public static void main(String[] args) {
      new TestInners().go();
      
   }
   void go(){
      new A().m();
      class A{
         void m(){
            System.out.println("inner");
         }
      }
   }
   
   class A {
      void m(){
         System.out.println("middle");
      }
   }
}

解决方案 »

  1.   

    class A {
       void m(){
          System.out.println("outer");
       }
    }public class TestInners {
       public static void main(String[] args) {
          TestInners ts=new TestInners();
          ts.go();
       }
       void go(){
          new A().m();
          class A{
             void m(){
                System.out.println("inner");
             }
            
          }
          new A().m();
       }
       
       class A {
          void m(){
             System.out.println("middle");
          }
       }
    }输出:
    middle
    inner
    根据结果分析
    在执行go方法是,它是先实例化TestInners里面的A类(midlle类)因为他会屏蔽掉外部的A类,
    不实例化inner类是因为inner类处在其后,我在最后的时候加了一句new A().m();
    他会实例化最近的A类,(屏蔽掉了外部的A类)
    所以在实例化过程中当出现同名的时候,一般都是实例化最近的类。。
      

  2.   

    我的理解是
    外部的A生成是A.class
    内部的A生成是TestInners$A.class
    而内部就没有对应的class
    所以new A().
    当然是外部的。
      

  3.   

    public class TestInners
    TestInners是public的外部生成的是 TestInners.class
    内部是 TestInners$A.class
      

  4.   

    new A时,查找最近的类ATestInnner类中的A类,屏蔽了外部的A类
    而go函数中定义的A类,在new A()后面,似乎也不能提前使用。运行结果:
    middle
    策划环境:
    JDK1.6 Eclipse 3.3
      

  5.   

    new Object时,难道你天真的以为会去查找 Object.class?
    实际是 java.lang.Object.class
      

  6.   

    当然会去查找 object.class.
    你不信去在JRE下边删除这个.class 试试看。
      

  7.   

    输出结果是 “middle” 
    首先局部内部类
          class A{
             void m(){
                System.out.println("inner");
             }
          }
    是在new A().m();之后如果在之前输出结果就是innerjava默认是从自己内部找,先找局部内部类,再找成员内部类,最后找外部类。
    至于这个类:
    class A {
       void m(){
          System.out.println("outer");
       }
    }
    其实跟外部类没什么区别,无非就是访问权限问题,引用的时候少了一个import
      

  8.   

    那么,如何在内部方法中。
    去刻意调用这个"outer“ A.class 这个类呢?
      

  9.   

    和类的加载顺序无关如果类名使用的全名,即包含包名的全名,则直接查找指定的类
    如果类名使用简单名称,则根据当前代码的位置,取最近的那个具有指定简单名称的类
       这个顺序如9楼所说:java默认是从自己内部找,先找局部内部类,再找成员内部类,最后找外部类。