作者: admin

  • Reblog of 抽屉新热榜:

    Reblog via 抽屉新热榜

    拆分谷歌?垄断案的审判让硅谷感到不安
    dig.chouti.com/link/42323559

  • 深入理解 Java 异常:从机制到实践

    这篇文章深入探讨了 Java 异常的机制、处理规范和实践应用,并从 JVM 字节码的角度分析了异常处理过程。

    Java 异常的分类和处理机制

    • 异常分类:
      • Throwable: 所有错误和异常的超类,包括 Error 和 Exception。
      • Error: 表示严重的错误,通常是不可恢复的,例如 OutOfMemoryError。
      • Exception: 表示可以被程序处理的异常,分为运行时异常 (RuntimeException) 和非运行时异常 (Checked Exception)。
      • 运行时异常: 编译器不检查,例如 NullPointerException、IndexOutOfBoundsException。
      • 非运行时异常: 编译器会检查,例如 IOException、SQLException。
    • 异常处理关键字:
      • try: 监听可能出现异常的代码块。
      • catch: 捕获并处理异常。
      • finally: 无论是否发生异常都会执行的代码块,通常用于释放资源。
      • throw: 抛出异常。
      • throws: 声明方法可能抛出的异常。
    • 异常处理方式:
      • try-catch: 捕获并处理特定类型的异常。
      • try-catch-finally: 捕获并处理异常,并确保 finally 块中的代码执行。
      • try-finally: 不捕获异常,但确保 finally 块中的代码执行。
      • try-with-resource: 自动关闭实现了 AutoCloseable 接口的资源。

    异常处理规范和实践

    • 避免使用异常进行流程控制: 异常处理的性能开销较大,应尽量避免使用异常进行流程控制。
    • 区分异常类型: 捕获和处理异常时,应区分不同的异常类型,并进行相应的处理。
    • 描述错误信息: 捕获异常后,应使用日志等方式记录详细的错误信息,方便排查问题。
    • 正确传递异常: 抛出异常时,应注意不要抛弃原始异常信息,也不要抛出与捕获异常无关的异常。
    • 关闭资源: 使用 finally 块或 try-with-resource 语句确保资源被正确关闭。

    SpringBoot 项目中的异常处理

    • BasicExceptionController: 处理全局异常,并转发到默认的异常页面。
    • @ExceptionHandler: 在控制器类中处理特定类型的异常。
    • @ControllerAdvice + @ExceptionHandler: 处理全局异常。
    • SimpleMappingExceptionResolver: 配置全局异常处理,将异常映射到不同的页面。
    • HandlerExceptionResolver: 实现该接口来处理全局异常。
    • Spring AOP: 使用切面来拦截和处理异常。

    实际项目中的异常处理

    • 业务异常: 用户操作导致的异常,例如用户未登录、没有权限等。
    • 系统异常: 系统内部错误或接口对接时出现的异常,例如 NullPointerException、参数校验错误等。
    • 根据异常类型进行处理: 对业务异常和系统异常进行不同的处理,例如返回不同的错误码和错误信息。

    从 JVM 角度看异常处理

    • 异常创建的性能开销: 创建异常对象的开销是创建普通对象的 12 倍左右。
    • try-catch 字节码分析: 使用异常表来匹配异常类型,并跳转到相应的处理代码。
    • try-catch-finally 字节码分析: 使用异常表和 goto 指令来确保 finally 块中的代码执行。
    • try-finally 字节码分析: 使用异常表来确保 finally 块中的代码执行。
    • try-with-resource 字节码分析: 编译器将 try-with-resource 语句转换为 try-catch-finally 语句,并自动关闭资源。
    • finally 块和 return 的执行顺序: finally 块中的代码会在 return 语句执行完之后,但在返回之前执行。

    总结

    Java 异常处理机制是保证程序健壮性和可靠性的重要手段。开发者需要深入理解异常处理机制和规范,并结合实际项目需求进行合理的异常处理,以提高代码质量和用户体验。

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网
Page Stats: PV: 6529 | UV: 3313
Last updated: 2025-06-26 10:33:10
沪ICP备2024052574号-1