オラクル認定資格「Java Gold」の過去問の代わりに解ける、本番形式に近い練習問題20問を解説つきでお伝えさせていただきます。
筆者はJava Bronze・Silver・Goldの3つすべてに合格しています。この記事に載せている20問はすべて筆者オリジナルの問題で、出題範囲に沿って分野ごとに整理したうえで、正解の根拠だけでなく誤答の選択肢がなぜ間違いかも1問ずつ解説しています。Java Bronze・Silverの練習問題20問に続くシリーズ第3弾です。
先に問題20問をまとめて出し、そのあとに解答と解説を置いています。本番と同じように、まずは解説を見ずに20問続けて解いてみてください。
この記事はこんな方におすすめです!
- Java Silverに合格していて、次はGoldに挑戦したい方
- 「Java Gold 過去問」で検索したものの、どれが本物か分からず困っている方
- 問題集を買う前に、自分が今どのくらい解けるのか試しておきたい方
結論|Java Goldの過去問代わりになる練習問題20問
最初に結論からお伝えします。Java Gold(Oracle Certified Java Programmer, Gold SE 11/1Z0-816-JPN)には、公式に公開されている過去問はありません。そこでこの記事では、出題範囲に沿った選択式の練習問題20問を、正解の理由と誤答の理由がわかる解説つきで用意しました。
- 対象: Java Silverに合格済みで、Goldに挑戦する学習者
- 収録: クラス設計・コレクション・Stream API・例外処理・並行処理・I/O・モジュールシステムの7分野から筆者オリジナル問題20問
- 使い方: 解いた正答数から、今どの段階かの目安を「難易度・学習ロードマップ」で確認できる
▼Java Silverの練習問題20問はこちら▼
読者の悩み:Java Goldにも過去問が存在しない
「Java Gold 過去問」で検索してこの記事にたどり着いた方が、先に知りたいところをはっきりさせておきます。Java Goldには、公式に公開されている過去問は存在しません。
なぜ公式の過去問が公開されないのか
オラクル認定資格は、受験時に同意するORACLE CERTIFICATION PROGRAM 受験契約書で、試験問題の内容を外部に開示することが明確に禁止されています。情報処理技術者試験のように、終わった試験の問題が公式サイトで公開される仕組みがそもそも無いということです。この規約はBronze・Silver・Goldのどの試験にも共通しています。
そのため「Java Goldの過去問」と書かれた教材があった場合、それは次のどちらかになります。
- 出題範囲に沿って作られたオリジナルの予想問題を、通称として「過去問」と呼んでいる
- 受験者が記憶して持ち出した問題を載せている(規約違反にあたります)
市販の問題集(通称・黒本)や参考書(通称・紫本)も、中身はすべて前者のオリジナル問題です。この記事の20問も同じく、Oracle公式が公開している出題範囲を踏まえて筆者が作成したもので、本番の問題そのものではありませんので、そこは正直にお伝えしておきます。
非公式の「過去問」サイトを使うときの注意点
検索すると、無料で「過去問」を公開しているサイトが複数見つかります。これらの多くはオリジナルの予想問題ですが、どのバージョン(SE 11/SE 17)を前提に作られているかが書かれていないことがあります。
そのため申込前にOracle公式のJava SE 11 Programmer II(1Z0-816-JPN)試験ページで自分が受ける試験の仕様を確認してから使ってください。この記事の20問はJDK 11を前提に作成しています。
▼Java Bronzeの練習問題20問はこちら▼
▼Java Bronze・Silver・Goldの難易度比較はこちら▼
Java資格(Bronze・Silver・Gold)の難易度比較
Java Gold 練習問題20問
出題範囲を踏まえて、クラス設計・継承/コレクション・ジェネリクス/Stream API・ラムダ式/例外処理/並行処理/I/O・ローカライズ/モジュールシステムの7分野から20問を用意しました。各問題はコード+選択式で、本番のJava Gold試験と同じ多肢選択式の形式です。
問題を解く前に:コードの前提条件(JDK 11・実行環境)
20問すべてJDK 11相当の環境で動作する前提で作成しています。record・sealedクラス・switch式などSE 17以降で追加された文法は使っていません。コードは基本的にpublic class Sampleのmainメソッドから実行される想定で、import文は問題の趣旨に関わる場合のみ記載しています。パスを扱う問題(問14)は、UNIX系ファイルシステム(Linux・macOSなど)での実行を前提としています。Windows環境では区切り文字が異なって表示されるのでご注意ください。実際に手元のJDKで動かしながら確認したい場合は、Java SE 11は現在Oracle公式のJavaアーカイブページで配布されています。
出題範囲と本記事の問題の対応表
| 分野 | 該当する問題番号 |
|---|---|
| クラス設計・継承 | 問1〜3 |
| コレクション・ジェネリクス | 問4〜6 |
| Stream API・ラムダ式 | 問7〜8 |
| 例外処理 | 問9〜10 |
| 並行処理 | 問11〜13 |
| I/O・ローカライズ | 問14〜16 |
| モジュールシステム | 問17〜20 |
なお、Java Gold試験の出題範囲には例外処理とあわせてアサーション(assert文)も挙げられています(最新の出題範囲はOracle公式の1Z0-816-JPN試験ページをご確認ください)。本記事の20問ではアサーションを扱う問題は用意していません。
▼20問を解き終えたら、解答と解説はこちら▼
問題1〜10
クラス設計・継承
問1. 次のコードについて、正しいものを1つ選んでください。
interface Greeter {
private String prefix() { return "Hello, "; }
default String greet(String name) { return prefix() + name; }
}
class Sample implements Greeter {
public static void main(String[] args) {
Sample s = new Sample();
System.out.println(s.greet("Gold"));
}
}
- Hello, Gold と表示される
- コンパイルエラーになる(privateメソッドはインターフェースに書けない)
- 実行時に例外が発生する
問2. 次のコードを実行したときの表示として、正しいものを1つ選んでください。
class Animal {
Animal reproduce() { return new Animal(); }
}
class Dog extends Animal {
@Override
Dog reproduce() { return new Dog(); }
}
public class Sample {
public static void main(String[] args) {
Animal a = new Dog();
System.out.println(a.reproduce().getClass().getSimpleName());
}
}
- コンパイルエラーになる(戻り値の型が一致しない)
- Dog
- Animal
問3. 次のコードを実行したときの表示として、正しいものを1つ選んでください。
class Outer {
class Inner {
void show() { System.out.println("Inner"); }
}
static class Nested {
void show() { System.out.println("Nested"); }
}
}
public class Sample {
public static void main(String[] args) {
Outer.Nested n = new Outer.Nested();
n.show();
Outer.Inner i = new Outer().new Inner();
i.show();
}
}
- Nested → Inner の順に表示される
- コンパイルエラーになる(Innerのインスタンス化方法が誤り)
- 実行時に例外が発生する
コレクション・ジェネリクス
問4. 次のコードを実行したときの表示として、正しいものを1つ選んでください。
import java.util.List;
public class Sample {
static double sum(List<? extends Number> list) {
double total = 0;
for (Number n : list) {
total += n.doubleValue();
}
return total;
}
public static void main(String[] args) {
List<Integer> ints = List.of(1, 2, 3);
System.out.println(sum(ints));
}
}
- コンパイルエラーになる(List<Integer>はList<? extends Number>に渡せない)
- 6.0
- 実行時に例外が発生する
問5. 次のコードを実行したときの結果として、正しいものを1つ選んでください。
import java.util.Set;
import java.util.TreeSet;
class Point {
int x, y;
Point(int x, int y) { this.x = x; this.y = y; }
}
public class Sample {
public static void main(String[] args) {
Set<Point> set = new TreeSet<>();
set.add(new Point(1, 2));
set.add(new Point(3, 4));
System.out.println(set.size());
}
}
- 2
- コンパイルエラーになる
- 実行時にClassCastExceptionが発生する
問6. 次のコードを実行したときの表示として、正しいものを1つ選んでください。
public class Sample {
static <T extends Comparable<T>> T max(T a, T b) {
return a.compareTo(b) >= 0 ? a : b;
}
public static void main(String[] args) {
System.out.println(max(10, 20));
System.out.println(max("apple", "banana"));
}
}
- 20 → banana の順に表示される
- コンパイルエラーになる(Stringはmaxメソッドの型引数にできない)
- 10 → apple の順に表示される
Stream API・ラムダ式
問7. 次のコードを実行したときの表示として、正しいものを1つ選んでください。
import java.util.List;
import java.util.stream.Collectors;
public class Sample {
public static void main(String[] args) {
List<String> names = List.of("Alice", "Bob", "Carol", "Dave");
String result = names.stream()
.filter(n -> n.length() > 3)
.map(String::toUpperCase)
.collect(Collectors.joining(", "));
System.out.println(result);
}
}
- ALICE, BOB, CAROL, DAVE
- ALICE, CAROL, DAVE
- コンパイルエラーになる
問8. 次のコードを実行した結果として、正しいものを1つ選んでください。
import java.util.stream.Stream;
public class Sample {
public static void main(String[] args) {
Stream<Integer> stream = Stream.of(1, 2, 3);
long count = stream.count();
System.out.println(count);
stream.forEach(System.out::println);
}
}
- 3 が表示された後、1・2・3が順に表示される
- コンパイルエラーになる
- 実行時にIllegalStateExceptionが発生する
例外処理
問9. 次のコードを実行したときの表示順として、正しいものを1つ選んでください。
public class Sample {
static class Res implements AutoCloseable {
String name;
Res(String name) { this.name = name; System.out.println("open " + name); }
public void close() { System.out.println("close " + name); }
}
public static void main(String[] args) {
try (Res a = new Res("A"); Res b = new Res("B")) {
System.out.println("use");
}
}
}
- open A → open B → use → close B → close A
- open A → open B → use → close A → close B
- コンパイルエラーになる
問10. 次のコードについて、正しいものを1つ選んでください。
public class Sample {
public static void main(String[] args) {
try {
throw new NumberFormatException("bad");
} catch (NumberFormatException | IllegalArgumentException e) {
System.out.println("caught");
}
}
}
- caught と表示される
- コンパイルエラーになる(NumberFormatExceptionはIllegalArgumentExceptionのサブクラスのため併記できない)
- 実行時に例外が再スローされる
問題11〜20
並行処理
問11. 次のコードを実行したときの表示として、正しいものを1つ選んでください。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Sample {
public static void main(String[] args) throws Exception {
ExecutorService pool = Executors.newFixedThreadPool(2);
Future<Integer> future = pool.submit(() -> 1 + 2);
System.out.println(future.get());
pool.shutdown();
}
}
- 3
- コンパイルエラーになる
- 実行時にInterruptedExceptionが発生する
問12. 次のコードを実行したときの表示として、正しいものを1つ選んでください。
import java.util.concurrent.atomic.AtomicInteger;
public class Sample {
public static void main(String[] args) {
AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet();
counter.addAndGet(5);
System.out.println(counter.get());
}
}
- 5
- 6
- コンパイルエラーになる
問13. 次のコードを実行したときの表示として、正しいものを1つ選んでください。
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class Sample {
public static void main(String[] args) {
Map<String, Integer> map = new ConcurrentHashMap<>();
map.put("a", 1);
map.put("b", 2);
for (String key : map.keySet()) {
if (key.equals("a")) {
map.put("c", 3);
}
}
System.out.println(map.size());
}
}
- 実行時にConcurrentModificationExceptionが発生する
- 3
- コンパイルエラーになる
I/O・ローカライズ
問14. 次のコードを実行したときの表示として、正しいものを1つ選んでください。
import java.nio.file.Path;
import java.nio.file.Paths;
public class Sample {
public static void main(String[] args) {
Path p = Paths.get("/var/data/../log/app.txt");
System.out.println(p.normalize());
}
}
- /var/data/../log/app.txt
- /var/log/app.txt
- コンパイルエラーになる
問15. 次のコードを実行したときの表示として、正しいものを1つ選んでください。
import java.text.NumberFormat;
import java.util.Locale;
public class Sample {
public static void main(String[] args) {
NumberFormat nf = NumberFormat.getInstance(Locale.US);
System.out.println(nf.format(12345.678));
}
}
- 12345.678
- コンパイルエラーになる
- 12,345.678
問16. 次のコードを実行したときの表示として、正しいものを1つ選んでください。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Sample {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2026, 1, 5);
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy/MM/dd", Locale.JAPAN);
System.out.println(date.format(f));
}
}
- コンパイルエラーになる
- 実行時に例外が発生する
- 2026/01/05
モジュールシステム
問17. 次のmodule-info.javaの記述について、正しい説明を1つ選んでください。
module com.example.app {
requires com.example.lib;
exports com.example.app.api;
}
- com.example.appモジュールはcom.example.libモジュールに依存し、com.example.app.apiパッケージを他のモジュールに公開する
- com.example.appモジュールはcom.example.app.apiパッケージを自モジュール内でのみ使用でき、外部には公開されない
- requiresとexportsは同じmodule-info.java内に同時に書けない
問18. 次のmodule-info.javaの記述の効果として、正しいものを1つ選んでください。
module com.example.app {
opens com.example.app.model;
}
- com.example.app.modelパッケージのコンパイル時アクセスを他のモジュールに許可する(exportsと同じ効果)
- com.example.app.modelパッケージへの実行時のリフレクションアクセス(deep reflection)を他のモジュールに許可する
- com.example.app.modelパッケージを完全に非公開にする
問19. 次のmodule-info.javaにある requires static の説明として、正しいものを1つ選んでください。
module com.example.app {
requires static com.example.optional.lib;
}
- requiresと完全に同じ意味で、staticは単なる可読性のためのキーワードである
- 実行時にのみ必要で、コンパイル時には不要になる
- コンパイル時にのみ必須で、実行時にそのモジュールが存在しなくても起動できる(オプショナルな依存関係)
問20. 次の3つのmodule-info.javaがあるとき、com.example.appモジュールはcom.example.core.utilパッケージのクラスを追加の記述なしで利用できますか。
module com.example.core {
exports com.example.core.util;
}
module com.example.service {
requires transitive com.example.core;
}
module com.example.app {
requires com.example.service;
}
- 利用できる(requires transitiveにより依存が推移する)
- 利用できない(com.example.appはcom.example.coreを直接requiresしていないため)
- コンパイルエラーになる(module-info.javaの記述自体が誤り)
▼20問を解き終えたら、解答と解説はこちら▼
解答と解説(全20問)
各問について、正解の根拠となる言語仕様・APIの挙動と、不正解の選択肢がなぜ誤りかを解説します。バージョン依存で挙動が変わりうる細部は断定を避け、公式ドキュメントへの参照を添えています。
| 問番号 | 正解 | 分野 |
|---|---|---|
| 問1 | A | クラス設計・継承 |
| 問2 | B | クラス設計・継承 |
| 問3 | A | クラス設計・継承 |
| 問4 | B | コレクション・ジェネリクス |
| 問5 | C | コレクション・ジェネリクス |
| 問6 | A | コレクション・ジェネリクス |
| 問7 | B | Stream API・ラムダ式 |
| 問8 | C | Stream API・ラムダ式 |
| 問9 | A | 例外処理 |
| 問10 | B | 例外処理 |
| 問11 | A | 並行処理 |
| 問12 | B | 並行処理 |
| 問13 | B | 並行処理 |
| 問14 | B | I/O・ローカライズ |
| 問15 | C | I/O・ローカライズ |
| 問16 | C | I/O・ローカライズ |
| 問17 | A | モジュールシステム |
| 問18 | B | モジュールシステム |
| 問19 | C | モジュールシステム |
| 問20 | A | モジュールシステム |
問題1〜10の解説
問1. 正解:A privateインターフェースメソッドはJava 9以降で使えるようになった文法で、defaultメソッド同士で処理を共有する目的で使います。外部からは呼び出せませんが、同じインターフェース内のdefault・privateメソッドからは呼び出せるため、コンパイルエラーにはなりません(Bは誤り)。実行時例外も発生しません(Cは誤り)。
問2. 正解:B オーバーライドしたメソッドでは、戻り値の型を元の型のサブクラスに変えられます(共変戻り値型)。そのためコンパイルエラーにはなりません(Aは誤り)。変数の宣言型はAnimalですが、実際に呼ばれるのは実行時の型(Dog)のreproduce()なので、Dogが返り、getSimpleName()の結果はDogになります(Cは誤り)。
問3. 正解:A staticが付いたネストしたクラス(Nested)は外側のインスタンスを持たずに直接newできます。一方、staticが付かない内部クラス(Inner)はOuterのインスタンスに紐づくため、new Outer().new Inner()という書き方でインスタンス化する必要があります(Bは誤り。このコードの書き方自体は正しい構文です)。例外も発生せず、Nested→Innerの順に表示されます(Cは誤り)。
問4. 正解:B List<? extends Number>は「Numberまたはそのサブクラスのリスト」を受け取れる境界ワイルドカードなので、List<Integer>を渡してもコンパイルエラーにはなりません(Aは誤り。いわゆるPECS原則のProducer側の使い方です)。1+2+3の合計はdouble型で6.0となり、例外も発生しません(Cは誤り)。
問5. 正解:C TreeSetは要素を自然順序(Comparable)またはComparatorで並べ替えて保持します。PointクラスはComparableを実装していないため、コンパイル自体は通ります(Bは誤り。TreeSetの型引数にComparableの実装は必須ではありません)が、TreeSet(内部のTreeMap)は最初の要素を追加する時点でも型チェックのための比較を行うため、JDK 11では1つ目のaddの時点でClassCastExceptionが発生します。キーがComparableインターフェースを実装していない場合にput()がClassCastExceptionを投げることは、Java SE 11公式のTreeMap APIドキュメントのクラス説明で確認できます。2つ目の要素を追加するまで例外が起きないわけではなく、set.size()が表示されることもありません(Aは誤り)。
問6. 正解:A <T extends Comparable<T>>という型境界は「Comparableを実装している型」を意味し、IntegerもStringもこれを満たすため、どちらの呼び出しもコンパイルエラーにはなりません(Bは誤り)。compareTo()で大小を比較しているので、10と20では20、”apple”と”banana”では辞書順であとに来る”banana”が返ります。
問7. 正解:B filterで文字数が3より大きい要素だけを残します。”Bob”は3文字ちょうどなので条件に一致せず除外されます(Aは誤り。Bobも含めてしまう誤答です)。残った”Alice”・”Carol”・”Dave”を大文字化してカンマ区切りで結合すると「ALICE, CAROL, DAVE」になります。文法上の問題もないためコンパイルエラーにもなりません(Cは誤り)。
問8. 正解:C Streamは一度だけ消費できるデータ構造で、count()のような終端操作を実行するとそのストリームは閉じた状態になります。閉じたストリームに対してさらにforEach()(終端操作)を呼び出すと、実行時にIllegalStateException(stream has already been operated upon or closed)が発生します。構文としては正しいのでコンパイルエラーにはなりません(Bは誤り)。
問9. 正解:A try-with-resourcesで宣言した複数のリソースは、宣言した順とは逆順にclose()が呼ばれます。そのためA→B の順でopenしたあと、close()はB→Aの順になります(Bは誤り。宣言順のまま閉じると誤解しがちな選択肢です)。構文にも問題がないためコンパイルエラーにはなりません(Cは誤り)。
問10. 正解:B マルチキャッチ(catch (A | B e))では、並べた例外クラス同士が継承関係にあってはいけないというルールがあります。NumberFormatExceptionはIllegalArgumentExceptionのサブクラスなので、この2つを併記するとコンパイルエラーになります。したがって「caughtと表示される」(A)や「実行時に例外が再スローされる」(C)という実行結果自体が起こりません。
▼問題11〜20はこちら▼
問題11〜20の解説
問11. 正解:A ExecutorService#submit()にラムダ式(Callable相当)を渡すと、その戻り値をFutureとして受け取れます。future.get()は計算が終わるまで待機して結果を返すので、1+2の計算結果3が表示されます。構文・実行ともに問題はなく、コンパイルエラー(B)やInterruptedException(C。get()はチェック例外としてthrowsに宣言されていますが、この単純な計算処理では発生しません)も起きません。
問12. 正解:B AtomicIntegerはスレッドセーフに数値を操作できるクラスです。incrementAndGet()で0→1になり、addAndGet(5)でさらに5加算されて6になります。構文にも問題はないためコンパイルエラーにはなりません(Cは誤り)。
問13. 正解:B HashMapのキー集合を拡張for文で反復中に構造変更を加えるとConcurrentModificationExceptionが発生しますが、ConcurrentHashMapのイテレータは「弱一貫性(weakly consistent)」という設計になっており、反復中に要素を追加してもこの例外は発生しません(Aは誤り)。最終的にa・b・cの3件になり、size()は3を返します。
問14. 正解:B Path#normalize()は、実際にファイルシステムへアクセスすることなく、パス文字列の中の「.」「..」といった冗長な要素を文字列操作として取り除きます。/var/data/../log/app.txtの「..」は直前の「data」を打ち消すため、結果は/var/log/app.txtになります。
問15. 正解:C NumberFormat.getInstance()はデフォルトで小数点以下の最大桁数が3桁、桁区切り(グルーピング)が有効な設定になっています。Locale.USでは千の位ごとにカンマが入るため、12345.678は「12,345.678」と表示されます。
問16. 正解:C DateTimeFormatter.ofPattern(“yyyy/MM/dd”, …)のようにMM・ddが数字パターンの場合、Localeを変えても出力される数字自体は変わりません(Localeが影響するのは主にMMMなどの月名表記や曜日名です)。そのため2026年1月5日は「2026/01/05」と表示され、コンパイルエラー(A)や実行時例外(B)も発生しません。
問17. 正解:A requiresは「このモジュールが依存する別モジュール」を、exportsは「外部に公開するパッケージ」を宣言します。この2つは同じmodule-info.java内に共存でき(Cは誤り)、exportsを書かなければパッケージは外部から使えません。今回はexportsが書かれているので、com.example.app.apiパッケージは他のモジュールから利用できる状態になります(Bは誤り)。
問18. 正解:B opensは、Jackson・Hibernateなどのフレームワークがリフレクションでprivateフィールドにアクセスするために使う指令で、実行時のリフレクションアクセスだけを許可します。exportsのようにコンパイル時の通常アクセスまで許可するわけではないため、Aは誤りです。パッケージを非公開にする指令ではないため、Cも誤りです。
問19. 正解:C requires staticは「コンパイル時には必須だが、実行時にはそのモジュールが存在しなくてもよい」という、オプショナルな依存関係を表す指令です。単なる可読性のためのキーワードではなく(Aは誤り)、実行時ではなくコンパイル時に必須という点も逆になっています(Bは誤り)。
問20. 正解:A requires transitiveを使うと、そのモジュールを利用する側(com.example.serviceをrequiresしているcom.example.app)にも、依存関係が暗黙的に引き継がれます(推移的可読性)。そのためcom.example.appはcom.example.coreを直接requiresしなくても、com.example.core.utilパッケージを利用できます(Bは誤り)。module-info.javaの記述自体にも誤りはありません(Cは誤り)。
難易度・学習ロードマップ|正答数の目安と次にやること
20問を解き終えたら、正答数から今の立ち位置を確認してみましょう。以下は公式の合格ラインではなく、当サイトが独自に設定した目安です。正答数の段階分けとして参考にしてください。
- 16問以上正解:出題範囲の基礎はおおむね仕上がっている段階です。市販の問題集や模擬試験で本番形式に慣れる仕上げに入ってよいでしょう。
- 11〜15問正解:合格圏に近づいていますが、間違えた分野にムラがある段階です。解説を読み直し、弱い分野だけ参考書に戻って復習しましょう。
- 10問以下:出題範囲全体の理解がまだ不足している段階です。焦って問題演習を増やすより、参考書で該当分野を読み直してから再挑戦することをおすすめします。
Bronze・Silver・Goldの出題形式比較
本文で触れたBronze・Silver・Goldの3試験について、公式サイトで確認できる出題形式だけを表にまとめました。受験料は変動するため本文には記載せず、詳細は各公式サイトでご確認ください。
| 項目 | Bronze | Silver(SE11) | Gold(SE11) |
|---|---|---|---|
| 試験番号 | 1Z0-818-JPN | 1Z0-815-JPN | 1Z0-816-JPN |
| 問題数・試験時間 | 60問・65分 | 80問・180分 | 80問・180分 |
| 合格基準 | 正答率60%以上 | 正答率63%以上 | 正答率63%以上 |
| 準拠バージョン | バージョン指定なし(Bronze SE) | Java SE 11 | Java SE 11 |
SilverとGoldは問題数・試験時間・合格ラインが同じですが、これは出題形式が同じというだけで、難易度の差は出題範囲の広さと深さにあります。またSilverには試験時間・問題数が異なるSE17版(1Z0-825-JPN)もあります。自分が使っている教材が前提にしているバージョンと、これから受ける試験番号が一致しているかは、必ずOracle公式のJava SE 11 Programmer II(1Z0-816-JPN)試験ページなど該当する公式試験ページで確認してから申し込んでください。
おすすめの学習ステップ
- 参考書(通称・紫本など)を1周読み、クラス設計・コレクション・Stream API・並行処理・モジュールシステムの全体像をつかむ
- この記事の20問を解き、今の理解度と弱点分野を確認する
- 弱点分野だけ参考書に戻って読み直す(最初から全部読み直さない)
- 市販の問題集(通称・黒本など)で問題量をこなし、本番形式に慣れる
▼Java Gold SE 11の難易度・勉強時間の体験談はこちら▼
Java Gold SE 11の難易度・勉強時間150時間の体験談
市販の問題集(黒本など)との違い・使い分けは?
この記事の20問は、あくまで今の理解度と弱点分野を短時間で確認するためのものです。出題範囲全体を網羅した問題量をこなすには、市販の問題集の方が向いています。この記事で弱点分野を把握したうえで、参考書・問題集を選ぶ流れがおすすめです。
▼Java Gold SE11のおすすめ参考書・問題集はこちら▼
合格後の評価|Java Goldは転職で役立つのか
Java Goldは、クラス設計・コレクション・Stream API・並行処理・モジュールシステムまでを扱う、Bronze・Silverより広く深い範囲を対象とした試験です。実務経験のあるエンジニアが自分の知識を体系的に整理する目的で受験するケースも多く、合格だけで評価が決まるわけではなく、実務での経験や成果と合わせて評価されると考えておくとよいでしょう。
すでに実務でJavaを扱っている方はスキルアップの証明として、これからIT業界を目指す方は学習意欲の証明として、それぞれ使い方が変わってきます。転職市場での評価の詳細や活かし方は、以下の記事で詳しく解説しています。
▼Java資格は転職で評価される?合格後の活かし方はこちら▼
資格取得後のキャリアに悩んだら
この記事を読んでいる方の多くは、すでにJava Silverを取得していたり、実務でJavaを使っていたりする方だと思います。その場合、未経験からの就職活動というよりも、「今の会社でスキルアップを続けるか」「次のキャリアを考えるか」を検討する段階にいることが多いはずです。
Java Goldの合格をきっかけに市場価値が気になった場合は、無理に転職を勧めるつもりはありませんが、今の自分がどのくらいの選択肢を持っているかを知っておくこと自体には意味があると思います。上で紹介した転職評価の記事から、自分に合いそうな相談先を確認してみてください。
よくある質問
この20問だけで合格できますか?
この20問だけでは、Java Goldの出題範囲全体をカバーすることはできません。あくまで今の理解度と弱点分野を確認するための問題として使い、弱点が見つかった分野は参考書に戻って復習し、最終的には市販の問題集で問題量をこなすことをおすすめします。
市販の問題集(黒本など)との違い・使い分けは?
詳しくは「難易度・学習ロードマップ」の章で解説しています。簡単に言うと、この記事は短時間で弱点を確認するための20問、市販の問題集は出題範囲を網羅的にこなすための教材という役割分担です。
Java Silverとの違いは何ですか?
Java Goldは、Silverで扱う変数・配列・基本的なクラス設計に加えて、コレクションのジェネリクス、Stream API、並行処理、I/O、モジュールシステムなど、より広く実務寄りの範囲が出題される試験です。3資格の難易度の詳しい比較は、以下の記事にまとめています。
▼Java Bronze・Silver・Goldの難易度比較はこちら▼
Java資格(Bronze・Silver・Gold)の難易度比較
さいごに
この記事では、公式に公開されていないJava Goldの過去問の代わりとして、筆者オリジナルの練習問題20問を解答・解説つきでお伝えしました。大切なのは、この20問の正誤そのものより、間違えた分野を次の学習にどう活かすかです。正答数の目安を参考に、弱点分野から復習を進めてみてください。
受験を決めたら、次は申し込み手順の確認です。Bronze・Silver・Gold共通の申し込み手順は以下の記事にまとめてあります。また、まだJava Bronze・Silverの練習問題を解いていない方は、弱点の全体像をつかむためにあわせて解いてみることをおすすめします。
最後までお読みいただきありがとうございました。
▼Java Gold・Silver・Bronzeの申し込み手順はこちら▼
Java Gold・Silver・Bronzeの申し込み手順
▼受験チケットを楽天で購入して受験料を抑える方法はこちら▼
▼Java Silverの練習問題20問はこちら▼
▼Java Bronzeの練習問題20問はこちら▼
※本記事の情報は2026年9月時点のものです。最新情報は公式サイトでご確認ください。


コメント