目录
在Java中,异常和错误都继承自java.lang.Throwable类,这是Java异常处理机制的基础类。Throwable类有两个主要的子类:Exception(异常)和Error(错误)。
-
Error(错误):
- 错误一般表示应用程序无法恢复的严重问题,如硬件故障、内存不足、虚拟机错误等。这类错误通常不应由应用程序捕获或试图处理,因为它们超出了程序的控制范围。常见的Error子类包括:
-
VirtualMachineError
(虚拟机错误):如OutOfMemoryError
(内存溢出)、StackOverflowError
(堆栈溢出)。 -
ThreadDeath
:线程终结。 -
LinkageError
:类定义相关的问题,如ClassNotFoundException
(找不到类定义)。
-
- 错误一般表示应用程序无法恢复的严重问题,如硬件故障、内存不足、虚拟机错误等。这类错误通常不应由应用程序捕获或试图处理,因为它们超出了程序的控制范围。常见的Error子类包括:
-
Exception(异常):
- 异常表示程序运行时可能遇到的问题,可以根据是否需要在编译时检查分为两大类:
2.1 Checked Exception(检查异常,也称受检异常):
- 这类异常在编译时必须被显式处理,要么通过try-catch块捕获,要么通过方法签名中的
throws
关键字声明抛出。常见的检查异常包括:IOException
:输入输出异常。SQLException
:数据库访问异常。ClassNotFoundException
:类未找到异常。
2.2 Unchecked Exception(非检查异常,也称运行时异常):
- 这类异常在编译时不需要显示处理,它们通常表示编程错误或在运行时才可能出现的不可预料的条件。常见的运行时异常包括:
NullPointerException
:空指针异常。ArrayIndexOutOfBoundsException
:数组越界异常。IllegalArgumentException
:非法参数异常。ClassCastException
:类型转换异常。NumberFormatException
:数字格式异常。ArithmeticException
:算术异常,如除以零。
-
用户自定义异常:
- 开发者可以根据需要自定义异常类,通常继承自
Exception
或其子类。自定义异常可以提供更具体的错误信息,便于调试和理解程序中的问题。
- 开发者可以根据需要自定义异常类,通常继承自
//定义一个自定义异常类,继承自现有的异常类,比如 Exception 或某个特定的已存在异常类。
public class CustomException extends Exception {
// 构造方法可以接收一个字符串参数,用来描述异常的具体信息
public CustomException(String message) {
super(message);
}
}
//使用这个自定义异常。
public class Main {
public static void main(String[] args) {
try {
processData("invalid data");
} catch (CustomException e) {
System.out.println("Caught custom exception: " + e.getMessage());
}
}
public static void processData(String data) throws CustomException {
if ("invalid data".equals(data)) {
// 当数据无效时,抛出自定义异常
throw new CustomException("The provided data is invalid.");
} else {
// 正常处理数据的逻辑
System.out.println("Processing data: " + data);
}
}
}