Java 中异常抛出后代码还会继续执行吗

1、若一段代码前有异常抛出,并且这个异常没有被捕获,这段代码将产生编译时错误:无法访问的语句

public static void test() throws Exception {
    throw new Exception("参数越界"); 
    System.out.println("异常后");   // 编译错误,无法访问的语句
}

2、若一段代码前有异常抛出,并且这个异常被 try…catch 所捕获,则有两种情况:

  • 若该代码在 try 中抛出异常位置之后,则不执行;
  • 若在整个 try...catch 之后,且 catch 语句中没有抛出新的异常,则这段代码能够被执行,否则,同上。
try {
    throw new Exception("参数越界"); 
    system.out.println("继续执行后续代码");   // 前面抛出异常,不能执行
} catch(Exception e) {
    e.printStackTrace();
}
System.out.println("异常后");    // 可以执行

3、若在一个条件语句中抛出异常,则程序能被编译,但后面的语句不会被执行

if (true) {
    throw new Exception("参数越界"); 
}
System.out.println("异常后");   // 抛出异常,不会执行

4、抛出异常被捕获后不会再被后面的 catch 捕获

try {
    throw new MyException("参数越界");
} catch (MyException e) {
    System.out.println("第一次 catch");       // 执行
    throw e;        
} catch (Exception e) {
    System.out.println("第二次 catch");       // 不会执行
    throw e;       
}

你可能感兴趣的:(Java 中异常抛出后代码还会继续执行吗)