Java Silver(Oracle Certified Java Programmer)は、Javaプログラミングの基礎知識を証明する資格です。Javaの学習経験はあるものの実践経験が少ない初心者でも、本ガイドに沿って準備すれば合格を目指せるよう、網羅的にわかりやすく整理します。

このページでは試験概要や出題範囲、頻出問題の傾向と対策、効率的な学習法、おすすめ教材についてまとめます。特に初心者がつまずきやすいポイントは丁寧に解説します。
1. 試験の概要
- 試験名・資格名:Java SE 17 Programmer I(資格名:Oracle Certified Java Programmer, Silver SE 17)
- 試験形式・時間:選択式問題(多肢選択)。試験時間は90分です。
- 出題数・合格ライン:全60問で、65%前後の正答率で合格(約39問正解が目安)。
- 試験言語:日本語または英語。
- 受験方法:ピアソンVUE経由のCBT試験(テストセンターまたは自宅受験)。随時受験可能です。
初心者への補足:Java Silver SE17試験はJavaの基本文法やオブジェクト指向の基礎を問う内容で、比較的入門的な試験と位置づけられます。前提資格は不要で誰でも受験できますが、問題文中にコードが登場しJavaの挙動を正しく理解しているかが試されます。1問あたり1分30秒程度しか時間がないため、素早くコードを読み解く力が求められます。
Memo: Java Silver SE11(前バージョン)試験では80問・180分でしたが、Silver SE17では60問・90分に短縮されています。時間に対する問題数の割合が高くなったため、時間配分とスピードがより重要になっています。
2. 主な出題範囲と内容の要点
Java Silver SE17で問われる知識範囲の主要トピックと、その要点を解説します。Javaの基本から最新の言語機能まで広く出題されるので、以下の項目を一通り押さえましょう(太字は特に重要なテーマ)。

このサイト内の解説記事へのリンクも貼っておきますので適宜ご参照ください。
- Java言語の基本:
- プログラムの構成 –
main
メソッドを持つ実行可能クラスの書き方。javac
コマンドでのコンパイルとjava
コマンドでの実行方法(パッケージに属するクラスはフルパス指定)。パッケージ宣言とimport
文の使い方。
(参考 Javaの基本構文ルール) - 基本データ型とリテラル – byte/short/int/longなど数値型、charやbooleanの基本型とリテラル表記。ビット数と表現範囲、例えばintは32ビットで約±21億の範囲。小さい型から大きい型への代入は自動的に可能だが、大きい型から小さい型へ代入するにはキャストが必要です(暗黙変換と明示的キャストのルールに注意)。
(参考 Javaのデータ型の基本) - 変数の宣言とスコープ – ローカル変数(メソッド内の変数)とフィールド(クラス直下の変数)の違い。ローカル変数は初期化しないと使えず、ブロックを出ると消滅します。一方フィールド(インスタンス変数)はデフォルト値(数値型は0、booleanはfalse、参照型はnull)で自動初期化され、オブジェクトが存在する限り参照可能です。同名のローカル変数がある場合、
this
キーワードを付けないとフィールドにアクセスできない点も押さえましょう。初心者が陥りがちですが、フィールドとローカル変数が名前衝突するときは常にthis.
をつけてフィールドを参照する習慣をつけると安全です。
(参考 Javaの変数の基本) - リテラルと型推論 –
var
によるローカル変数の型推論。右辺の式から明確に型を決定できる場合のみvar
が使用可能です。たとえばvar list = new ArrayList<String>();
はOKですが、var x;
(初期化なし)やvar y = null;
(null単独)など型が推定できないケースではコンパイルエラーになります。またvar
はローカル変数専用であり、メソッドの引数やフィールドには使えません。
(参考 リテラルとは) - 文字列操作 –
String
クラスの基本(不変オブジェクトであること、連結演算子+
の挙動など)。文字列比較では==
ではなくequals
メソッドで内容比較する点に注意。テキストブロックと呼ばれる複数行文字列リテラル("""複数行の文字列"""
)がJava 15で追加されており、コード中で改行を含む文字列を記述できます。文字列に関しては、StringBuilder
を用いた連結や、substring
など一部メソッドの挙動も問われる可能性があります。特にString
は実際の開発でも頻出なので、基礎をしっかり理解しましょう。
- プログラムの構成 –
- 演算子と制御構文:
- 各種演算子 – 算術演算子、比較演算子、論理演算子、ビット演算子(三項演算子も含む)の基本的な使い方。例えば
&&
や||
は左辺の結果次第で右辺を評価しない(ショートサーキット)挙動があることなど。インクリメント++
やデクリメント--
の前置・後置の違いは初心者が混乱しやすいポイントなので注意(i++
は現在の値を使用してから加算、++i
は先に加算してから使用)。
(参考 演算子まとめ) - 条件分岐 –
if
/else
文の基本と、switch
文の使い方。switch
ではbreak
を書かないと次のcaseに処理がフォールスルーする点が頻出です。Silver SE17では従来のswitch
文に加えてswitch
式(アロー演算子->
を用いる新構文)が試験範囲に含まれています。switch
式では各分岐で値を返す(yield
キーワードで値を返す場合もある)ため、従来のような明示的break
は不要です。この新旧switch
の違いや使い分けを理解しましょう。
(参考 if~else文 / switch文) - ループ構文 –
for
文、拡張for(for-each
)、while
/do-while
の使い方。ループから抜けるbreak
や次の反復へスキップするcontinue
も押さえます。拡張for文では配列やIterable
実装のコレクションを簡潔に走査できます。ループのネストやbreakラベルの問題も稀にありますが、まずは基本形と制御フローを正確に追えるよう練習しましょう。
(参考 for文 / while文)
- 各種演算子 – 算術演算子、比較演算子、論理演算子、ビット演算子(三項演算子も含む)の基本的な使い方。例えば
- オブジェクト指向プログラミング(OOP)の基礎:
- クラスとオブジェクト – クラス定義の方法とインスタンス化(
new
演算子)。オブジェクトのライフサイクルとは、new
でヒープ領域に生成されガベージコレクションで回収される流れのことです。メンバとしてのフィールドとメソッドの宣言方法、アクセス修飾子(public/protected/default/private)の意味。特にアクセス修飾子は暗記必須で、デフォルト(パッケージプライベート)は同一パッケージ内からのみアクセス可能、protectedはサブクラスから(別パッケージでも)アクセス可、privateはクラス内部のみ、といった範囲の違いを整理しましょう。初心者はアクセス修飾子によるアクセス範囲の違いで混乱しがちなので、表を作るなどして覚えると良いです。
(参考 クラスとオブジェクトの基本) - メソッド – メソッド定義の構文(戻り値、メソッド名、引数、ボディ)。オーバーロード(同一クラス内で引数型や個数が異なる同名メソッド複数定義)とその解決ルール。コンストラクタ(クラス名と同じ特殊なメソッド)の役割と、デフォルトコンストラクタがコンパイル時に自動生成される条件(他にコンストラクタ定義が無い場合のみ)も押さえます。staticメソッド/変数(クラス変数)も出題されます。staticなメソッドはインスタンス化せず呼び出せる反面、インスタンス変数には直接アクセスできない制約があります。
(参考 Javaのメソッドの基本) - オブジェクト比較と等価性 –
==
演算子は参照比較、equals()
メソッドは内容比較であることを再確認してください。例えば文字列はequals
で比較しないと意図した結果になりません。同様に、Integer
などラッパークラスも==
ではオブジェクト参照の比較になるため注意が必要です(小さな数値ではオブジェクトがキャッシュされる特殊な挙動もありますが、基本はequals
使用が安全です)。
- クラスとオブジェクト – クラス定義の方法とインスタンス化(
- 継承とポリモーフィズム:
- 継承 – 既存クラスをextendsしてサブクラスを作成し、コードを再利用する仕組みです。スーパークラス(親クラス)からフィールドやメソッドを引き継ぎ、必要に応じて機能を拡張します。サブクラスのコンストラクタでは暗黙的に親クラスのデフォルトコンストラクタが呼ばれる(または明示的に
super(...)
で親コンストラクタを呼び出す)点に留意しましょう。
(参考 クラスの継承) - メソッドのオーバーライド – サブクラスで親クラスと同じシグネチャのメソッドを再定義すること。オーバーライド時のルールとして、アクセス修飾子は親と同じかそれより開放的(public > protected > default > private)にしかできません。例えば親クラスのpublicメソッドをサブクラスでprotectedにするとコンパイルエラーになります。また、throws句で宣言できる例外の型は親より広くならない(親が投げる例外のサブクラスしか投げられない)制約もあります。
(参考 メソッドのオーバーライド) - ポリモーフィックな呼び出し – 多態性の原則で、親クラス型の変数に子クラスのインスタンスを代入し、実行時には実際のオブジェクト型のオーバーライドしたメソッドが呼ばれる現象です。例えば
Animal animal = new Dog(); animal.sound();
とした場合、コンパイル時はanimal
はAnimal型ですが、実行時にはDogのsound()
が実行されます(Animalでオーバーライドされている場合)。これに関連して参照型のキャストも試験範囲です。(子クラス) 親クラス変数
でダウンキャストし、コンパイル時チェックや実行時ClassCastException
に注意する場面などが問われます。
(参考 ポリモーフィズムとは?) - 抽象クラス –
abstract
修飾子を持つクラス。インスタンス化できず、抽象メソッド(実装無しメソッド)を含めることでサブクラスに実装を強制できます。抽象クラスにはコンストラクタや非抽象メンバも持てる点は初心者には意外かもしれません。
(参考 抽象クラスとは?) - インターフェース – 全メソッドが暗黙的に
abstract
だった(Java7以前)の特殊クラスですが、Java8以降はデフォルトメソッド(default
キーワード付きで実装を持つメソッド)やプライベートメソッド(インターフェース内部の共通処理用)が定義可能です。インターフェースの実装(implements
)方法と、クラスが複数のインターフェースを実装するケースも理解しましょう。
(参考 インターフェースとは?)
- 継承 – 既存クラスをextendsしてサブクラスを作成し、コードを再利用する仕組みです。スーパークラス(親クラス)からフィールドやメソッドを引き継ぎ、必要に応じて機能を拡張します。サブクラスのコンストラクタでは暗黙的に親クラスのデフォルトコンストラクタが呼ばれる(または明示的に
- 最新のJava言語機能(Silver SE17で追加されたトピック):
Silver SE17試験では、Java11以前の基本機能に加えてJava17までの新機能が範囲に含まれています。以下は特に注目ポイントです。- レコードクラス –
record
キーワードで定義する特殊なクラスで、不変データキャリアをシンプルに記述できます。コンストラクタやequals
/hashCode
/toString
が自動生成される点が特徴です。普通のクラスとの違いや、レコードがfinal
である(継承できない)ことを覚えておきましょう。
(参考 レコードクラスとは) - シールドクラス(シールクラス) –
sealed
キーワードで宣言し、そのクラスを継承できるサブクラスを限定できます。permits
キーワードで許可クラスを列挙し、サブクラス側ではnon-sealed
またはfinal
で宣言します。継承関係をコンパイル時に制約できる仕組みとして新しい概念なので、用語と基本挙動を押さえてください。
(参考 シールクラスとは) - パターンマッチング(instanceof) –
instanceof
演算子の拡張で、obj instanceof String s
のように書くと、条件が真の場合にその型にキャスト済みの変数s
を利用できます。キャストと変数宣言をまとめて行う便利機能で、冗長なキャストコードを削減します。コード例を見て、旧来の書き方との違いを理解しておきましょう。
(参考 パターンマッチング) - (参考)モジュールシステム – Java 9で導入されたモジュール機能(
module-info.java
によるモジュール定義)はJava Silver 11では出題範囲でしたが、Silver SE17試験では範囲外となりました。そのため、本試験対策としてモジュールシステムの詳細な学習は不要です(時間があれば概要に触れる程度でOK)。
- レコードクラス –
- コレクションAPI(コレクションと配列):
- 配列 – 一次元配列および多次元配列の宣言・初期化・操作。例えば
int[] arr = new int[5];
のように作成すると要素はデフォルト値で初期化されます。配列リテラルによる初期化(例:int[] arr = {1,2,3};
)や、new
キーワードを用いた初期化の文法も複数あるので整理しましょう。注意:配列リテラルで宣言と同時に初期化する場合(int[] a = {…};
)、new int[]{…}
のnew 型[]
部分は省略可能ですが、メソッドの引数に渡す匿名配列ではnew 型[]{…}
と明示する必要があります。このあたりの文法違いはひっかけ問題になりやすいです。
(参考 配列とは?) - コレクション(リスト) – Silver試験で扱うコレクションは主に
java.util.ArrayList
です。ArrayList
の宣言と要素追加・取得、サイズ取得など基本操作を覚えます。例えばArrayList<String> list = new ArrayList<>(); list.add("Java");
のように使い、list.get(0)
で要素取得します。ジェネリクスの概念もここで必要になります(ArrayList<型>
と型パラメータを指定する)。ジェネリクスを使わずArrayList
を宣言するとRaw型となり警告が出ますが、試験では主に適切な型パラメータを使う前提です。- Autoboxing(自動ボクシング):コレクションにプリミティブ型を追加するときに自動で対応するラッパークラスに変換されます。例えば
list.add(5);
はInteger.valueOf(5)
に変換されて格納されます。基本型とオブジェクト型の相互変換も理解しておきましょう。 - イテレーション:拡張for文や
Iterator
を使ったループでArrayList
の全要素を処理できます。この部分はコードを書いて確認すると理解が深まります。
- Autoboxing(自動ボクシング):コレクションにプリミティブ型を追加するときに自動で対応するラッパークラスに変換されます。例えば
- その他のコレクション – Silverでは主にリストのみですが、時間が許せば
HashMap
やHashSet
といった他のコレクションの存在も知っておくと尚良いでしょう(ただし詳細はGold試験範囲)。
- 配列 – 一次元配列および多次元配列の宣言・初期化・操作。例えば
- 例外処理:
- 例外の種類 – チェック例外(例:IOExceptionなどコンパイル時にハンドリングが強制される)と非チェック例外(RuntimeException系やError系で強制されない)およびErrorの違いを押さえます。例えば
NullPointerException
はRuntimeException(非チェック)、FileNotFoundException
はIOExceptionのサブクラスでチェック例外です。
(参考 例外処理とは?) - try-catch文 – 例外を捕捉する基本構文。
try
ブロック内で例外が発生するとマッチするcatch
ブロックに処理が移ります。複数のcatch
を書く順番にも注意が必要です。サブクラスの例外を先に書き、スーパークラス(より一般的な例外)を後にしないとコンパイルエラーになります(例外のポリモーフィズム)。 - try-with-resources文 – 資源解放を自動化する
try(...)
構文。カッコ内にAutoCloseable
インターフェースを実装したオブジェクト(例えばjava.io.FileReader
やjava.sql.Connection
)を宣言すると、try
ブロック後に自動でclose()
が呼ばれます。初心者には馴染みが薄いかもしれませんが、基本構文と動作(複数リソースの宣言も可)を理解しましょう。
(参考 try-with-resources文) - throwとthrows –
throw
文で明示的に例外を送出する方法と、メソッドシグネチャでthrows 例外型
と宣言して呼び出し元へ例外を投げる方法。チェック例外をthrowsせずにthrowするとコンパイルエラーになるため、試験ではメソッド定義と例外処理の組み合わせ問題に注意です。 - カスタム例外 – 独自の例外クラスを作成する手順(
Exception
かRuntimeException
を継承しクラスを定義)。実務では頻出ではないですが、試験範囲として覚えておきましょう。 - マルチキャッチ – 1つの
catch
で複数種類の例外をまとめて捕捉できます(catch(IOException | SQLException e)
のように|
で区切る)。マルチキャッチではキャッチした例外オブジェクトe
の型は共通の親クラス(例ではException)として扱われます。また、|で繋ぐ例外同士が継承関係にある場合はコンパイルエラーになる点も引っかけとして知られています。
- 例外の種類 – チェック例外(例:IOExceptionなどコンパイル時にハンドリングが強制される)と非チェック例外(RuntimeException系やError系で強制されない)およびErrorの違いを押さえます。例えば
以上が主要な出題範囲です。特にSilver SE17ではJava11以前のラムダ式やモジュールシステムが範囲外となり、その代わりにレコードクラスやシールクラスなど最新機能が追加されています。学習の際は古い教材を使うときに、これら出題範囲の差異に注意してください。
3. 頻出問題の傾向と対策
Java Silverでは、文法の穴埋めやコード実行結果の選択問題が中心です。初心者が間違えやすいポイントを突いた問題も多いですが、パターンは決まっています。ここでは頻出のトラップとその対策を紹介します。
変数のスコープと名前遮蔽(シャドーイング): クラスのフィールドとメソッド内のローカル変数で同じ名前を使った場合の挙動を問う問題です。例として以下のコードを見てください:
public class Sample { int value = 5; void setValue(int value) { value = value; } public static void main(String[] args) { Sample s = new Sample(); s.setValue(10); System.out.println(s.value); } }
上記のsetValue
メソッドでは、引数とフィールドが共にvalue
という名前です。この場合メソッド内でvalue = value;
と書くと、両方ともローカル(引数)のvalue
を指すためフィールドには代入されません。したがって出力結果は元のフィールド初期値である5
となります。
対策:フィールドとローカル変数を混同しないように、フィールドにアクセスする際はthis.value
を用いる癖をつけましょう。また、試験ではこのようなコードを読んで実行結果を選ばせる問題が出ますが、変数がどのスコープのものかを丁寧に追えば解けます。
var
が使える場合と使えない場合: Java10で導入されたローカル変数型推論var
は便利ですが、使用可能な場面が限定されています。試験ではvar
の使い方を問う文法問題が頻出です。典型的な出題は「次の宣言のうちコンパイルエラーにならないものはどれか」といった形式で、var
を使った様々な宣言が示されます。例えば:
var a;
(初期化子が無いのでエラー)var b = null;
(型推論不能でエラー)var c = "abc";
(OK:文字列型と推論)var d = new ArrayList<>();
(OK:右辺からArrayList
と推論)for (var i = 0; i < 10; i++) {...}
(OK:ループ初期化子でも使用可)
対策:var
は必ず右辺から型が明確に分かる場合のみ許されるという原則を覚えましょう。null単独やラムダ式など型推論できないケース、配列の簡易初期化子(例:var arr = {1,2,3};
は型不明で不可)では使えないと理解しておけば大丈夫です。またvar
はローカル変数限定で、メソッド引数・フィールドでは使用不可という点も覚えておきます。問題文を見たら「これは右辺で型分かるかな?」と考える習慣をつけると解答しやすいでしょう。
配列の宣言・初期化パターン: 配列に関する文法も頻出です。例えば「どの配列初期化がコンパイルエラーになるか」といった問題では、以下のような選択肢が考えられます:
int[] arr1 = new int[3];
– OK(指定サイズで宣言)int[] arr2 = new int[]{1,2,3};
– OK(new 型[]{...}
で明示的に初期化)int[] arr3 = {1,2,3};
– OK(省略形の初期化。宣言と同時のみ使用可)int[] arr4; arr4 = {1,2,3};
– エラー(別行でリテラル初期化は不可)int arr5[ ] = new int[2]{1,2};
– エラー(配列リテラルとサイズ指定の併用不可)
対策:配列の初期化方法は宣言と同時ならリテラル{...}
使用可だが、後からリテラルで代入はできない、といったルールを整理しましょう。また多次元配列では、例えばint[][] mat = new int[2][3];
のように宣言しますが、ジャグ配列(段々配列)にも注意。new int[2][]
とすると各要素がnull初期化となり、後で各行にnew int[...]
で割り当て可能です。このあたりは高度な内容なので、まずは基本的な一次元配列の文法を確実にしましょう。試験では配列インデックス範囲外アクセス(ArrayIndexOutOfBoundsException
)の誘導などもありますが、これは実行時エラーになるだけでコンパイルは通ることもポイントです。コードを追う際は添字の範囲にも気を配ってください。
アクセス修飾子と継承によるメンバ参照: オブジェクト指向分野では、クラス間の継承関係とアクセス修飾子の組み合わせ問題がよく出ます。例えば「異なるパッケージにあるサブクラスから親クラスのprotectedフィールドにアクセスできるか?」や「オーバーライド時にアクセスレベルを下げたらどうなるか?」などです。
- protectedメンバはサブクラスからアクセス可能ですが、それはサブクラス内での話であり、サブクラスのインスタンス経由で別オブジェクトのprotectedメンバにアクセスするのは不可という細かい点があります(混同しやすい部分です)。
- default(パッケージプライベート)メンバは同一パッケージ内でのみアクセス可。他パッケージのサブクラスからは見えません。
- privateメンバは継承してもアクセス不可です(サブクラス側に同名privateフィールドを持つ場合はそれは別物)。
- オーバーライド時は前述の通りアクセス範囲を狭められないので、もし問題文のコードで違反していたらコンパイルエラーになります。
対策:アクセス修飾子ごとのアクセス可能範囲をしっかり暗記すること。特にprotectedの挙動はややこしいので、コードを書いて試すのも有効です。また、試験では「このコードはコンパイル通るか?」を問うパターンが多いので、怪しい箇所(アクセス違反やオーバーライド規約違反)がないか読んでチェックしましょう。継承関係図を書いて整理するのもおすすめです。
break
を書き忘れた場合に後続のcaseも実行されてしまうフォールスルーがあります。試験ではわざとbreak
を欠いたコードを示し、出力がどうなるか問う問題が典型的です。
int x = 1; switch(x) { case 1: System.out.print("A"); case 2: System.out.print("B"); default: System.out.print("C"); }
上記コードの場合、x==1
なのでcase1から実行し、break
が無いためcase2, defaultまで連続実行します。その結果"ABC"
が出力されます。初心者だと"A"
だけと思いがちなので注意しましょう。
対策:switch文では各case末に必要ならbreak
を書く習慣を理解すること。またJava17ではswitch
式が追加され、こちらはフォールスルーが無い代わりに全ての分岐を網羅する必要があります(列挙型やsealed
クラスでない場合、default
が必須)。試験でも新機能としてswitch
式の文法(->
やyield
)を問う可能性があります。新旧のswitchの違いをまとめて整理しておき、コードを見たら従来の文か新しい式かを識別して回答しましょう。
例外処理の組み合わせ: 例外関連では、try-catchの実行フローや、throws宣言とcatchの対応などが問われます。頻出パターンを挙げます:
- 複数catchの順序: 先に特定の例外(例えば
FileNotFoundException
)をcatchし、後から親クラス(例えばIOException
)をcatchするのはOKですが、逆だと後者が到達不能になりコンパイルエラー。問題文中のcatch順に注意しましょう。
- try-with-resourcesのマルチリソース: 複数のリソースを
;
で区切って宣言可能ですが、一部だけAutoCloseableでないといった場合はコンパイルエラーになります。基本的に試験問題ではAutoCloseable実装クラスかどうかを把握していれば解けるようになっています。
- throwの有無: メソッド内でチェック例外をthrowするなら、そのメソッドシグネチャにthrows宣言が無ければコンパイルエラーになります。例えば「あるメソッドがIOExceptionを発生させうるコードを持つがthrows宣言がない」ケースは誤りです。
- finallyブロック: 試験範囲記載には明示されていませんが、try-catch-finallyの基本も知っておくべきです。
finally
は例外の有無に関わらず最後に実行されるブロックで、ここで戻り値を変更したりreturn
を書くと挙動が変わるケースがあります(注意深い理解が必要ですが、Silverでは深追いしなくても良いでしょう)。
以上のような典型的な傾向を把握し、それぞれ対策をしておけば、高得点につながります。ポイントは「なぜそうなるか」を理解することです。ただ丸暗記するより、自分でコードを書いて試したり、図解して納得した上で覚える方が応用が効きます。過去問演習や模擬問題を解く際も、間違えたら必ず理由を突き止めましょう。
4. 効率的な学習方法
初心者がJava Silverに合格するための効果的な勉強法と学習プランを紹介します。

ポイントは、「基礎理解」→「問題演習」→「模擬試験」のステップで段階的に力をつけることです。
- 学習時間の目安を確保する: プログラミング初心者の場合、合格までに約80~100時間の学習が必要とも言われます。例えば毎日2時間勉強すると約2ヶ月半、毎日3時間なら約1.5~2ヶ月程度です。仕事や学業と両立する場合は無理のない計画を立て、コツコツ継続することが重要です。過去の合格者の多くも「合計80~100時間ほど勉強した」と報告しています。スケジュールを決めて計画的に進めましょう。
- ステップ1:Java基礎のインプット
まずはJava言語の基本をしっかり理解します。過去に独学や学習経験があっても、抜けやあいまいな部分を復習しましょう。おすすめは入門書やオンライン教材で体系的に学ぶことです。例えば:- 書籍:「スッキリわかるJava入門」(インプット向け定番書。初心者にも平易な説明で人気)書籍:「独習Java」(やや詳しめですが基礎から応用まで網羅。辞書的に使っても良い)オンライン学習:ProgateのJavaコース(ブラウザ上でJavaの基礎文法を実行しながら学べる。楽しく基礎力を養成できます)オンライン動画:ドットインストールのJava入門動画(3分動画で手軽に文法を学習できます)
- ステップ2:試験対策教材で学習
Javaの基礎が一通り理解できたら、試験専用の教材でSilver試験の出題範囲に沿って学習します。市販の以下のような参考書・問題集が定番です:- オラクル認定資格教科書 Javaプログラマ Silver SE 17(いわゆる「紫本」) – Oracle認定教科書シリーズで、本試験範囲を網羅した解説書です。各章末に確認問題があり、解説も丁寧なので初心者でも独学しやすいです。まずは紫本を2~3周読み込みと問題演習をしましょう。1周目は流し読みで全体を掴み、2周目で理解を深め、間違えた箇所はメモしながら3周目で総仕上げ、といった形がおすすめです。徹底攻略 Java SE 17 Silver 問題集[1Z0-825](通称「黒本」) – 豊富な練習問題と詳しい解説が載った問題集です。章立ても試験範囲に対応しており、本番レベルの問題に数多く当たることで実戦力がつきます。アウトプット重視の教材なので、紫本で知識を入れた後に黒本で演習すると効果的です。章ごとに問題を解き、解説を熟読して知識を補完しましょう。巻末には模擬試験問題も収録されています。(Silver SE17対応の黒本が手に入らない場合) 従来のJava Silver SE11黒本も有用です。SE17とSE11で多少の出題範囲差はありますが、共通部分が大半なので、SE11黒本の問題演習で基礎力をつけられます。ただしモジュールやラムダの章は飛ばし、新機能(recordやsealed)は紫本など別資料で補完してください。
- ステップ3:模擬試験と弱点補強
試験日が近づいたら、総仕上げとして模擬試験問題に挑戦しましょう。本番形式の問題を制限時間内(90分)で解く訓練をすることで、時間配分や問題の難易度感になれることができます。模擬試験は前述の黒本の巻末付録や、紫本付属の模擬試験(書籍内やダウンロード提供)を活用できます。また、一部のウェブサイトでもSilverレベルの模擬問題が公開されています。例えば:- TECH ProjinのJava Silver練習問題(無料の問題集サイト。Java8対応が中心ですが計187問の良問があります。基本文法の確認に役立ちます。ただしJava17の新機能は含まれない点に注意)
- Enthuware(エンツウェア)の模擬試験ソフト(英語ですが高品質な問題集ソフト。有料でJava OCP向けですが、Silver相当の問題もカバーしています)
- UdemyのJava Silver模擬試験コース(オンライン学習プラットフォームUdemyで、有志が提供する模擬試験コースがあります。最新バージョン対応か確認の上で利用してください)
- 実践練習:コードを書いて動かす
上記ステップと並行して、自分でコードを書く実践練習も取り入れましょう。特に初心者の方は「知っているつもり」になりやすいので、必ず手を動かすことを習慣にします。簡単なプログラムで構わないので、各トピックごとにサンプルコードを書く→実行する→予想通りか検証というサイクルを回してみてください。例えば「インターフェースにprivateメソッドを書いたコード」を試してみる、「例外の継承関係でcatchの順番を変えたコード」でコンパイルエラーを実際に確認する、などです。これにより理解が定着し、試験本番でも落ち着いてコードを読めるようになります。
最後に、モチベーション維持も大切です。学習仲間がいれば一緒に問題を出し合ったり、勉強記録をSNSやブログに書くのも良いでしょう。焦らず着実に積み上げれば、初心者でも必ず合格ラインに達する力が身につきます。