![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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;
}
}
また、安全性はどうなのでしょうか。
根本で間違っているのではないかと思い不安で質問しております。
お詳しい方がおられましたら教えて下さいませんでしょうか。
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
例外を通常の制御フローに利用することは、各所でバッドプラクティス(良くない慣習)とされていますね。
この例の場合だと、異常が無くても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
No.2
- 回答日時:
上記のソースは、そこだけ見ても何の処理か解りません。
例えば異常終了したのか、処理を途中で切り上げたのか。
リストの終端に行き着いたから正常終了しただけなのか。
などです。
どちらが正しいかは、文脈(内容)次第なので、一概には言えません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 変数のスコープ 5 2023/05/27 17:50
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
VB.Net Object型 空かどうか
-
SQLException getNextException()
-
WebClient()以外でネットにアク...
-
VBA 400エラー 1004エラー
-
グローバル初期化されるインス...
-
C# マルチスレッドにおける例外...
-
初回例外
-
VBA Evaluate関数 型が一致しま...
-
メソッドが存在するかどうかの...
-
サーブレットからJSPの呼び出し...
-
スタックオーバーフローとは?
-
C#についての質問です。今週中...
-
オープンアプリにおける、テキ...
-
ADOによるレコードの追加/更新
-
C# 2010 レジストリのRUNに...
-
Timestamp型への変換について(J...
-
おススメのJavaScriptエディタ
-
例外の可能性は、MSDNライブラ...
-
Bean→JSPでの文字化け
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
【JAVA】与えられた金額を貨幣...
-
時間の取得
-
VB.Net Object型 空かどうか
-
連続する「\\」をひとつの「\\...
-
数字か文字列かを判定する関数
-
String型の日付(2005/11/25)の...
-
VBA Evaluate関数 型が一致しま...
-
0除算の例外処理ができない!!...
-
VB.NETで16進数が正しいかどう...
-
文字列が数字のみで構成されて...
-
Timestamp型への変換について(J...
-
例外ってIf文の中に入れますか...
-
全角スペースのチェックについて
-
ファイルダイアログを開いた時...
-
C# マルチスレッドにおける例外...
-
VBA 400エラー 1004エラー
-
nullで、return出来るのはどん...
-
C#の捕捉されない例外処理の対...
-
C# UriFormatExceptionの回避
おすすめ情報