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 中国大陆许可协议进行许可。

posted @   飞飞吻  阅读(437)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起