【JavaSE专栏68】异常的捕获和处理,try-catch-finally高效解决异常处理问题

作者主页Designer 小郑
作者简介:3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。
主打方向:Vue、SpringBoot、微信小程序

本文讲解了 Java 中异常的捕获和处理概念及语法,并给出了样例代码。捕获异常可以处理运行过程中可能出现的错误情况,防止程序因为异常而终止执行。通过捕获异常并采取合适的处理措施,可以使程序更加健壮和稳定。

在这里插入图片描述


一、为什么要捕获异常

在 Java 中,捕获异常是一种良好的编程实践,有以下 4 4 4 个原因,请同学们认真学习。

  1. 错误处理:捕获异常可以处理运行过程中可能出现的错误情况,防止程序因为异常而终止执行。通过捕获异常并采取合适的处理措施,可以使程序更加健壮和稳定。
  2. 异常信息:捕获异常可以提供有关异常发生的详细信息,如异常类型、堆栈轨迹等,有助于调试和排查程序中的问题。可以将异常信息记录下来,以便后续分析和修复问题。
  3. 容错性:通过捕获异常,可以在异常发生时进行相应的处理,避免程序终止或产生不可预期的结果。合理的异常处理可以使程序更加容错,能够优雅地处理异常情况,提高系统的可靠性和稳定性。
  4. 用户友好性:捕获异常可以提供更友好的用户界面和错误提示。通过捕获异常并向用户以易于理解的方式显示错误信息,可以提升用户体验,并帮助用户更好地理解和解决问题。

总而言之,捕获异常是一种良好的编程实践,可以提高程序的健壮性、可靠性和用户友好性,它使得程序能够处理在运行过程中可能出现的异常情况,并采取适当的措施来处理异常,保证程序的正常执行。

在这里插入图片描述


二、try-catch语句

在 Java 中,·try-catch· 语句用于捕获和处理异常,它的基本语法如下,请同学们复制到本地尝试执行。

try {
    // 可能会引发异常的代码
} catch (ExceptionType1 e1) {
    // 处理 ExceptionType1 类型的异常
} catch (ExceptionType2 e2) {
    // 处理 ExceptionType2 类型的异常
} finally {
    // 可选部分,无论是否发生异常都会执行的代码
}

try 块中,你可以编写可能会引发异常的代码,如果在 try 块中发生了异常,那么程序将跳转到对应的 catch 块,并执行 catch 块中的代码来处理异常。

catch 块采用异常类型作为参数,用于捕获特定类型的异常。同学们可以使用多个 catch 块来捕获不同类型的异常,以便进行特定的处理。catch 块中的代码将根据异常类型执行相应的逻辑。

finally 块是可选的,用于编写无论是否发生异常都会执行的代码,finally 块中的代码通常用于释放资源或进行清理操作。

try-catch 语句块必须按照顺序编写,即先写 try 块,然后是 catch 块,最后是 finally 块。同时,catch 块和 finally 块可以省略其中的一部分,但 try 块是必须的。

以下是一个示例代码,演示了 try-catch 语句的用法,请同学们复制到本地尝试执行。

try {
    int result = divide(10, 0);
    System.out.println("Result: " + result);
} catch (ArithmeticException e) {
    System.out.println("An arithmetic exception has occurred: " + e.getMessage());
} finally {
    System.out.println("Finally block is executed");
}

public static int divide(int num1, int num2) {
    return num1 / num2;
}

在上述代码中,我们调用了 divide(10, 0) 方法,该方法进行除法运算。由于除数为 0 0 0,将会抛出 ArithmeticException 异常。

然后,异常被catch块捕获并处理,输出异常信息:An arithmetic exception has occurred: / by zero

不管是否发生异常,finally 块中的代码都会执行,输出:Finally block is executed

使用 try-catch 语句块可以捕获和处理异常,避免程序终止执行,提高程序的健壮性和容错性。

在这里插入图片描述


三、try-finally语句

在 Java 中,try-finally 语句用于保证无论是否发生异常,某段代码都会被执行,它的基本语法如下,请同学们认真学习。

try {
    // 可能会引发异常的代码
} finally {
    // 无论是否发生异常都会执行的代码
}

try 块中,同学们可以编写可能会引发异常的代码。

无论是否发生异常,程序都会执行 finally 块中的代码。finally 块通常用于释放资源、关闭连接或进行清理操作,以确保程序在结束时能够完成必要的操作。

如果 try 块中发生了异常,程序会跳转到 finally 块之前执行 catch 块(如果有的话)。

catch 块会处理异常,然后程序继续执行 finally 块中的代码。

finally 块执行完毕后,程序继续执行异常处理之后的代码。

以下是一个示例代码,演示了 try-finally 语句的用法:

public class Example {
    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.out.println("An arithmetic exception has occurred: " + e.getMessage());
        } finally {
            System.out.println("Finally block is executed");
        }
    }
    
    public static int divide(int num1, int num2) {
        try {
            return num1 / num2;
        } finally {
            System.out.println("Finally block inside divide() method is executed");
        }
    }
}

在上述代码中,我们调用了 divide(10, 0) 方法,该方法进行除法运算。由于除数为 0 0 0,将会抛出 ArithmeticException 异常。然后,异常被 catch 块捕获并处理,输出异常信息:An arithmetic exception has occurred: / by zero

不管是否发生异常,finally 块中的代码都会执行,输出:Finally block is executed

同时,在 divide() 方法中,无论是否发生异常,finally 块中的代码也会执行,输出:Finally block inside divide() method is executed

使用 try-finally 语句块可以确保某段代码在任何情况下都会被执行,无论是否发生异常,这对于清理资源和进行一些必要的操作非常有用。

在这里插入图片描述


四、try-catch-finally语句

在 Java 中,try-catch-finally 语句用于捕获和处理异常,同时保证某段代码无论是否发生异常都会被执行,它的基本语法如下,请同学们认真学习。

try {
    // 可能会引发异常的代码
} catch (ExceptionType1 e1) {
    // 处理ExceptionType1类型的异常
} catch (ExceptionType2 e2) {
    // 处理ExceptionType2类型的异常
} finally {
    // 无论是否发生异常都会执行的代码
}

try 块中,你可以编写可能会引发异常的代码。如果在 try 块中发生了异常,程序将跳转到对应的 catch 块,并执行 catch 块中的代码来处理异常。catch 块采用异常类型作为参数,用于捕获特定类型的异常。你可以使用多个 catch 块来捕获不同类型的异常,以便进行特定的处理。

catch 块中的代码将根据异常类型执行相应的逻辑。可以在每个 catch 块中处理不同类型的异常,也可以在一个 catch 块中处理多个异常类型,如 catch (ExceptionType1 | ExceptionType2 e)

finally 块是可选的,用于编写无论是否发生异常都会执行的代码。finally 块中的代码通常用于释放资源或进行清理操作。

注意,try-catch-finally 语句块必须按照顺序编写,即先写 try 块,然后是 catch 块,最后是 finally 块。同时,catch 块和 finally 块可以省略其中的一部分,但 try 块是必须的。

以下是一个示例代码,演示了 try-catch-finally 语句的用法,请同学们认真学习。

try {
    int result = divide(10, 0);
    System.out.println("Result: " + result);
} catch (ArithmeticException e) {
    System.out.println("An arithmetic exception has occurred: " + e.getMessage());
} finally {
    System.out.println("Finally block is executed");
}

public static int divide(int num1, int num2) {
    try {
        return num1 / num2;
    } finally {
        System.out.println("Finally block inside divide() method is executed");
    }
}

在上述代码中,我们调用了 divide(10, 0) 方法,该方法进行除法运算。由于除数为 0 0 0,将会抛出 ArithmeticException 异常。

然后,异常被 catch 块捕获并处理,输出异常信息:An arithmetic exception has occurred: / by zero

不管是否发生异常,finally 块中的代码都会执行,输出:Finally block is executed

同时,在 divide() 方法中,无论是否发生异常,finally 块中的代码也会执行,输出:Finally block inside divide() method is executed

使用 try-catch-finally 语句块可以捕获和处理异常,同时保证某段代码在任何情况下都会被执行,无论是否发生异常。这对于清理资源和进行一些必要的操作非常有用。

在这里插入图片描述


五、异常处理流程

在Java中,异常处理的流程一共有以下 7 7 7 步,请同学们认真学习。

  1. 发生异常:当程序执行过程中发生异常时,JVM 会抛出一个异常对象。
  2. 异常捕获:使用 try-catch 语句块来捕获并处理异常。在 try 块中编写可能会引发异常的代码。
  3. 异常匹配:当发生异常时,JVM 会按照顺序从上到下依次匹配 catch 块中的异常类型。如果匹配到了相应的异常类型,程序将跳转到匹配的 catch 块中执行对应的代码。
  4. 异常处理:在 catch 块中,可以编写处理异常的逻辑。这可以包括输出错误信息、记录日志、回滚事务等操作。如果没有 catch 块匹配到异常类型,异常将被传递到上一级调用栈。
  5. finally块执行:无论是否发生异常,finally 块中的代码都会被执行。finally 块通常用于释放资源或进行清理操作。
  6. 异常传递:如果在 catch 块中处理了异常,程序将继续执行 catch 块之后的代码。如果没有处理异常或处理后抛出了新的异常,异常将被传递到上一级调用栈,直到被捕获或导致程序终止执行。
  7. 异常链:在 catch 块中,可以通过 throw 关键字抛出新的异常,并将原始异常作为新异常的原因传递。这形成了异常链,更好地描述了异常发生的过程。

异常处理的目的是提高程序的健壮性和容错性,防止程序因为异常而崩溃,合理地使用异常处理可以
更好地管理和处理错误情况,使程序更加可靠。


六、异常处理面试题

  1. 什么是 Java 中的异常?请举例说明常见的异常类型。
  2. try-catch-finally 语句的作用是什么?请解释它们的执行顺序。
  3. throws 和 throw 之间有什么区别?
  4. RuntimeException 和 Checked Exception 有什么区别?它们何时应该使用?
  5. 什么是异常处理链?它有什么作用?
  6. 在 Java 中,catch 块中可以有多个 catch 语句吗?如果可以,它们的顺序是怎样的?
  7. try-with-resources 语句块是什么?它与传统的 try-finally 语句块有什么区别?
  8. 在 Java 中,如何定义自定义异常类?为什么要自定义异常类?
  9. 如果在 finally 块中使用 return 语句,会发生什么情况?
  10. 什么是异常处理的最佳实践?你有哪些建议?

在这里插入图片描述


七、总结

本文讲解了 Java 中异常的捕获和处理概念及语法,并给出了样例代码,在下一篇博客中,将讲解 Java 中 throw throws 关键字的用法。

在这里插入图片描述

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值