news 2026/6/20 8:16:20

Java异常处理和工具类的完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java异常处理和工具类的完整教程

第一部分: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应用程序。实际开发时可根据项目需求扩展工具类集合和异常体系。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 7:56:18

Claude-Sonnet-4-6 技术深度解析 + startapi.top 国内中转调用实战

一、前言当前 AI 应用落地普遍存在两大痛点&#xff1a;海外 Claude 官方 API 国内访问不稳定、长文本 / 全项目代码分析成本过高。Anthropic 2026 年初推出的 claude-sonnet-4-6 补齐了中端模型长上下文、自适应推理、工程级代码能力短板&#xff1b;而国内开发者可通过中转服…

作者头像 李华