异常处理总结

19 篇文章 0 订阅

异常:指的是程序运行过程中,因为用户的误操作,代码的bug,等等一系列原因,引起的程序崩溃的现象,被成为异常

在程序中,错误可能产生于程序员没有预料到的各种情况,或者是超出了程序员可控范围的环境因素,如试图打开一个根本不存在的文件等,在Java中,这种在程序运行时可能出现的一些错误称为异常。Java语言的异常处理机制优势之一就是可以将异常情况在方法调用中进行传递,通过传递可以将异常情况传递到合适的位置再进行处理,这种机制类似于现实中发现了火灾,一个人是无法扑灭大火的,那么可以将这种异常情况传递给119,119再将这个情况传递给附近的消防队,消防队及时赶到并进行灭火。使用这种处理机制,使得Java语言的异常处理更加灵活,Java语言编写的项目更加稳定。当然,异常处理机制也存在一些弊端,例如,使用异常处理可能会降低程序的执行效率,增加语法复杂度等。

 

异常处理:

解决掉异常的现象,让程序正常运行(不要崩溃退出)下去

让程序容错能力提升,程序就会越稳定。

Java进行异常处理,有两种解决方案:

——抓捕异常

——抛出异常

异常分类:

编译型异常:在源码编译阶段,直接抛出异常,这种异常必须要处理,不处理无法正常运行代码

运行时异常:在代码运行时,有可能出现的异常被称为运行时异常

抓捕异常:针对于可能出现异常的代码,进行抓捕

try{ //可能发生异常的代码

}catch(Exception e){ //如果出现异常,代码会立刻进入catch中

//在这解决抓捕到的异常

}

如果使用异常抓捕,通过这种处理,程序即便是遇到了,也不会崩溃

 

Java中异常的继承关系

Throwable(异常的顶级类)

Error:一般这个类的异常,表示一种致命性的异常

Exception(常见的异常的父类):

RuntimeException:运行时异常,只有运行时,才有可能出现异常

其他的Exception的子类都是编译型异常,必须处理

抛出异常的处理方案:

编程型异常,如果我们不想处理,可以自己抛给调用者,有调用者完成处理

finally关键字

   完整的异常处理语句应该包含finally代码块,通常情况下,无论程序中有无异常发生,finally代码块中的代码都可以正常执行。

try{

//可能发生异常的代码

}catch(Exception e){

//如果出现异常,代码会立刻进入catch中

//在这解决抓捕到的异常

}finally{

//必须执行的代码

}

 

回收垃圾

关闭IO流

关闭数据库链接

try{

}finally{

//将必须执行的代码写入

}

注意:在开发过程中,return与finally注意逻辑

 

自定义异常类:

接触到的都是属于Java官方提供的异常类

自己设计异常类

定义一个普通的类,让该类继承Exception类或者它的子类的子类

在程序中使用自定义异常类:

(1)  创建自定义异常类。
(2)  在方法中通过throw关键字抛出异常对象。
(3)  如果在当前抛出异常的方法中处理异常,可以使用try..catch代码块捕获并处理,否则,在方法的声明处通过throws关键字指明要抛给方法调用者的异常,继续进行下一步操作。
(4)  在出现异常方法的调用者中捕获并处理异常。

 

异常抛出:

可以通过创建异常(系统或者自定义),来个调用者一个确切的错误信息

自定义异常,可以向调用者传递需要的信息,调用者就可以通过抛出的信息做出对应的判断

在方法中抛出异常

        如果某个方法可能会发生异常,但不想在当前方法中处理这个异常,则可以使用throws、throw关键字在方法中抛出异常,本节将对如何在方法中抛出异常进行讲解。

使用throws 关键字抛出异常
返回值类型名 方法名(参数表)throws 异常类型名 {
    方法体
}
注意:使用throws为方法抛出异常时,如果子类继承父类,子类重写方法抛出的异常也要和原父类方法抛出的异常相同或是其异常的子类,除非throws异常是RuntimeException。

 

异常的使用原则:

(1)  不要过度使用异常。虽然通过异常可以增强程序的健壮性,但如果使用过多不必要的异常处理,可能会影响程序的执行效率。
(2)  不要使用过于庞大的try...catch块。在一个try块中放置大量的代码,这种写法看上去“很简单”,但是由于try块中的代码过于庞大,业务过于复杂,会造成try块中出现异常的可能性大大增加,从而导致分析异常原因的难度也大大增加。
(3)  避免使用catch(Exception e)。因为如果所有异常都采用相同的处理方式,将导致无法对不同异常分情况处理;另外,这种捕获方式可能将程序中的全部错误、异常捕获到,这时如果出现一些“关键”异常,可能会被“悄悄地”忽略掉。
(4)  不要忽略捕捉到的异常,遇到异常一定要及时处理。
(5)  如果父类抛出多个异常,则覆盖方法必须抛出相同的异常或其异常的子类,不能抛出新异常。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值