Java 常用异常类
时间: 2025-01-01 08:31:37 浏览: 9
### 常用 Java 异常类列表及说明
#### 一、Throwable 类
这是所有异常和错误的父类,在Java中所有的异常都继承自这个类[^2]。
#### 二、Error 类
`Error` 是 `Throwable` 的子类,表示严重的错误。这些错误通常表明JVM遇到了问题,大多数应用程序不应该尝试捕获这种类型的对象。常见的有:
- **OutOfMemoryError**: 当可用内存不足以完成操作时发生此错误。
- **StackOverflowError**: 方法调用栈溢出时触发该错误,通常是无限递归的结果。
#### 三、Exception 类及其派生类
`Exception` 及其子类代表可由程序处理的情况。它们又细分为两大类别:受检(checked)异常与不受检(unchecked)异常即运行时异常。
##### (一)非运行时异常 (Checked Exception)
这类异常是在编译阶段就会被检测到并强制开发者处理的一类异常。如果方法内部可能抛出此类异常,则要么在其声明处加上 throws 子句指明可能会发生的特定异常类型;要么使用 try-catch 结构来捕获它。以下是几个典型的例子:
- **IOException**: 输入/输出过程中遇到的问题所引发的异常,如文件读写失败等。
```java
import java.io.*;
public class FileReaderExample {
public static void main(String[] args) {
File file = new File("example.txt");
BufferedReader br;
try {
br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null){
System.out.println(line);
}
br.close();
} catch (FileNotFoundException e) {
System.err.println(e.getMessage());
} catch (IOException e) {
System.err.println(e.getMessage());
}
}
}
```
- **SQLException**: SQL数据库访问期间出现问题时产生的异常。
##### (二)运行时异常 (Unchecked Exception 或 RuntimeException)
对于这一系列异常来说,虽然也是从 `Exception` 继承而来,但是因为属于 `RuntimeException` 范畴内的原因,所以在语法上并不强求一定要显式地声明或捕捉它们。然而良好的编程实践仍然建议尽可能早地发现这些问题并通过适当的方式加以修复而不是依赖于默认行为让 JVM 来终止应用执行流程。下面列举了一些重要的实例:
- **NullPointerException**: 尝试对null对象引用成员变量或方法的时候会发生这样的异常。
```java
String str = null;
// 下面这行代码将会导致 NullPointerException
int length = str.length(); // 错误示范
if(str!=null && !str.isEmpty()){
int correctLength=str.length(); // 正确做法
}
```
- **ArrayIndexOutOfBoundsException**: 数组索引越界时会抛出此异常,当试图访问数组中的非法位置时会出现这种情况。
```java
int[] numbers={1,2,3};
numbers[-1]=9; // 抛出 ArrayIndexOutOfBoundsException
System.out.println(numbers[numbers.length]); // 同样也会抛出同样的异常
```
- **ClassCastException**: 不合法的数据转换会导致此类异常的发生,比如把一个整数当作字符串来进行强制转型就有可能造成这个问题。
```java
Object obj=new Integer(42);
String s=(String)obj; // ClassCastException: Cannot cast from Integer to String
```
- **IllegalArgumentException**: 参数传递给API函数不符合预期的情况下应该抛出此异常,用于指示传入的方法参数不合适。
```java
void validateAge(int age){
if(age<0 || age>150){
throw new IllegalArgumentException("Invalid Age Value");
}
}
validateAge(-5); // 抛出 IllegalArgumentException
```
阅读全文