黑马程序员技术交流社区

标题: 异常(子父类异常处理注意事项) [打印本页]

作者: _J2EE_LiXiZhen    时间: 2017-11-10 23:36
标题: 异常(子父类异常处理注意事项)
[Java] 纯文本查看 复制代码
//疼异常

public class PainExecption extends Exception{
       
        public PainExecption() {
                // TODO Auto-generated constructor stub
        }
       
        public PainExecption(String message) {
                super(message);
        }
}

//牙疼异常

public class ToothPainException extends PainExecption{

        public ToothPainException() {
                // TODO Auto-generated constructor stub
        }
       
        public ToothPainException(String message) {
                super(message);
        }
}

//舌头疼异常

public class TonguePainException extends PainExecption{

        public TonguePainException() {
                // TODO Auto-generated constructor stub
        }
       
        public TonguePainException(String message) {
                super(message);
        }
}

//大门牙疼异常

public class BigToothPainException extends ToothPainException{

        public BigToothPainException() {
                // TODO Auto-generated constructor stub
        }
       
        public BigToothPainException(String message) {
                super(message);
        }
}

//门牙疼异常

public class FrontToothPainExcption extends ToothPainException{

        public FrontToothPainExcption() {
                // TODO Auto-generated constructor stub
        }
       
        public FrontToothPainExcption(String message) {
                super(message);
        }
}

//测试类:父类

public class Father {

        //吃的方法
        public void eat() throws ToothPainException {
                throw new ToothPainException("吃到一个石子");
        }
       
        //喝的方法
        public void drink() {
                System.out.println("喝什么都没问题");
        }
}

//测试类:子类

public class Son extends Father {

        // (a)验证: 重写方法不能抛出与父类平级的其他异常
        //i.重写父类的eat方法,抛出与牙疼平级舌头疼异常,编译报错,说明这句话是对的
        /*public void eat() throws TonguePainException {
               
        }*/
       
        //(b)验证: 重写方法不能抛出比父类高级的异常
        /*public void eat() throws PainExecption {
               
        }*/
       
        //(c)验证:重写方法: 可以抛出和父类同样的异常
        /*public void eat() throws ToothPainException {
                throw new ToothPainException("牙疼");
        }*/
       
        //(d)验证:重写方法: 可以抛出父类抛出异常的子类异常.
        /*public void eat() throws BigToothPainException {
                throw new BigToothPainException("大门牙疼");
        }*/
       
        //(e)验证: 重写方法: 可以抛出多个 "父类抛出异常的子类异常".
        /*public void eat() throws BigToothPainException,FrontToothPainExcption {
                throw new FrontToothPainExcption();
        }*/
       
        //(f)验证:父类不抛出异常,子类也不能抛出异常(编译时异常)
        /*public void drink() throws ToothPainException {
               
        }*/
       
        //(g)验证: 如果子类内部抛出了异常(或调用抛出异常的方法)只能自己处理,不允许向外抛.
                 /* i.重写父类的drink方法
                        ii.输出喝到了100度的水
                        iii.抛出舌头疼异常
                        iv.这个时候编译报错
                        v.把上面两句代码放到try代码块中
                        vi.在catch代码块中打印异常信息
                        vii.编译通过.*/
       
        /*public void drink() throws TonguePainException{
                System.out.println("喝了100度的水");
        }*/
       
        /*public void drink() {
                try {
                        System.out.println("喝了100度的水");
                } catch (TonguePainException t) {
                        t.printStackTrace();
                }
        }*/
       
        public void drink() {
                try{
                        int a = 0;
                       
                        if(a==-1) {
                                throw new TonguePainException();
                        }
                        System.out.println("到100度的热水了");
                       
                } catch (TonguePainException ex) {
                        System.out.println("在疼都要忍着不能说,因为你爸都不说,你也不能说");
                }
        }
       
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2