java中为什么要处理异常 java异常处理的好处
转载
- Java的基本理念是“结构不佳的代码不能运行”
- 异常处理是Java中唯一正式的错误报告机制,并且通过编译器强制执行
- 使用异常带来的一大好处是,它往往能够降低错误处理代码的复杂度
- 异常情形:指阻止当前方法或作用于继续执行的问题
- 在抛出异常后:
- 首先,同Java中的其他对象的创建一样,将使用new在堆上创建异常对象
- 然后,当前的执行路径被终止,并且从当前环境中弹出对异常对象的引用
- 此时,异常处理机制接管程序,并开始寻找一个恰当的地方来继续执行程序
- 异常使得我们可以将没件事都当做一个事务来考虑
- 异常类型的根类为Throwable对象,错误信息可以保存在异常对象内部或者用异常类的名称来暗示。通常异常对象中仅有的信息就是异常类型,除此之外不会包含任何有意义的内容
- 异常处理理论上有两种基本模型
- java支持终止模型,C++也支持这种模型,在这种模型中,将假设错误非常关键以至于程序无法返回到异常发生的地方继续执行。一旦一场被抛出,就表明错误已无法挽回,也不能回来继续执行。
- 另一种称为恢复模型。意思是异常处理程序的工作是修正错误,然后重新尝试调用出问题的方法,并认为第二次能成功。
- 虽然恢复模型开始显得很吸引人,但是不是很实用,主要原因就是它所导致的耦合:恢复性的处理程序需要了解异常抛出的地点,这势必要包含依赖于抛出位置的非通用性代码,增加了代码编写和维护的困难
- Java提供了throws,可以告知客户端程序员某个方法可能会抛出的异常类型,然后客户端程序员就可以进行相应的处理,这就是异常说明
- 代码必须与异常说明保持一致,如果方法里的代码产生了异常却没有进行处理,编译器会发现这个问题并提醒你:要么处理这个异常,要么就在异常说明中表明此方法将产生异常
- 在编译时被强制检查的异常称为被检查的异常
- 通过捕获Exception异常类型来捕获所有的异常
- 异常链:常常会想要在不会一个异常后抛出另一个异常,并且希望吧原始异常的信息保存下来。所有的Trhowable的子类在构造器中都可以接受一个cause,对象作为参数,表示原始异常。
- 只有三种基本的异常类提供了带caruse参数的构造器,分别是Error(用于Java虚拟机报告系统错误)、Exception以及RuntimeException
- Throwable这个Java类被用来表示任何可以作为异常被抛出的类,Throwable对象可分为两种类型:
- Error:用来表示编译时和系统错误
- Exception:可以被抛出的基本类型,在Java类库,用户方法,以及运行时故障中都可能抛出Exception异常
- 属于运行时异常的类型有很多,他们会自动被Java虚拟机抛出,这些异常都是从RuntimeException类继承而来。他们不再需要在异常说明中声明方法将抛出RuntimeException类型的异常,他们也被称为”不受检查的异常“。这种异常属于错误,将被自动捕获
- 垃圾回收放在finally中,保证无论try块中发生了什么,内存总能得到释放,资源总是能得到清理
- 异常丢失:一些异常被忽略
- 抛出异常的时候,异常处理程序会按照代码的书写顺序找出最近的处理程序,找到匹配的处理程序之后,他就认为异常将的到处理,然后就不再继续查找
- 异常处理的一个重要原则:只有在你知道如何处理的情况下才捕获异常
- 异常处理的一个重要目标:把错误处理代码同错误发生的地点相分离
- 异常链可以直接把被检查的异常包装进RuntimeException里面
- 在以下情况下使用异常:
- 在恰当的级别处理问题
- 解决问题并且重新调用产生异常的方法
- 进行少许修补,然后绕过异常发生的地方继续进行
- 用别的数据进行计算,以代替方法预计会返回的值
- 把当前运行环境下能做的事情尽量做完,然后把相同的异常重抛到最高层
- 把当前运行环境下能做的事情做完,然后把不同的异常抛到更高层
- 终止程序
- 进行简化
- 让类库和程序更安全
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。