• 締切済み

例外処理についてご相談

こんばんは。 とあるユーザー定義例外クラスがあるとします。 でこれのコンストラクタが sendException (String errId) sendException (String errId,String errMsg) sendException (String errId,String errMsg,Throwable e) と3種類あるとします。 でCatchする方の記述で困っています。 実は上記例外の送出は既存システムで、3種類全て使用されているのです。 つまり最初の xxxException (String errId) が送出されてきて、Catch側で「Throwable e」を取り出そうとしたら 「NullPointerException」が発生するような気がします。 Catch側でどのコンストラクタでExceptionが生成されたか、チェック する方法はありますでしょうか?。 CatchしたExceptionのプロパティのNull確認をするしかありませんでしょうか・・。 アドバイスお願いします。

noname#46520
noname#46520
  • Java
  • 回答数2
  • ありがとう数1

みんなの回答

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.2

もし、NullPointerExeptionになるのであれば、その「とあるユーザ定義例外クラス」の作りがそもそも間違ってるってことだとおもいますが。 普通は例外クラス自身がThrowableなんだから、もし、コンストラクタからの引数がnullなら、自分自身を渡すとか そういうgetThrowable()メソッドを作るんじゃない?

noname#46520
質問者

お礼

皆様有難うございました。 解決致しました。

回答No.1

>Catch側でどのコンストラクタでExceptionが生成されたか、チェックする方法はありますでしょうか? そのようなことができる一般的な方法はありません。 >CatchしたExceptionのプロパティのNull確認をするしかありませんでしょうか・・。 それで区別できるなら、それでかまわないのではないでしょうか。 >Catch側で「Throwable e」を取り出そうとしたら「NullPointerException」が発生するような気がします。 sendException (String errId,String errMsg)で作ったオブジェクトのそのプロパティにアクセスした場合にNullPointerExceptionが投げられるか、それとも単にnullが返ってくるかはその仕様次第ですから、なんとも推測しようがありません。「気がします」でなく、とにかく当該クラスの仕様を確認してください。仕様が無かったり書かれていなければ、その例外クラスはもはや使い物になりませんね……。

関連するQ&A

  • 例外処理

    デバッグをしてみました。 すると,try・catch文までしか実行されていないことがわかりました。 public void init() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } 例外処理について調べてはみたものの、なぜこの部分で実行が止まってしまうのか、 解決につながるようなことが,みつかりません。 1.例外処理はどのような処理なのか 2.なぜ、try・catchで実行が終了してしまうのか 教えてください。

    • ベストアンサー
    • Java
  • 例外処理がまったくわかりません!!

    下のプログラミングについていくつか質問があります。 (1)etest()メソッドってなんですか? (2)存在しないファイルを開くってどういうことですか? (3)FileReader( )対応catch節、Close( )対応catch節ってなんですか? (4)あと、プログラミングあとの本の解説の部分がよくわかりません。抜粋してみます。 「一般的な例外クラスはxxxExceptionというクラス名をしています。このタイプの例外クラスはみな「Exception例外クラス」をスーパークラスにしています。この場合、「catch(Exception e)」を使うとすべてのxxxException例外を補足できるという仕様になっています。ですから下のetest( )メソッドは次のように、ひとつのcatch節で記述することができます。このようにしても表示される4エラーメッセージ(eで指示)は、正しく発生例外(FileNotFoundExceptionまたはIOException) 対応のものになります。」 public static void etest( ) { try { // try節を書く FileReader fr = new FileReader("xfile.txt"); } catch (FileNotFoundException e) { // FileReader( )対応catch節 System.out.println("例外1: " + e); // 例外情報を表示 return; // 戻る } catch (IOException e) { // Close( )対応catch節 System.out.println("例外2: " + e); // 例外情報を表示 return; // 戻る } System.out.println("ファイルは正しくオープンされました"); } } よろしくお願いします。

    • ベストアンサー
    • Java
  • 例外処理を条件式として使っていいのですか?

    Java初心者です。 以下の様にしているのですが、 for(int i = 0; i < 10; i++){ try { NullPointerException 例外が出る処理 } catch (NullPointerException e) { break; //e.printStackTrace();//例外をコンソールに表示させない。 } } は、以下のようなforを使うのとどのはどちらがいいのでしょうか。 条件式がたくさん必要な場合があり、catch したほうが楽なような気がします。 for(int i = 0; i < 10; i++){ if(例外が出る処理==null){ break; } } また、安全性はどうなのでしょうか。 根本で間違っているのではないかと思い不安で質問しております。 お詳しい方がおられましたら教えて下さいませんでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • 例外処理の作法

    基本的なことですみません、 Try~Catch構文で例外をハンドリングする際に「RuntimeException」と 「Exception」のどちらでCatchするのが良いのでしょうか?。 雑誌のサンプルを眺めているのですが、使い分けのやり方が 良くわかりません。 すみませんがアドバイス頂ければ幸いです。

    • ベストアンサー
    • Java
  • C++の例外処理

    お世話になります。 現在C++でプログラミングを行っていますが、例外処理で困っています。 次のようなコードを書きました。 try{   m_Session.DestroyDatabasePool();   }catch(CException e){   m_Share.WriteLogFile("キャッチ中", LOG_INFO ); } しかし、これだとcatchが行われず、catch(CException e)部分を(...)にすると例外処理が実行されます。 例外の詳細を知りたいので、どうしても(CException e)で行いたいです。 説明が不十分かもしれませんが、何かご存知でしたら、ご教授お願いします。

  • どの例外でcatchすればいいのですか?

    例外の使い方を理解できていません。 さっき検索してみて下の質問と回答を見つけました。 例外処理がまったくわかりません!! http://www.okweb.ne.jp/kotaeru.php3?q=704380 この中の#2さんの回答、 >    catch (FileNotFoundException e){ ・・・ } >     catch (IOException e){ ・・・ } >   などと分けて書かなくとも、 >     catch (Exception e){ ・・・ } >   と書けば、すべての例外を処理できます。 を読むと「それなら、どんな例外でもすべて"(Exception e)"でcatchすればいいじゃん」と思うのですが駄目ですか? もし駄目ならどんな基準でExceptionを選んでいるのですか? 例えば、下のような二分検索木への挿入メソッドの場合、 どこでどのような例外を使ってcatchすればいいのですか? 私の思うような例外を入れてみましたが、どんなエラーが出るかも分からないし…。 だからと言ってthrow ~ catchを入れないとJBuilderが怒るんですよね…。 public void insert(int el) { IntBSTNode p = root, prev = null; try { while (p != null) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (root == null) root = new IntBSTNode(el); else if (prev.key < el) prev.right = new IntBSTNode(el); else prev.left = new IntBSTNode(el); } catch (Exception x) { System.out.println("エラーだ! 何か表示"); } } 分かる方、説明をお願いします。

    • ベストアンサー
    • Java
  • Javaの例外処理の書き方について

    Javaの例外はErrorとRuntimeExceptionは書かなくてもいいが、 Exceptionはtryでcatchする必要があると聞きました。 しかし、java.langのStringを使っても例外処理は書きません。 なぜ、例外を書くやつと書かないやつがあるのですか? たとえば、java.langを使うとしたら、 ClassNotFoundException CloneNotSupportedException Exception の3つをjava.langを使うメソッドのブロックの上にtry文が必要だと思うのですが。

    • ベストアンサー
    • Java
  • PHPの例外処理

    PHPの例外処理について教えてください function test() {   try{    $a = 10;    $b = 0;    $result = $a/$b;   }   catch(Exception $e){    //エラー処理   } } 上記でcatchが実行されるためにはどのようにすれば良いでしょうか?例えば if($b == 0) {   throw new Exception('例外'); } を「$result = $a/$b;」の前に書いておくなどすればcatchされるのはわかりますが、 想定されるすべての例外のthrow処理を記載するなんてことはしたくありません。 実行してエラーだったら自動的にthrowされる、なんていうことはPHPでは無理でしょうか?

    • ベストアンサー
    • PHP
  • 例外処理についてお願いします!!

    下のプログラミングについていくつか質問があります。 (1) プログラムの冒頭に来るpublic static void main(String[] args)を今まで気にしていなかったのですが これはどういうことですか?これもメソッドのひとつなんですか?このプログラムではpublic static void main(String[] args)でメソッドを定義してそれをetest( )メソッドで開いているという感じでしょうか? それとetstってどこから来たのかわかります?作者が勝手につけた名前だそうですが。 (2)FileReader fr = new FileReader("xfile.txt"); のところがわかりません。これはどういう意味ですか? public static void main(String[] args) { public static void etst( ) { try { // try節を書く FileReader fr = new FileReader("xfile.txt"); } catch (FileNotFoundException e) { // FileReader( )対応catch節 System.out.println("例外1: " + e); // 例外情報を表示 return; // 戻る } catch (IOException e) { // Close( )対応catch節 System.out.println("例外2: " + e); // 例外情報を表示 return; // 戻る } System.out.println("ファイルは正しくオープンされました"); } } } よろしくお願いします!!

    • ベストアンサー
    • Java
  • 例外処理について

    こんにちは。 とあるメソッドで例えば 「void openErrorFile(){」とあるのですが、 メソッド内部で } catch (Exception e) { throw new RuntimeException();} と例外をThrowしています。 この場合、メソッドの定義「openErrorFile()」にはThrows句を 付ける必要は無いのでしょうか?。 すみませんがご教授願います。

    • ベストアンサー
    • Java

専門家に質問してみよう