ココが変わった!Java SE 8認定資格(第2回)
Java SE 8対応 Oracle認定 Java資格
Oracle認定資格は、Java SE 8時代のプログラミングに関する体系的な知識をBronze・Silver・Goldに分けられた資格体系で証明する資格制度[1]です。
Java SE 8認定資格では、Silver資格とGold資格の2つの資格でJava SE 8時代のJavaプログラミングのスキルを証明します。Silver SE 8資格では、Javaによるオブジェクト指向プログラミングを理解できているかどうかが問われ、OCJP Gold SE 8資格では、Stream APIを含むコアAPIを適切に使用できるかどうかが問われます。
Bronze SE 7/8資格は言語初学者向けの認定資格となるため、開発業務に携わっているエンジニアの方はSilver SE 8資格試験からスタートすることができます。Gold SE 8資格は、Silver SE 8資格が前提資格となります。また、既存のプログラマ資格(Gold資格相当)取得者は移行試験に合格することでGold SE 8資格に移行することができます。
【 いまなら再受験が無料のキャンペーン実施中!⇒ 詳しくはコチラ 】
Silver資格はJava SE 8でどう変わる?
まずは、Silver SE 8試験の概要を確認しましょう。
■ Silver試験 | |
---|---|
試験番号 | 1Z0-808(日本語試験は1Z0-808-JPN) |
試験名 | Java SE 8 Programmer I |
認定資格名 | Oracle Certified Java Programmer, Silver SE 8 |
試験時間 | 150分[2] |
出題数 | 77問[2](選択式) |
合格ライン | 65%[2] |
前提条件 | 特になし |
次に、出題トピックを確認します。
Silver SE 8試験の出題トピック
■ Silver SE 8資格試験 - 1Z0-808 Java SE 8 Programmer I |
---|
出題トピック |
1. Javaの基本 |
2. Javaのデータ型の操作 |
3. 演算子と判定構造の使用 |
4. 配列の作成と使用 |
5. ループ構造の使用 |
6. メソッドとカプセル化の操作 |
7. 継承の操作 |
8. 例外の処理 |
9. Java APIの主要なクラスの操作 |
※太字部分はJava SE 8の新機能が含まれるトピック
【参考】Bronze SE 7/8資格試験 - 1Z0-814 Java SE 7/8 Bronze |
---|
出題トピック |
1. Java言語のプログラムの流れ |
2. データの宣言と使用 |
3. 演算子と分岐文 |
4. ループ文 |
5. オブジェクト指向コンセプト |
6. クラス定義とオブジェクトの生成、使用 |
7. 継承とポリモフィズム |
※Java SE 7/8 Bronze試験の出題トピックは、すべてJava SE 8 Programmer I試験の出題トピックに含まれていますが、特定のバージョンに依存する出題はありません。
Silver SE 8試験のココが変わった
Silver SE 8試験では、主にJava言語の基本文法やJavaでオブジェクト指向プログラミングを行うことができるかどうかが出題トピックになります。そのため、Silver SE 7試験と比較して大きな変更点はありません。引き続き、複数のトピックを組み合わせて出題が行われるため、各出題トピックをひと通り学習し、さらに以下の点を確認しておくと良いでしょう。
- コードを読んでコンパイル結果や実行結果を推測する
- 変数のスコープや配列とループ文の組み合わせ
- 参照型のキャストやオーバーライド時の振る舞い
- StringクラスとStringBuilderクラスの使い方
- 例外処理はtry-catch-finallyなどの基本構文を中心に確認(try-with-resourcesはGold試験で出題)
- インタフェースは、Java SE 7までの共通部分を中心に確認(デフォルトインタフェースなどはGold試験で出題)
実際には、出題トピックの組み合わせは次のように行われます。
[ 例題1 ]
次のコードの実行結果として正しいものをどれですか?
int sum = 0; int[][] arr = {{1, 5, 4}, {2, 7}, {8, 3}}; for (int[] x : arr) { for (int y : x) { sum +=y; } } System.out.print(sum + " ");
1. “30”が出力される
2. “10 9 11”が出力される
3. “1 6 10 12 19 27 30”が出力される
4. 実行時にArrayIndexOutOfBoundsExceptionがスローされる
【答え】 1
例題1では、二次元配列の使い方と拡張for文の使い方を組み合わせています。この例題は、単純なコードの実行結果を問う形式でしたが、二次元配列の宣言方法や拡張for文の書き方を問うコードの穴埋め形式で出題されることもありますので、コードの書き方も確認しておきましょう。
Java SE 8の新機能は?
Java SE 8の新機能は、出題トピック「9.Java APIの主要なクラスの操作」で出題されます。Silver SE 8試験ではDate and Time APIの基礎とラムダ式の書き方を中心に出題されますので、以下の点を確認しておきましょう。
- Date and Time APIは、新しいAPIを使って日付や時刻を表す方法と日付演算を行う方法
- ラムダ式は、省略表記を含めた記法
- Listインタフェースで使用可能になったremoveIfやreplaceAllメソッドでのラムダ式の使い方
また、試験問題の形式は例題と同じく選択式ですが、コードを読んで設問に答えるタイプの出題比率が高いです。そのため、試験時間は150分と比較的長めで、出題されるコードは比較的短いもののコンパイル結果や実行結果を推測する問題もありますので、実際にコードを書いて慣れておくことをオススメします。
Gold資格はJava SE 8でどう変わる?
まずは、Gold SE 8試験の概要を確認しましょう。
■ Gold試験 - 新規取得(OCJP Silver SE 8資格者向け) | |
---|---|
試験番号 | 1Z0-809(日本語試験は1Z0-809-JPN) |
試験名 | Java SE 8 Programmer II |
認定資格名 | Oracle Certified Java Programmer, Gold SE 8 |
試験時間 | 150分[2] |
出題数 | 85問[2](選択式) |
合格ライン | 65%[2] |
前提条件 | Oracle Certified Java Programmer, Silver SE 8資格の取得 |
■ Gold移行試験(1)- OCJP Gold SE 7資格者向け | |
---|---|
試験番号 | 1Z0-810(日本語試験は1Z0-810-JPN) |
試験名 | Upgrade Java SE 7 to Java SE 8 OCP Programmer |
認定資格名 | Oracle Certified Java Programmer, Gold SE 8 |
試験時間 | 150分[2] |
出題数 | 81問[2](選択式) |
合格ライン | 65%[2] |
移行条件 | Oracle Certified Java Programmer, Gold SE 7資格の取得 |
■ Gold移行試験(2)- Java SE 6以前のプログラマ資格者向け | |
---|---|
試験番号 | 1Z0-813(日本語試験は1Z0-813-JPN) |
試験名 | Upgrade to Java SE 8 OCP(Java SE 6 and all prior versions) |
認定資格名 | Oracle Certified Java Programmer, Gold SE 8 |
試験時間 | 130分[2] |
出題数 | 60問[2](選択式) |
合格ライン | 63%[2] |
移行条件 | Java SE 7よりも前のバージョンのSun認定Javaプログラマ(SJC-P)の任意のエディション |
次に、出題トピックを確認します。
Gold SE 8試験の出題トピック
■ Gold SE 8試験 - 1Z0-809 Java SE 8 Programmer Ⅱ |
---|
出題トピック |
1. Javaクラスの設計 |
2. 高度なクラス設計 |
3. ジェネリックスとコレクション |
4. ラムダ式を使用する事前定義済みの型の使用 |
5. 例外とアサーション |
6. Java SE 8のDate and Time APIを使用する |
7. Java I/Oの基礎 |
8. JavaファイルI/O(NIO.2) |
9. 並行処理 |
10. JDBCによるデータベースアプリケーションの作成 |
11. ローカライゼーション |
※太字部分はJava SE 8の新機能が含まれるトピック
■ Gold SE 8移行試験(1) - 1Z0-810 Upgrade Java SE 7 to Java SE 8 OCP Programmer |
---|
出題トピック |
1. ラムダ式 |
2. ラムダ式を使用する事前定義済みの型の使用 |
3. ラムダ式を使用したコレクションのフィルタリング |
4. ラムダ式を使用するコレクション操作 |
5. 並行ストリーム |
6. ラムダ・クックブック |
7. メソッドの強化 |
8. Java SEのDate and Time APIを使用する |
※太字部分はJava SE 8の新機能が含まれるトピック
■ Gold SE 8移行試験(2) - 1Z0-813 Upgrade to Java SE 8 OCP(Java SE 6 and all prior versions) |
---|
出題トピック |
1. Java言語仕様の拡張 |
2. 並行処理 |
3. ローカライゼーション |
4. Java File I/O(NIO.2) |
5. ラムダ式 |
6. ラムダ式を使用したコレクションの操作 |
7. Java Streams |
※太字部分はJava SE 8の新機能が含まれるトピック
Gold SE 8試験の出題のポイント
Gold SE 8試験では、コレクションやファイルI/O、スレッドプログラミング、JDBCなどJava SEのコアAPIが出題トピックになります。試験ごとに出題範囲が少しずつ異なりますが、Java SE 8では言語仕様に大きな変更が加えられているためJava SE 8に準拠したAPIを使ったプログラミング方法が問われている点が大きな特徴です。また、出題トピックに含まれる試験とそうでない試験がありますが、以下の点は前提知識として確認しておきましょう。
- 内部クラス(無名クラスを含む)の使い方
- デザインパターン(FactoryパターンやSingletonパターン)の利点/考慮点と典型的なコード例
- Java SE 7での言語仕様への変更点 - Project Coin(JSR 334)
Gold SE 8試験出題のココが変わった
Gold試験はSilver SE 8資格者を対象としているため出題トピックの数が多く、Java SE 8の新機能に関する出題比率が高くなります。この点はGold SE 7試験から大きく変更された点と言えます。
そのため、ファイルI/Oやスレッドプログラミングのトピックでは、基礎となるjava.ioパッケージやThreadクラスの使い方に加えて、Stream APIに対応したNIO.2や並列ストリームまで幅広く理解できているかが問われます。
Gold移行試験は、既存のプログラマ資格者を対象にしているためJava SE 8の新機能に関する出題トピックがほとんどです。Gold SE 7資格者向けの移行試験(1Z0-810)に至っては、ラムダ式とStream API、およびDate and Time APIだけが出題トピックですし、Java SE 6以前のプログラマ資格者向けの移行試験(1Z0-813)も、Java SE 7とJava SE 8の新機能が出題トピックです。
どの試験を受験される方もラムダ式やStream APIを使用した新しいプログラミング・スタイルを理解することがカギとなりますので、Java SE 8に対応した各APIの使い方をしっかり確認することをオススメします。
Java SE 8の新機能はどう出題される?
前述の通り、Gold SE 8試験ではラムダ式とStream APIなどJava SE 8の新機能に関する出題が多くなります。
ラムダ式の書き方やStream APIの使ったプログラミング方法はかなり細かく問われますが、Date and Time APIについては、それほど深くは問われません。試験の合格のためにAPIをすべて丸暗記する必要はありませんが、主要なクラスとメソッドはAPIドキュメントを参照しておくことがポイントです。
Java SE 8の新機能は、以下の点を中心に確認しましょう。
- ラムダ式
- ラムダ式の書き方
- ラムダ式の記法とメソッド参照
- 関数型インタフェースとは
- デフォルトメソッドとstaticメソッド
- 汎用的な関数型インタフェース
- java.util.functionパッケージで提供されるインタフェース
- コレクションAPIで使用できる関数型インタフェースとラムダ式
- ラムダ式の書き方
- Stream API
- ストリームとは?
- ストリームのつくり方
- 繰り返し処理の実装方法
- for文との比較
- map / filterメソッドなどの中間操作の実装方法
- reduceやcorrectメソッドなどの終端操作の実装方法
- 並列ストリーム
- CollectorsクラスとOptionalクラス
- ストリームとは?
- Date and Time API
- 日付や時刻を表すクラスの使い方
- インスタンス化の方法と日付の演算方法
- DateTimeFormatterなど日付フォーマットの指定方法
- タイムゾーンと時差を扱うクラスの使い方
- 夏時間の扱い方
- 日付や時刻を表すクラスの使い方
また、Gold SE 8試験でも、次のような形で複数のトピックを組み合わせて出題が行われています。
[ 例題2 ]
次のコードは、scoresに含まれる値の合計を計算することを目的としています。(A)の部分に挿入するコードとして正しいものはどれですか?
List<List<Integer>> scores = Arrays.asList(Arrays.asList(10, 9), Arrays.asList(8, 9), Arrays.asList(9, 10)); BinaryOperator<Integer> bo = (a, b) -> a + b; int totalScore = [ (A) ] System.out.println("Total Score = " + totalScore);
1. scores.stream().flatMap(score -> score.stream()).map(d -> d).reduce(bo).orElse(0);
2. scores.stream().flatMap(d -> d).reduce(bo);
3. scores.stream().map(score -> scores.get(score)).reduce(bo);
4. scores.stream().map(bo).sum();
【答え】1
例題2では、Stream APIの中間操作と終端操作の実装方法を組み合わせています。処理の目的に合致するメソッドの選択と各メソッドの引数となる関数型インタフェースのインスタンス化方法(ラムダ式)が問われています。例題のコードで考えると、Optionalクラス(reduceメソッドの戻り値)の使い方やBinaryOperatorクラスとラムダ式の書き方を問うような出題も考えられますので、出題トピックはくまなく確認しましょう。
もう一つ例題を見てみましょう。NIO.2などのコアAPIとStream APIを使った問題です。
[ 例題3 ]
次のコードの実行結果を正しく説明しているものはどれですか?
try (Stream<String> content = Files.lines(Paths.get("/tmp/words.txt"))) { List<String> output = content.flatMap(line -> Stream.of(line.split(" "))) .filter(word -> word.length() > 0).map(String::toLowerCase) .distinct().sorted((x, y) -> x.length() - y.length()).collect(Collectors.toList()); System.out.println(output); } catch (IOException e) { System.out.println("Exception :” + e.getMessage()); }
1. ファイルに含まれる単語をすべて小文字に変換して文字列の長さが短い順に重複なしでソートした状態で出力される
2. ファイルに含まれる単語をすべて小文字に変換して文字列の長さが長い順に重複ありでソートした状態で出力される
3. ファイルの各行に含まれるスペースの後ろの文字を小文字に変換し、アルファベット順にソートした状態で出力される
4. ファイルの各行の先頭の文字を小文字に変換し、アルファベット順にソートした状態で出力される
【答え】1
例題3のコードは次のような処理を行っています。
- /tmp/words.txtを一行ずつ読み込んだストリームを取得する(1行目)
- ストリームの各要素(行)からスペースで区切った要素(単語)を持つストリームを取得する(2行目)
- 長さが1文字以上の要素を取得し、文字を小文字に変換する(3行目)
- 要素の重複を除外し、文字列の長さが長い順にソートしたストリームのデータをListで返す(4行目)
(2~4行目の中間処理を行っている各メソッドの戻り値はStreamオブジェクトです。)
Stream APIの各メソッドの役割や指定する関数型インタフェースの理解や、ラムダ式を使った記述方法など、複数の出題トピックが含んでいます。また、4行目のsortedメソッドの引数に指定できるjava.util.Comparatorも関数型インタフェースなのでラムダ式を使うことができるという点もGold SE 8試験では押さえておきたいポイントです。
さらに、Java SE 7の新機能である1行目のtry-with-resources文もGold試験(1Z0-809)やJava SE 6以前のプログラマ資格者向けのGold SE 8移行試験(1Z0-813)では出題の対象になりますので、記述方法を確認しておきましょう。
Gold SE 8試験は、Silver SE 8試験と同じくコードを読んで設問に答えるタイプの出題比率が高いと言えます。加えて、各試験とも1問に掛けられる時間は2分程度と長くはとれない状況で、コードの内容を把握して適切な解答を導き出すことが求められています。そのため、実際にコードを書いて新しいプログラミング・スタイルに慣れるとともに、どの関数型インタフェースのメソッドが使われているかなどについてAPIドキュメントもチェックすることをオススメします。
まとめ
それでは今回のまとめをしましょう。
- Silver SE 8試験はJavaプログラミングの基本をしっかり確認しましょう!
→Javaを使ったオブジェクト指向プログラミングが主な出題トピックです。Java SE 8の新機能よりも基礎固めを優先して学習を進めることをオススメします。 - Gold SE 8試験はラムダ式やStream API、Date and Time APIなどのJava SE 8試験を重点的に確認しましょう!
→Gold SE 8試験では、コア APIを使ったプログラミングが主な出題トピックのため、APIの使い方を幅広く理解している必要があります。特にJava SE 8の新機能は出題比率が高くなっているので重点的に確認しましょう。
Java SE 8対応Oracle認定Java資格は、「Java SE 8をきちんと使う」ための“知識”を証明する客観的な指標として、Java SE 8を使ったプログラミング・トピックを体系的に網羅しています。
各試験の出題のポイントを整理してJava SE 8対応Oracle認定Java資格の取得にお役立てください。
Oracle Universityでは、2016年1月22日~2016年5月31日の期間中にOracle認定Java資格試験の受験お申込み時に プロモーションコード : RETAKE16JP を入力すると、万が一合格できなかった場合に、無料で同一試験を受験できるキャンペーンを実施しています。資格試験の受験を検討している方は、この機会をご活用ください。
[1] Oracle認定Java資格では、Java SEのバージョンごとに認定資格を提供しています。現在、取得可能な認定資格の一覧は、Java SE認定資格を参照ください。
[2] 2016年3月現在。認定資格試験の仕様(試験時間、出題数、合格ライン)は、定期的に変更されるため、受験前に必ずOracle UniversityのWebサイトを参照ください。