🚀error 和 exception 有什么区别?CheckedException 和 RuntimeException 有什么区别?![](https://img-blog.csdnimg.cn/21df4cc272894325a404d694fcaa08fa.jpeg)
-
Error(错误),表示系统级的错误和程序不必处理的异常,是 Java 运行环境中的内部错误或者硬件问题。
-
例如:内存资源不足等。
-
对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由 Java 虚拟机抛出的。
-
-
Exception(异常),表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。Exception 又分为运行时异常,受检查异常。
-
RuntimeException(运行时异常),表示无法让程序恢复的异常,导致的原因通常是因为执行了错误的操作,建议终止逻辑,因此,编译器不检查这些异常。
-
CheckedException(受检查异常),是表示程序可以处理的异常,也即表示程序可以修复(由程序自己接受异常并且做出处理),所以称之为受检查异常。
-
🦅 异常的使用的注意地方
神作《Effective Java》中对异常的使用给出了以下指导原则:
该书(正在整理),十分推荐去阅读。
-
不要将异常处理用于正常的控制流(设计良好的 API 不应该强迫它的调用者为了正常的控制流而使用异常)。
-
对可以恢复的情况使用受检异常,对编程错误使用运行时异常。
-
避免不必要的使用受检异常(可以通过一些状态检测手段来避免异常的发生)。
-
优先使用标准的异常。
-
每个方法抛出的异常都要有文档。
-
保持异常的原子性
-
不要在
catch
中忽略掉捕获到的异常。
🦅 Throwable 类常用方法?
-
#getMessage()
方法:返回异常发生时的详细信息。 -
#getCause()
方法:获得导致当前 Throwable 异常的 Throwable 异常。 -
#getStackTrace()
方法:获得 Throwable 对象封装的异常信息。 -
#printStackTrace()
方法:在控制台上打印。
🦅 运行时异常
-
NullPointerException
-
IndexOutOfBoundsException
-
ClassCastException
-
ArrayStoreException
-
BufferOverflowException
🦅 throw
与 throws
的区别 ?
-
throw
,用于在程序中显式地抛出一个异常。 -
throws
,用于指出在该方法中没有处理的异常。每个方法必须显式指明哪些异常没有处理,以便该方法的调用者可以预防可能发生的异常。最后,多个异常用逗号分隔。
🦅 异常处理中 finally
语句块的重要性?
不管程序是否发生了异常, finally
语句块都会被执行,甚至当没有catch
声明但抛出了一个异常时, finally
语句块也会被执行。
finally
语句块通常用于释放资源, 如 I/O 缓冲区, 数据库连接等等。
🦅 异常被处理后异常对象会发生什么?
异常对象会在下次 GC 执行时被回收。