OracleLevel 3

難易度は Level 1(やさしめ)〜Level 5(難関) の5段階です。

Java Silver SE 11 (1Z0-815-JPN)のサンプル問題(本番形式・解説付き)

Java Silver SE 11 (1Z0-815-JPN)(Oracle・Java SE 11 Programmer I(Java Silver SE11))の出題形式を、実際の問題で確かめられます。ここに掲載する5問は、無料の会員登録で解ける模試 第1回(80問)の冒頭から抜粋したオリジナル問題です。当サイトは全480問を本番CBT準拠の形式で収録しており、この5問はそのごく一部にあたります。

設問1

次のコードについて

1: interface Movable { void move(); } 2: class Base { } 3: class Boat implements Movable extends Base { 4: public void move() { System.out.println("go"); } 5: } 6: public class Main { 7: public static void main(String[] args) { new Boat().move(); } 8: }

このプログラムをコンパイル・実行した結果はどれか。

  • go と出力され、問題なく終了する
  • 4行目の move() の宣言でコンパイルエラーになる
  • 7行目の new Boat() でコンパイルエラーになる
  • 3行目のクラス宣言でコンパイルエラーになる(正解)

解説

クラス宣言に両方を書くときは、必ず extends が先で implements が後です。3行目は順序が逆なので、コンパイラは implements Movable の次にクラス本体の { が来ると考え、extends を見た時点で構文として壊れます。move() は public 付きで正しく実装されているので4行目は問題なく、7行目の呼び出しも書き方としては正しい形です。順序さえ入れ替えれば、この3行目は class Boat extends Base implements Movable として通ります。

設問2

次のコードについて

1: class ShallowException extends RuntimeException { 2: ShallowException(String m) { super(m); } 3: } 4: public class Main { 5: static void quick(int m) { 6: if (m > 40) throw new ShallowException("shallow: " + m); 7: System.out.println("quick " + m); 8: } 9: public static void main(String[] args) { 10: quick(10); 11: try { quick(50); } catch (ShallowException e) { System.out.println("caught " + e.getMessage()); } 12: } 13: }

このプログラムをコンパイル・実行した結果はどれか。

  • quick 10 と quick 50 が順に出力される
  • 5行目の quick() の宣言でコンパイルエラーになる
  • 10行目の quick(10) の呼び出しでコンパイルエラーになる
  • quick 10 と caught shallow: 50 が順に出力される(正解)

解説

ShallowException は RuntimeException を継承しているので非チェック例外です。したがって quick() に throws を書く必要がなく、10行目のように try の外から直接呼べます。50 を渡した呼び出しでは throw が実行され、ShallowException が catch に捕まってメッセージが表示されます。例外が投げられた時点で以降の行は飛ばされるので、quick 50 は出力されません。非チェック例外なので throws は要らず、5行目の quick() の宣言でコンパイルエラーにはなりません。同じ理由で、10行目の quick(10) の呼び出しでもコンパイルエラーになりません。

設問3

次のコードについて

1: public class Unassigned { 2: public static void main(String[] args) { 3: int points; 4: int bonus = 7; 5: points = points + bonus; 6: System.out.println(points); 7: } 8: }

このファイルを javac でコンパイルした結果はどれか。

  • コンパイルは成功し、実行すると points が既定値のままで 0 という値の表示になる
  • コンパイルは成功し、実行すると points に bonus を足した 7 という値の表示になる
  • 3行目の宣言で「変数pointsは初期化されていない可能性があります」というエラーになる
  • 5行目で「変数pointsは初期化されていない可能性があります」というエラーになる(正解)

解説

ローカル変数には既定値が無いので、値として読む前に代入されていなければコンパイルが通りません。判定は読んだ瞬間に行われるため、エラーが出るのは宣言の行ではなく右辺で points を読んだ5行目です。int points; という宣言そのものは正しい文なので、3行目には出ません。既定値が入るのはフィールドの場合で、ローカル変数では 0 が読めるわけではありません。

設問4

次のコードについて

1: abstract class Bad1 { private abstract void m(); } 2: abstract class Bad2 { abstract final void n(); } 3: abstract class Bad3 { static abstract void o(); } 4: 5: public class Mods { 6: public static void main(String[] args) { 7: System.out.println("ok"); 8: } 9: }

このプログラムをコンパイル・実行した結果はどれか。

  • 2行目と3行目で計2件のコンパイルエラーになるため実行されない
  • 1行目だけで1件のコンパイルエラーになるため実行されない
  • コンパイルも実行も通り、ok が出力されてプログラムが終了する
  • 1行目、2行目、3行目で計3件のコンパイルエラーになる(正解)

解説

abstract は final・private・static のいずれとも組み合わせられません。final は触らせない、private は見せない、static はインスタンスと無関係という意味で、実装させるという abstract の意味と正面から衝突するからです。3つとも不正なので、それぞれの宣言行で計3件のエラーになり、書く順番は関係ありません。禁じられているのは abstract に重ねることだけで、抽象クラスがこれらのメンバを持つこと自体は許されています。「2行目と3行目で計2件のコンパイルエラーになるため実行されない」は private との組み合わせを見落とした誤り、「1行目だけで1件のコンパイルエラーになるため実行されない」は final と static との組み合わせを見落とした誤りです。「コンパイルも実行も通り、ok が出力されてプログラムが終了する」も誤りです。

設問5

次のコードについて

1: public class Wrapper { 2: public static void main(String[] args) { 3: Boolean ready = Boolean.TRUE; 4: if (ready) { System.out.println("wrapper works"); } 5: Boolean missing = null; 6: if (missing) { System.out.println("never"); } 7: } 8: }

このプログラムをコンパイル・実行した結果はどれか。

  • 行6 でコンパイルエラーになる
  • wrapper works と never が出力される
  • wrapper works を出力したあと NullPointerException で終了する(正解)
  • wrapper works だけが出力されて問題なく終了する

解説

ラッパー型の Boolean は if の条件に置けて、自動的に boolean へ開かれます。行4 は値があるので wrapper works が出力されます。行6 は中身が null なので開こうとした時点で NullPointerException になります。コンパイルは通るため、行6 のコンパイルエラーは誤りです。null は false として扱われるわけではないので、正常終了することも never が出ることもありません。

続きは、会員登録なしでそのまま50問解けます。採点と解説つきで、上と同じ本物の問題です。

登録なしで50問解く