Java 异常捕获层次过程
我在java中实现了多个异常的异常处理 请看以下场景: 函数f1抛出异常e1、e2、e3和e4 函数f2捕捉这些 现在,我想显式地捕获e1、e2副捕获(异常e1和e2),其他异常都应该在同一块副捕获(异常e)中捕获 所以e1和e2是特例,其他都是一般例外 那么,下面的工作会起作用吗Java 异常捕获层次过程,java,spring,exception,spring-mvc,exception-handling,Java,Spring,Exception,Spring Mvc,Exception Handling,我在java中实现了多个异常的异常处理 请看以下场景: 函数f1抛出异常e1、e2、e3和e4 函数f2捕捉这些 现在,我想显式地捕获e1、e2副捕获(异常e1和e2),其他异常都应该在同一块副捕获(异常e)中捕获 所以e1和e2是特例,其他都是一般例外 那么,下面的工作会起作用吗 try{ //some work` } catch(ExceptionType1 e1) { //do some special logging } catch (ExceptionType
try{
//some work`
} catch(ExceptionType1 e1) {
//do some special logging
} catch (ExceptionType2 e2) {
//do some special logging
} catch(Exception e) {
//do general logging for other exceptions
}
我的问题是ExceptionType1(e1)是否也会被异常e捕获?要使其正常工作,您需要具有具有不同异常的捕获块 与NullPointerException NumberFormatException和常规异常一样,带有exception参数的catch块将捕获常规异常,因为exception是所有异常的超类
try{
//some work`
} catch(NullPointerException e1) {
//do some special logging
} catch (NumberFormatException e2) {
//do some special logging
} catch(Exception e) {
//do general logging for other exceptions
}
为此,您需要具有具有不同异常的catch块 与NullPointerException NumberFormatException和常规异常一样,带有exception参数的catch块将捕获常规异常,因为exception是所有异常的超类
try{
//some work`
} catch(NullPointerException e1) {
//do some special logging
} catch (NumberFormatException e2) {
//do some special logging
} catch(Exception e) {
//do general logging for other exceptions
}
使用您的代码将捕获
catch(Exception e1){…}
其他catch
-块未使用。如果要以不同的方式处理不同的异常
-类型,则必须给出捕获(…)
其他异常
-类型
像
使用您的代码将捕获
catch(Exception e1){…}
其他catch
-块未使用。如果要以不同的方式处理不同的异常
-类型,则必须给出捕获(…)
其他异常
-类型
像
同一类不能有多个catch块,即
Exception
如果有多个异常
,则需要为每个异常创建一个单独的类,并为特定类创建catch块
请注意,catch块的顺序必须从更具体的类到更通用的类
e、 g
因此,在上面的代码中,如果异常是FileNotFoundException
的,则只执行第一个catch
。否则,将对前一个catch
块中未捕获的Exception
类的任何实例执行带有Exception
的catch块
最后,Throwable
将捕获任何非Exception
固有的内容,例如Error
您不能有多个具有相同类的catch块,即Exception
如果有多个异常
,则需要为每个异常创建一个单独的类,并为特定类创建catch块
请注意,catch块的顺序必须从更具体的类到更通用的类
e、 g
因此,在上面的代码中,如果异常是FileNotFoundException
的,则只执行第一个catch
。否则,将对前一个catch
块中未捕获的Exception
类的任何实例执行带有Exception
的catch块
最后,Throwable
将捕获任何与异常
无关的内容,例如错误
规范:
如果try块的执行由于抛出值V而突然完成,则有一个选择:
- 如果V的运行时类型与try语句的任何catch子句的可捕获异常类(§5.2)赋值兼容,则选择第一个(最左边的)catch子句。值V被分配给所选catch子句的参数,并执行该catch子句的块,然后有一个选项:
- 如果该块正常完成,则try语句正常完成
- 如果该块由于任何原因突然完成,那么try语句也会因为同样的原因突然完成
因此,最多将执行一个catch块。规范:
如果try块的执行由于抛出值V而突然完成,则有一个选择:
- 如果V的运行时类型与try语句的任何catch子句的可捕获异常类(§5.2)赋值兼容,则选择第一个(最左边的)catch子句。值V被分配给所选catch子句的参数,并执行该catch子句的块,然后有一个选项:
- 如果该块正常完成,则try语句正常完成
- 如果该块由于任何原因突然完成,那么try语句也会因为同样的原因突然完成
因此,最多将执行一个catch块。对不起,我的意思是相同的,我现在编辑了问题。对不起,我的意思是相同的,我现在编辑了问题。对不起,我的意思是相同的,我现在编辑了问题,我想我已经得到了答案。对不起,我的意思是相同的,我现在编辑了问题,我想我也得到了答案。@SambhavSharma您的异常处理将在第一次捕获异常后退出。因此,如果它符合ExceptionType1,它将在相应的catch块之后退出。@SambhavSharma您的异常处理将在第一个捕获的异常之后退出。因此,如果它符合ExceptionType1,它将在相应的catch块之后退出。
try {
} catch (FileNotFoundException e) {
System.err.println("FileNotFoundException: " + e.getMessage());
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
} catch (Exception e) {
System.err.println("Caught Exception: " + e.getMessage());
} catch (Throwable e) {
System.err.println("Caught Throwable: " + e.getMessage());
}