「Javaプログラマであるかを見分ける10の質問」に答えてみる

 最近Javaのおべんきょをしてます。『やさしいJava』とか『スッキリわかる』とか『Javaチュートリアル』とか読んでます。3週間ぐらいです。

 一時期流行った質問集らしいので答えてみます。以下引用。

d.hatena.ne.jp

下記質問にそれぞれ50文字以内を目安に簡単に説明すること。


1.==演算子とequalsメソッドの違いは何か?
2.文字列の+演算子による連結とStringBuilderを使った連結の違いを説明せよ。文字列の連結は原則として+演算子を使ってはならない理由を説明せよ。
3.Listのようにジェネリクス型を使う主たる目的は何か?
4.オブジェクトがガベージコレクションGC)される主たる条件は何か?
5.チェック例外と非チェック例外の違いを型と例外処理の観点で説明せよ。
6.フィールドのアクセス修飾子をprivateにしgetter/setterメソッドを提供する事でフィールドを参照する設計方針を取る主な理由を説明せよ
7.NullPointerExceptionが発生するのは主にどういう状況か?
8.オーバーロードとオーバーライドの違いは何か?
9.コンストラクタとは何か?
10.インターフェイスを利用する目的を1つ説明せよ

80%程度は回答できるプログラマを採用したい所です。

1.==演算子とequalsメソッドの違いは何か?

 ==演算子は「指しているオブジェクトが同じかどうか」を比較する。
 equalsメソッドは「値が等しいかどうか」を比較する

2.文字列の+演算子による連結とStringBuilderを使った連結の違いを説明せよ。

 +演算子による連結は元の文字列とは別に新たな文字列オブジェクトが作成される。
 StringBuilderによる連結は元の文字列に追加される。

3.Listのようにジェネリクス型を使う主たる目的は何か?

 いまのぼくにはこたえられないようだ

4.オブジェクトがガベージコレクションGC)される主たる条件は何か?

 オブジェクトがどのクラス型変数からも参照されなくなった場合。

5.チェック例外と非チェック例外の違いを型と例外処理の観点で説明せよ。

 いまのぼくにはこたえられないようだ

6.フィールドのアクセス修飾子をprivateにしgetter/setterメソッドを提供する事でフィールドを参照する設計方針を取る主な理由を説明せよ

 フィールドの値を制御するため。

7.NullPointerExceptionが発生するのは主にどういう状況か?

 オブジェクトが入っていない、空っぽのクラス型変数でクラスの機能を呼び出そうとしたとき。

8.オーバーロードとオーバーライドの違いは何か?

 オーバーロードは引数の型や数の違いに対応したメソッドを定義すること。
 オーバーライドはスーパークラスのメソッドをサブクラスで上書きすること。

9.コンストラクタとは何か?

 インスタンスを生成するときに最初に呼び出される処理。フィールドの初期化などを目的とした機能。

10.インターフェイスを利用する目的を1つ説明せよ

 必要なメソッドの定義を強制するため。

解答編

d.hatena.ne.jp

感想

 質問自体は易しいと感じましたが、回答するとなると正確に表現するのは難しいです。用語に関する理解や、そもそも国語力が足りないと感じました。
 10番のインターフェイスの利用目的は正直あんまりわかっていません。

 ボヤッとわかってることを、言葉にするっていうのは良い訓練になりました。

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)