人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のJavaに関してです。
ExceptionTest.java
class ExceptionTest {
public static void main (String[] args) {
ExceptionTest instance = new ExceptionTest();
instance.doTest();
}

public void doTest () {
Exception2 ex2 = new Exception2(new NullPointerException("ヌルポです。"));
System.out.println(ex2.getException().getMessage());//(1)「ヌルポです。」が出力
System.out.println(ex2.getMessage());//(2)「null」になる
}
}
Exception2.java
class Exception2 extends Exception {
public Exception ex;

public Exception2 (Exception ex) {
this.ex = ex;
}
public Exception getException () {
return this.ex;
}
}
getMessage()は継承した同じフィールドの値(message?)を返すはずですが、
(2)はなぜ(1)と同じにならないのでしょうか。

●質問者: kurokumi
●カテゴリ:コンピュータ インターネット
✍キーワード:Class EX Java MESSAGE Out
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ZAS
●40ポイント

new Exception(String)

new Exception2(Exception)

は処理が異なります。

「ヌルポ」と表示されるのは、new した NullPointerException のインスタンスの

getMessage を利用しているからです。

(NullPointerException は String["ヌルポです。"] を引数にインスタンス化してますね)

他方、Exception2は 独自に定義した Exception2型にのみ定義されたException型の

インスタンス変数に値を設定しているだけです。

よって、Exception#getMessage を呼び出しても 値が設定されていないため、

null が戻ります。

◎質問者からの返答

理解できました。

ありがとうございました!


2 ● yo-kun
●40ポイント

Exception2 ex2 = new Exception2(new NullPointerException("ヌルポです。"));

この時点でex2はException(の派生クラス)です。

で、Exception2の実装を見てみるとException2はException(の派生クラス)を一つ持っています。

ということは、上のコードの時点でException(の派生クラス)が2つ出来ています。

Exception2がNullPointerExceptionを持っている状態になっているわけです。


> getMessage()は継承した同じフィールドの値(message?)を返すはずですが、

> (2)はなぜ(1)と同じにならないのでしょうか。

"ヌルポです。"というメッセージはException2が持っているExceptionのメッセージに設定しています。

Exception2自体にはメッセージは設定されていません。

ですからex2.getMessage()はnullなのです。

◎質問者からの返答

理解できました。

継承するのは、あくまでインスタンスが作られる前までで、それぞれのインスタンス

new NullPointerException("ヌルポです。")

new Exception2()

が作られてからは、messageフィールドは別の値を持つという事を理解できていませんでした。

ありがとうございました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ