Javaの認定資格「Oracle Certified Java Programmer, Gold SE 7」。通称JavaGoldのオリジナル問題を紹介していきたいと思います。
前回の解答
まずは、前回の解答から。
正解は「(5)→(1)→(2)→(3)→(2)→(3)」となります。
今回はstaticイニシャライザ、コンストラクタの他に、インスタンスイニシャライザが定義されています。(14~16行目)
ポイントの1つ目はこのインスタンスイニシャライザが実行されるタイミングです。
staticイニシャライザのあと、コンストラクタの前になります。これは基本ですので必ず押さえておきましょう。
2つ目のポイントはインスタンスイニシャライザとstaticイニシャライザの実行回数の違いです。
問題ではClass13を2回インスタンス化しています。このようにオブジェクトを何個作成しようとも最初の1回した実行されないのがstaticイニシャライザでした。一方、インスタンスイニシャライザはコンストラクタの直前に”かならず”呼びだされます。
参考書によってはインスタンスイニシャライザのことを単に”イニシャライザ”と読んでいるものもありますが、筆者はstaticイニシャライザと区別するためにも”インスタンス毎に呼び出されるイニシャライザ”という意味で、インスタンスイニシャライザと呼ぶようにしています。
3つめのポイントは21行目から定義されているObjectクラスです。このクラスは1行目にパッケージ宣言されていますので、完全修飾クラス名ではtechpjin.Objectクラスとなります。
これは全てのクラスの基底クラス(スーパークラス)となっているjava.lang.Objectクラスと同名ではありますが、パッケージ名が異なるためまったく別のクラスです。よく勉強している方ほど、Class13が暗黙的にjava.lang.Objectクラスを継承していることを思い出し、勘違いしてしまうかもしれません。注意しておきたいところです。
問14
java.lang.Enumクラスを継承した列挙型に関する説明として誤っているものを選んでください。
- 列挙型はjava.lang.Enumクラスを継承したクラスである。
- 列挙型は他の一般的なクラス同様に、継承され別のクラスを定義することができる。
- values()、valueOf()というstaticメソッドが自動的に追加される。
- name()、ordinal()などのインスタンスメソッドが自動的に追加される。
- 列挙型に定義した値は、「列挙型名.列挙した値」で参照することができる。
- 列挙型の値はswich文の条件として使用することができる。
問14の解答・解説と問15はこちら