派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

【イベントレポート】Javaのスキルアップをしよう~Java SE 11 Silver認定試験ポイント解説~

この記事では、2020年2月14日に開催したイベント「Javaのスキルアップをしよう~Java SE 11 Silver認定試験ポイント解説~」をレポートします。

今回のイベントでは、書籍『オラクル認定資格教科書 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のカテゴリに分かれていて、次のようになっています。

f:id:itstaffing:20200428140055j:plain
 
f:id:itstaffing:20200428140059j:plain
▲試験内容は上記の12項目に分かれている

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

f:id:itstaffing:20200428140017j:plain
▲出題傾向は、オブジェクト指向関連で4割。Java SE8以降の内容も出やすく、上記の4項目で2割ぐらい。残り2割がループ文や分岐文など、従来の機能とのこと。これで8割程度は押さえられるそう

出題傾向

では、1~12までの全カテゴリについて、どんなところが問われやすいのでしょうか?坂本さんが、具体的にポイントを解説してくださいました。

・カテゴリ1
全て文章問題。コードを読んで答えるものは出ないそうです。このカテゴリは、出ても2~3問とのこと。
 
・カテゴリ2
Local-Variable Type Interfaceのvarの取り扱いを押さえておくと良いそうです。Javaはこれまで「型はきっちり宣言しましょう」という“型に厳密な言語”のイメージだったのですが、Java 8からは型推論(言わなくても推測できる)が行われるようになり、Java10からはローカル変数をvarで定義すれば右辺を参考に型を識別します。

このvarがコンパイルエラーになるパターンは、たとえばローカル変数でない、手がかりがなくて推論できないといったパターン。これらをきちんと押さえておくことが大切だそうです。

f:id:itstaffing:20200428140022j:plain
▲数値の中に含まれるアンダースコア(_)は、JavaSE7から登場した書式で、桁数を識別しやすくするためのもの。カンマの代わりに可読性を向上させる役割がある。先頭や末尾には付けられない

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

f:id:itstaffing:20200428140024j:plain
▲StringオブジェクトとStringBuilderオブジェクトの違い。特にequals()メソッドによる文字列比較はよく出題されるとのこと

配列では、ひっかけ問題としてconcat()メソッドを使ったものが出題されることがあるそうです。

 String s1 = "Hello";
 s1.concat("Bye"); //新規オブジェクトが生成される
 System.out.println(s1);

文字列を連結するconcat()メソッドは使用時に「連結された文字列」が新規オブジェクトとして生成されるため、連結結果を受け取る変数を左辺に指定しなければなりません。上記プログラムでは、

 s1 = s1.concat("Bye");

としなければ、意図した結果を得られません。

・カテゴリ3
配列に関する出題ですが、初期化に関するものは押さえておくと良いそうです。

f:id:itstaffing:20200428140028j:plain
▲boolean型の配列で、要素を定義しない場合、初期値はfalseになる

また、二次元配列の定義や初期化も数問は出るそうなので、事前にしっかりと確認しておきましょう。

・カテゴリ4
このカテゴリ以降はオブジェクト指向関連の問題が頻出するため、いかにオブジェクト指向で点を稼ぐのかが、ポイントになるそうです。

f:id:itstaffing:20200428140032j:plain
▲メソッドとコンストラクタについては、よく出題されるとのこと。コンパイラは戻り値の型宣言があるかどうかで判断しており、戻り値の型宣言があればメソッド、無ければコンストラクタとして認識する

・カテゴリ5
継承についての王道的な問題が出るそうです。

f:id:itstaffing:20200428140034j:plain
▲カテゴリ5で押さえておくべきポイント

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

f:id:itstaffing:20200428140103j:plain
▲継承に利用の再実装に関する王道を行く問題の例。どのように継承しているかを理解していないと間違えてしまう

また、参照範囲を変更させて、キャスト演算子が必要かどうかを判断させるという問題も、よく出題されるそうです。

・カテゴリ6
さまざまな例外処理について問う問題が出されます。たとえば、throwsキーワード付きのメソッドをオーバーライドさせるには、どうすればいいかを問う次のような問題が出題されます。

f:id:itstaffing:20200428140107j:plain
▲TestクラスはExceptionクラスをthrowsする。func()メソッドをオーバーライドしたとき、何が書けるのか?

 ・throws自体を省略する
 ・スーパークラスと同じ例外クラスをthrowsキーワードで定義する
 ・サブクラス例外を定義する

上記3点が、このときコードとして通るケースだそうです。

・カテゴリ7
Java 11からの仕様である、javaコマンドでソースファイルを実行できるようになったところがポイントです。javaコマンドでソースを実行するには、main()メソッドを定義したクラスを先頭にもってくる必要があります。ただし、main()メソッド自体はクラス内に定義されていれば、定義場所は問いません。

・カテゴリ8
Java 11で新しくなった部分は特にありません。ただし、拡張forループにvarを使った書き方や、case文に定数を指定できるかどうかなどは押さえておくと良いそうです。

・カテゴリ9
ガベージコレクションのタイミングを問う問題が「必ずと言ってよいほど出題される」そうです。

・カテゴリ10
ここで押さえておくべきポイントはカプセル化ですが、カテゴリ10のみの内容で構成された出題はなく、必ず他のカテゴリの内容と組み合わされた問題が出題されるとのことです。

・カテゴリ11
インタフェースによる抽象化です。Silverで押さえておきたいのは、次の2つの項目だそうです。

 ・ListインタフェースとArrayListクラスの使用
 ・ラムダ式の理解

ListインタフェースとArrayListクラスの例題を見てみましょう。removeIfメソッドは引数をラムダ式で指定します。

f:id:itstaffing:20200428140112j:plain
▲6行目のremoveIfの引数「//insert code here」に何が入るか?という問題。正解はBのt -> t.contains(“o”)となる

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

f:id:itstaffing:20200428140115j:plain
▲従来のインタフェースのオブジェクトの生成。もちろん現在もこの記述は可能

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

f:id:itstaffing:20200428140119j:plain
▲ラムダ式によるインタフェースのオブジェクト生成。敢えて記述しなくても分かる部分は省略できる

実はラムダ式の扱いはGoldの試験ではかなり深い内容の出題があるものの、Silverでは出題パターンが限られているそうで、上述のremoveIf()メソッドのようなPredicateインタフェースを利用するパターンさえ覚えておけば大丈夫とのこと。

職場によってはラムダ式を使わないと決めている現場もあるようですが、今後リリースされていくライブラリも、ラムダ式を前提に提供されるため、覚えておくべきとのことでした。

・カテゴリ12
パッケージとモジュールについて。クラスをまとめたものがパッケージで、パッケージをまとめたものがモジュールです。パッケージごとの公開/非公開の管理については、公開するパッケージの宣言と利用するモジュールの宣言について押さえておくと良いそうです。

本レポートでは全てをお伝えし切れませんでしたが、今回のイベントは、OCJPのSilver試験の出題傾向や押さえておくべきポイントが網羅されており、とても濃密な1時間半でした。

イベントにご参加いただいた方からは、「Javaの新機能を知ることができ、勉強になりました」という声や、「何が変更されたのかなどが分かりやすく、これから効率的に勉強にとりかかれそうでよかった」などの声をいただきました。

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するこのようなイベントを、定期的に開催しています。皆さまのご参加をお待ちしております。