dポイントプレゼントキャンペーン実施中!

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;
}
}
また、安全性はどうなのでしょうか。
根本で間違っているのではないかと思い不安で質問しております。
お詳しい方がおられましたら教えて下さいませんでしょうか。
よろしくお願い致します。

A 回答 (2件)

例外を通常の制御フローに利用することは、各所でバッドプラクティス(良くない慣習)とされていますね。


この例の場合だと、異常が無くてもnullになる値にアクセスして例外が発生しているのであれば、そうなりますね。

Effective Javaでは「例外的状況にだけ例外を使用する」と表現されています。

理由としては、もともと例外はエラー等の例外的状況で使用されることを前提としているため、JVMによる最適化がされにくいこと、コードの読み手も何らかの異常が発生したという前提で読むことが多いこと、メソッドを超えたジャンプを引き起こすためコードが複雑になることなどが挙げられます。また、異常によって発生した同種の例外を区別するすべは有りませんから、異常が発生してもそれが隠されてしまう可能性も有ります。

下記の書籍・サイトは参考になるでしょう。

http://www.amazon.co.jp/dp/489471499X
http://www.amazon.co.jp/dp/489100455X/
http://www.ibm.com/developerworks/jp/java/librar …

なお、nullチェックについては、Nullオブジェクトパターンなどを使って簡略化できる場合も有りますよ。
http://www.hyuki.com/dp/dpinfo.html#NullObject
    • good
    • 0
この回答へのお礼

説明とても解りやすくありがとうございます。
Effective Javaも読んでみようと思います。

お礼日時:2012/03/07 21:10

上記のソースは、そこだけ見ても何の処理か解りません。


例えば異常終了したのか、処理を途中で切り上げたのか。
リストの終端に行き着いたから正常終了しただけなのか。
などです。

どちらが正しいかは、文脈(内容)次第なので、一概には言えません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!