一、什么是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的回收情况)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。