合格体験記:未経験44歳無職ヒキニートからのOracle Certified Java Programmer, Silver SE 8(Bronzeおまけ付き)Oracle認定シルバー 当日の持ち物など

--もくじ--

 

はじめに

2017年3月に会社を解雇され、以来、主にwebの転職サイトから求人応募を繰り返し、この1年で250社以上からお祈りされ、面接に行けたのはたったの2件。

もちろんその2件とも不採用という惨憺たる結果を残したワタクシです。

大丈夫です、生きてます。みなさん、こんにちわ。

 

あー、こりゃもう手に職つけないとなんともならんわい。

求人の多いエンジニアならなんとかなるかな?と考え、Oracle Certified Java Programmer, Silver SE 8取得目指して頑張ってきました。

結果、先日無事合格いたしましたので、その体験記を書かせていただきたい次第です。

 

自分でExcelVBAを組んでたことがあったので、変数やら分岐やらぐらいのことは知っていたのですが、Javaはまったくの未経験です。

なぜJavaを選んだのかというと、一番案件が多いらしく、なんとか食うには困らんだろうと考えたからです。

もちろん小生はエンジニアではありません。

むしろニートです。

っていうかニートです。

ズブの素人と言っても差し支えないでしょう。

 

サマリー

勉強期間:約2ヶ月

一日の勉強時間:2~4時間

使用したテキスト

  • すっきりわかるJava入門
  • すっきりわかるJava入門 実践編
  • 徹底攻略 Java SE 7/8 Bronze 問題集(いわゆる黒本):2回転
  • 徹底攻略 Java SE 7/8 Silver 問題集(いわゆる黒本):4回転

試験の難易度:黒本を3回転すれば大体受かります(詳細後述)

 

すっきりわかるJava入門 

スッキリわかるJava入門 第2版 (スッキリシリーズ)

スッキリわかるJava入門 第2版 (スッキリシリーズ)

 

 

まずはJavaの基本は抑えておきたいところです。

Javaの入門書としてはこちらが一番分かりやすいとの評判なので、この本から着手しました。

読んでいるうちはなんとなく分かったような気がするのですが、本を閉じると、う~ん、分かったような分からないような感じでした。

それでOKです。ザクザク読み進めましょう。

結局プログラミングって、実際手を動かしてみないとわからないものだと思うので、とにかくザクザク読み進めたら良いと思います。

できればEclipseを導入して、練習問題は実際にコーディングしてみると良いです。

練習問題はなかなか素人には難しく、一回読んだぐらいでは解けないと思いますが、回答をまるまるコピーしてみるだけでもだいぶ違うと思います。

リンク:Eclipse wiki

リンク:Eclipseのインストール

 

徹底攻略 Java SE 7/8 Bronze 問題集(黒本)

徹底攻略 Java SE 7/8 Bronze 問題集[1Z0-814]対応

徹底攻略 Java SE 7/8 Bronze 問題集[1Z0-814]対応

 

 

小生当初は、人手不足のIT業界、Bronze取っておけばなんとかなるだろう、ぐらいにたかをくくっていました。

ですがBrnzeって履歴書上はほとんど意味がないらしいですw

新卒でIT系の企業に就職される方が、入社前研修とかに、会社から取得を命じられるケースが多いのだとかなんとか。

 

ただ、まったくの未経験からJavaを始めようとするのならば、こちらの問題集を一通りやっておくことをおすすめします。

 

小生の卑近な例で恐縮ですが、こんな感じでした。

すっきりわかるJava入門だけでは理解しきれてない部分が、問題集を解くことによって補われていきます。

やっておいて良かったな、と小生は思います。

小生の感覚で言うと、Silverの問題の3割くらいはBrnzeと重複しているので、基礎を押さえるという意味でもあたっておくと良いと思います。

 

なお、BrnzeではJavaの言語仕様に関する問題が多めに出ます。

例えばこんな感じ。

問:ポリモーフィズムのメリットに関する説明として、正しいものを選びなさい(1つ選択)

A. 変更されたクラスのサブクラスに変更の影響が及ばない
B. 変更されたクラスのスーパークラスに変更の影響が及ばない
C. インタフェースの変更が実現クラスに及ばない
D. 変更されたクラスを使うクラスに、変更の影響が及ばない

→回答 D

 

いささか理不尽な問題もあるのですが(小生はそう感じました)、これはもう仕様なので、このまま丸暗記するしかないです。

 

なお、言語仕様の問題はSilverでも出題されるのですが、Bronzeと重複する問題は少ないので、Bronzeを受験されない方であれば、無理に暗記する必要はないと思います。

 

すっきりわかるJava入門 実践編

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

 

 

Brnzeの問題集をこなしながら、並行して読み進めていきました。

小生はひととおり最後まで読みましたが、Silverの試験対策としては、配列とラムダ式だけ知っておけば良いので、そこだけひろい読みすればOKです。

 

もちろん名著の誉れ高い入門書なので、あとでしっかりと読み直せばベターです。

小生も今、試験後に読み直しているのですが、Silverの問題集をこなした後のほうがいろいろと理解しやすいです。

 

徹底攻略 Java SE 7/8 Silver 問題集(黒本)

徹底攻略 Java SE 7 Bronze問題集[1Z0-802]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略 Java SE 7 Bronze問題集[1Z0-802]対応 (ITプロ/ITエンジニアのための徹底攻略)

 

 

いよいよ本丸です。

小生はこれを4回転しました。

 

○1日目

1章を解く。

最初は全然解けません。意味がピーマンです。

それでも構わないので、解説をしっかり読んでおきましょう。

解説を読んでも意味がピーマンかもしれませんが、とりあえず一回転目はそれでOKです。

○2日目

1章を再度解く。間違った問題にチェックを付ける。

2章を解く。

○3日目

1章のチェックを付けた問題を解く。

2章を再度解く。間違った問題にチェックを付ける。

3章を解く。

○4日目

2章のチェックを付けた問題を解く。

3章を再度解く。間違った問題にチェックを付ける。

4章を解く。

○5日目以降上記ループ。

最後の模擬試験は量が多いので、1/3を一日分として進めました。

 

○2回転目

1回転目を繰り返す。

 

○3回転目

ようやっと内容が理解できるようになってきました。

3回転目ぐらいになると、問題と回答を覚えてしまいます。

それで練習になるのかいな?とも思ったのですが、実はそれが良いんです。

本番の試験では、7割ぐらいは黒本と同じ問題パータン+回答パターンが出題されます。

問題を見た時点で、あ、あのパターンだな、と分かります。

そうすると回答のパターンも覚えているので、簡単に解くことができます。

実はこれがOracle Certified Java Programmer, Silver SE 8合格の極意で、黒本の意義であるとすら言えます。

がんばってどしどし問題+回答のパターンを覚えてしまいましょう。

 

なお、3回転目になると、問題を解くスピードが格段に上がっているのと、解説も理解できているので、こなしていくのに時間がかからなくなります。

小生はこの段階で、1日2~3章分をまとめてこなしていきました。

 

○4回転目

大体3回転すれば合格ラインの力がつくかなぁ、と思うのですが、試験日程の都合でもう一回転する日程的余裕があったので、4回転目をこなしました。

4回転目はチェックが付いている問題だけを解きました。

4回転目で理解できた問題もそこそこあって、自分ではやって良かったかなぁ、と思っています。

 

大体Oracle Certified Java の試験って、BronzeもSilverもひっかけ問題が多く、同じ問題で何度も同じ間違いを繰り返すことが多いみたいです。

ひっかかりやすい問題は、しかっかりとそのパターンを覚えて、回答理由も理解しておくようにすると良いと思います。

 

問題の難易度からすると、本番のテストは黒本相当だと思います。

ただ、黒本ではいささか長めのソースコードによる問題が結構あったのですが、本番の試験ではそこまで長いコードでの問題は出題されませんでした。

 

 

試験申し込み

こちらがOracleの公式サイトになるのですが

リンク:Java SE8 認定資格

こちらの記載がよくわからないのですね。

どのテストを受ければよいのか、試験後に認定手続きがいるのか、なかなか不明です。

 

なんか試験名がいっぱい載ってる(´Д`)めう

f:id:chocolate0521:20180331110046j:plain

なので、小生Oracle社に問い合わせてみました。

問い合わせた内容がこちらです。

Oracle Certified Java Programmer, Silver SE 8 認定資格についてですが、以下のoracle社の案内に、
http://www.oracle.com/jp/education/certification/jse8-2489021-ja.ht...

””Oracle Certified Java Programmer, Silver SE 8 認定資格を取得するためには、Java SE
8 Programmer I (1Z0-808-JPN) 試験の合格が必要です(認定パス)。””
と、説明があります。

これが何を意味しているのか分からないのですが。
Oracle Certified Java Programmer, Silver SE 8 と
Java SE 8 Programmer I (1Z0-808-JPN) の2つの試験を受けないと、資格取得にならないのでしょうか?

添付ファイルのように、認定資格(の試験)と、認定資格試験、との2つの用語があり、混乱しております。

試験番号も
Oracle Certified Java Programmer, Silver SE 8
→→:Java SE 7 Programmer I 1Z0-803
Java SE 8 Programmer I (1Z0-808-JPN)
→→同上
と違うため、よく意味が分かりません。

 

ご説明いただきたく、よろしくお願い申し上げます。

 で、結論から申し上げますと、

1Z0-808-JPN - Java SE 8 Programmer I - 日本語 (JPN)

を受験すれば、それだけでOKです。

資格認定は、Oracleの方でやってくれるので、特に手続き等はいりません。

 

Oracleの試験はpesrsonという会社が外注して、試験の実施を受け持っています。

試験の申込みもpersonから一度にできるので、こちらからの申込みが簡単で良いと思います。

リンク:pearson

リンク:pearson Oracle試験申し込み

 

試験は1Z0-808(英語)と1Z0-808-JPN(日本語)がありますので、まぁ、通常は1Z0-808-JPN(日本語)を選択して、受験しましょう。

f:id:chocolate0521:20180331111330j:plain

なお、試験申込時にpearsonでOracle試験用のアカウントの作成が必要です。

また、受験前にオラクル認定システム(CertView)の登録が必要です。

オラクル認定システム(CertView)の登録については、pearsonから受験の申込みを行うと、案内がメールで送られてきますので、それに従って登録すればOKです。

 

Bronzeはオンライン試験が可能ですが、Silverは会場での受験が必要になります。

試験は全国の主要都市で行われているようなので、お近くの試験会場を選択すれば良いと思います。この点は大変便利でした。

 

持ち物と試験当日

当日の持ち物は、本人確認書類を2種類持参するだけです。

小生は運転免許証と健康保険証を提示しました。

コンピューティングテスト(PCに問題が表示され、回答をクリックして選択)なので、筆記用具等は必要ありません。

試験時にはメモ用紙とペン(グンマーの高崎ではA4のホワイトボードとペンでした)が配布されますので、分岐の問題等はそれを使って解くことができます。

 

全77問、150分の長丁場なので、事前にトイレは済ませておきましょうw

 

問題自体は前述のとおり、黒本と同じパターンの問題が7割、初見の問題が3割ぐらいです。

黒本と同じパターンの問題はサクサク解けるので、初見の問題にじっくり時間を使うことができます。

また、試験にはマーク機能があり、問題にマークしておけばあとでマークした問題だけを解くことができます。

すごく時間がかかりそう、あるいはお手上げっぽい問題はさっさとマークして、次の問題に進めましょう。

 

小生は残り時間35分ぐらいを残して回答が終わりました。

このペースだったら、初見の問題にもっとじっくり時間をかけても良かったかなぁ、と個人的には思いました。

マークしておいた問題が2問あったので、まずはそちらに取り掛かり、残った時間を全体の見直しに使いました。

時間内に全問見直すことができなかったので、初見の問題にじっくり時間を使うほうが正解だったかな?という気がします。

 

とにかく長丁場なので、試験終了後はぐったり疲れました。

これから受験される皆さん、頑張ってください(ง •̀_•́)ง

 

試験終了後、15分ぐらいでメールが届いて、合否の確認ができました。

正答率85%で合格でしたよ!(正答率65%以上が合格)

f:id:chocolate0521:20180331112932j:plain

合格したらもらえるバッジ

いやー、疲れましたが、2ヶ月間頑張って良かったです。

これでなんか仕事が見つかると良いなぁ(´Д`)めう

みなさんもぜひ頑張ってください。

www.yutanyan.com

 

 

 

受験対策メモ Silver

こちらに黒本を進めていた時に、残していたメモを残しておきます。

メモ帳に書いたものをそのまま貼り付けておきますので、間違い等あったらご指摘いただけると幸甚です。

 

◎第1章
○import文で*を使った時にインポートできるのは、指定したパッケージに属するクラスに限る。サブパッケージに属するクラスはインポートされない。
○無名のパッケージに属するクラスは、無名のパッケージ以外からアクセスできない。(publicなクラスでもできない)
○staticインポートでは、メソッド名に()や引数を付けない。import static ex6.Sample.print;


◎第2章
○識別子
 ・予約後は使えない
 ・使える記号はアンダースコア_と通貨記号$のみ
 ・数字から初めてはいけない(2文字め以降)
○呼び出しのあとに()無し→フィールドへのアクセス。()あり→メソッドへのアクセス。
○同じクラス内の呼び出し→メソッド名()。違うクラスの呼び出し→変数(作り出したインスタンス名).メソッド()。
○staticメソッドの呼び出し→クラス名.メソッド()。


◎第3章
○同一性→複数のインスタンスが同じインスタンスを参照していること。==で判定。
○同値性→複数のインスタンスが同じ値を保持していること。equalsで判定
○if-else文は、elseとifの間で改行することはできない。改行すると、if-else if文はif-else文として扱われ、2つ目のif文はelse文の中にある分岐として解釈される。
○switch文ではboolean、double、floatは使われない。String、Integer、enumは使える。
○switch文のcase値(分岐)では変数を指定できない。finalで宣言された変数は指定できる(定数)。リテラルは指定できる。条件式に変数を指定することはできる。
○equalsメソッドは、nullが引き渡された時は常にfalseを返す。問11
○コンスタントプール:コードの中で複数回使われる同じ文字リテラルには、同じインスタンスへの参照が使い回される。(String注意)
○明示的にnewでインスタンスを作った場合、同じ文字列リテラルでも違うインスタンスを参照する。


◎第4章
○配列は、配列インスタンスを参照している。値が入っているわけではない。
○配列インスタンスの生成には、必ず扱える要素数を指定しなければならない。
int array = new int コンパイルエラー
○配列のインスタンスを生成する時、newと初期演算子の両方を使った時、の中に要素数を指定してはいけない
int
array = new int {2,3}→○
int
array = new int [2]{2,3}→コンパイルエラー
○すべての配列型変数は、Object配列型変数に暗黙的に変換できる。
○cloneメソッドで配列をコピーした場合、それぞれの配列は、異なる配列インスタンスを参照している。(1次元目)ただし、2次元目以降は同じ配列インスタンスを参照している。
○newと初期化演算子の両方を使った場合、大カッコの中の要素数を指定してはいけない。
○nullにlengthは存在しないため、lengthで参照すると、例外エラーになる。

 

◎第5章
○簡単な条件式の問題が出てきたら、要注意!
○do-while文でカッコを省略し、2行以上記述した場合、コンパイルエラーになる。
○for文の初期化で、複数の変数を初期化する場合、変数は同じ型でなければならない。
○条件式の問題では、変数のスコープに注意する。(条件式内で宣言された変数が、条件式の外で使われていたらコンパイルエラー。)
○for文の条件式は、,で複数記述できない→コンパイルエラー。複数条件を記述する場合は、論理演算子を使う。
○配列とString型は互換性がない(拡張for文注意)。問11


◎第6章
○戻り値を戻さないvoidのメソッドに対して、戻り値を受け取る変数を宣言して戻り値を受け取ろうとすると、コンパイルエラーになる。問2
○可変長引数→引数の型、...、変数。
i.e.int...num
○可変長引数は、戻り値の最後に記述する。
(int... num, int values)→コンパイルエラー
(int values, int...num)→○
○staicメソッドから、staticではないフィールドやメソッドにはアクセス出来ない。
○コンストラクタの条件
 ・メソッド名をクラスメイト一致させる。
 ・戻り値型は記述できない。
 ・newと一緒にしか使えない。
○初期化ブロックは、すべてのコンストラクタで共通する前処理を記述するために使用する。(問14)
○メソッドの引数にプリミティブ型を渡す時、値のコピーが渡される。オブジェクト型を渡す時、参照のコピーが渡される。オブジェクト型でメソッドが参照先のインスタンスを変更した時、元のオブジェクトの参照先も同じインスタンスなので、値が変更される。

 

◎第7章
○オーバーライドする時、戻り値は一致させなくてもよい。
○ポリモーフィズムを使った場合、スーパークラスとサブクラスに同じ名前のフィールドがあった時、どちらのフィールドを使うかは、宣言した変数の型によって決まる。
○インターフェイスでも、finalとstaticのフィールドは定義できる。


◎第8章
○検査例外:例外処理を記述したかどうかをコンパイラが検査する例外。
○非検査例外:例外処理を記述したかどうかをコンパイラが検査しない例外。(RuntimeExceptionとそのサブクラス)
○Exceptionクラスとその継承クラス→try-catchもしくはthrow句が必要。(検査例外)
○複数のcatch文が記述されている場合、一度catchが実行されると、その分の制御が止まり、次以降のcatchは実行されない。
○RunTimeExceptionとその継承クラス→try-catchを強制されない。(非検査例外)→try-catch、throw句はあっってもなくてもよい。
○Error→try-catchを強制されない。(エラー)→try-catch、throw句はあっってもなくてもよい。
○ArryIndexOutOfBoundsException→配列の要素外にアクセスした時。
○IndexOutOfBoundsException→配列や文字列、コレクションの範囲外を取り出そうとした時。
○StringsIndexOutOfBounds→文字列の範囲外にアクセスした時。
○ClassCastException→継承関係や実現関係にないクラスにキャストした時。
○IllegalArgumentException→利用される側のオブジェクトが不正な引数を渡された時。
○IlligalStateException→準備が不十分な状態でメソッドを呼び出した時。
○NullPointException→nullに対してメソッドを呼び出した時。
○NumberFomatException→数字以外を数字に変換しようとした時。
○ExceptionInitializerError→staticを初期化している時にエラーが発生した時。
○StackOverflowError→スタック領域が足りなくなった時。
○NoClassDeefFoundError→JVMが実行対象クラスを発見できなかった時。
○OutOfMemoryError→ヒープ領域が足りなくなった時。


◎第9章
○immutableオブジェクトの代表例は、java.lang.Stringクラスや、java.io.Fileクラスのインスタンス。→生成時に与えられた文字列や、抽象パスをあとから変更できない。
○String.replaceAllメソッド:置換した結果の文字列を持った新しいStringインスタンスを作り、そのインスタンスの参照を戻すため、引数で渡したStringの値は変わらない。
○indexof:引数で指定された文字が文字列のどの位置にあるのかを返す。
○startWith:文字列が引数で指定された文字列かどうかを判断する→trueもしくはfalse
○\d:数字、\D:数字以外、\s:空白文字、\S非空白文字、\w:単語構成文字(a-z、A-Z、0-9)、\W:非単語文字
○concat:Stringクラスの文字列連結。
○appendhはStringBuilderクラスのメソッド。Stringには使えない。
○StringBuilder.capacity:StringBuilderの文字数(バッファ含む)を返す。
○appendメソッドでtrueを入れるともじれつ"true"に、10を入れると文字列"10"が追加される。
○StringBuilder.reverse:文字列を反転させる。値を返すだけではなく、文字列を入れ替える。
○StringBuilder.replace:文字列を入れ替える。"abcde"をreplace(1, 3, "a")で入れ替えた場合、bcをaに入れ替え、aadeになる。
○StringBuilder.subSequence:指定した文字列を抽出する。
○StringBuilder.substring:指定した文字列を抽出する。
○ラムダ式:関数片足インターフェイスの型 変数名 = (引数) -> {処理}
引数の()は省略可。処理の{}は処理が一つの場合省略可。{}がある場合returnが必要。{}を省略した場合、returnの記述は不可。
○ラムダ式は、それを囲むブロック内で宣言した変数と同じ変数を宣言できない。問23。インターフェイスで宣言した変数ならば可。
○ラムダ式の処理で使用している変数を変更することはできない。finalな変数のみ使用可。ラムダ式外でもラムダ式内で処理した変数を変更できない。問9-24。
○predicate:ラムダ式の関数型インターフェイスで、boolean型を戻す。
○LocalDateは1から始まる。0を代入すると、java.time.DateTimeEvceptionでスローされる。
○Duaretion:時刻の差を扱う。Duration.between(a, b)
○Period:日付の差を扱う。Period X = a.until(b)
○ArrayListはオブジェクト型であれば、どのような型でもオブジェクト型として格納できる。List<String> List = new Arraylist<>();。List<String> List = new Arraylist<String>();とした場合は、String型しか扱えない。この<>をジェネリクスという。
○ArrayList.set:変数を置き換える。
○ループで読み出している最中にremoveメソッドを呼び出すと、例外がスローされる。
○文字列操作の時に、抽出する文字を間違えやすので注意!!!


◎模擬試験1
○continueは、繰り返し処理の途中で現れると、それ以降の処理をスキップする。
○testメソッドはctchもしくはthrowしておかなければならない。
○メソッド引数は、必ずデータ型と変数名はセットでセットで宣言しなくていけない。
○多次元配列のArray.lengthは必ず1次元目の配列の数を返す。
○this()はコンストラクタを呼び出すものであり、メソッドを呼び出すものではない。
○Listインターフェイスのremoveメソッドは、削除する文字があった場合、trueを返す。よって、if文で使用できる。
○フィールドはデフォルト値で初期化されるが、ローカル変数は明示的に初期化しなければならない。
○ラムダ式で変数の()を省略する場合は、変数名のみ記述可能で、変数の型は記述できない。
○instanceof:指定した型でインスタンスを扱えるか調べる。
○インターフェイス内で宣言されるフィールドは暗黙的にpublic static finalで修飾される。
○継承関係のないクラス同士では、型をキャストして変数として扱えない。→コンパイルエラー。
○初期化演算子{}を使った配列インスタンスの生成では、中カッコがいくつネストされているかで次元数を数えることができる。
○Listインターフェイスを実装したクラスはnullを許容するため、nullも一つの要素としてカウントする。NullPointErrorは発生しない。問77


◎模擬試験2
○インスタンスへのアクセス方法には、「フィールドに直接アクセスする」「メ ソッドを呼び出す」の2通りがある。どちらの場合であっても、「インス タンスへの参照、フィールド名」や、「インスタンスへの参照、メソッド名」のよう にインスタンスへの参照が不可欠。問1
○nullが入っている配列を、拡張for文で取り出しても、NullPointerExceptionは発生しない。
○staticなメソッドをthisで呼び出すことはできない。問1
○toStringメソッドは、呼び出されるたびに新しいStringインスタンスを生成する。
○Stringのreplaceメソッドは、新たなインスタンスを生成し、String自体を変更しない。
○起動パラメータを設定しなかった場合、argsの要素数は0になる。nullではない。
○ラムダ式で宣言された変数は、ラムダ式内でのみ有効。問18。
○継承関係のない型にインスタンスを代入すると、コンパイルエラーではなく、ClassCastExceptionがスローされる。
○System.out.prinlnはプリミティブ型であればそのまま、オブジェクト型であればクラス名@ハッシュコード、もしくはtoStringメソッドがオーバーライドされていれば文字列を返す。
○StringBuilderのtoStringメソッドはオーバーライドされており、内部に保持している文字列を戻す。
○メソッドに引く数を渡す時、プリミティブ型は値のコピーが、オブジェクト型は参照のコピーが渡される。メソッドでプリミティブ型を変更するだけでは、元の値は変更されないが、オブジェクトがた場合、参照しているインスタンスは同じであるため、メソッドで変更した場合、元のオブジェクトの参照先のインスタンスも変更される。
○フィールドやメソッドのようにクラスのメンバとして宣言する場合、それらはランダムにアクセスされるので、それを使っている行よりも上で宣言する必要はない。
○プリミティブ型の配列はデフォルト値が、参照型の配列はnullがデフォルト値としてセットされる。それらを拡張for文で呼び出しても、NullPointerExceptionは発生しない。


暗記しておくこと
模擬試験問7
○ポリモーフィズムのメリットに関する記述として、正しいものを選びなさい(2つ)
A.実行時に、より高速なコード
B.実行時に、より効率的なコード
C.実行時に、より動的なコード
D.より柔軟で再利用可能なコード
E.他のクラスから保護されたコード
→CD Eはファイナルクラスの説明8:53 2018/02/27

○javaの例外メカニズムのメリットに関する説明として、正しいものを選びなさい(3つ)
A.エラー処理のコードが通常のプログラム機能から分離されているので、プログラムの構造が改善される
B.発生し得るすべてのエラーに対処する一連の標準例外が提供される
C.例外を処理する場所をプログラマーが選択できるので、プログラムの構造が改善される
D.例外が発生したメソッドでその例外を処理する必要があるので、プログラムの構造が改善される
E.作成される特定のプログラムに合わせて新しい例外を作成できる
→ACE

おまけ 受験対策メモ Bronze

黒本Bronzeをこなしていた時のメモもおまけで貼っておきます。

最後に言語仕様に関する問題をまとめてありますので、丸暗記してしまうと便利だと思います。

 

◎第1章

○Javaは、シングルプロセス、マルチスレッド。

○クラスファイル:中間コードが記述されたファイルのこと。○ガベージコレクション:自動メモリ管理機能。

○ソースファイルには、publicで修飾されたクラスやインターフェイス、列挙型は一つしか記述できない。ただし、public以外で修飾されたものや、デフォルトで修飾されたクラスは併記できる。一つのソースファイルに、2つ以上のクラスを併記することは推奨されていない。

○コンフェギュレーション:最も基本的な、ライブラリーと基本マシン。○プロファイル:特定のデバイス向けの、APIセット。

○ソースコード→ソスファイル。中間コード→クラスファイル。

 

◎第2章

○インスタンス変数がインスタンスごとに作らるのに対し、static変数はクラス単位で作られる。

○static変数は複数のインスタンスから共有されるため、あるインスタンスがstatic変数の値を変更すると、別のインスタンスからは変更後の値を参照できるようになる。

○配列の変数の宣言と配列インスタンスの生成、要素の初期化を複数の分に分割することはできない。 〈誤った例〉 int[] array; array = {3,5,1}

 

◎第3章

○switch文→default○switch文の式は、char、byte、short、int、Character、Byte、Short、integer、String、列挙型を戻す式でなくてはいけない。

 

◎第5章

○カプセル化・関係するデータをまとめ、さらにそのデータを使う処理をまとめて、一つのモジュールとして定義すること。・関係するデータとそのデータを使う処理をひとまとめにすること。・カプセル化によってまとめられたモジュールをクラスと呼ぶ。・カプセル化は、単体クラスについての設計原則。・データを隠蔽する。・フィールドのアクセス修飾子をprivateにする。・クラス変数にするかどうかはカプセル化とは無関係。・カプセル化の維持に欠かせない原則として、正しいものを選びなさい ・データ隠蔽 ・情報隠蔽 ・抽象化 ・データ抽象A. データ隠蔽・解説カプセル化では、関係するデータとそのデータを必要とする処理を集めまる。そのため、モジュールAにあるデータを必要とする処理はすべてAになければいけません。他のモジュールがAのデータを処理するとなると、もしそのデータに変更が行われたら、モジュールAと他のモジュールを変更しなければならなくなる。こういう事態をさけるために、データを隠蔽し、アクセを拒否することで、カプセル化を維持する。○setterメソッドとgetterメソッドをアクセサメソッドと呼ぶ。
○抽象化(abstraction)・抽象化とは、対象から注目すべき要素を抜き出し、それ以外を無視することによって、複雑な問題を単純化する方法。・抽象化によって複数のモジュールがあたかも一つのモジュールのように扱う。・インスタンスそのものではなく、抽象化した型でインスタンスを扱うことを「ポリモーフぇズム」と呼ぶ。・ポリモーフィズムでは、継承やインターフェイスを使って、抽象化を表現する。・抽象化する目的は、モジュール間の関係を単純化すること。
Q.ポリモーフィズムのメリットに関する説明として、正しいものを選びなさい ・変更されたサブクラスに変更の影響が及ばない ・変更されたクラスのスーパークラスに変更の影響が及ばない ・インターフェイスの変更が実現クラスに及ばない ・変更されたクラスを使うクラスに、変更の影響が及ばないA.変更されたクラスを使うクラスに、変更の影響が及ばない/・解説:・どの型で扱っていたとしても、実際に動作するのはインスタンスそのもの ・「使う側」のクラスは「共通化して扱える型」だけを知っていればよく、「使われる側」の具体的な違いを意識することはない ・そのため、「使う側」が「使われる側」の変更を受けることはない ・影響を受けるのは、共通化して扱える型が変わったときのみ
Q.ポリモーフィズムに関係が深い用語を2つ選択しなさい ・抽象化 ・情報隠蔽 ・データ隠蔽 ・カプセル化A.抽象化、情報隠蔽・解説・型が同じで同じ種類であると言える(int型、double型)。クラスやインターフェイスも型として扱える。そのため、共通のクラスを継承したり、共通のインターフェイスを実現したりすることで、異なる方のインスタンス同士でも、同じ型のインスタンスとして扱える。このようにインスタンスそのものの型ではなく、抽象化したインスタンスを扱うことを「ポリモーフィズム」と呼ぶ。抽象化はポリモーフィズムそのもの。 ・改変を減らし、複雑さを少なくするために、公開する型(インターフェイスやクラス)を定め、それに対応する実装(クラス)を隠蔽する、情報隠蔽は、ポリモーフィズムと深い関わりがる。 ・データ隠蔽→カプセル化 カプセル化は単体クラスについての設計原則であり、ポリモーフィズムとは直接関係しない。
○情報隠蔽・公開すべきものと、非公開にすべきものを分け、非公開にすべきものを隠蔽するように設計すること。・公開すべきところは、抽象化。によって着目した共通部分。・非公開にすべきところはそれ以外の部分。・非公開にする部分はアクセス制限をかける。・公開すべき部分をインターフェイスとして定義する。・情報隠蔽したクラス(インターフェイスを含む)はパッケージ化する。Mainクラスはパッケージ化せずに、importで情報隠蔽されたクラスを呼び出せるようにする。・修飾子を省略されたクラスは、同じパッケージでしか呼び出せない。他のクラスがimportしても呼び出せない。

○インターフェイス・インターフェイスは、メソッド宣言と定数のリスト。・実装を持たない。・実装を持たないとは、どのように動作すればよいかという具体的な処理を持たないということ。・実装を持たないのでインスタンス化できない。・実装は、インターフェイスを実現したクラスが定義する。・メソッド宣言以外には、定数のみ宣言できる。
○抽象クラスと具象クラス・抽象クラスは継承を前提としたクラスである。・抽象クラスは、実装を持つメソッドと、実装を持たないメソッド(抽象メソッド)を持つことができる。・抽象メソッドを持つため、インスタンス化できない。・抽象メソッドの実装は、継承したサブクラスが行う。・具象クラスは実行するためのクラスであり、すべてのメソッドが実装を持つ。・具象クラスは継承をできるが、継承させるためのクラスではない。○クラス宣言を修飾できるのは、publicとdeafultだけ。

 

◎第6章

○クラス名:Unicode、$、_:ひらがな漢字OK:2文字目から数字OK。

○クラス名の後ろに引数、及び()は記述できない。○クラスをインスタンス化 new クラス名() new.ではない。引数、もしくは()を必ずつける。

○フィールド:インスタンスの状態を表現。

○コンストラクタを呼び出し、インスタンスを生成した時、呼び出しに使った変数にはインスタンスそのものではなく、インスタンスを咲くされた領域(ヒープ)への参照が格納される。

○コンストラクタ: ・コンストラクタ名は、クラス名と同じでなければならない。 ・インスタンスの事前準備。 ・戻り値は記述できない。(voidは記述できない) ・使用するインスタンスから引数を受け取り、初期値を設定することはできる。(インスタンス生成→インスタンスがコンストラクタに初期値を渡す→コンストラクタがフィールドの値を初期化(this.name = nameなど)。 ・インスタンス生成時にしか使えない。 ・staticは記述できない。

○コンストラクタ:newされた直後に自動的に実行されるメソッド。○メソッド:一連の処理をまとめたもの。

○クラス名の後ろに()は記述できない。クラス名の型は、クラス名の後に{}で記述する。

○newはコンストラクタを呼び出し、インスタンスを生成している。

○オーバーロード:「多重定義」:一つのクラス内に引数の型や数、並び順の異なる、同じメソッドを複数定義すること。

○シグニチャ:メソッド名と引数のセットのこと。戻り値型の定義は含まれない。○thisとthis() ・this:自クラスのインスタンスを指し示す。 ・this():オーバーロードした別のコンストラクタを呼び出す。

○static: ・インスタンスを生成していなくても、利用できるフィールド。 ・すべてのインスタンスで共有される。

○実行されるオーバーロードされたメソッドは、引数に渡すデータの型、数、順番によって自動的に選択される。

○void: ・メソッドから何も戻り値として返さない場合に記述する。 ・メソッドの戻りの値型。フィールドでは宣言できない。

○アクセス修飾子・public:すべてのクラスからアクセス可能。・protected:同一パッケージ内のクラスと、サブクラスからアクセス可能。・なし:同一パッケージ内のクラスからのみアクセス可能。(デフォルト)・private:同一クラスからアクセス可能。

○staticメソッドは、自クラスに定義されたインスタンスフィールドとインスタンスメソッドは利用できない。staticフィールドは利用可能。

○コンストラクタをインスタンス化する時、インスタンス化するコードはコンストラクタと引数を合わせる。合わないとコンパイルエラー。

○コンストラクタがないクラスを生成た場合、引数0()のコンストラクタが自動生成される。

 

◎第7章

○サブクラスはスーパークラスのprivateのフィールド、メソッドは引き継げない。

○サブクラスはスーパークラスのコンストラクタを引き継げない。

○サブクラスをインスタンス化した時、スーパークラスのインスタンスも同時に作られる。この時、スーパークラスのコンストラクトは、スーパークラスのインストラクタを準備し、サブクラスのコンストラクタは差分のインスタンスを準備する。

○スーパークラスのpublicメソッドは、サブクラスがオーバーライドしない限り引き継がれる。○設問5と6を復習しておく。

○スーパークラスに引数なしのコンストラクタがあり、サブクラスにコンストラクタが無いか、引数無しのコンストラクタがある場合、デフォルトコンストラクタが暗示的的に作られる。

○サブクラスがオーバーライドした場合、スーパークラスのコンストラクタではなく、オーバーライドされたコンストラクタが実行される。○オーバーライドの条件 ・メソッドのシグニチャーがスーパークラスのものと同じであること。 ・戻り値の方がスーパークラスのメソッドと同じか、サブクラスであること。 ・メソッドのアクセス制御がスーパークラスと同じか緩いこと。 ・シグニチャーが異なる場合はオーバーロードとみなされる。

○オーバーライドしたメソッドはthorw節を持たなくてもよい。

○オーバーライドしたメソッドがthorw節を持つ場合は、スーパークラスのthorw節と同じ型か、そのサブタイプでなければならない。

○インターフェイスではで定義できるのは、定数フィールドと抽象メソッド。

○抽象メソッドは具体的な処理を持つメソッドと区別するために、abstractを修飾子なければならない。インターフェイスで定義されたメソッドは、コンパイル時にpublic abstractに自動的に就職される。

○インターフェイスはクラスが実現スべきメソッドの一覧を定めたもの。

○インターフェイスは複数のインターフェイスを継承できる(多重継承)。クラスの継承では多重継承は認められていない。

○抽象クラスとは、インターフェイスとクラスの両方の性質を持つクラスのこと。

○抽象クラスは、抽象メソッドと具象メソッドの両方を持つことができる。

○抽象クラスの抽象メソッドは、abstractを明示的に記述しなければならない。

○同じパッケージに所属するクラスは、import宣言を省略できる。○異なるパッケージに所属していても、完全修飾クラス名で呼び出すのであれば、import文は省略できる。

 

◎模擬試験

○パッケージ宣言に*は記述できない

。○import宣言では、インポートしたいクラスの完全修飾クラス名か、そのクラスが所属するパッケージ名と*で指定しなければならない。

○while文に記述できるのは条件式のみ。○do-while文は「後判定」であるために、必ず一回はdoブロック内の処理が行われる。

○staticメソッドからインスタンスフィールドや、インスタンスメソッドはアクセスできない。

○インターフェイスに定義されるフィールドは、final staicで暗黙的に修飾される。その理由は、インターフェイスは実装を持たず、フィールドの初期化処理ができないため、定数でかつインスタンスを作らなくても良いstaticである必要があるからである。

○よって、インターフェイスは初期化を行っていないフィールドを定義できない。○インターフェイスのメソッドはstaticで修飾できない。抽象メソッドは実装を持たないが、staicフィールドはインスタンスが必要でないため、矛盾してしまうからである。

○フィールドはabstractにできない。○コンストラクタは、そのコンストラクタが定義されているクラスのインスタンスを定義するためのメソッド。

○コンストラクタの呼び出し。this(引数)○コンストラクタの名前は、すべてクラスと同じ名前にする決まり。 どのコンストラクタが呼び出されるかは、渡す引数によって決まる

。○メソッドは必ず戻り値を記述しなければならない。

○情報隠蔽→公開するものと、非公開のものを分ける。まずは公開するインターフェイスを作り、ポリモーフィズムによって実際に動くインスタンスの方を隠蔽する。

 

◎理屈抜きでとにかく覚えること
○5章-1カプセル化の説明として、正しいものを選びなさい。(1つ選択) A.同種の異なるインスタンスを同じ型として扱う。 B.公開すべきものと非公開にすべきものを区別して扱う。 C.関係するものをひとまとめにする。 D.クラスのフィールを隠蔽し、他のクラスからは直接扱えないようにする。 →C
○5章-3カプセル化の維持に欠かせない原則として、正しいものを選びなさい(1つ選択) A.データ隠蔽 B.情報隠蔽 C.抽象化 D.データ抽象 →A
○5章-5データ隠蔽の説明として、最も適切なものを選びなさい(1つ選択) A.関係するデータとそのデータを扱う処理をひとまとめにする。 B.属性の公開範囲を制限する。 C.getterやsetterなどのアクセサメソッドを提供する。 D.実装の詳細を隠蔽する。 →B(Aカプセル化、D情報隠蔽)
○5章-6共通部分だけを抽出し、それ以外を無視して扱うことをなんと呼ぶか。正しい用語を選びなさい。(1つ選択) A.抽象化 B.カプセル化 C.データ隠蔽 D.情報隠蔽 →A
○5章-9ポリモーフィズムのメリットに関する説明として、正しいものを選びなさい(1つ選択) A.変更されたクラスのサブクラスに変更の影響が及ばない。 B.変更されたクラスのスーパークラスに変更の影響が及ばない。 C.インターフェイスの変更が実現クラスに及ばない。 D.変更されたクラスを使うクラスに、変更の影響が及ばない。 →D
○5章-10情報隠蔽の説明として、正しいものを選びなさい。(1つ選択) A.公開すべきものと非公開にすべきものを区別して扱う。 B.関係するデータをひとまとめにして扱える。 C.外部からフィールドを直接操作できないようにすることができる。 D.ことなる引数を受け取るメソッドを複数定義できる。 →A(Bカプセル化、Cデータの隠蔽、Dオーバーロード)
○5章-11情報隠蔽を実現する手段として、正しいものを選びなさい。(3つ選択) A.フィールドのアクセス修飾子をprivateにする。 B.getterやsetterメソッドを提供する。 C.公開メソッドを集めたインターフェイスを用意する。 D.protectedで修飾したクラスを宣言する。 E.パッケージ宣言を追加する。 F.コンストラクタをprotectedにする。 →CEF(ABはデータ隠蔽に関するもの)
○5章-12インターフェイスに関する説明として、誤っているものを選びなさい。(1つ選択) A.インターフェイスは型を定義するためのものである。 B.インタフェースには実装を定義できない。 C.インタフェースはインスタンス化できない。 D.インタフェースには、メソッド宣言だけが定義できる。 →D

○5章-13ポリモーフィズムに関係が深い用語として、もっとも適切なものを選びなさい。(2つ選択) A.抽象化 B.情報隠蔽 C.データ隠蔽 D.カプセル化 →AB
○5章-17具象クラスと抽象クラスに関する説明として、正しいものを選びなさい。(1つ選択) A.具象クラスは、インスタンス化できない。 B.抽象クラスは、継承されることを前提としたクラスである。 C.抽象クラスは、インスタンス化できる。 D.具象クラスは、継承されることを前提としたクラスである。 →B
○6章-5コンストラクタの定義に関する説明として正しいものを選びなさい。(1つ選択) A.コンストラクタの戻り値型はvoidにする。 B.コンストラクタには、引数を定義できない。 C.コンストラクタ名は、クラス名と同じにする。 D.コンストラクタには、戻り値型を指定できる。 →C
○6章-16 ・public→すべてのクラスからアクセス可能。 ・protected→同一パッケージ内のクラスからのみアクセス可能。 ・なし→同一パッケージ内のクラスからのみアクセス可能(デフォ ルト) 同一クラスからアクセス可能。 ・private→同一クラスからアクセス可能。
○17章-15インタフェースの特徴として、正しいものを選びなさい。(3つ選択) A.クラスは1つだけインタフェースを実現できる。 B.インタフェースは、ほかのインタフェースを継承できる。 C.インタフェースは、単一継承のみ可能である。 D.クラスはインタフェースを多重実現できる。 E.インタフェースには、抽象メソッドが定義できる。 F.インタフェースには、具象メソッドが定義でき。 →BDE
○17章-18パッケージに関するせつめいとして、正しいものを選びなさい。(3つ選択) A.名前空間を提供する。 B.パッケージ名にはドメイン名を逆にしたものを使用しなければ ならない。 C.アクセス制御を提供する。 D.クラスの分類を可能にする。 E.パッケージ宣言はソースファイルの1行目に記述する。 →ACD
○模擬試験-30以下の中から、情報隠蔽に関わりの深いキーワードを選びなさい。(3つ選択) A.ポリモーフィズム B.カプセル化 C.アクセサメソッド D.パッケージ E.インタフェース F.インスタンス化
○模擬試験-41メソッドのシグニチャーを構成する要素として、正しいものを選びなさい。(4つ選択) A.引数数 B.引数の名前 C.アクセス修飾子 D.引数の型 E.メソッド名  F.戻り値の型  G.引数の順番 →ADGE