NotionNext
NotionNext
编程爱好者
/互联网从业者
/知识分享博主
认知决定态度,态度决定选择,选择决定人生

Java异常处理机制

NotionNext - 2023-9-5
发布于:2023-9-5|最后更新: 2023-9-5|
type
status
date
slug
summary
tags
category
icon
password

什么是异常?

在Java编程中,异常(Exception)是指在程序执行过程中可能会发生错误或意外情况,这些情况可以干扰程序的正常执行流程,导致程序出现异常或崩溃

异常机制和分类

Java异常机制是指Java程序在运行过程中出现错误时所采取的处理机制。Java异常机制通过抛出异常来处理错误,以保证程序的健壮性和稳定性。
  • 按继承结构
按继承结构异常分为两类:Error与Exception
notion image
  • 按编译器检测角度
Java中的异常分为两种:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。
受检异常是指在编写程序时,编译器会检查是否处理了这类异常。如果不处理,编译器会报错,强制程序员处理这类异常。常见的受检异常包括IOException、SQLException等。
非受检异常是指在程序运行过程中出现的异常,也叫运行时异常(RuntimeException)。这类异常不需要程序员显式处理,如果不处理,程序会自动结束并抛出异常。常见的非受检异常包括NullPointerException、IndexOutOfBoundsException等。
 

如何进行异常处理

Java异常机制通过try-catch语句来处理异常。try语句块中包含可能会抛出异常的代码,catch语句块用于处理try语句块中抛出的异常。如果try语句块中的代码抛出异常,程序将跳转到catch语句块中进行异常处理。
以下是Java异常机制的示例代码:
在上面的代码中,try语句块中包含可能会抛出异常的代码,catch语句块用于处理异常,finally语句块中的代码始终会被执行,无论是否抛出异常。
除了try-catch语句,Java还提供了throws关键字来声明方法可能会抛出的异常。当一个方法可能会抛出异常时,可以使用throws关键字来声明这些异常,以便于其他程序员在调用该方法时知道需要处理哪些异常。
以下是使用throws关键字声明异常的示例代码:
在上面的代码中,readFile()方法可能会抛出IOException异常,因此使用throws关键字来声明这个异常。
Java异常机制是Java程序设计中非常重要的一部分,程序员需要掌握异常的分类、处理方法和异常声明等知识。
 

try catch finally 与 try with resourse

try-catch-finallytry-with-resources 是两种不同的异常处理机制,用于在编程中处理异常情况。它们通常用于不同的编程环境和目的。
  1. try-catch-finally
    1. try-catch-finally 是一种异常处理机制,通常在编程语言中用于捕获和处理异常。它包括以下几个部分:
      • try 块:在 try 块中编写可能引发异常的代码。
      • catch 块:在 catch 块中指定异常处理程序,用于捕获和处理 try 块中引发的异常。
      • finally 块:finally 块中包含的代码会在 try 块执行后无论是否发生异常都会被执行,通常用于资源清理。
      例如,使用 Java 语言的 try-catch-finally 可以这样写:
  1. try-with-resources
    1. try-with-resources 是一种用于自动管理资源的机制,通常用于处理需要显式关闭的资源,如文件或数据库连接。这个机制确保在使用资源后自动关闭资源,无需手动编写关闭代码。它主要在一些编程语言(例如,Java)中使用。
      try-with-resources 中,你只需要在 try 块中创建和使用资源,然后在 try 块之外不需要手动关闭资源。资源类型需要实现 AutoCloseable 接口以确保资源能够被自动关闭。
总结来说,try-catch-finally 用于捕获和处理异常,而 try-with-resources 用于自动管理需要显式关闭的资源。它们在不同的上下文和目的中使用,但都是处理异常的方式。
 

异常处理的最佳实践

  • 不要忽略捕捉的异常
  • 始终只捕捉实际可处理的异常
  • 生产环境不要用 printStackTrace()
  • 在方法签名上要声明具体受检异常,并在javadoc中体现
  • 用 finally 或 try-with-resource 关闭或者释放资源
  • 先捕获子类异常再捕获父类异常
  • Throw early, catch late
  • 捕获异常不要捕获 Throwable
  • 封装异常再抛出时不要忘记原来的 cause
  • 能尽量使用 JDK 标准异常就不要自定义
  • 不要同时抛出异常和 log 异常
手写一个 React useHover hooks 前端如何实现隐藏滚动条,并且页面还可以滚动