Javaの認定資格「Oracle Certified Java Programmer, Gold SE 7」。通称JavaGoldのオリジナル問題を紹介していきたいと思います。
前回の解答
まずは、前回の解答から。
正解は「(5)→(1)→(3)→(2)→(4)→(2)→(4)」となります。
実行が開始するとまずはmain()メソッドの処理が開始され、(5)「start.」が出力されます。ここまでは問題無いかと思います。
次に、SubClass12クラスをインスタンス化していますが、クラスがクラスローダーにより読み込まれ、コンストラクタが呼び出される前にstaticイニシャライザが実行されます。このとき、そのクラス(ここではSubClass12)に継承関係がある場合にはその親クラスのstaticイニシャライザが先に実行されます。ここは意外と見落とされがちですので注意しておきましょう。
クラスのロードとstaticイニシャライザの処理が終わるといよいよインスタンス化に入ります。
ここでコンストラクタの実行が開始されるわけですが、こちらも上と同様にそのクラスに継承関係がある場合にはその親クラスのコンストラクタが先に実行されます。こちらに関しては基本ですので引っかからないようにしておきたいところです。
さらにこの問題では2回目のインスタンス化を行っています。
このとき、staticイニシャライザは再実行されません。staticイニシャライザはクラスのロード時に「1度だけ」実行される処理と覚えておくといいでしょう。
問13
次のプログラムを実行するとコンソールに6行の文字列が出力されます。選択肢を正しい順番に並び替えてください。同じ選択肢を何度使用しても構いません。
package techpjin; public class Lesson13 { public static void main(String[] args) { System.out.println("(5). start."); Class13 s1 = new Class13(); Class13 s2 = new Class13(); } } class Class13 { static { System.out.println("(1). SubClass : static initializer called."); } { System.out.println("(2). SubClass : initializer called."); } Class13() { System.out.println("(3). SubClass : constructor called."); } } class Object{ { System.out.println("(4). Object : initializer called."); } }
- SubClass : static initializer called.
- SubClass : initializer called.
- SubClass : constructor called.
- Object : initializer called.
- start.
問13の解答・解説と問14はこちら