ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# java 中的异常处理 > 原文: [https://beginnersbook.com/2013/04/java-exception-handling/](https://beginnersbook.com/2013/04/java-exception-handling/) 异常处理是 java 编程最重要的特性之一,它允许我们处理异常引起的运行时错误。在本指南中,我们将学习什么是异常,它的类型,异常类以及如何使用示例处理 java 中的异常。 ## 什么是异常? 异常是一个不需要的事件,它会中断程序的正常流程。当发生异常时,程序执行将终止。在这种情况下,我们会收到系统生成的错误消息。关于异常的好处是它们可以用 Java 来处理。通过处理异常,我们可以向用户提供有关问题的有意义的消息,而不是系统生成的消息,这可能是用户无法理解的。 ### 为什么会发生异常? 可能有几个原因导致程序抛出异常。例如:在程序中打开一个不存在的文件,网络连接问题,用户提供的错误输入数据等。 ## 异常处理 如果发生异常(程序员尚未处理),则程序执行将终止,并向用户显示系统生成的错误消息。例如,查看下面的系统生成异常: **系统生成的异常在**下面给出 ```java Exception in thread "main" java.lang.ArithmeticException: / by zero at ExceptionDemo.main(ExceptionDemo.java:5) ExceptionDemo : The class name main : The method name ExceptionDemo.java : The filename java:5 : Line number ``` 此消息不是用户友好的,因此用户将无法理解出错的地方。为了让他们用简单的语言知道原因,我们处理异常。我们处理这些条件,然后向用户输出用户友好的警告消息,这使得他们可以纠正错误,因为大多数时候由于用户提供的错误数据而发生异常。 ### 异常处理的优点 异常处理可确保在发生异常时程序流不会中断。例如,如果一个程序有一堆语句,并且在执行某些语句后中途发生异常,则异常后的语句将不会执行,程序将突然终止。 通过处理,我们确保所有语句都执行,程序流程不会中断。 ## 错误和异常之间的区别 **错误**表示出现了严重问题,应用应该崩溃而不是尝试处理错误。 **异常**是代码中发生的事件。程序员可以处理这些情况并采取必要的纠正措施。几个例子: `NullPointerException` - 当你尝试使用指向`null`的引用时。 `ArithmeticException` - 当用户提供错误数据时,例如,当您尝试将数字除以零时,会发生此异常,因为将数字除以零是未定义的。 `ArrayIndexOutOfBoundsException` - 当您尝试从其边界外访问数组的元素时,例如,数组大小为 5(这意味着它有五个元素),并且您尝试访问第 10 个元素。 ![Exception classes hierarchy](https://img.kancloud.cn/99/24/9924597a4e7863dda7e7e4d68e3b5423_700x350.jpg) ## 异常的类型 Java 中有两种类型的异常: 1)受检的异常 2)非受检的异常 我已在单独的教程中详细介绍了这一点: [Java](https://beginnersbook.com/2013/04/java-checked-unchecked-exceptions-with-examples/) 中的受检和非受检异常。 ### 受检异常 除运行时异常之外的所有异常都称为受检异常,因为编译器在编译期间检查它们以查看程序员是否已处理它们。如果在程序中未处理/声明这些异常,则会出现编译错误。例如,`SQLException`,`IOException`,`ClassNotFoundException`等。 ### 非受检的异常情况 运行时异常也称为非受检的异常。这些异常不会在编译时检查,因此编译器不会检查程序员是否已经处理过它们,但程序员有责任处理这些异常并提供安全退出。例如,`ArithmeticException`,`NullPointerException`,`ArrayIndexOutOfBoundsException`等。 > 编译器永远不会强制您捕获此类异常或强制您使用`throws`关键字在方法中声明它。 ## 下一个教程将介绍哪些主题 1. [Java 中的`try-catch`](https://beginnersbook.com/2013/04/try-catch-in-java/) 2. [嵌套的`Try Catch`](https://beginnersbook.com/2013/04/nested-try-catch/) 3. [受检和非受检的异常](https://beginnersbook.com/2013/04/java-checked-unchecked-exceptions-with-examples/) 4. [Java 中的`finally`块](https://beginnersbook.com/2013/04/java-finally-block/) 5. [`try-catch-finally`](https://beginnersbook.com/2013/05/flow-in-try-catch-finally/) 6. [`finally`块和`return`语句](https://beginnersbook.com/2013/05/java-finally-return/) 7. [在 Java 中抛出异常](https://beginnersbook.com/2013/04/throw-in-java/) 8. [`throw`关键字](https://beginnersbook.com/2013/12/throw-keyword-example-in-java/)的示例 9. [`throw`关键字的例子](https://beginnersbook.com/2013/12/throws-keyword-example-in-java/) 10. [`throws`](https://beginnersbook.com/2013/04/java-throws/) 11. [`throw` vs `throws`](https://beginnersbook.com/2013/04/difference-between-throw-and-throws-in-java/) 12. [异常处理示例](https://beginnersbook.com/2013/04/exception-handling-examples/)