时间:2021-05-19
我当初学java异常处理的时候,对于父子异常的处理,我记得几句话“子类方法只能抛出父类方法所抛出的异常或者是其子异常,子类构造器必须要抛出父类构造器的异常或者其父异常”。那个时候还不知道子类方法为什么要这样子抛出异常,后来通过学习《Thinking in Java》,我才明白其中的道理,现在我再来温习一下。
一、子类方法只能抛出父类方法的异常或者是其子异常
对于这种限制,主要是因为子类在做向上转型的时候,不能正确地捕获异常
package thinkinginjava;public abstract class InningDemo1 { public void walk() throws BaseException{} public abstract void sing() throws BaseException;}class BaseException extends Exception{}class SubException1 extends BaseException{}class CupException extends Exception{}package thinkinginjava;public interface OtherFunction { public void task() throws RuntimeException;} package thinkinginjava;public class SubInningDemo1 extends InningDemo1 implements OtherFunction{ //子类方法可以抛出父类方法的异常 @Override public void walk() throws BaseException{} //但不能抛出父类中没有的异常,否则编译会出错 //public void walk() throws Exception{} //子类方法可以抛出父类方法的子异常 @Override public void sing() throws SubException1{} //当实现的接口和父类中的方法都有异常时,可以选择不抛出异常 public void task(){}}就拿这个例子来说,假如子类中有这方法 public void walk() throws CupException{},抛出了父类方法没有的异常,我们使用父类的引用指向子类
public void f(){ InningDemo1 inn = new SubInningDemo1(); inn.walk() ;//父类调用walk()方法时,并不知道它会抛出CupException,从而f()方法不知如何捕获异常。因此在编译期就要防止子类方法乱抛异常。 }从上面的例子中,我们也可以看到,子类方法可以不抛出异常
二、子类构造器必须要抛出父类构造器的异常或者其父异常
这是因为子类构造器中默认添加了父类的构造器
package thinkinginjava;public abstract class InningDemo2 { public InningDemo2() throws SubException{ }}class FatherException extends Exception{}class SubException extends FatherException{}class PenException extends Exception{}package thinkinginjava;public class SubInningDemo2 extends InningDemo2{ public SubInningDemo2() throws FatherException { //子类构造器中默认添加了父类的构造器,所以需要抛出父类的异常或者其父异常 //super(); }}三、异常丢失
1、在finally中抛出异常,可能会之前抛出的异常丢失
package thinkinginjava;public class FinallyException { public static void main(String[] args){ try{ try{ throw new RedException(); }finally{ //把上一个异常覆盖掉 throw new BlueException(); } }catch(Exception e){ System.out.println(e); } }}class RedException extends Exception{}class BlueException extends Exception{}运行结果:thinkinginjava.BlueException
2、在finally中使用return,不会抛出异常
package thinkinginjava;public class ReturnException { public static void main(String[] args){ try{ throw new Exception(); }finally{ return; } }}以上代码我们看到它抛出了异常,但运行时不会有任何输出
以上这篇浅谈java异常处理(父子异常的处理)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
导读:在Java中我们使用try-catch进行异常处理,同样的JavaScript也提供了和异常处理类似的异常处理机制,本节我们将对JavaScript异常处
本文实例讲述了Java异常处理与throws关键字用法。分享给大家供大家参考,具体如下:Java异常处理认识异常:1.异常是导致程序中断运行的一种指令流,如果不
本文实例讲述了Java异常处理原理与用法。分享给大家供大家参考,具体如下:本文内容:异常的介绍处理异常断言首发日期:2018-03-26异常:异常是程序运行中发
Java异常处理运行时异常(RuntimeException)详解及实例RuntimeExceptionRunntimeException的子类:ClassCa
本文实例讲述了Java异常处理操作。分享给大家供大家参考,具体如下:一异常处理的使用——能够捕获到异常1代码publicclassDealException{p