第一部分:Java异常机制详解

1. 异常类型体系

  • 检查型异常(Checked Exception)
    必须显式处理(如IOException

    try {
        Files.readString(Path.of("file.txt"));
    } catch(IOException e) {
        System.err.println("文件读取失败:" + e.getMessage());
    }
    

  • 非检查型异常(Unchecked Exception)
    通常由程序逻辑错误引发(如NullPointerException

    Object obj = null;
    // 以下代码会抛出 NullPointerException
    System.out.println(obj.toString());
    

2. 核心处理方案

// 多重捕获示例
try {
    Integer.parseInt("abc");
} catch(NumberFormatException | NullPointerException e) {
    System.out.println("数据格式异常:" + e.getClass().getSimpleName());
}

3. finally特性

  • 资源关闭应用场景:
    Connection conn = null;
    try {
        conn = DriverManager.getConnection("jdbc:url");
        // 执行数据库操作
    } catch(SQLException e) {
        // 异常处理
    } finally {
        if(conn != null) conn.close(); // 确保资源释放
    }
    

4. 异常传递控制

  • 使用throws声明:
    public void readFile() throws FileNotFoundException {
        new FileInputStream("missing.txt");
    }
    


第二部分:自定义异常实践

1. 创建自定义检查型异常

/**
 * 支付失败异常示例
 */
public class PaymentException extends Exception {
    private final BigDecimal amount;
    
    public PaymentException(String message, BigDecimal amount) {
        super(message);
        this.amount = amount;
    }
    
    public BigDecimal getAmount() {
        return amount;
    }
}

2. 使用场景示例

void processPayment(BigDecimal balance) throws PaymentException {
    if(balance.compareTo(BigDecimal.ZERO) < 0) {
        throw new PaymentException("余额不足", balance);
    }
    // 正常支付逻辑
}


第三部分:工具类设计与实现

1. 核心设计原则

  • 不可实例化约束
    public class EncryptionUtils {
        private EncryptionUtils() { // 私有构造函数
            throw new AssertionError("工具类禁止实例化");
        }
    }
    

2. 实用字符串工具类

/**
 * 字符串处理工具集
 */
public final class StringUtils {
    
    public static boolean isBlank(String input) {
        return input == null || input.trim().isEmpty();
    }
    
    public static String reverse(String input) {
        if(isBlank(input)) return "";
        return new StringBuilder(input).reverse().toString();
    }
    
    // 防止实例化
    private StringUtils() {}
}

3. 集合工具示例

/**
 * 集合工具类
 */
public final class CollectionUtils {

    public static <T> boolean isEmpty(Collection<T> coll) {
        return coll == null || coll.isEmpty();
    }
    
    public static <T> List<T> filterNull(List<T> list) {
        return list.stream()
                  .filter(Objects::nonNull)
                  .collect(Collectors.toList());
    }
    
    private CollectionUtils() {}
}


第四部分:实践整合实例

1. 整合场景应用

public class OrderProcessor {
    void validateOrder(Order order) throws OrderValidationException {
        if(CollectionUtils.isEmpty(order.getItems())) {
            throw new OrderValidationException("订单商品列表为空");
        }
    }

    public static class OrderValidationException extends Exception {
        public OrderValidationException(String message) {
            super(message);
        }
    }
}


总结

  1. 异常处理准则

    • 优先处理具体异常类型
    • 不要忽略异常(避免空catch块)
    • 使用try-with-resources简化资源管理
  2. 工具类最佳实践

    • 确保无状态性(静态方法不依赖类状态)
    • 提供完整单元测试:
      @Test
      void testStringReverse() {
          assertEquals("cba", StringUtils.reverse("abc"));
          assertEquals("", StringUtils.reverse(null));
      }
      

本教程覆盖了异常机制的核心要点和工具类的工程化实现方式,通过完整代码示例帮助您构建健壮的Java应用程序。实际开发时可根据项目需求扩展工具类集合和异常体系。

更多推荐