- PR -

例外処理Exception につて

投稿者投稿内容
ピノコ
会議室デビュー日: 2003/09/10
投稿数: 7
投稿日時: 2003-09-26 14:46
Java初心者です。
基本的なことだとは思いますが質問です。

class Msg {
  private String msg;
  void setMsg(String arg) throws Exception {
    if (!arg.equals("こんにちは")) {
      Exception excepObj = new Exception("挨拶がなっていない!");
      throw excepObj;
    } else {
      msg = arg;
    }
  }

  String getMsg() {
    return msg;
  }
}

class ExcepTest {
  public static void main(String[] args) {
    Msg obj = new Msg();
    try {
      obj.setMsg("こんにちは");
      System.out.println(obj.getMsg());
    } catch (Exception e) {
      System.out.println(e);
    }
    try {
      obj.setMsg("さようなら");
      System.out.println(obj.getMsg());
    } catch (Exception e) {
      ** System.out.println(e); **
    }
  }
}

上記を実行すると、2つ目のtryで「こんにちは」ではないので例外処理のため
Exceptionクラスをインスタンス化します。
**の所の出力の結果は
「Java.lang.Exception:挨拶がなっていない!」
となります。
Java.lang.Exceptionの部分は自動的に表示されるものなのでしょうか??
catch (Exception e)の「e」この変数には何が代入されるのでしょうか??
分かる方がいましたらよろしくお願いいたします。

[ メッセージ編集済み 編集者: ピノコ 編集日時 2003-09-26 14:52 ]
とのっち
会議室デビュー日: 2003/09/26
投稿数: 8
投稿日時: 2003-09-26 15:23
始めまして書き込ませていただきます。

>catch (Exception e)の「e」この変数には何が代入されるのでしょうか??

ここには、コールしたメソッド(この場合はobj.setMsg)の処理中に発生した例外が代入されます。

>** System.out.println(e); **

これは、つまり、System.out.println(e.toString());と同じです。つまり、上記のコーディングでは、e.toStringで実装されたメッセージが表示されます。

例外のメッセージのみを表示したければ、以下のように書くといいと思いますよ。

System.out.println(e.getMessage);

ピノコ
会議室デビュー日: 2003/09/10
投稿数: 7
投稿日時: 2003-09-26 15:37
ありがとうございます。

toStringで勉強してみました。
わかりました。

>** System.out.println(e); **
は必ず
System.out.println(e.toString());
という意味なのでしょうか??
今回に限り・・と言うことでしょうか??
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2003-09-26 15:48
引用:

>** System.out.println(e); **
は必ず
System.out.println(e.toString());
という意味なのでしょうか??
今回に限り・・と言うことでしょうか??


そういう疑問はAPIドキュメントで解決しますよ。

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/PrintStream.html#print(java.lang.Object)

Javaの大きな特徴のひとつが、この仕様が決まっていることなので
標準のクラス(java.*とかjavax.*とかのパッケージのもの)の場合は
是非ドキュメントにあたってみてください。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-09-26 15:53
>>** System.out.println(e); **
>は必ず
>System.out.println(e.toString());
>という意味なのでしょうか??
ほぼ同じですが微妙にちがいます。
System.out.println(String.valueOf(e)); と同じですので e に null が代入されていても (このケースでは e が null になることはあり得ませんが) NullPointerException は発生しません。

このテの疑問はまず API を見ましょう。
http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html#print(java.lang.Object)
ピノコ
会議室デビュー日: 2003/09/10
投稿数: 7
投稿日時: 2003-09-26 15:59
ありがとうございます。
分からない時はいつもAPIドキュメントをまず見ているのですが、
どうも・・理解できないんですよね・・。
まず、どのページを見たらいいかも一苦労してる感じです。

でも今回はページを指定していただいたので、助かりました。
plintでオブジェクトを指定してるから・・って
String.valueOf(Object)を調べたら
nullじゃない時はtoStringを戻り値にするって書いてありました。
謎が解けました。
感謝です。
かもめ
会議室デビュー日: 2003/09/22
投稿数: 1
投稿日時: 2003-09-26 16:59
もしEclipseをお使いでしたらShift+F2で現在カーソルが合っている
型.メソッドのAPIドキュメントに飛べますので調べる手間がかなり軽減されると思いますよ。
MergeDocを導入するとホバー表示が日本語化されますのでさらに便利です。
e.と入力するとExceptionで使えるメソッドが日本語説明つきで出てくる出てくる…。
設定が少々面倒&非常に重いのが難点ですけどね。
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2003-09-26 23:41
引用:

ピノコさんの書き込み (2003-09-26 15:59) より:
分からない時はいつもAPIドキュメントをまず見ているのですが、
どうも・・理解できないんですよね・・。
まず、どのページを見たらいいかも一苦労してる感じです。


これは苦労すると思います。量が多いですし。
ただ、慣れの問題だと思うのであきらめずにがんばってください。

スキルアップ/キャリアアップ(JOB@IT)