介绍
异常就是程序运行过程中出现的错误。Java中,阻止当前方法或作用域的情况,称之为异常
Java语言的异常处理框架,是Java语言健壮性的一个重要体现
思想
Java把异常当做对象来处理,并定义一个基类Java.lang.Throwable作为所有异常的超类。在Java API中已经定义了许多异常类,这些异常类分为两大子类:
1)、错误:Error
包括虚拟机错误和线程死锁,一旦Error出现,线程就彻底的挂了,被称为程序终结者
这种情况仅凭程序是无法处理的,在程序中也不会对Error异常进行捕捉和抛出
2)、异常:Exception
主要指编码、环境、用户操作输入出现问题,Exception主要包括两大类:
思想: Java通过面向对象的思想进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中每个异常都是一个对象,它是Throwable类或其子类的实例。当一个方法出现异常后边抛出一个异常对象,该对象中包含有异常信息,调用这个对象方法可以捕获到这个异常并可以对其进行处理
关键字: Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws。
try语句不可以独立存在,必须与catch或者finally块同存,负责捕获异常,一旦try中发现异常,程序的控制权将被移交给catch块中异常处理程序
负责如何处理。比如发出警告:提示、检查配置、网络连接、记录错误等,执行完catch块之后程序跳出catch块,继续执行后面的代码。
编写catch块的注意事项:多个catch块处理的异常类,要按照先catch子类后catch父类的处理方式,因为会就近处理异常
最终执行的代码,用于关闭和释放资源
try{ //一些会抛出的异常代码 }catch(){ //处理该异常的代码块 }catch(){ //处理该异常的代码块 }finally{ //最终要执行的代码 }
Java的异常梳理模型给予三种操作:
throws-----声明将要抛出何种类型的异常。当某个方法可能抛出某种异常时用于throws声明可能抛出的异常,然后交给上层调用它的方法程序处理
throw------将产生的异常抛出,是抛出异常的一个动作。一般会用于程序出现某种逻辑时程序会主动抛出某种特定的类型的异常
当抛出一个异常时,可以在try-catch块中捕获它并进行处理
1、若执行try块的过程中没有异常发生,则跳过catch子句。 2、若是出现异常,try块中剩余的语句不在执行 3、开始逐步检查catch块,判断catch块的异常类实例是否是捕获的异常类型 4、匹配后执行相应的catch块中的代码 5、如果异常没有在当前的方法中被捕获,就会被传递给该方法的调用者,这个过程一直重复,知道异常被捕获或传给main方法(交给jvm来捕获)
1、若执行try块的过程中没有异常发生,则跳过catch子句。
2、若是出现异常,try块中剩余的语句不在执行
3、开始逐步检查catch块,判断catch块的异常类实例是否是捕获的异常类型
4、匹配后执行相应的catch块中的代码
5、如果异常没有在当前的方法中被捕获,就会被传递给该方法的调用者,这个过程一直重复,知道异常被捕获或传给main方法(交给jvm来捕获)
这是因为父类异常囊括了子类异常,如果福尔利异常在前,子类异常永远捕获不到,导致优势或无法准确描述错误信息
执行流程
return返回值各种情况
使用场景
如:IO六中执行完相应操作后,关闭相应资源;使用Lock对象保证线程同步,通过finally可以保证锁会被释放;数据库连接代码时,关闭连接操作等等
为什么要使用自定义异常,有什么好处?
缺点
使用
原文链接:https://www.cnblogs.com/houqx/p/13386200.html