Throwable [size=14.6667px]java.lng.throwable:类是JAVA语言中所有错误或异常的超类。 Exception:编译期异常,进行编译(写代码)java程序出现的问题[size=14.6667px]异常的分类: - 运行期异常:
1.继承关系中:只要时RuntimeException及其子类都是运行期异常
2.编写代码的时候不会出现,只有运行的时候次啊会出现 - 编译期异常
- 继承关系中:Exception和除了RuntimeException体系中的异常类,都是编译期异常
- 编译期在写代码的时候会有编译错误,只有当吃力完次啊能编译通过
RuntimeException:
运行期异常,java程序运行过程出现的问题
异常就相当于程序得了一个小毛病(感冒,发烧),把异常处理掉,程序可以继续执行
Error:错误[size=14.6667px]错误就相当于程序得了无法治愈的毛病,必须修改源代码,程序才能继续执行
注意事项:
注意事项异常的本质其实就是异常类创建对象并抛出。
编译期异常在编译时期会有编译错误,但是不是意味着你的代码已经错了,也不会在编译时期产生异常对象。
编译期异常只是需要我们对可能发生的异常做一个预处理。 两种异常使用上的区别:
编译期异常要求我们在编译时期必须处理。(对可能出现的问题,必须先来一个预处理方案)
运行期异常不需要预处理
除了以上两点区别:其他的使用方面,编译期异常和运行期异常相同的
throw关键字[size=14.6667px]作用:可以使用throw关键字在指定的方法中手动抛出异常。
格式::throw new 异常类型
注意: - 对于运行期异常,默认就会把异常抛给方法的调用者
对于编译期异常,异常抛出时一种异常的处理方案,可以使程序编译通过,不再产生编译错误 - 如果方法中有可能产生的异常类型不止一种,可以排除多个异常类型用逗号隔开,还可以抛出多个异常的父类型
throws:是异常的处理方式的一种,就把产生的对应异常抛给方法的调用者
throw:手动产生异常对象
2.try ... catch 自己处理[size=14.6667px]格式:
try {
可能出现异常的代码
}catch(异常类型 变量名){
处理异常的逻辑
}
1.流程:
当try中的代码出现异常了,产生异常对象,将异常对象和catch括号中的异常变量进行匹配,
. 如果可以匹配上,则会把对象赋值给异常的变量,catch中的代码会被执行,异常则已经处理完毕,try catch后续的代码也能正常执行
. 如果不能匹配上,则try...catch捕获异常失败,此时异常和没处理一样,则会抛给方法的调用者。 2.多异常处理流程[size=14.6667px]如果try中的代码产生异常了,会将异常信息封装为一个异常对象,跟catch中的异常类型进行匹配,
. 如果匹配上则会将异常对象赋值给对应的异常变量,并进行对应的chatch大括号中的逻辑,执行完后则整个try...catch就会结束;
. 如果第一个没有匹配上则会由上往下一次去匹配。 注意:如果多个catch有子父类关系,子类的异常类型的catch必须放在父类异常类型的catch的前面
finally[size=14.6667px]有时候我们需要某些代码在任意情况下都需要执行,这个时候,我们需要用到一个结构。
try {
可能会出现异常的代码
}catch(异常类型 变量名){
处理异常的逻辑
}finally {
任意情况下,此处代码都会执行
} Throwable 的方法[size=14.6667px]public String getMessage():获取异常的描述信息,原因(提示给用户的时候
public String toString():获取异常的类型和异常的描述信息(不用)。
public void printStacktrace():打印异常信息并输出到控制台 自定义异常类:什么时候要使用自定义异常: - 自己写代码,别人用,但是别人用错了(如参数错误),则可以抛出一个异常告知方法的调用者
- 有的时候,Java提供的异常类不够用,我们自定义的异常会更见明知意
结构- 定义一个类,继承异常父类
- 定义两个构造方法,一个空参,一个带字符串参数,分别调用父类的对应构造
注意事项:
如果产生的异常时编译期异常,则需要在产生异常所在的方法上,手动声明抛出异常
|