问题也是现实生活中一个具体的事物,也可以通过java的类的形式描述,并封装成对象,
其实就是java对不正常情况进行描述后的对象体系
问题划分:
严重的: Error 一般不编写针对性的代码进行处理
非严重的:Exception 可以使用针对性的处理方式进行处理
异常有俩种:
编译时被检测异常
该异常在编译时如果没有处理,那么编译失败
该异常被标示,代表着可以被处理
运行时异常(编译时不检测)
在编译时不需要处理,编译器不检查
该异常发生,建议不处理,让程序停止,需要对代码进行修改。异常 对问题的描述,将问题进行对象的封装
异常体系 throwable
--Error
--Exception
---RuntimeException
异常体系的特点:异常体系中的所有类以及建立的对象都具备可抛性
也就是说能被throw和throws关键字所操作
只有异常体系具备这个特点
throw定义在函数内 用于抛出异常对象 throws定义在方法上,用于抛出异常类,可以抛出多个用逗号隔开
当方法内容有throw抛出异常对象,未进行try处理,必须在方法上声明,否则编译失败
注意:RuntimeException除外, 方法内如果抛出的是RuntimeException异常,方法可以不用声明
如果方法上声明了异常,调用者需要进行处理,处理方法可以throws(抛)和try
try{
需要被检测的代码
}
Catch(){
处理异常的代码
}
finally{
如果在catch中执行 System.exit(0);//虚拟机结束则不执行finally中的代码
一定会执行的语句
关闭资源代码,资源必须被释放。
}
自定义异常:
定义类继承Exception或者RuntimeException
1. 为了让该自定义类具备可抛性
2. 让该类具备操作异常的共性方法
当要定义自定义异常的信息时,可以使用父类已经定义好的功能
异常信息传递给父类的构造方法
calss MyException extends Exception{
MyException(String message){
super(message);
}
}
自定义异常:按照java面向对象的思想,将程序中出现的特有问题进行封装
异常的好处:
1. 将问题进行封装
2. 将正常流程代码和问题处理代码相分离,方便与阅读
处理原则:
1. 处理方式有俩种 try和throws
2. 调用到抛出异常的功能时,抛出几个就处理几个
一个try对应多个catch
3. 多个catch时,父类的catch放在最下面
4. catch内,需要定义针对性的处理方式,不要简单的定义printStackTrace输出语句,也不要不写
5. 当捕获到的异常,本功能处理不了时,可以继续在catch中抛出
try{
throw new AException();
}catch(AException e){
throw e;
}
如果该异常处理不了,但不属于该功能出现的异常,可以将异常转换后,在抛出和该功能相关的异常。综合异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,让调用者知道并处理,也可以将捕获异常处理后,转换新的异常抛出
try{
throw new AException();
}catch(AException e){
//还可以对AException处理再抛
throw new BException();
}
异常注意事项:
1.如果该异常是检测时异常,那么必须声明
2.自定义异常时,如果该异常的发生,无法再继续进行运算。就让自定义异常继承RuntimeException
3.在函数上声明异常 便于提高安全性,让调用者进行处理,不处理编译失败
4.finally中的存放的是一定会执行的语句 通常用于关闭资源
5.catch用于处理异常,如果没有catch就代表没有被处理过,
对于多异常的处理
1. 声明异常时,建议声明更为具体的异常,这样处理的可以更具体
2. 对方声明几个异常,就对应几个catch块
如果多个catch块中的异常出现继承关系,父类异常放在最后面
Exception中的RuntimeException (运行时异常)
1.如果在函数内抛出该异常,函数上可以不用声明编译一样通过
2.如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。
之所有不用再函数声明,是因为不需要让调用者处理,当该异常发生,希望程序停止。因为在运行时,出现了无
法继续运算的情况,希望停止程序后,对代码进行修正
throw 和throws区别
1. throw 语句抛出一个异常 使用在方法内 后面跟的是异常对象
throws 方法抛出一个异常 使用在方法上 后面跟的是异常类 可以多个 多个时用逗号隔开
2.throws可以单独使用,由处理异常的方法捕获,但throw不能;
3.throw要么和try-catch-finally语句配套使用,要么与throws配套使用。
1.将可能引发的异常代码放在try语句中
2.catch用于处理异常,如果没有catch就代表没有被处理过
catch语句可以有多个,分别处理不同异常 父类异常放在代码最下面
3.finally 中的存放的是一定会执行的语句 通常用于关闭资源
如果在catch中执行 System.exit(0);虚拟机结束则不执行finally中的代码
三种格式:
try{}catch(){}
try{}finally{}
try{}catch(){} finally{}异常在子父类覆盖中的体现
1. 子类在覆盖父类时。如过父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
2. 如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3. 如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常,如果子类方法发生了异常,就必须进行try处理,绝对不能抛 .getMessage() 获取异常信息