見出し画像

【ここを抑えれば受かる!】Java Silver 頻出問題と要点の解説まとめ

こんにちは、開発エンジニアをしているSHOです。
先日、Java Silverに合格することができたので、試験勉強をしていて実際に出た問題をもとに、

①Javaの理解が深まる
②試験で高得点が取れる
③わかりづらい所の解説

上記3点にフォーカスしてまとめました。これからJava silverを受験する方の手助けになれば幸いです!
かなりボリュームがあるので、目次を活用して知りたいチャプターに飛んでくださいね!

【ライターの紹介】
SHO
ALHの第6開発事業部に所属する開発エンジニア。
paizaのスキルチェックにはまっていて、Sランクを目指して毎日問題を解いています。

私がJava silverを受けた理由


今回私がJava silverを作成したのは、私の座右の銘が「知は力なり」であり、 知っていることが増えれば増えるほど自分の力となると考えているからです。

また、名のある資格試験を取得することで、客観的なスキルの証明にもなりますし、単純にJavaに関する理解を深めたかったからという気持ちもあります。
名のある資格試験を取得することで、客観的なスキルの証明になるから。
それによって単純に、技術がある→評価される→次のPJに繋がる、商流を上げる、など自分はもちろん、会社にも良い影響を与えることができる可能性が大いにあります。
さて、本題に入っていきましょう。

Chapter1.変数とリテラル


皆様知っての通り、変数を宣言する ときには型を宣言します。
型には、「基本型」、「プリミティ ブ型」が存在し、よく使う基本中の基本の型は下記の 通りです。 

◆ byte型
◆ short型
◆ int型
◆ long型
◆ float型
◆ double型
◆ char型
◆ boolean型

最低限これらの型の使い方を覚えないと何も始まりません。

▲上のキャプチャの通り、扱えるデータのサイズが 小さいものから、大きいものへの代入はキャスト 式が不要です。

▲上のキャプチャでは、扱えるデータのサイズが大きいものから小さいものへ代入しています。
そのため、明示的にキャスト式を記述してあげる必要があります。(ダウンキャスト)

■char型は要注意

▲気を付けて頂きたいのが、char型。
Unicodeで表現できる1文字を格納できます。
しかし!! 上図のように1文字では無いうえに、数字を格納もできます。
なんでやねん。これを実行すると…


は?(゜Д゜#) なんでYになんねん… 
と、こういう結果になります。
どの数字を入れると何が返ってくるまでは覚えなくてOKです。
実際に試験に出ましたので、char型の扱いはしっかり覚えておくと良いです。

■ローカル変数とメンバ変数に関しても覚えておきましょう。

頻出です。頻出のわりに単純なのでボーナス問題です。

■varでの型推論

頻出です。

■Java君が、何を格納してくれるのか知るのも大切。

Chapter2.演算子と分岐文


演算子には様々な種類があります。
間違えやすいポイントや、抑えておくべき点について解説します。 
頻出問題でありながら、要点さえ抑 えれば簡単に点数に結び付く&実際 の業務でのバグを減らすことにつな がります。

◆「+、-、*、/、%」
◆「++、--」
◆「&&、||、&、|」
◆「!、^」
◆「=、==、<、>」

最低でも上記の扱いはマスターしておきたいですね。

■前置インクリメントと 後置インクリメント

■論理演算子 &&と&、||と|の違い

■三項演算子

まず、?の前が条件式になります。
?の後ろが真の場合の処理。
:で区切って、:の後ろが偽の場合の処理。
要はこういうことですね。

条件式 ?真の処理:偽の処理

■実際の試験にでたのはこちら。

可読性もクソもないですね。

1回目が偽の場合に、もう一度三項 演算子を入れているだけですが、可読性がひどいですね。
試験にでることがありますが、要点を抑えていれば難しくはないですね。 
ただ、プロジェクトでの使用はやめましょうね。

Chapter3.文字列の操作


文字列の操作には以下があります。

◆String型
◆StringBuilder型

両者の違いを簡単に説明すると、不変か、不変ではないかです。
頻出問題なので、絶対に覚えましょう!

■Stringクラスは不変なのです。

Stringクラスは文字列を操作しただけでは変数は変更されません。(左)
変数を変更したいのであれば、再代入してあげましょう。(右)

■StringBuilderクラスは可変なのです。

■文字列の比較も頻出です

internなんて使うシチュエーションあるんですかね。

Internメソッドは癖が強いうえに、現場では絶対に使わないであろうメソッドだと勝手に思っています。(使っている現場が あったらごめんなさい)
そのくせ頻出問題なので、必ず抑えておき ¥ましょう。

ちなみに、黒本でも問題がでますが、解答が間違っている箇所があるので惑わされな いように…。
変だなと思ったら、eclipseで実際に同じコードで実行してみましょう。

Chapter4.分岐文と繰り返し文


分岐文には以下があります。

◆if文
◆switch文

繰り返し文には以下があります。

◆while文
◆do-while文
◆for文

要点を抑えていなければ解けない問題もあるので少し解説を交えます。

■do-while文

~while文でいいよね~

現場では使う機会がなかなかないとは思いますが、参考程度に覚えてお きましょう。
私が受けた試験では出ませんでしたが、while文は必ず出るといっても過言ではないので覚えておきましょう。

■for文

ここは必ず抑えましょう!!

varでの型推論はいろんなところに顔を出すので、しっかり覚えましょう。

■for文

意外と癖があるので要注意!

■if文

解説するまでもないですね!

■switch文

これもボーナス問題!

Chapter5.クラス定義とオブジェクト


オブジェクト指向のJava言語において最も重要な考え方ですね。
試験でも、ここをしっかり理解しているかどうかで合格率が変わると言っても過言ではないくらい重要です。
解説しようとするとものすごく長くなる予感がするので、本当に重要かつ頻出問題に限って解説します。

■コンストラクタ

こいつを理解すれば50%は点数とれます(多分)。


▲必ず1つ存在すると説明しましたが、 上図にはコンストラクタがありませ ん。しかし、実際には存在します。

▲上図はコンパイル時にJava君が追加してくれる(想定の)コンストラク タ。 Newを使用したインスタンス生成時は、実はこのコンストラクタが呼び出されているのです。

▲上図では、メンバ変数のstrに何も 操作を加えていないのに、インスタ ンス生成しただけで文字列が格納されています。

▲また、コンストラクタにはルールが 存在します(上図)。

コンストラクタ周りは覚えるべきルールと、Java君の暗黙的な動きが多く、躓くポイントだと思います。
しかし、きちんと覚えれば得点につなげやすいものが多いうえに、必ず現場でも力になってくれます。

Eclipse動かして、実際に挙動を確認すると定着しや いのでおすすめです。

■staticと非static

頻出問題です。必ず覚えましょう。
というより、これを理解してないJavaプログラマはかなりまずいので頑張りましょう!

Chapter6.抽象クラスと具象クラス


chapter5同様、しっかり覚えれば試験合格にグッと近づく単元です。
逆に言うと、しっかり理解していなければ絶対に点数にならない単元でもあります。
現場でも抽象クラスや、それに付随する技術の数々は使用する機会が多 いので、しっかり覚えておきましょう。

■抽象クラス

ぶっちゃけ存在意義がそこまで大きくないよね。

コメントの通りなのですが、 インターフェースにはメソッドの処理は一切書けません。
ただし、defaultを頭につけ ることで処理を書くことができます。
処理が書けないなら何の意味があるの?と思いますよね…。
私もそう思います。

インターフェースはオーバーライドされることを前提で使用します。
これをすることで、システムが大規模になればなるほど、また、携わる人数が 増えれば増えるほど絶大な威力を発揮します。
つまり、認識誤りや、実装誤りを防ぐことができます。


オーバーライドとは、戻り値(サブクラスは問題なし(共変戻り値といいます))、メソッド名、引数の型、引数の数がすべて同一であることを指します。
オーバーロードとは、メソッド名は同一であるが、引数の型、もしくは引数の数、 またはその両方が異なることを指します。
戻り値だけが違うのはオーバーロードにはなりません。

また、インターフェースは前述の通り、オーバーライドされることが前提となっているので、アクセス修飾子は、publicかデフォルト(修飾子 なし)しか許しません。

もう1つ、interface以外にも抽象クラスは存在します。
abstractクラスで、classの前に abstractを付与します。
こいつとinterfaceは特徴がそれぞれ違うのでしっかり覚えましょう。

Chapter7.継承


Chapter5、6同様、試験合格を左右する単元です。
しっかり理解するまでは本当に闇が深いですが、1度理解してしまえばお手のものです。
継承を語るにはどれだけページがあっても足りないので、本当に本当に重要なところ、 考え方だけ解説します!そろそろ疲れてきたなぁ…

■継承 めっちゃ大事。説明しきれない。

継承を説明するにあたって、以下のように考えてください。
親クラス(スーパークラス)は、本当の親だと考えてください。
ここでは Sampleクラスです。
子クラス(サブクラス)は、本当の子だと考えてください。
ここでは SubSampleクラスです。以下のクラスを使用します。

さて、親クラスには挨拶をする メソッドのみ、子クラスには超元気に走るメソッドのみが実装 されています。
以下で、子クラスのインスタンスを生成します。

では以下のクラスを確認してください。

以下で実行するとこうなります。

逆に、サブクラスの型でスーパークラスのインスタンスは生成できません。 当然ですよね。
生きてる年数が全然違うんですから、子供の器に収まるわけがないのです…。

Chapter8.例外処理


ラスト単元です頑張りましょう。
ポイントさえ抑えれば超簡単です。
その代わり、知らないと絶対に正解できません。
実際のシステム開発においても超重要な処理ですので、しっかり覚えて 帰りましょう!

なぜ例外処理が必要なのかというと、ひとたび実行時エラーが起こってしま えば、システムが止まってしまいます。
それを防ぐために、例外が発生する可能性がある処理に関しては、しっかり 例外処理を実装しなければなりません。

try-catch-finally文にはルールが存在します。

try-with-resources文も頻出です。
実行順序を確認してください。

たまにこういうひっかけも出ますのでご注意を…

検査例外と非検査例外

例外には処理が必須のものとそうではないものがあります。
結論から言うと、 RuntimeException以外のException のサブクラスはすべて検査例外です。

例外処理とはなんぞやというと、以下の2パターンです。

おまけ

Java君て、賢いのか賢くないのかわからんわぁ

以上です!!


本当はもっと解説したいところや、解説しきれていないところ、ここも覚えておくと良い!
といったところがまだまだありますが、 さすがにボリュームがいかれてきたのでやめておきます…。

私は今回Java Silverの資格を取ったことで、明らかに現場での実際のコードを読む力が上がりました。 エラーを吐いている際にも、何が考えられるか、そもそもの処理の流れなどをスムーズに理解することができています。

みなさんの試験合格の手助けになれば幸いです!



        ↓ ↓ ↓ 採用サイトはこちら ↓ ↓ ↓


↓ ↓ ↓ ALHについてはこちら ↓ ↓ ↓


↓ ↓ ↓ もっとALHについて知りたい? ↓ ↓ ↓




この記事が参加している募集

最近の学び

企業のnote

with note pro

みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!