异常在子父类中的体现
子类在重写父类的方法时。如果父类中的方法抛出异常,那么子类的复写方法只能抛出父类方法中抛出的异常的异常或子异常。如果父类方法抛出多个异常,那么子类在复写方法时只能抛出父异常。如果父类或者接口的方法中没有异常,那么子类在复写方法时,子类绝对不可以往外抛异常,如果此时该行内部产生了异常,就必须在此方法内部处理(只能直接Try -catch)
自定义异常
我们在开发中,可以根据自己的需要定义自己的异常类。那么我们该怎样来定义自己的异常类呢?为了保证异常类具备可抛性和获得异常操作的共性方法,自定义异常必须继承Exception或Exception的子类。由于父类中已经把异常信息的操作都完成了,所以我们定义自定义类时只需将异常信息由构造函数传递给父类(通过Super(参数))。那么就可以直接通过getMessage()方法获得自定义异常的信息。
异常处理原则:
当函数内有throw抛出的异常对象,并未对其try_catch,则必须要在函数上用throws对此异常对象的所属异常类进行声明,否则,编译失败。(注:RuntimeException除也就是说函数如果抛出RuntimeException函数上可声明可不声明)。如果函数声明了异常,说明需要调用者处理(或者try_catch或者throws)
调用到抛出异常的方法时,抛出几个处理(catch)几个。当存在多个catch时,catch父类异常的代码块放在最后面,catch块内要有具体的针对性的处理方法,不要简单的打印异常信息,也不要不写。
当捕获到异常本来功能处理不了时,可以继续在catch中抛出
try {
Throw newAException();
}catch(AExceptione){
Throw e;
}
如果出现的异常处理不了,但不属于该功能出现的异常,可以将异常转换后抛出,再抛出和该功能相关的异常
Try{
Throw new AException();
}catch(AExceptione){
Throw new BException();
}
或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去让调用者知道并处理,也可以将捕获到的异常处理后再转换成新异常。
Try{
Throw new AException();
}catch(AExceptione){
//处理AException
Throw new BException();
}
异常的好处:a.将问题进行封装 b.将正常的程序代码块和问题的处理代码分离开来,增强了阅读性