java异常机制与处理总结

来源:互联网 发布:linux脚本用什么写 编辑:程序博客网 时间:2024/06/05 18:54

第一部分:异常机制

1、异常描述:

1.1、异常是指程序运行时出现不正常的情况,是对问题的描述,将问题进行对象的封装

1.2、异常的由来

异常问题也是现实生活中的一个具体的事物,也可以通过Java类的形式进行描述,并封装成对象,Java对不正常情况进行描述后的对象体现

2、异常的特点:

2.1、异常体系中所有类和建立的对象都具备可抛性,只有异常体系具备这一特点

2.2、问题的划分

在异常类的总接口(throwable)下,共分成两种异常子类:

(1)严重的异常(error):一般不编写针对性的代码进行处理

(2)非严重的异常(Exception):可以使用针对性的处理方式进行处理

3、对异常的处理

3.1java专门定义了异常的处理语句:

try-catch-finally处理语句

格式:

try{

会出现异常的代码块

}catch(异常参数类型 参数名)

{

处理异常的代码块

}

finally{

一定要执行的语句(可用于回收资源)

执行finally前如果执行了系统退出语句System.exit(0)时,finally不会被执行

}

结合格式:

try{}catch(){}

try{}catch(){}finally{}

try{}finally{}

try{}catch(){}catch(){}···


3.2throwthrows

3.2.1用法:

throws:在功能上通过throws关键字声明该功能有可能会出现异常

throw:通过关键字抛出一个异常对象

3.2.2两者的区别:

throw定义在函数内,用于抛出异常对象

throws定义在函数上,声明抛出异常,多个用逗号隔开

3.3、异常处理的两种方式:

(1)通过throws在函数或类上声明抛出异常

(2)通过try{}catch(){}语句进行具体处理

3.4、 对多异常的处理

(1)声明捕获的异常时,建议声明更具体的异常,这样可以处理得更具体

(2)对方声明了多个异常,有几个异常就有几个catch块(一个try对应多个catch),如果多个catch块中捕获的异常类之间有继承关系,应将捕获父类异常的catch语句放在捕获子类异常语句的后面,否则捕获子类异常语句永远也执行不到,编译会出错

3.5、处理原则:

(1)进行catch时,catch一定要定义具体处理方法,当捕获到的异常本功能处理不了时,可以在catch内继续抛出与下一级执行体功能相关的异常不要简单定义一条打印语句,也不要捕获异常后不处理

(2)处理本层问题后,反馈的问题应该是对下一层有实际意义的问题

3.6、 继承类处理异常的注意事项:

(1)如果子类继承的父类抛出异常,那么子类只能抛出父类抛出的异常或父类抛出的异常的子类异常

(2)父类抛出多个异常,子类只能抛出父类的异常的子集,或者不抛出异常

(3)如果父类没有抛出异常,则子类也不能抛出异常,子类可能发生的异常只能在类的内部处理

代码演示处理异常的子父类的顺序、处理异常的两种方式等:


4、可处理异常的两种表现形式:

4.1 运行时异常(RuntimeException):

RuntimeExceptionException的一个子类,如果函数内抛出该异常或该类异常的子类,函数上不用声明,编译时不检测该异常体系,建议不处理该类异常,让程序停下,以检测代码的错误

4.2 编译时异常:

RuntimeException外的Exception类异常,编译时会检测该类异常,如果发现有没有处理的该类异常则编译不能通过,所以这类异常必须要处理

5、自定义异常

5.1 在做项目开发时,会出现项目中的特有问题,可以将特有问题封装成自定义异常类

5.2 定义异常的方式:

继承异常体系(?extends throwable),使该类具备可抛性,让该类具有异常的共性方法

5.3 定义异常信息时,可以使用父类已经定义好的功能,将异常信息传递给父类

6、异常类的共性方法

getMassage() 获取异常信息

toString() 异常的字符串表示形式

printStackTrace(PrintStream) 将异常信息输出到指定输出流

···

7、定义异常的好处

7.1将问题进行封装

7.2将正常流程代码和问题代码分离开,方便阅读

 8、编译时,异常问题在最后报告,当编译时出现异常报告,表明语法异常已经基本解决了



0 0
原创粉丝点击