せんじつ会社命令でJava SE8 Silverを受験し、無事合格してきました。
得点率が87%だったので、全77問中11問くらい間違えた感じです。
けっこう間違えてますね・・・。
1年前にSE7 Silverを取得していたこともあって、
試験勉強としては前日に志賀澄人先生の『徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応』(黒本)を買って、
第10章と第11章の「総仕上げ問題」 だけ解いて、あとは全体をパラパラ眺めました。
本番ではこの「総仕上げ問題」とかなり似た問題が出たので、
やっておいてよかったと思いました。
試験範囲にSE8の新しいAPIや構文、
「LocalDate/LocalDateTimeのAPI」とか「ラムダ」とかが追加されましたが、
実際の出題率は、LocalDate系が3問、ラムダは1問、でした。
LocalDate/LocalDateTimeは、
- DateTimeFormatter
- 実行時例外
- オブジェクトのImmutable性
の理解について問う問題でした。
このうちひっかかりやすいのはImmutable性の問題と思います。
import java.time.LocalDate; public class Main { public static void main(String[] args) { LocalDate date = LocalDate.of(2015, 2, 1); date.plusDays(30); date.plusMonths(1); System.out.println(date); } // A. 2015-02-01が出力される // B. 2015-03-03が出力される // C. 2015-04-03が出力される // D. コンパイルエラー // E. 実行時エラー }
答えはAの「2015-02-01が出力される」です。
7行目や8行目で
date = date.plusDays(30); date = date.plusMonths(1);
というように、それぞれの結果返ってきたオブジェクトを、
変数dateに設定しなおしていれば回答はCですが、
そうはしていないので、2015年2月1日の情報をもったLocaldateオブジェクトの内容がそのまま出力されます。
ラムダの問題は確かこんな感じだったと思います。
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String[] array = { "Hi", "George", "Batson", "Weaver" }; List<String> list = new ArrayList<>(Arrays.asList(array)); if (list.removeIf((String s) -> {return s.length() <= 2;})) { System.out.println("Hi removed"); } } // A. Hi removedが出力される // B. コンパイルに成功するが何も出力されない // C. コンパイルエラー // D. 実行時エラー }
答えはAの「Hi removedが出力」です。
11行目の「(String s) -> {return s.length() <= 2;})」を、
removeIfメソッドの引数として渡しています。
removeIfメソッドは引数にPredicate型のラムダ式を受け取り、
実装された条件式がtrueを戻せばコレクションの要素を削除します。
さらにremoveIfメソッドは削除処理を実行したとき、tureを戻り値でかえしますので、
実行時には「Hi removedが出力」されます。
ラムダ式に関する丁寧な解説も黒本に載っているので、
SE7を持っている人は差分だけ勉強、
初めてSilverを受験する人でも黒本をしっかりやれば、合格できると思います。