AI作成・AIで再検証済(有資格者監修なし)1Z0-815-JPN 対応
クラス構造(static初期化子・インスタンス初期化子・コンストラクタの実行順序)難易度 高無料

次のコードの出力として正しいものを選べ。

1  public class Q9 {
2      static { System.out.print("S"); }
3      { System.out.print("I"); }
4      public Q9() { System.out.print("C"); }
5      public static void main(String[] args) {
6          new Q9();
7          new Q9();
8      }
9  }
  1. ASICIC
  2. BSSICIC(static初期化子は new のたびに走る)
  3. CSCICI(コンストラクタがインスタンス初期化子より先に実行される)
  4. DICICS(static初期化子は最後にまとめて実行される)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・AIで再検証済

解説

クラスには3種類の初期化コードがあり、実行タイミングが異なる。

  • static 初期化子(static { ... }):クラスが最初にロードされた時に1回だけ実行される。
  • インスタンス初期化子({ ... }):インスタンスが生成されるたびに、コンストラクタ本体の実行より前に実行される。
  • コンストラクタ:インスタンス初期化子の後に実行される。

main 実行時、Q9 クラスが初めてロードされ static 初期化子が1回だけ走り "S" を出力。 その後 new Q9() のたびに「インスタンス初期化子→コンストラクタ」の順で "I"→"C" が出力される。 2回の new Q9() でこれが2セット走るので、全体は "S" + "IC" + "IC" → SICIC。

各誤答が違う理由
  • Bstatic初期化子はクラスロード時に1回だけ実行される。何度 new しても再実行されない。
  • C実行順は「インスタンス初期化子→コンストラクタ本体」。コンストラクタが先に走ることはない。
  • Dstatic初期化子はクラスが最初にロードされる時点(1回目の new より前)で実行される。最後にまとめて走るのではない。
ひっかけ: 「static初期化子もインスタンス生成のたびに走る」「インスタンス初期化子はコンストラクタの後に実行される」という2点の誤解が典型的な罠。static はクラスにつき1回のみ、インスタンス初期化子はコンストラクタより先に実行される。
コマンド例と想定される挙動(未実行)
出力:
SICIC
AIが作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

この問題集の作り方

  1. 問題と解説はAIが作成しています。この資格の問題に、有資格者(著者)の監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  5. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
Java基礎 を含む問題を分野別に演習できます。
演習する →