java中的异常处理

一、java的异常
java中的异常,指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。

java使用面向对象的方式来处理异常,他把程序中发生的每个异常,也都分别封装到一个对象中,来进行表示,该对象中包含异常的信息。

java对异常进行了分类,不同的异常用不同的Java类表示
java中所有的异常都是用类来表示的。

异常类对象包括:关于异常的信息、类型和错误发生时程序的状态,以及对该错误的详细描述
java通过API中==“Throwable类的众多子类”==,来描述各种不同的异常。因而,java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件。当条件成立时,错误将引发异常。
Throwable类有两个子类:Exception(异常)类和Error(错误)类。
java程序用继承的方式来组织各种异常。所有的异常都是Throwable类或其子类,而Throwable类又直接继承于object类。
各个异常类之间的关系
当出现RuntimeException的时候,我们可以不处理。当出现这样的异常时,总是由虚拟机接管
(2)非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如:IOException、SQLException等以及用户自定义的EXception异常。对于这些异常,java编译器强制要求我们必须对出现的这些异常进行catch并处理,否则程序就不能编译通过。
java中的异常类
1、Exception类及其子类
可以被捕获并且可能恢复的异常类,用户程序也可以通过继承Exception类,来生成自己的异常类。常见的Exception类:在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述2、Error类及其子类
一般情况下,被认为是不可恢复的和不可捕捉的异常类,用户程序不需要处理这类异常。
在捕捉Error类及其子类是要多加小心,因为他们通常是在出现灾难性错误时被创建,常见的Error类异常:
(1)java.lang.LinkageError,一个类A依赖于另一个类B,当类A编译完成后,类B发生了更改,导致A无法找到B,而创建的错误信息对象;
(2)java.lang.VirtualMachineError,java虚拟机坏了,或继续运行java虚拟机所需的资源已经耗尽了,而创建的错误信息对象
(3)java.awt.AWTError,抽象窗口工具包,AWT发生严重错误时,而创建的错误信息对象。
二、java如何进行异常处理
1、在java语言中,若某个方法抛出异常,既可以在当前方法中进行捕获然后处理该异常,也可以将该异常向上抛出,由方法的调用者来处理
使用try……catch结构捕获异常
try{
可能产生异常的代码
}catch(异常类 异常类对象){
异常处理代码
}
在这里插入图片描述如果不知道代码将会引发和抛出哪类异常,可以直接指定他们的父类:Exception和Throwble类进行处理
2、多重catch代码块的用法
当程序员明确知道程序可能会引发多个异常时,可以在try……catch结构中,使用多个catch代码块来进行处理。多个catch块结构的一般格式:
try{
可能产生异常的代码
}catch(异常类1 异常对象1){
异常1处理代码
}catch(异常类2 异常对象2){
异常2处理代码
}
……其他的catch语句块
}catch(异常类n 异常对象n){
异常n处理代码
}
3、finally子句的用法
在这里插入图片描述4、使用throws关键字抛出异常
如果某个方法会抛出异常,但不想在当前的这个方法中来处理这个异常,可以将这个异常抛出,在调用这个方法的代码块中,捕捉这个异常并进行处理。java语言中通过关键字throws,声明某个方法可能抛出的多种异常,throws可以同时声明多个异常,各个异常之间用逗号分隔
5、使用throw关键字抛出异常
使用try……catch结构与throws关键字,抛出与捕获的都是系统定义的异常;Java中提供了throw关键字,可以在方法体内部抛出一个异常类对象。
在这里插入图片描述6、使用异常处理语句的注意事项
进行异常处理时,主要使用了try、catch、finally、throws、throw等关键字,在使用他们时,要注意:
1、对于程序中的异常,必须使用try……catch结构捕获,或通过throws向上抛出异常,否则编译会出错
2、不能单独使用try、catch或finally代码块,否则代码在编译时会出错
3、try代码块后面,可以单独的跟一个到多个catch块,也可以单独的仅跟一个finally块,catch块和finally块可以同时存在,但finally块一定要跟在catch块之后,格式如下:
try{
//try块的代码
}catch(异常类型 异常变量){
//一个或多个catch块
}finally{
//最多只能有一个finally块
//不管是否有异常抛出或捕获,finally代码块都会被执行
}
4、在try……catch……finally结构中,不论程序是否会抛出异常,finally代码块都会执行
5、try只跟catch代码配合使用时,可以使用多个catch块来捕获try代码块中可能发生的多种异常,异常发生后,java虚拟机会由上而下的检查当前catch代码块所捕获的异常是否与try代码中的发生的异常匹配,若匹配,则不再执行其他的代码块。
如果多重catch代码块捕获的是同种类型的异常,则捕获子类异常的catch代码块要放在捕获父类异常的catch块之前,否则将会在编译时发生编译错误。
6、在try、catch、finally等的代码块中,定义的变量为局部变量,只能在代码块内部使用,如果要使用全局变量,则要将变量定义在这几个模块之外
7、在使用throw语句,抛出一个异常对象时,该语句后面的代码将不会被执行。
三、自定义异常
1、自定义异常类,必须继承自Throwable类或其子类,才能被视为异常类,在实现中通常继承Exception类或其子类。除此之外,与创建普通类的语法相同,自定义异常类的使用方法,与java语言内置的异常类的使用方法也相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值