Javaで到達不能なキャッチブロックとは何ですか?
構文
try { // statements } catch(Exception e) { System.out.println(e); } catch(NumberFormatException nfe) { //unreachable block. Not supported by Java, leads to an error. System.out.println(nfe); }
次の条件の両方が当てはまる場合、catch句はコンパイラによって到達可能であると見なされます
- tryブロックでスローされるチェック済みの例外は、Cのパラメーターに割り当てることができます。
- パラメータタイプがCのパラメータタイプと等しいかスーパータイプである以前のcatch句はありません
次の条件の両方が当てはまる場合、catch句はコンパイラによって到達可能であると見なされ、到達不能になる可能性があります
- catch句のパラメータタイプEには、チェックされていない例外は含まれていません。
- タイプがEの(厳密な)サブタイプであるtryブロックでスローされるすべての例外は、以前のcatch句によってすでに処理されています。
例
public class UnreachableBlock{ public static void main(String[] args) { try { int i = Integer.parseInt("abc"); //This statement throws NumberFormatException } catch(NumberFormatException nfe) { System.out.println("This block handles NumberFormatException"); } catch(Exception e) { System.out.println("This block handles all exception types"); } catch (Throwable t) { System.out.println("Throwable is super class of Exception"); } } }
出力
This block handles NumberFormatException
-
Javaで複数のcatchブロックを持つtryブロックを定義できますか?
はい、Javaで複数のcatchブロックを含む1つのtryブロックを定義できます。 すべての試行は、少なくとも1つのキャッチブロックに関連付ける必要があり、関連付ける必要があります。 tryブロックで例外オブジェクトが識別され、複数のcatchブロックがある場合は常に、catchブロックが定義された順序に基づいてcatchブロックの優先順位が与えられます。 常に最初のキャッチブロックが最優先されます。最初のcatchブロックが識別された例外オブジェクトを処理できない場合、すぐ次のcatchブロックが考慮されます。 例 class TryWithMultipleCatch {
-
Javaでcatchブロックなしのtryブロックを使用できますか?
はい、finalブロックを使用することで、catchブロックなしでtryブロックを作成できます。 ご存知のとおり、tryブロックで例外が発生した場合でも、System.exit()が常に実行されることを除いて、finalブロックは常に実行されます。 例1 public class TryBlockWithoutCatch { public static void main(String[] args) { try { System.out.println(&q