2017-05-23 11 views
0

私はJavaを学び始めました。の場合、try-catchブロックの必要性について混乱しました。try-catchブロックは必要ですか?

のは、私は自分のコードに次があるとしましょう:

System.out.println(args[0]); 

私は任意の引数を持っていない場合、私は次のエラーを取得:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 
at Main.main ... 

をしかし、私はなぜ必要なのか疑問に思いました出力が上記と同じで、私も問題を特定できたら、e.printStackTrace()のtry-catchブロックがありますか?

+1

try-catchブロックを使用して、スローされたエラーを無視できます。エラーがあなたのプログラムに影響を及ぼさず、引き数が渡されていなくても実行し続ける必要があるなら、これは良いことです。 – XtremeBaumer

+2

@XtremeBaumer * "エラーがあなたのプログラムに影響しないなら、これは良いです" *これはあまりありません。不可能でさえある。それがプログラマーに影響しないなら、それは誤りではないでしょう。あなたが意味するのは例外です。 – Tom

答えて

2

try-catchブロックの目的は、単純なe.printStackTrace()を持つのではなく、コード内の可能な例外を管理することです。

try-catchブロックを必要とすることにより、Javaでは、コード内で発生する可能性のある例外を処理し、コードを正常に実行できないようにするための処理を決定する必要があります。

さらに、catchを使用して例外をキャプチャすると、コードはafterを実行し続けることができます。例外がキャプチャされない場合は発生しません。

+2

また、Javaが必ず例外をキャッチするとは限りません(https://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation)。提供された例では、ArrayIndexOutOfBoundsExceptionをキャッチすることは意味がありません。なぜなら、*プログラミングエラー*であり、*異常な実行時条件ではないからです* – crizzis

2

すべての例外を捕捉する必要はありません。 Javaには、チェックとチェックされないという2種類の例外があります。ルールは単純ですが、チェックされた例外は呼び出し元によって処理される必要がありますが、チェックされていない例外はそれをキャッチしないか、キャッチすることによって処理できます。

が未チェックの例外であるため、必ずしもキャッチする必要はありません。しかし、それが処理されない場合、アプリケーションはクラッシュします。エラーが発生した場合にアプリを保存したい場合があります。この場合、例外をキャッチするのがその方法です。例:ユーザーからのURLを要求し、そのURLに接続しようとします。 URLが無効な場合、例外がスローされます。しかし、アプリケーションをクラッシュさせる代わりに、ユーザーに通知して新しいURLを要求することができます。したがって、例外をキャッチしてエラー処理を行います。

基本的には、単純にe.printStackTrace()を実行するのは悪い習慣です。 catchブロック上で実際のエラー処理を行うか、それを放棄してください。

関連する問題