現在、Java Silverの勉強をしています。
例外処理について、catchブロックから新たに例外をthrowすることの可否について質問致します。
以下のコードでは、Exceptionをcatchした後で、catchブロックの中で新たにRuntimeExceptionをthrowしています。
しかし、RuntimeExceptionが次のcatchブロックでcatchされることはなく、RuntimeExceptionをキャッチするブロックが到達不能コードとなるのでコンパイルエラーになります。
java
1public class Main { 2 public static void main(String[] args) { 3 try{ 4 throw new Exception(); 5 } catch (Exception e){ 6 throw new RuntimeException(); 7 }catch (RuntimeException e){ 8 System.out.println("A"); 9 }finally{ 10 System.out.println("B"); 11 } 12 } 13} 14
ここで、Exceptionをcatchするブロックが、RuntimeExeptionをcatchするブロックよりも前にきていることがエラーの原因になるならば、
RuntimeExeptionをcatchするブロックを先に記述し、そこからExceptionをthrowしたらどうなるのかと考えて記述してみました。
java
1public class Main { 2 public static void main(String[] args) { 3 try{ 4 throw new RuntimeException(); 5 } catch (RuntimeException e){ 6 throw new Exception(); 7 }catch (Exception e){ 8 System.out.println("A"); 9 }finally{ 10 System.out.println("B"); 11 } 12 } 13}
この場合、「例外java.lang.Exceptionは報告されません。スローするには、捕捉または宣言する必要があります」というエラーメッセージが出てしまいます。
Exceptionは、RuntimeExceptionをcatchするブロックの次のブロックでcatchするよう記述しているのですが、なぜこのようなエラーメッセージが出てしまうのでしょうか。
そもそも、catchブロックで新たな例外をthrowし、その例外を次のcatchブロックでcatchさせる、という処理が不可能なものなのでしょうか。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/04 10:45