2017-04-26 40 views
2

运行此程序后我得到java.lang.InstantiationException,但我期待作为输出的Hello WorldInstantiationException对内部类

public class Test { 
     public static void main(String[] args) throws Exception { 
      new Test().greetWorld(); 
     } 

     private void greetWorld() throws Exception { 
      System.out.println(Test2.class.newInstance()); 
     } 

     class Test2 { 
      public String toString() { 
       return "Hello world"; 
      } 
     } 
    } 

有没有人告诉我关于这个例外,它为什么不打印的Hello World

回答

2

这是因为Test2不是static类。使它static使这项工作。

static class Test2 { 
    public String toString() { 
     return "Hello world"; 
    } 
} 

或者,将Test2Test1

想想你通常会如何创建一个Test2的实例。由于它不是静态的,你不能只是做

Test1.Test2 obj = new Test1.Test2(); 

你需要在Test1非静态上下文。

这就是为什么您无法直接从Class对象中获取构造函数的原因。

+0

在Java中没有这样的“静态内部类”! –

+0

@LewBloch你是什么意思,没有静态的内部类? – Sweeper

+0

我的意思是说,Java中“内部类”的定义是不是“静态”的嵌套类,所以根据定义,Java中不存在“静态内部类”。 –

相关问题