-1

Javaの基礎を学びました。例外処理について知りたいです。

1) 使用してもよろしいですか

try{............
}catch(Exception ex){
........
}

のようなより具体的なものの代わりに

try{............
}catch(FileNotFoundException ex){
........
}

この方法では、どのタイプの例外がスローされるかわかりません。

2) コードのどの部分がtryブロック内にあるかを決定する方法。コード全体を「try」の中に入れて顔を向けたらまずいですか?

3) catch ブロックについて具体的に説明する必要がある場合、スローされる可能性のある例外の種類をどのように知ることができますか?

4

5 に答える 5

1

それは悪い変種です。例:

socket.send(data); // sending data via socket. This may cause IOException

Exceptionしかし、例えば、別の可能性がありますNullPointerException。すべての例外をキャッチすると、間違いを見つけるのが難しくなります。

Socket socket = null;
socket.send(data); // sending data via socket. This will cause NullPointerException

この例では、 があることがわかりますが、NullPointerExceptionこれはIOException

最良のバリアントは次のとおりです。

try {
    Socket socket = null;
    socket.send(data);
} catch(IOException ex) {
    ex.printStackTrace();
} catch(NullPointerException ex) {
    ex.printStackTrace();
}
// or in java 7 you can write catch(IOException | NullPointerException ex)

catchいくつかの例外をキャッチしたい場合、またはnull.

私の英語でごめんなさい

于 2012-06-16T14:12:30.733 に答える
1
  1. 可能であれば、より具体的なものではなく、より良いオプションです
  2. コード全体を「try」内に配置すると、例外を特定することはできず、処理(例外に対して何をすべきか)でさえ制限されます

私が言ったように、より具体的なものの代わりに、可能であればより良いオプションですが、よくわからない場合は、この方法を使用できます

try{............
}catch(FileNotFoundException ex){
........
}catch(Exception ex){
........
}

一般的な強制執行が最後に来ることを意味します。

于 2012-06-16T14:12:48.827 に答える
0

Javaには2種類の例外があります

1 つのチェック済み例外

2未チェックの例外

だからあなたの質問はHow to decide what part of code be inside try block.

Java は、最初のタイプの例外を引き起こす可能性がある try ブロック内にコード ブロックを記述することを強制します。

e.printStackTrace();例外の原因についての詳細を知るために書くことができます。

于 2012-06-16T14:13:14.733 に答える
0

そして答えは… .それは場合によります。

アプリケーションが異なる例外タイプに対して異なる動作をするようにする場合は、tryブロックを短くし、例外を個別にキャッチする必要があります。

ただし、コードの失敗を普遍的な方法で処理する必要があると判断した場合は、すべての例外を 1 つのcatchブロックでキャッチできます。たとえば、次のようにします。

try {

    // large block of code, throwing lots of exceptions

} catch (Throwable t) {

    // This way you, and your admin will know what really happened.
    logger.log(Level.SEVERE, "Error in my awesome block of code", t);


    // This way you're hiding error details from your users
    someGUI.showErrorMessage("Unexpected error during processing. Contact your local IT");
}

実際には、これは通常これよりも複雑であり、どのエラーを個別に処理するか、どのエラーを単一の普遍的な方法で処理するかを決定する必要があります。

于 2012-06-16T14:15:43.397 に答える
-1

1) try{..}catch(Exception e) {..} を使用すると、コードがよりコンパクトになり、例外を 1 か所で管理できるようになります。複数のタイプの例外を管理するために、catch ブロックを連結することもできます。

try {
    ..
} catch(FileNotFoundException fe) {
    //manage here this kind of exception
} catch(NullPointerException ne) {
    //you missed a check on nulls! But the file has been found...
} catch(Exception e) {
    //file has been found and no nulls are left...
}

ブロックの順序が重要であることに注意してください。この例では、FileNotFoundException と NullPointerException の両方がある場合、FileNotFoundException キャッチ ブロックにリダイレクトされます。

2) try-catch ブロックは明らかにコードのパフォーマンスに影響を与えるため、次のようなコードのみを配置する必要があると思います。 (例: ソケット接続、ファイル IO など) - 例外処理を利用して、特定の動作を通知します (例: GoogleAppEngine タイムアウト例外など)。

于 2012-06-16T14:20:08.120 に答える