十种常见的Java异常及其处理方式

118 阅读3分钟

在Java编程中,异常处理是保证程序健壮性的重要手段。正确地处理异常不仅可以避免程序崩溃,还能提供更好的用户体验。本文将介绍十种常见的Java异常及其处理方式。

1. NullPointerException

异常描述:当尝试使用一个null对象引用进行操作时,会抛出此异常。

处理方式

  • 检查对象是否为null,再进行操作。
  • 使用Java 8的Optional类来优雅地处理null值。
// 检查null
if (obj != null) {
    obj.doSomething();
}

// 使用Optional
Optional.ofNullable(obj).ifPresent(o -> o.doSomething());

2. ArithmeticException

异常描述:在算术运算中,如果发生数学上的错误(如除以零),会抛出此异常。

处理方式

  • 确保除数不为零。
  • 使用try-catch块捕获并处理异常。
try {
    int result = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("Cannot divide by zero!");
}

3. IndexOutOfBoundsException

异常描述:当访问数组或集合时,索引超出范围,会抛出此异常。

处理方式

  • 确保索引在有效范围内。
  • 使用增强型for循环或迭代器遍历集合。
try {
    int[] array = {1, 2, 3};
    System.out.println(array[5]); // 索引超出范围
} catch (IndexOutOfBoundsException e) {
    System.out.println("Index is out of bounds!");
}

4. ClassCastException

异常描述:尝试将对象强制转换为不兼容的类型时,会抛出此异常。

处理方式

  • 确保转换类型正确。
  • 使用instanceof操作符检查对象类型。
Object obj = "Hello";
try {
    String str = (String) obj;
} catch (ClassCastException e) {
    System.out.println("Class cast exception occurred!");
}

5. IOException

异常描述:在进行输入输出操作时,如果发生错误,会抛出此异常。

处理方式

  • 使用try-with-resources语句确保资源正确关闭。
  • 捕获并处理异常。
try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    System.out.println("An error occurred while reading the file!");
}

6. SQLException

异常描述:在数据库操作中,如果发生错误,会抛出此异常。

处理方式

  • 确保SQL语句正确。
  • 使用try-catch块捕获并处理异常。
try (Connection conn = DriverManager.getConnection(url, user, password);
     PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users")) {
    ResultSet rs = stmt.executeQuery();
    while (rs.next()) {
        System.out.println(rs.getString("name"));
    }
} catch (SQLException e) {
    System.out.println("Database access error occurred!");
}

7. NumberFormatException

异常描述:尝试将字符串转换为数字,但字符串不包含有效格式的数字时,会抛出此异常。

处理方式

  • 确保字符串是有效的数字格式。
  • 捕获并处理异常。
try {
    int number = Integer.parseInt("abc");
} catch (NumberFormatException e) {
    System.out.println("Invalid number format!");
}

8. IllegalArgumentException

异常描述:传递给方法的参数不合法时,会抛出此异常。

处理方式

  • 确保参数合法。
  • 捕获并处理异常。
try {
    Math.sqrt(-1);
} catch (IllegalArgumentException e) {
    System.out.println("Invalid argument passed to the method!");
}

9. FileNotFoundException

异常描述:尝试打开或访问不存在的文件时,会抛出此异常。

处理方式

  • 确保文件存在。
  • 捕获并处理异常。
try (FileInputStream fis = new FileInputStream("nonexistentfile.txt")) {
    // 文件操作
} catch (FileNotFoundException e) {
    System.out.println("File not found!");
}

10. UnsupportedOperationException

异常描述:尝试执行不支持的操作时,会抛出此异常。

处理方式

  • 确保操作受支持。
  • 捕获并处理异常。
try {
    List<String> list = new ArrayList<>();
    list.add("Hello");
    list.add(0, "World"); // UnsupportedOperationException for some lists
} catch (UnsupportedOperationException e) {
    System.out.println("Operation is not supported!");
}

处理异常是Java编程中的一个重要部分。正确地捕获和处理异常,可以使程序更加健壮和用户友好。