Java 简明教程
Java - Built-in Exceptions
Built-in Exceptions in Java
exception Java 在标准包 java.lang 中定义了多个类。
这些异常中最通用的异常是标准类型 RuntimeException 的子类。由于 java.lang 隐式导入到了所有 Java 程序中,所以大多数派生自 RuntimeException 的异常都可自动获得。
Types of Java Built-in Exceptions
Java 中的内置异常分为两类:Checked Exceptions 和 Unchecked Exceptions。
-
Checked Exceptions :已检查的异常由编程人员在编写代码时进行处理,它们可以使用 try-catch block 进行处理。在编译时检查这些异常。
-
Unchecked Exceptions :未检查的异常不由编程人员处理。这些异常在运行时引发。一些未检查的异常是 NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException 等。
Common Built-in Exceptions in Java
Java 定义了一些其他类型的异常,这些异常与它的各种类库相关。以下是 Java 未经检查和检查的 RuntimeException 的列表。
Sr.No. |
Exception & Description |
1 |
ArithmeticException 算术错误,例如除以零。 |
2 |
ArrayIndexOutOfBoundsException Array index is out-of-bounds. |
3 |
ArrayStoreException 将不兼容类型的元素赋值给数组元素。 |
4 |
ClassCastException Invalid cast. |
5 |
IllegalArgumentException 用于调用方法的非法参数。 |
6 |
IllegalMonitorStateException 非法监视器操作,例如在未锁定的线程上等待。 |
7 |
IllegalStateException 环境或应用程序处于错误状态。 |
8 |
IllegalThreadStateException 请求的操作与当前线程状态不兼容。 |
9 |
IndexOutOfBoundsException 某种类型的索引超出界限。 |
10 |
NegativeArraySizeException 创建具有负大小的数组。 |
11 |
NullPointerException 错误地使用空引用。 |
12 |
NumberFormatException 字符串与数字格式的转换无效。 |
13 |
SecurityException Attempt to violate security. |
14 |
StringIndexOutOfBounds 尝试索引超出了字符串的界限。 |
15 |
UnsupportedOperationException 遇到不支持的操作。 |
16 |
ClassNotFoundException Class not found. |
17 |
CloneNotSupportedException 尝试克隆未实现 Cloneable 接口的对象。 |
18 |
IllegalAccessException 拒绝访问某个类。 |
19 |
InstantiationException 尝试创建抽象类或接口的对象。 |
20 |
InterruptedException 一个线程已被另一个线程中断。 |
21 |
NoSuchFieldException 请求的字段不存在。 |
22 |
NoSuchMethodException 请求的方法不存在。 |
Examples of Java Built-in Exception
Example 1: Demonstrating Arithmetic Exception Without 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)
Example 2: Demonstrating Arithmetic Exception With 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
Example 3: Demonstrating No Such Method Exception
在此示例中,我们展示的是:注册异常由否则编译器会抱怨的代码处理。每当方法抛出注册异常时,它都必须处理异常或声明抛出异常语句,正如我们对 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)