type
status
date
slug
summary
tags
category
icon
password
什么是异常?
在Java编程中,异常(Exception)是指在程序执行过程中可能会发生错误或意外情况,这些情况可以干扰程序的正常执行流程,导致程序出现异常或崩溃
异常机制和分类
Java异常机制是指Java程序在运行过程中出现错误时所采取的处理机制。Java异常机制通过抛出异常来处理错误,以保证程序的健壮性和稳定性。
- 按继承结构
按继承结构异常分为两类:Error与Exception
- 按编译器检测角度
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-finally
和 try-with-resources
是两种不同的异常处理机制,用于在编程中处理异常情况。它们通常用于不同的编程环境和目的。- try-catch-finally:
try
块:在try
块中编写可能引发异常的代码。catch
块:在catch
块中指定异常处理程序,用于捕获和处理try
块中引发的异常。finally
块:finally
块中包含的代码会在try
块执行后无论是否发生异常都会被执行,通常用于资源清理。
try-catch-finally
是一种异常处理机制,通常在编程语言中用于捕获和处理异常。它包括以下几个部分:例如,使用 Java 语言的
try-catch-finally
可以这样写:- try-with-resources:
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 异常