一、异常的理解
-
异常的定义
异常是指程序运行过程中出现的非正常的情况。 -
异常的分类
- 父类:
Throwable
,位于java.lang
包中。 - 子类:
Error
→ 错误Exception
→ 异常
- 父类:
二、异常分类
1. 父类:Throwable
-
特点:
Throwable
是所有错误或异常的父类。 -
常见方法:
printStackTrace()
:获取异常详细信息,用于调试。getMessage()
:获取字符串类型的异常信息。
示例代码:
public class ThrowableExample {
public static void main(String[] args) {
try {
int result = 10 / 0; // 会抛出异常
} catch (ArithmeticException e) {
e.printStackTrace(); // 打印异常信息
System.out.println("异常信息: " + e.getMessage());
}
}
}
2. 子类:Error
- 特点:
- 用于表示程序中无法恢复的严重问题,例如:内存溢出、栈溢出。
- 程序无法通过代码处理此类错误。
常见情况:
java.lang.StackOverflowError
:栈溢出java.lang.OutOfMemoryError
:内存溢出
示例代码:
public class ErrorExample {
public static void recursiveMethod() {
recursiveMethod(); // 无限递归,触发栈溢出
}
public static void main(String[] args) {
try {
recursiveMethod();
} catch (Throwable e) {
System.out.println("捕获到错误: " + e);
}
}
}
输出(示例):
捕获到错误: java.lang.StackOverflowError
3. 子类:Exception
- 特点:
Exception
表示异常,分为 运行时异常 和 非运行时异常。
(1) 运行时异常 (RuntimeException)
- 特点:编译时不需要处理,可以选择忽略。
- 常见异常:
ArrayIndexOutOfBoundsException
:数组下标越界NullPointerException
:空指针异常NumberFormatException
:数字格式异常
示例代码:
public class RuntimeExceptionExample {
public static void main(String[] args) {
try {
String str = null;
System.out.println(str.length()); // 空指针异常
} catch (NullPointerException e) {
System.out.println("捕获到空指针异常: " + e.getMessage());
}
}
}
输出:
捕获到空指针异常: null
(2) 非运行时异常 (编译时异常)
- 特点:必须在编译时处理(使用
try-catch
或throws
)。 - 常见异常:
IOException
:输入输出异常ClassNotFoundException
:类未找到异常
示例代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
File file = new File("test.txt");
FileInputStream fis = new FileInputStream(file);
System.out.println("文件已找到");
} catch (IOException e) {
System.out.println("捕获到异常: 文件未找到");
}
}
}
输出(文件不存在时):
捕获到异常: 文件未找到
三、总结
- Throwable 是异常和错误的根类。
- Error:代表严重错误,程序无法处理,如内存溢出。
- Exception:可处理的异常,分为:
- 运行时异常:程序运行时出现,如空指针异常。
- 非运行时异常:编译时必须处理,如文件未找到异常。