Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类参考

Java 有用资源

Java - 内置异常



Java 中的内置异常

Java 在标准包java.lang内定义了几个异常类。

这些异常中最普遍的是标准类型 RuntimeException 的子类。由于java.lang被隐式导入到所有 Java 程序中,因此大多数从 RuntimeException 派生的异常都自动可用。

Java 内置异常的类型

Java 中的内置异常分为两类:受检异常和非受检异常。

  • 受检异常:受检异常在编写代码期间由程序员处理,可以使用try-catch 块进行处理。这些异常在编译时进行检查。
  • 非受检异常:非受检异常不由程序员处理。这些异常在运行时抛出。一些非受检异常包括 NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException 等。

Java 中常见的内置异常

Java 定义了其他几种与各种类库相关的异常类型。以下是 Java 非受检和受检 RuntimeException 的列表。

序号 异常及描述
1

ArithmeticException

算术错误,例如除以零。

2

ArrayIndexOutOfBoundsException

数组索引越界。

3

ArrayStoreException

向数组元素分配不兼容的类型。

4

ClassCastException

无效的强制转换。

5

IllegalArgumentException

用于调用方法的非法参数。

6

IllegalMonitorStateException

非法的监视器操作,例如等待未锁定线程。

7

IllegalStateException

环境或应用程序处于不正确状态。

8

IllegalThreadStateException

请求的操作与当前线程状态不兼容。

9

IndexOutOfBoundsException

某种类型的索引越界。

10

NegativeArraySizeException

创建大小为负数的数组。

11

NullPointerException

无效地使用空引用。

12

NumberFormatException

字符串到数字格式的无效转换。

13

SecurityException

试图违反安全性。

14

StringIndexOutOfBounds

试图索引字符串范围之外。

15

UnsupportedOperationException

遇到不支持的操作。

16

ClassNotFoundException

类未找到。

17

CloneNotSupportedException

试图克隆未实现 Cloneable 接口的对象。

18

IllegalAccessException

拒绝访问类。

19

InstantiationException

试图创建抽象类或接口的对象。

20

InterruptedException

一个线程被另一个线程中断。

21

NoSuchFieldException

请求的字段不存在。

22

NoSuchMethodException

请求的方法不存在。

Java 内置异常示例

示例 1:演示不带 try-catch 的算术异常

在这个示例中,我们通过将一个值除以 0 来创建错误。在这种情况下,将引发一个未检查异常。由于是未检查异常,编译器不会报错,程序将成功编译。一旦程序运行,异常将被抛出,JVM 将拦截它并终止程序,并在打印最后一条语句之前终止。

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
        
      int b = 0;
      int c = 1/b;
      System.out.println("c :" + c);
   }
}

输出

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.tutorialspoint.ExcepTest.main(ExcepTest.java:8)

示例 2:使用 try-catch 演示算术异常

在这个示例中,我们正在处理未检查异常。第一步,我们通过将一个值除以 0 来生成错误。在这种情况下,将引发一个未检查异常。我们通过 ArithmeticException 处理它。一旦程序运行,异常将被抛出,catch 块将拦截它并打印最后一条语句。

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
      try {
         int b = 0;
         int c = 1/b;
         System.out.println("c :" + c);
      }
      catch (ArithmeticException e) {
         System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}

输出

Exception thrown  :java.lang.ArithmeticException: / by zero
Out of the block

示例 3:演示 NoSuchMethodException 异常

在这个示例中,我们展示了检查异常必须由代码处理,否则编译器会报错。每当方法抛出检查异常时,它必须要么处理异常,要么声明 throws 异常语句,就像我们对 getName() 方法所做的那样。当我们尝试运行该方法时,JVM 会报错,如下面的输出所示。

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
      ExcepTest excepTest = new ExcepTest();
      excepTest.getName();
   }
   
   private String getName() throws NoSuchMethodException {
	   throw new NoSuchMethodException();
   }
}

输出

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Unhandled exception type NoSuchMethodException

    at com.tutorialspoint.ExcepTest.main(ExcepTest.java:7)
java_exceptions.htm
广告