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

Javaプログラマであるかを見分ける10の質問

自信がないので先に言い訳しておくと、もう2年くらいまともにコーディングしてないので、現役のJavaプログラマではないということにしておきたいです。 というわけで、、

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

  1. 演算子とequalsメソッドの違いは何か? A. 演算子はプリミティブ型のとき使う。 オプジェクトで==演算子を使うと、オブジェクトの場所を比較してしまうため、値の比較ではなくて物理的に同じものかどうかの判定になってしまう。
  2. 文字列の連結は原則として+演算子を使ってはならない理由を説明せよ。 A. 細かい話は忘れたけど、StringBufferを使った連結に比べて作成されるオブジェクトの数や呼ばれる処理の数が増えたりするので メモリ的にも処理速度的にもおいしくない。 ただし、static final で宣言した文字列の値に+演算子が使われている分には上記の問題は起きない。はず。
  3. List<Integer>のようにジェネリクス型を使う主たる目的は何か? A. リストに含まれるオブジェクトが固定されるため、キャストがいらなくなる。当然ClassCastExceptionも発生しない。 想定されないオブジェクトが入ってこなくなる=エラーを起こしにくくなる。
  4. オブジェクトがガベージコレクション(GC)される主たる条件は何か? A. どのオブジェクトからも参照されなくなったとき。
  5. チェック例外と非チェック例外の違いを型と例外処理の観点で説明せよ。 A. チェック例外はtry catchしないとコンパイルエラーになる。非チェック例外はコンパイルエラーにならない。
  6. フィールドのアクセス修飾子をprivateにしgetter/setterメソッドを提供する事でフィールドを参照する設計方針を取る主な理由を説明せよ A. 内部の値にアクセスする方法を限定し、意図しない呼び出し元、および意図しない方法での値の参照・書き換えを防ぐため。
  7. NullPointerExceptionが発生するのは主にどういう状況か? A. オブジェクトの値がnullであるにも関わらず、オブジェクトのメソッドを呼び出した場合に発生する。
  8. オーバーロードとオーバーライドの違いは何か? A. どっちがどっちだったかな… オーバーライドはスーパークラスのメソッドを上書きして動作を変更すること。 オーバーロードは同一クラス内に同名の引数が異なるメソッドを用意して、引数によって動作を変更すること。 javaにはphpとかCで言うところのデフォルト引数がないので、オーバーロードでそういうのを実現したりする。
  9. コンストラクタとは何か? A. オブジェクトをインスタンス化するときの初期処理。
  10. インターフェイスを利用する目的を1つ説明せよ A. 同系統の用途の複数のクラスを同じ呼び方で処理できるようにするため。 ポリなんとかで実装するときに使う。

どうみても基本的なことだけど、なんとなく自信がない。。あまりにも突っ込みどころ多いようだったら勉強しなおした方がいいな…。

わかりやすいJava入門編