Java 异常类型及示例17 May 2025 | 8 分钟阅读 在 Java 中,异常是在程序执行过程中发生的事件,它会中断程序指令的正常流程。我们不希望发生且会限制代码正常执行的错误或异常被称为异常。在本节中,我们将重点介绍Java 中的异常类型以及它们之间的区别。 异常类型异常可以分为两类
![]() 内置异常已在Java 库中提供的异常称为内置异常。这些异常能够定义错误情况,以便我们理解出现此错误的原因。它们可以分为两大类,即受检异常和非受检异常。 已检查异常受检异常被称为编译时异常,因为这些异常在编译时由编译器进行检查。编译器确保程序员是否处理了异常。程序员必须处理异常;否则,系统将显示编译错误。 受检异常示例示例编译并运行输出 Main.java:5: error: unreported exception FileNotFoundException; must be caught or declared to be thrown file_data = new FileInputStream("C:/Users/Desktop/Hello.txt"); ^ Main.java:7: error: unreported exception IOException; must be caught or declared to be thrown while(( m = file_data.read() ) != -1) { ^ Main.java:10: error: unreported exception IOException; must be caught or declared to be thrown file_data.close(); ^ 3 errors 在上面的代码中,我们尝试读取 Hello.txt 文件以在控制台上显示其数据。执行上述程序时,我们会收到以下异常:
处理受检异常我们主要有两种方法可以处理这些异常。 使用 throws 关键字 异常发生在 main() 方法中。我们可以通过使用 throws 关键字在 main() 方法中声明异常来消除这些编译错误。由于父子关系,我们只声明 IOException,而不声明 FileNotFoundException。IOException 类是 FileNotFoundException 类的父类,因此 IOException 会自动处理此异常。我们将按以下方式声明异常: 当使用 throws 关键字处理 IOException 来编译和运行上述代码时,我们会得到以下输出: Hello Java 使用 try-catch 块 我们也可以使用 try-catch 块来处理此异常。然而,我们上面使用的方式是不正确的。我们必须为每个异常提供有意义的消息,因为它更容易理解错误。我们将按以下方式使用 try-catch 块: 示例编译并运行输出 File Not Found! Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.io.FileInputStream.read()" because "<local1>" is null at Main.main(Main.java:12) 我们将在控制台上看到一条恰当的错误消息“文件未找到!”,因为在该位置没有 Hello.txt 文件。我们将在控制台上看到以下消息: 未检查异常非受检异常与受检异常恰恰相反。编译器不会在编译时检查这些异常。简而言之,如果程序抛出非受检异常,即使我们没有处理或声明它,程序也不会给出编译错误。通常,当用户在与程序交互时提供无效数据时,就会发生这种情况。 注意:由于父子关系,RuntimeException 类能够解决所有非受检异常。非受检异常示例ArithmeticException:除以零 示例编译并运行输出 Runtime Error: Exception in thread "main" java.lang.ArithmeticException: / by zero at Main.main(Main.java:7) 在上述程序中,我们用 0 除以 35。代码将成功编译,但会在运行时抛出 ArithmeticException 错误。用 0 除以一个数会抛出除零异常,这是一个非受检异常。 让我们看另一个非受检异常的例子。 ArrayIndexOutOfBoundsException 示例示例编译并运行输出 Runtime Error: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 7 out of bounds for length 6 at Main.main(Main.java:6) 在上面的代码中,我们试图获取位于位置 7 的元素,但数组的长度为 6。代码编译成功,但在运行时抛出 ArrayIndexOutOfBoundsException。 用户定义异常在 Java 中,我们已经有一些内置的异常类,如 ArrayIndexOutOfBoundsException、NullPointerException 和 ArithmeticException。这些异常仅限于在某些预定义的条件下触发。在 Java 中,我们可以通过继承 Exception 类来编写自己的异常类。我们可以使用 throw 关键字在特定条件下抛出自己的异常。要创建用户定义的异常,我们应该具备 try-catch 块和 throw 关键字的基本知识。 让我们编写一个 Java 程序并创建用户定义的异常。 示例编译并运行输出 Exception value = 5 解释 在上面的代码中,我们创建了两个类,即 Main 和 NewException。Main 类包含 main() 方法,NewException 类是一个用户定义的异常类,它继承了 Exception 类。在 NewException 类中,我们创建了一个整型变量 x 并在构造函数中为其赋值。为该变量赋值后,我们返回异常消息。 在 Main 类中,我们添加了一个 try-catch 块。在 try 块中,我们抛出异常,即 NewException,并向其传递一个整数。该值将被传递到 NewException 类并返回一条消息。我们在 catch 块中捕获该消息并在控制台上显示。 受检异常与非受检异常的区别
我们不希望发生且会限制程序正常执行的错误或异常被称为异常。 结论ArithmeticException、ArrayIndexOutOfBoundsExceptions、ClassNotFoundExceptions 等属于内置异常。有时,内置异常不足以解释或描述某些情况。为了描述这些情况,我们必须通过将一个异常类作为 Exception 类的子类来创建自己的异常。这些类型的异常属于用户定义异常。 1. 下列哪项是 Java 中的受检异常?
答案:3) 解释:编译器使用 try-catch 或 throws 子句要求您处理受检异常。其他是非受检异常(RuntimeException 的子类),而 IOException 是受检异常。 2. 以下代码的输出是什么?
答案:3) 解释:这是一个非受检异常的例子。当运行时除以零时,会引发 ArithmeticException。它编译成功但由于是非受检异常而无法执行。 3. 关于 Java 中的受检异常,以下哪项陈述是正确的?
答案:4) 解释:受检异常必须使用 throws 关键字声明,或使用 try-catch 块手动处理。 4. 下列代码的输出是什么?
答案:3) 解释:FileReader 抛出一个名为 FileNotFoundException 的受检异常,需要进行处理或声明。由于未声明或捕获,因此编译器会报错。 5. 识别异常类型。 抛出什么类型的异常,代码应如何处理?
答案:2) 解释:此代码在运行时抛出称为 NullPointerException 的非受检异常。虽然可以使用 try-catch 来可选地处理它,但编译器不要求这样做。 |
在本节中,我们将学习什么是 sublime number,并创建 Java 程序来检查给定数字是否为 sublime number。Sublime number 程序经常出现在 Java 编码面试和学术界。Sublime Number 自然数 N 是...
阅读 2 分钟
在 Java 中,Lock 是 Java.util.concurrent.locks 包中提供的一个接口。Java Lock 充当与同步块类似的线程同步机制。过了一段时间,引入了一种新的锁定机制。它非常灵活,并且与...
5 分钟阅读
在 Java 中,默认参数是一项强大的功能,它允许开发人员为方法参数定义默认值。当一个方法有大量参数,但其中一些参数并非总是必需时,这将非常有用。默认参数已在 Java 8 中引入,并且……
阅读 4 分钟
? 抽象类是不能实例化的 Java 类,但可以为它们的具体子类提供一组方法和属性来实现。抽象类通常用于构建一组具有某些共享行为但其他行为不同的相似类。抽象...
阅读 4 分钟
在本节中,我们将创建一个 Java 程序来显示 1 到 100 之间的偶数。要学习 Java 偶数程序,您必须具备 Java for 循环和 if 语句的基本知识。我们可以使用不同的方法来显示偶数:使用 Java...
阅读 3 分钟
自然数是指包含从 1 到无穷大的所有正整数的数字。例如,1、2、3、4、5、......、n。当我们把这些数字加在一起时,我们就得到了自然数的和。在本节中,我们将创建以下程序:Java...
阅读 3 分钟
java.time.format.DecimalStyle 类具有 getPositiveSign() 方法。Java DecimalStyle 类用于检索此 DecimalStyle 的 Locale 所用的正号字符。此方法返回该区域的正号字符。语法:public char getPositiveSign() 参数:...
阅读 3 分钟
Java Runnable 接口 Java runnable 是一个用于在并发线程上执行代码的接口。它是一个接口,如果我们希望该类的实例由线程执行,则该类需要实现该接口。Runnable 接口有一个未定义的...方法。
5 分钟阅读
在 Java 中,类中定义的变量和方法只能通过创建该类的实例来访问,或者如果方法是静态的,则可以使用类名访问。点运算符用于访问类中的方法和变量....
7 分钟阅读
java.util.function 包首次发布于 Java 8,其中包含 LongConsumer 接口,该接口用于在 Java 中进行函数式编程。它是接受单个 long 值参数但不输出任何内容的函数的一个示例。LongConsumer 类型对象...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India