はじめに
4月から入社3年目になるエンジニアです。
Javaに関する知識は業務でJavaのWebアプリをServletで作成したくらいです。ほぼ初心者です。
今回この試験の学習を通してオブジェクト指向言語またはJava特有の言語仕様の知識を深めることができたと感じています。
自分のように会社から何かベンダー資格を取れと言われている方や、エンジニアとしてのスキルアップとして何を取ろうか迷っているという方におすすめできる資格だと思います。
Oracle Certified Java Programmer, Silver SE 8とは?
公式からの抜粋です。
Javaアプリケーション開発に必要とされる基本的なプログラミング知識を有し、上級者の指導のもとで開発作業を行うことができる開発初心者向け資格です。日常的なプログラミング・スキルだけでなく、さまざまなプロジェクトで発生する状況への対応能力も評価することを目的としています。
学習時間
試験1か月前から平日は1日あたり30分、休日は2~3時間くらいしました。
学習方法
徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応(通称黒本)
1冊のみです。これだけで十分だと思います。
実際、巻末の模擬試験問題から(ほとんど)同じ問題が何問も出題されました。
1~9章までの問題を解いて完璧にしてから、巻末の2回分の模擬試験を解きました。
模擬試験で間違った問題の解説を読み、それでも不安なら1~9章までの該当箇所の問題と解説を読むという流れで当日までに本書を3周しました。
受験までの流れ
この方の記事を参考にしました。他のベンダー資格は受けたことないので比較できませんが、かなりめんどくさかったです。
試験当日
自分は13:30開始にしました。それぞれベストなパフォーマンスが発揮できそうな時間に試験予約してください。少し早めに試験会場に入り、受付手続きを済ませてから試験開始です。
テストセンターのPCで77問解き、見直しをしてもなお1時間(試験時間は2時間半)くらい余しましたが、終了して会場を出ました。
会場から駅に向かって歩いている途中にOracleから合否メールが届きました。早すぎ。
結果は正答率78%で合格でした(合格ラインは65%)。
感想
満点を取る気で臨んだのですが、黒本とは毛色が違う問題や、拾いきれなかった問題、テストセンターの空気に飲まれてかなり落としてしまいました。
個人的に試験勉強していて大切だと思った箇所
-
Javaでboolは使用できない(C#等と混同しない)。
-
インターフェース内のメソッド式は暗黙的にコンパイラが書き換える。そのため、サブクラスでの対象メソッドの実装のアクセス修飾子はpublicのみ許容。
void test();
// ↑コンパイル前 ↓コンパイル後
public abstract void test();
- コンストラクタ内の処理は明示しなければ、暗黙的に先頭でスーパークラスのコンストラクタを引数なしで呼び出す。
public class Test extends Sample{
public Test(){
System.out.println("test");
}
}
/* ↑コンパイル前 ↓コンパイル後 */
public class Test extends Sample{
public Test(){
// Sampleクラスのデフォルトコンストラクタを呼び出す
super();
System.out.println("test");
}
}
- コンストラクタで明示的にスーパークラスのコンストラクタを呼び出す場合、必ず先頭で呼び出さなければならない。
public Test(){
System.out.println("test");
super("A"); // コンパイルエラー
}
- アクセス修飾子は厳しい順に private < なし < protected < public
アクセス修飾子 | アクセス権限 |
---|---|
private | 同じクラス内のみ許容 |
なし | 同じパッケージ内のみ許容 |
protected | 同じパッケージ内+サブクラスからのみ許容 |
public | 全て許容 |
- オーバーライドする際は、シグニチャを変更せずにスーパークラスのメソッド宣言と同じか緩いアクセス修飾子で宣言する必要がある。
public class Sample {
protected void test(String name) {
System.out.println(name);
}
}
public class Test extends Sample {
// protected,publicは許容。修飾子なし,priveteはコンパイルエラー
public void test(String name) {
super.test(name);
System.out.println(name);
}
}
- スーパークラスのコンストラクタ呼び出し後に、オーバーロードしたコンストラクタ呼び出しはできない。
さいごに
ここまで読んでいただきありがとうございました。
何か間違っている箇所等ございましたら、容赦なく指摘していただけると幸いです。