• ベストアンサー

try catch

public String getMessage() { try { .... return "okay"; } catch (Exception e) { return "error"; } のように、エラーが起こったら catch 句で String を返すとうプログラムはありですか?

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

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

returnに限らず、例外をif文のように利用することは できるだけ避けるべきね。 特にcatchする例外がExceptionだと 継続不可能な例外が発生したときでも 正常系として処理される可能性があるわ。 このような例外で処理を分けるようなことは 処理として本当に問題ないかどうか きちんと考慮した上で利用しないといけない。 特にRuntimeException系は原則catchするべきではないわ。 RuntimeException系はcatchせずに判定することができるからね。 NullPointerExceptionなんかがいい例ね。 そういう点をきちんと考慮した上で ここはこう実装するのがいい という確信が持てるのなら一向に構わないわよ。 そうそう、本当にそれが例外ならばどんどん使っていいわよ。 提示したコードが単純に 例外が発生しない場合okay、発生した場合errorを返す と言うような単純なvalidate的なものなら それは問題ないわ。 でも、messageがnullのときは""を返す というような判定に catch(NullPointerException)はダメ。 きちんとif文で判定しましょう。 長くなったわね。 言いたいことが上手く伝わっているといいんだけど。 簡単にまとめると ・判定できるものはちゃんと判定しよう ・catchするのはできるだけ意味のある例外にしよう と言ったとこかな。

noname#101202
質問者

お礼

catch は適切な例外で catch して NullPoなどは判定していきます。すっきりしました。ありがとうございます。

関連するQ&A

  • try~catchについて

    プログラム初心者です 繰り返し処理の中でtry~catchにスローしてもいいでしょうか?(正常にfor文は終了しますか?) try { for($a = 0; $a < 5; $a++) { if($a==3){ throw new Exception('3'); } } catch (Exception $e) { $msg = $e->getMessage(); } よろしくお願いします

    • ベストアンサー
    • PHP
  • try~catch

    php初心者です try~catchをわかりやすく教えてください throw new Exceptionが出現したら、catchまでの処理をしないでとばすとゆうことですか? try~catchを抜けたら、他の処理は普通に実行されるのでしょうか? try~catchのカッコ{で囲む範囲は大きくしたほうがいいでしょうか?(大きく囲むと処理スピードおそくなりますか?) try { throw new Exception('エラーが発生しました');  print "hoge"; } catch (Exception $e) {  echo '例外発生', $e->getMessage(), "\n"; }  print "foo"; よろしくお願いします

    • ベストアンサー
    • PHP
  • if文の書き方

    プログラム初心者です if文の処理速度が速いのは一般的に考えてどちらでしょうか? 別々にif文で処理する方法 try { if(!isset($_REQUEST['id'])&& !is_string($_REQUEST['id'])){ throw new Exception('error'); } if(!isset($_COOKIE['date'])&& !is_string($_COOKIE['date'])){ throw new Exception('error'); } } catch (Exception $e) { $msg = $e->getMessage(); } 一緒に処理する方法 try { if(!isset($_REQUEST['id']) && !is_string($_REQUEST['id']) && !isset($_COOKIE['date']) && !is_string($_COOKIE['date'])){ throw new Exception('error'); } } catch (Exception $e) { $msg = $e->getMessage(); } よろしくお願いします

    • ベストアンサー
    • PHP
  • try catchについて

    try catchの動きで質問があります。 以下が簡略化したソースです。 -------ここから--------------------- ストリーム1; ストリーム2; try{ try{ //ストリーム1を使った処理 }catch(IOException e){ throw e; }finally{ //ストリーム1のクローズ } try{ //ストリーム2を使った処理 }finally{ //ストリーム2のクローズ } } catch(IOException e){ throw new hogeException(); } ------ここまで-------------------------- 内側でスローされた例外は、外側でcatchされるのですか? また、内側でcatchをしなかった場合、外側でcatchされるのですか? この2点を教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • プログラムからの返答の意味がわかりません..

    import java.io.*; public class Teme { public static void main(String [] args) { String [] command = { "C:\\Users\\yuzumodoki\\Desktop\\chunkparser-1.0\\chunkparser-1.0\\parser.exe", "aaaa" }; // 外部プログラムを実行 Runtime runtime = Runtime.getRuntime(); Process process = null; try { process = runtime.exec(command); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } // 外部プログラムの標準出力から読み込み BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); System.out.println(br); try { String line; while((line = br.readLine()) != null) { System.out.println(line); } } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } finally { try { br.close(); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } } } } 上記のプログラムはparser.exeにアクセスし,そのアプリケーションに文字列を送り,処理をしてその結果を取得するというものです. 本来"aaaa"と送ると"(aaaa aaaa)"と返ってくるプログラムなのですが, java.io.BufferedReader@89ae9e と返ってきます.これはなぜだかわかる方いらっしゃいますか?また,aaaa aaaaと本来の値を返すにはどうすればいいかわかる方いらっしゃいませんか.. もしわかる方いらっしゃたら教えて頂けたらすごくうれしいです(つj)

  • ソースの全てにtryを使うことについて

    実行時エラーでエラーのソース位置とエラー原因が分からない場合があります。 コンストラクタとデストラクタとメソッドは、最初から最後までをtryでくくって、} catch (Exception e) { でe.toString()をログファイルに書き出すようにしようと考えていますが、得策でしょうか?

    • ベストアンサー
    • Java
  • try ~ catch構文が使えない

    ロリポップサーバを利用しています。 http://lolipop.jp/?mode=manual&state=hp&state2=cgi try ~ catchやthrowでエラーがでます。 仕方なくcatch文を外したり、throwを使わない構文に していますが、どうも不安です。 try ~ catchやthrowを使えないとあきらめるしか ないのでしょうか? PHPのバージョンが対応していないのでしょうか?

    • ベストアンサー
    • PHP
  • phpの例外処理がエラーをトラップしてくれない。

    以下のように例外処理を記述しした場合、 try{ //ここでエラー } catch (Exception $e){ $ErrorMsg="その他エラー:".$e->getMessage(); } tryの中で、0除算によるエラーが発生してもエラーをトラップして、例外 処理のcatchに飛びません。 どのように記述すればエラーをトラップできるのでしょか?

    • ベストアンサー
    • PHP
  • どの例外で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
  • Try, Catch についての質問

    すみません!!VB超初心者です。 PriceとCostのテキストボックスにマイナスやアルファベットを記入して計算ボタンを押した場合、Errorを示すメッセージボックスを出したいのです。 ところが、このプログラムだとちゃんと正の数字を入れた場合でもエラーのメッセージボックスがでてしまいます・・・。これはなぜなのでしょうか?よろしくお願いします! Dim priceDecimal, costDecimal, answerDecimal As Decimal Try priceDecimal = Decimal.Parse(txtprice.Text) costDecimal = Decimal.Parse(txtcost.Text) answerDecimal = Decimal.Parse(lblcomission.Text) Try txtprice.Text = priceDecimal < 0 txtcost.Text = costDecimal < 0 Catch priceException As FormatException MessageBox.Show("You have entered Invalid Data.", "Error", MessageBoxIcon.Exclamation) End Try Catch costException As FormatException MessageBox.Show("You have entered Invalid Data", "Error",MessageBoxButtons.OK, (MessageBoxIcon.Exclamation) End Try answerDecimal = Commision_rate_Decimal * (priceDecimal - costDecimal) lblcomission.Text = answerDecimal.ToString("C") End Sub

専門家に質問してみよう