Java异常(Exception)处理机制
Java异常(Exception)处理机制
主要知识:
1、基本概念
2、try....catch....finally语法的使用方法
3、throws与throw的语法
4、自定义异常的创建和使用方法
一、基本概念和分类
异常是指程序在运行时出现的非正常现象,引入异常机制是为了使程序在出现异常时,可以使程序安全退出。
异常分为:Error和Exception。
error是指应用程序中出现比较严重的问题,出现无法系统处理的错误,大多数情况是jvm出现问题,可以不用理会。
Exception是程序可以处理的异常,如算术异常,数字下标越界异常,空指针异常等。Exception又可分为运行时异常和非运行时异常。
运行时异常:RuntimeException类及其子类表示“jvm常用操作”引发的异常。引发原因通常由于编程错误导致,可以交给系统默认的异常处理程序,可在编程时添加必要逻辑条件来避免。
非运行时异常:所有不属 于运行时异常的都属于这个范畴,其包括IOException、SQLException、和用户已定义异常。如果这些异常出现时不处理,则程序不能通过编译。
异常处理
异常处理机制:捕获异常、抛出异常
1)、捕获异常
try....catch....finally语法的使用方法
try{
语句1;
...
语句n;
}catch(Exception1 e){
//异常处理代码
}catch(Exception2 e){
//异常处理代码
}finally{
//无论异常与否发生,总要执行的代码
}
try:try语句中包含可能出现异常的代码,在程序运行过程中,如果有语句出现异常,就会跳过这条语句执行后面的代码,去catch语句中寻找对应的异常处理类。代码可能出现多个异常的话,还能用多个catch语句来分别处理不同的异常。异常处理代码结束后,不会回到try语句去执行尚未执行的代码。
catch:每个catch语句都是一中特定类型的异常处理方案。捕获到异常后会按照catch的顺序来寻找符合的异常,如果异常之间有继承关系,则在顺序上是先捕获子类异常再捕获父类异常。
捕获到异常,使用继承自Throwable类的三种处理方法:
1、toString()方法,显示异常的类名和出现异常的原因。
2、getMessage()方法,只显示出现异常的原因,但不显示异常的类名。
3、printStackTrace()方法,显示异常的信息,跟踪异常事件发生的位置。
finally:finally语句为异常提供一个统一的出口,使得控制流程转到程序的其他部分以前,能够对程序的状态进行统一管理。无论try中程序是否出现异常,都将执行finally语句。finally的作用通常是进行资源的清除工作,如关闭打开的文件、删除临时文件、关闭数据库连接等。
2)、抛出异常(throws抛出、throw抛出)
抛出异常又分为:throws抛出、throw抛出,区别在于:
①:作用不同:throw用于程序员自行产生并抛出异常;throws用于声明在该方法内抛出了异常
②:使用的位置不同;throw位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表后面,不能单独使用。
③:内部不同:throw抛出一个异常对象,且只能是一个;throws后面跟异常类,而且可以有多个。
throws抛出:如果一个方法可能出现异常,但无法处理,则可在方法声明处使用throws子句来声明抛出异常。如果抛出多个,则必须在throws语句中给出所有异常的类型,不同类型之间用逗号隔开。
如:
方法体 throws Exception1,Exception2,... ,ExceptionN{
//方法体
}
当方法体中出现异常列表中的异常时,该方法不处理这个异常,而是将异常抛向上一级的调用者去处理。如果上一级调用者不想处理该异常,则可以继续向上抛出,但最终要有能够处理该异常的调用者。
throw抛出:throw是在函数体中抛出异常的语句,在遇到throw语句后程序会立刻终止,不再执行后面代码,然后在包含throw语句的try语句中从里向外寻找与其匹配的catch子句。
如果所有方法都抛出获取的异常,则jvm会用最简单的方式来处理,就是打印异常消息和堆栈信息。
自定义异常处理步骤 :
1、创建自定义异常类
2、在方法中通过throw关键字抛出异常类的对象
3、如果在当前抛出异常的方法中处理异常,则可以使用try...catch语句捕获异常并处理,也可以在方法声明处通过throws关键字把异常抛给方法的调用者,继续下一步。
4、在出现异常方法的调用者中捕获并处理异常。
自定义异常类继承与Exception类,属于Exception类中的非运行异常,因此必须要进行处理,可以使自定义异常类继承RuntimeException类。在自定义异常类中包含两个构造方法:一个是默认构造方法;另一个是带详细信息的构造方法。由于不会自行出现自定义异常,所以必须采用throw语句抛出异常。
本文作者:飞飞吻
本文链接:https://www.cnblogs.com/flyingkisses/p/14716090.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步