在Java中,异常分为两大类:checked exception(受检异常)和unchecked exception(非受检异常)。受检异常是那些在编译时期就必须处理的异常,否则程序无法编译通过。这种机制确保了开发者能够提前考虑到各种异常情况,并强制要求处理这些可能发生的异常,以增强程序的健壮性。
以下是一些常见的checked exception的例子:
- IOException - 这是处理输入输出操作时可能遇到的异常,比如读写文件时。如果文件不存在,或者没有读写权限,就会抛出这个异常。
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("somefile.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
- SQLException - 在处理数据库操作时,如果SQL查询有问题,或者连接数据库时遇到问题,就会抛出这个异常。
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnect {
public static void main(String[] args) {
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
// 使用连接对象进行数据库操作
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
- ClassNotFoundException - 这个异常发生在尝试加载类时,但找不到该类。这经常发生在使用
Class.forName()动态加载类时。
java
public class Main {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
这些checked exception必须被显式地捕获(try-catch)或者在方法签名中通过throws子句声明。这样做的目的是提醒开发者,这些操作可能会失败,并且需要有相应的处理逻辑来应对这些失败的情况。