-2

次のプログラムの出力は次のとおりです。

superstatic block
static blockn0  
inmain  
super constructor  
constructor

コードは次のとおりです。

 class StaticSuper{
    static {
           System.out.println("superstatic block");
    }
    StaticSuper(){
           System.out.println("super constructor");
    }
 }

 public class StaticClassExample extends StaticSuper{
      static int rand;

      static {
           rand =(int) (Math.random() * 6);
           System.out.println("static blockn" + rand);
      }
      StaticClassExample(){
           System.out.println("constructor");
      }

      public static void main(String[] args) {
           System.out.println("inmain");
           StaticClassExample st= new StaticClassExample();
      }
 }

"inmain" が最初にあるのに 3 番目に表示されるのはなぜmain()ですか? 次の意味を教えてください。

static {
 // some lines
}

クラスで。

4

4 に答える 4

2

ご覧になっているブロックは静的イニシャライザstaticと呼ばれるもので、その仕事は通常、クラス内の何か (おそらくクラス全体の状態またはある種のリソース) を初期化することです。

クラスがランタイムによってロードされるときに呼び出されるため、実行前に実行される場合がmainあります。

于 2013-10-11T08:41:00.957 に答える
0

1 : new == > を使用してインスタンスを作成すると、コンストラクターが呼び出されます

2 : コンストラクターが呼び出されると、親コンストラクターが呼び出されます

3: また、クラスがロードされるたびに、コンストラクターの場合でも、静的ブロックが最初に実行されます。

したがって、取得している順序を取得します

クラスを実行しているため、最初に静的ブロックの完全なファイルがチェックされ、メインメソッドが呼び出される前でも静的ブロックが実行されます

于 2013-10-11T08:41:35.733 に答える
0

クラスの static { // 一部の行 } の意味を教えてください。

これは静的初期化子と呼ばれます。クラスがロードされたとき (正確には初期化されたとき) に実行されます。静的ブロックはmain()メソッドの前に実行されます。


「inmain」が main() の最初にあるのに 3 番目に出力されるのはなぜですか?

静的ブロックは の前に実行されるため、印刷リストの 3 番目に表示され、クラスmain()のインスタンスを作成すると、最初にそのコンストラクターが呼び出され、次に独自のコンストラクターが呼び出されます。StaticClassExampleparent

したがって、出力。

于 2013-10-11T08:42:34.810 に答える
0

静的ブロックは、クラスがロードされるときに呼び出されます。そのため、静的な印刷物が最初に印刷されます。静的変数は、そのクラスの異なるインスタンスに対してその変数の個別のコピーが存在しないことを意味します。コードの静的ブロックは、クラスのロード時に何かを実行する場合にのみ使用します。

于 2013-10-11T08:42:44.740 に答える