发布于 4年前

Error与RuntimeException

一、什么是Error

Error用于指示应用程序不应该试图捕获的严重问题。

二、什么是Exception

Exception类及其子类用于指示应用程序需要处理的异常。

三、Error与Exception之间的联系

1.继承联系

Error与Exception都继承java.lang.Throwable(所有错误或异常的超类)。

2.检查异常

未检查异常: Error与RuntimeException及其子类称为未检查异常(未显示提醒的异常),java编译器未检查的代码块,当程序运行时可能出现的异常,在没有try和catch,也没有throws的情况下,仍然可以编译通过。如:OutOfMemoryError(内存溢出异常),StackOverflowError(堆栈溢出时,抛出该错误),ArrayIndexOutOfBoundsException(数组超出排序索引范围时抛出)等异常。

检查异常: 除了Error与RuntimeException及其子类其他都称为检查异常(提醒处理的异常),这类异常如果没有try和catch,也没有throws的情况下,编译是不能通过的。如:TimeoutException(阻塞操作超时时,抛出该异常),IOException(当发生某种 I/O 异常时,抛出此异常)。

四、异常关键字

1.throw: 用来抛出任意异常,在程序内部使用,调用方法不会显示提醒需要处理异常。当抛出异常时,会检查是否有处理异常,有处理即按照处理逻辑运行,未处理时程序将抛出异常,然后终止运行。

2.throws: 用来抛出多个异常,在方法头部中声明,调用方法会提醒处理异常,不处理即不能通过编译。

3.try: 没有出现异常时,运行的代码块(当某行代码产生异常时,当前代码块立即停止运行)。

4.catch: 出现异常时,运行的代码块(出现异常时执行的代码块)。

5.finally: 不管异常是否出现都会执行的代码块,当try和catch里面有return时,finally还是会执行,⚠️ 如果finally中有return时,将返回finally里面的值。

五、Error与RuntimeException异常处理

1.如果程序出现RuntimeException异常,那么一定是程序没有写完善,需要重新修改程序。

2.如果程序出现StackOverflowError,多数情况下是递归调用方法出现了死循环,修改方法递归处理时的判断语句或者设置一个最大循环数。

3.如果程序出现OutOfMemoryError,那么就是内存满了,新的对象无法分配到内存,修改java内存配置参数(具体配置多少内存,需要预估整个应用的使用情况和GC的回收情况)。

©2020 edoou.com   京ICP备16001874号-3