2017-04-26 1 views
2

このプログラムを実行した後、私はjava.lang.InstantiationExceptionを取得していますが、私はHello Worldを出力として期待していました。 インナークラスのInstantiationException

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

Test2staticクラスではないので、これは印刷されません。この作業を行うにはstaticにしてください。

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

また、Test1の外にTest2を移動します。

通常、どのようにしてTest2のインスタンスを作成するかを考えてみましょう。それは静的ではありませんので、あなただけのあなたがTest1の非静的コンテキストである必要はあり

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

行うことはできません。

したがって、Classオブジェクトから直接コンストラクタを取得することはできません。

+0

Javaには「静的内部クラス」はありません。 –

+0

@LewBloch静的内部クラスがないということを意味しますか? – Sweeper

+0

私は、Javaの "内部クラス"の定義は '静的ではない'入れ子になったクラスであることを意味しています。したがって、Javaでは "静的内部クラス"という定義はありません。 –

関連する問題