4
class Temp
{ 
   {
      System.out.println("this is in it block");
   }


   public static void main(String... s)
   {
      System.out.println("abhi");
   }
}

上記のコードは init ブロックの内容を出力しませんが、init ブロックがコンストラクターの最初の行であることはわかっています。

しかし一方で、それを使用new Temp();すると印刷されます。なんでそうなの?

コンストラクターがすべてのクラスにある場合、上記のコードはオブジェクトの初期化なしでそれを出力する必要があります。そうじゃない?

4

4 に答える 4

6

クラスでコンストラクターをコーディングする必要はありません。コンストラクターがない場合、システムはデフォルトのコンストラクターを自動的に生成します。内部ブロックはインスタンス初期化子と呼ばれます。コンストラクターが実行された、コンストラクター内での呼び出しの後super(...)、コンストラクター本体 (の残り) の前に実行されます。(コンストラクターが への呼び出しで開始する場合this(...)、インスタンス初期化子はそのコンストラクターに対して実行されません。) ただし、コンストラクターのクラスのインスタンスを作成し、インスタンス初期化子を実行する必要があります。(内部ブロックを作成した場合、staticそれは静的初期化子になりますインスタンスが作成されたかどうかに関係なく、クラス オブジェクトが初期化されたときに 1 回だけ実行されます。)

于 2012-09-09T15:57:34.637 に答える
1
{ System.out.println("this is in it block");

}

作成するオブジェクトごとに呼び出されます。static {} オブジェクトを作成しなくても呼び出されます。詳細については 、static-and-instance-initializers-in-javaまたはstatic-and-instance-initializers-in-javaを参照してください。

于 2012-09-09T15:59:49.530 に答える
0

こんにちは、このコードを実行すると、インスタンス ブロックと静的ブロックの違いが理解できます。

最初に実行される静的ブロックであり、一度だけ実行されます。静的メソッドが最初に呼び出されたとき、またはインスタンスが最初に開始されたときです。静的メソッド (メイン) を呼び出しているコードのように、静的ブロックを作成する必要がありますが、呼び出しは 1 回だけです。

インスタンスブロックは、インスタンスを起動すると必ず実行されます。

class Temp
{
    {System.out.println("this is an instance block");}

    static {System.out.println("this is a static block");}

    public static void main(String... s){
        System.out.println("This a static method");
        Temp myTemp = new myTemp();
        myTemp.myMethod();
    }

    void myMethod (){
        System.out.println("This an instance method");
    }
}

一方、構文を入力しない場合は、Java が構文を作成します。

Temp(){//Or whatever name of your class
    super();
}
于 2012-09-09T16:14:15.433 に答える