今回のイベントでは、書籍『オラクル認定資格教科書 Javaプログラマ Silver SE11 スピードマスター問題集(試験番号1Z0-815)』の著者である坂本浩之さんに、ズバリ、OCJP Silver SE 11の認定資格について、その出題傾向、受験する際の注意ポイントを解説していただきました。
・Silver試験の各項目の出題傾向やポイントを詳しく解説!
・Silverの難易度は、上級者の指導のもとで開発作業を行うことができる「開発初心者向け」
【講師プロフィール】
坂本 浩之さん
日本サード・パーティ株式会社 人財育成ソリューション部所属。Java言語のインストラクタとして、オープントレーニングや個社向けトレーニング、資格対策のトレーニングなど幅広く担当する。資格対策については主な著書として『Javaプログラマ スピードマスター問題集』(翔泳社)がある。
Oracle Certified Java Programmer(OCJP), Silver SE 11 認定資格について
OCJPの最新の試験のバージョンはJava 11に対応したもの。ちなみに一つ前のバージョンの試験はJava 8に対応したものだったので、一気に3段階もバージョンアップしたようなイメージです。
Bronze・Silver・Goldとレベルが分かれていますが、最も受験者数が多いのはSilver。エンジニアとして活躍している人の腕試しとしても、Silverはピッタリの難易度だそうです。試験は選択問題で、制限時間180分、全80問中合格ラインは63%とのこと。出題範囲は12のカテゴリに分かれていて、次のようになっています。


実際に坂本さんが受験した感覚では、オブジェクト指向に関する問題は試験を問わず多く、Silverでは「4割近く」がオブジェクト指向関連の出題。また、新機能のモジュールシステムやLocal-Variable Type Interfaceは押さえておいたほうが良いそうです。

出題傾向
では、1~12までの全カテゴリについて、どんなところが問われやすいのでしょうか?坂本さんが、具体的にポイントを解説してくださいました。
全て文章問題。コードを読んで答えるものは出ないそうです。このカテゴリは、出ても2~3問とのこと。
Local-Variable Type Interfaceのvarの取り扱いを押さえておくと良いそうです。Javaはこれまで「型はきっちり宣言しましょう」という“型に厳密な言語”のイメージだったのですが、Java 8からは型推論(言わなくても推測できる)が行われるようになり、Java10からはローカル変数をvarで定義すれば右辺を参考に型を識別します。
このvarがコンパイルエラーになるパターンは、たとえばローカル変数でない、手がかりがなくて推論できないといったパターン。これらをきちんと押さえておくことが大切だそうです。

StringオブジェクトとStringBuilderオブジェクトの違いについても押さえておく必要があります。

配列では、ひっかけ問題としてconcat()メソッドを使ったものが出題されることがあるそうです。
s1.concat("Bye"); //新規オブジェクトが生成される
System.out.println(s1);
文字列を連結するconcat()メソッドは使用時に「連結された文字列」が新規オブジェクトとして生成されるため、連結結果を受け取る変数を左辺に指定しなければなりません。上記プログラムでは、
としなければ、意図した結果を得られません。
配列に関する出題ですが、初期化に関するものは押さえておくと良いそうです。

また、二次元配列の定義や初期化も数問は出るそうなので、事前にしっかりと確認しておきましょう。
このカテゴリ以降はオブジェクト指向関連の問題が頻出するため、いかにオブジェクト指向で点を稼ぐのかが、ポイントになるそうです。

継承についての王道的な問題が出るそうです。

典型的な問題が次のようなものだそうです。

また、参照範囲を変更させて、キャスト演算子が必要かどうかを判断させるという問題も、よく出題されるそうです。
さまざまな例外処理について問う問題が出されます。たとえば、throwsキーワード付きのメソッドをオーバーライドさせるには、どうすればいいかを問う次のような問題が出題されます。

・スーパークラスと同じ例外クラスをthrowsキーワードで定義する
・サブクラス例外を定義する
上記3点が、このときコードとして通るケースだそうです。
Java 11からの仕様である、javaコマンドでソースファイルを実行できるようになったところがポイントです。javaコマンドでソースを実行するには、main()メソッドを定義したクラスを先頭にもってくる必要があります。ただし、main()メソッド自体はクラス内に定義されていれば、定義場所は問いません。
Java 11で新しくなった部分は特にありません。ただし、拡張forループにvarを使った書き方や、case文に定数を指定できるかどうかなどは押さえておくと良いそうです。
ガベージコレクションのタイミングを問う問題が「必ずと言ってよいほど出題される」そうです。
ここで押さえておくべきポイントはカプセル化ですが、カテゴリ10のみの内容で構成された出題はなく、必ず他のカテゴリの内容と組み合わされた問題が出題されるとのことです。
インタフェースによる抽象化です。Silverで押さえておきたいのは、次の2つの項目だそうです。
・ラムダ式の理解
ListインタフェースとArrayListクラスの例題を見てみましょう。removeIfメソッドは引数をラムダ式で指定します。

ラムダ式は、関数を引数としてメソッドに渡す方法ですが、Javaはオブジェクト指向言語なので、関数のままでは引数として渡せませんでした。そこでJava SE8から、関数をオブジェクトとして扱うための関数型インタフェースが提供されています。 たとえば、従来は関数を引数として受け渡したい場合は次のように記述していました。

ラムダ式を用いると、型推論があるため、次のように簡潔に記述できます。

実はラムダ式の扱いはGoldの試験ではかなり深い内容の出題があるものの、Silverでは出題パターンが限られているそうで、上述のremoveIf()メソッドのようなPredicateインタフェースを利用するパターンさえ覚えておけば大丈夫とのこと。
職場によってはラムダ式を使わないと決めている現場もあるようですが、今後リリースされていくライブラリも、ラムダ式を前提に提供されるため、覚えておくべきとのことでした。
パッケージとモジュールについて。クラスをまとめたものがパッケージで、パッケージをまとめたものがモジュールです。パッケージごとの公開/非公開の管理については、公開するパッケージの宣言と利用するモジュールの宣言について押さえておくと良いそうです。
本レポートでは全てをお伝えし切れませんでしたが、今回のイベントは、OCJPのSilver試験の出題傾向や押さえておくべきポイントが網羅されており、とても濃密な1時間半でした。
イベントにご参加いただいた方からは、「Javaの新機能を知ることができ、勉強になりました」という声や、「何が変更されたのかなどが分かりやすく、これから効率的に勉強にとりかかれそうでよかった」などの声をいただきました。
株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するこのようなイベントを、定期的に開催しています。皆さまのご参加をお待ちしております。