异常在子父类覆盖中的体现:
1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或该异常的子类或者不抛
2.如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集
比如:父-- ABCDE 子 -- ABC或BDE等
3.如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常
处理后,转换新的异常
catch是用于处理异常,如果没有catch就代表异常没有被处理过,如果该异常是检测时异常,那么必须声明
1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或该异常的子类或者不抛
2.如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集
比如:父-- ABCDE 子 -- ABC或BDE等
3.如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常
如果子类方法发生了异常,就必须要进行try处理,绝对不能抛
异常的好处:
1.将问题进行封装
2.将正常流程代码和问题处理代码相分离,方便于阅读。
异常的处理原则
1.处理方式有2种 try或者抛(throws)
2.调用到抛出异常的功能时,抛出几个就处理几个 一个try对于多个catch的情况
3.多个catch,父类的catch放在最下面
4.catch内,需要定义针对性的处理方式,不要简单的定义printStackTrace,或输出语句,也不要不写
当捕获到的异常,本功能处理不了时,可以继续在catch中抛出
try{
throw new AException();
}catch(AException e){
throw e;
}
如果该异常处理不了,但并不属于该功能出现的异常,可以将异常转换后,再抛出和该功能相关的异常
try{
throw new AException();
}catch(AException e){
throw new BException();
}
或者异常可以处理,但需要将异常产生的和本功能相关的问题提供出去,让调用者知道并处理,也可以将捕获异常
处理后,转换新的异常
try{
throw new AException();
}catch(AException e){
//对AException处理
throw new BException();
}
catch是用于处理异常,如果没有catch就代表异常没有被处理过,如果该异常是检测时异常,那么必须声明