この「JavaSilver修羅の道」シリーズは私が資格取得のために始めたシリーズですが、つい先日(2022/7/16)に無事資格に受かることができました!
参考書には「紫本」を活用し、問題を解く時には「白本」「黒本」も活用して勉強し、未経験転職から4ヶ月、Java勉強期間3ヶ月の私でも合格することができました。
合計1500ページも色々な問題を解いてきたわけですが、後半は正直かなり傾向がわかってきました。というのも、問題文とか答えの選択肢を見ただけで何を引っ掛けようとしている問題なのか大体わかるようになってきます。「これはオーバーライド問題だな」とか「これは抽象メソッド問題だな」「これはnullの理解を聞いてるな」などです。
そこで個人的に苦手だった部分や私と同じようにプログラミング初心者の引っかかりそうなところを抽出して紹介していけたらなと考えています。
ということで、この第9回からは実際に試験を受けてみてほぼ確実に出るけどひっかかりやすいだろうなと思ったところを中心に記事にしていきます。
フィールドの初期値
まずはこちらを押さえておきましょう。
プリミティブ型と参照型ではフィールドで初期化しなかった場合の初期値に違いがあります。本試験ではこれを活用した問題が必ず出題されるので注意しましょう。
配列型の出力
要素指定なし(ハッシュ値の出力)
下記のような感じでnewした場合、要素を指定しないとハッシュ値が出力されます。
要素指定あり
new int[0],new String[0]の場合、要素の数は0のため、インデックス番号0を指定すると保持している要素の数より大きい数を指定しているとして、「ArrayIndexOutOfBoundsException」の実行時例外が投げられます。
ちなみにint[]の場合インデックス番号0、1、2では「0」が出力され、String[]の場合は「null」が出力されます。
要素数の確認
実際に要素の数を確認してみます。
この結果を見ると先ほど紹介した例外がスローされる理由がわかると思います。
ちなみに、要素が「0」ということなので、下記コードと同じ意味となります。混同してしまいそうな時はこちらを思い浮かべましょう。
int [] array = {};
明示的なnullの代入
こちらも引っ掛け問題としてよく出題されます。
要素のインデックス番号0に「null」を代入する場合と直接nullを代入する場合です。
前者の場合はハッシュ値が出力され、後者の場合はnullが出力されます。
ここで疑問に思うことがあります。「NullPointerException」はいつスローされるのか?。次はそこを確認していきたいと思います。
要素に0を指定している場合は、インデックス番号0を指定した場合そのままnullが出力されます。確認のために要素の数を出力させると想定通り「1」が出力されます。
一方で、直接nullを代入している場合は、インデックス番号を指定すると「NullPointerException」がスローされます。ちなみに、ここで要素の数の確認を行おうとすると、そもそも何も参照していない状態のnullを代入しているのでコンパイルエラーが起きます。
試験では「それっぽそうな選択肢2つとコンパイルエラーか実行時エラー」のような選択肢があるので、コンパイルエラーなのか実行時エラーなのかそれともちゃんと出力されるものなのかを理解しておく必要があります。
次に、そのnullを出力させる配列型変数に文字列を連結させるとどうなるのかを確認してみましょう。
それぞれ正常に出力されていますね。これも試験によく出る形なので覚えておきましょう!
では、また?