-1

最近、オンラインでコードをチェックしていたところ、次のコードの出力が見つかりました。

public class Sequence { 

    Sequence() { 
        System.out.print("c "); 
    }

    { 
        System.out.print("y "); 
    } 

    public static void main(String[] args) { 
        new Sequence().go(); 
    }
    void go() { 
        System.out.print("g "); 
    }

    static{
        System.out.print("x "); 
    }

} 

なので:

x y c g

このコードの機能について教えてください。

4

4 に答える 4

5

このコードの機能について教えてください。

もちろん。最初に起こることは、クラスがJLS のセクション 12.4.2に従って初期化されることです。これには、セクション 8.7に従って、クラスの静的初期化子を実行することが含まれます。ここには、出力する静的初期化子がありますx

次に、mainメソッドは のインスタンスを作成しますSequence。これは、JLS のセクション 12.5に従います。最初にスーパークラス コンストラクター (Objectここ) が呼び出され、次にインスタンス初期化子 (セクション 8.6 ) が呼び出され、次にコンストラクター本体が呼び出されます。ここには、 を出力するインスタンス初期化子とy、 を出力するコンストラクタ本体がありますc

最後に、goを出力するメソッドが実行されますg

于 2013-09-17T06:04:15.237 に答える
1

これは、さまざまなコンストラクターと初期ブロックがどの順序で実行されるかを理解できるようにするための試験問題です。

  1. 静的初期化子
  2. インスタンス初期化子
  3. コンストラクタ

スーパークラスを持つことで、これをより複雑にすることができます。

または、これらの初期化ブロックを複数持つことによって。

于 2013-09-17T06:01:41.710 に答える
0

static blockinstance block constructorそして最後に明示的に呼び出されたメソッド

于 2013-09-17T06:01:55.697 に答える