日期:2014-05-20  浏览次数:20704 次

关于main调用非静态方法
Java code

class A
{
    public A()
    {
      System.out.println("I am a");
    }
    
    public static void main(String arg[])
    {
      A a = new A();
      //B b = new B();
      C c = new C();
      D d = new D();
    }
    
    class B
    {
        public B()
        {
            System.out.println("I am b");
        }
    }
    
    static class C
    {
        public C()
        {
            System.out.println("I am c");
        }
    }
} 

class D
{
    public D()
    {
        System.out.println("I am d");
    }
}



为什么在A类里面写的类B就不能直接调用构造函数(必须要在类名前加static,像类C这样)
  而在A类外面写的类D就可以直接被调用构造函数,不需要在类D前加static



------解决方案--------------------
Class A里写的Class B,是内部类,你可以理解为 是一个方法。那在static main方法里想new B(理解为调用 非static 方法,是不可以的。因为A 没有实例化)。
------解决方案--------------------
A.B b = new A().new B();
A.C c = new A.C();

这样就行


------解决方案--------------------
因为 不加static 相当与 这个内部类构造函数属于外部类对象的而不是外部类的 加了static这个内部类类属于这个外部类的