2017-04-26 38 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中不存在「靜態內部類」。 –

相關問題