Java中的异常转换

异常的转换:例如电脑的蓝屏是可以解决的,但是电脑进水确实没有办法解决的。两个属于不同的异常类型

讲解一下异常类型转换

抛出的问题必须是调用者可以处理的,如果不能处理那么就进行异常转换

基于编译异常应用代码的扩展:电脑出现冒烟死机

package Exception;
import jdk.jshell.spi.ExecutionControl;
/*编译异常——异常的类型转换
描述李老师使用电脑上课
安全隐患为:电脑会蓝屏,电脑冒烟
 */
//异常类
class BlueException extends Exception {//蓝屏异常
    BlueException(){
        super();
    }
    BlueException(String s){
        super(s);
    }
}
class MaoYanException extends Exception {
    MaoYanException(){
        super();
    }
    MaoYanException(String s){
        super(s);
    }
}
class NoPlanException extends Exception {
    NoPlanException() {
        super();
    }

    NoPlanException(String s) {
        super(s);
    }
}
//电脑
class Computer {
    private int state = 2;//电脑的状态

    void Run() throws BlueException, MaoYanException {
        if (state == 0) {
            throw new BlueException("电脑蓝屏了!!");
        }
        if (state == 2) {
            throw new MaoYanException("电脑冒烟了!!!");
        }
        System.out.println("电脑运行!!!");
    }

    void ComputerReset() {
        state = 1;
        System.out.println("电脑重启了!!");
    }
}

//老师
class Teacher {
    private String name;
    private Computer notebook;

    Teacher(String name) {
        this.name = name;
        notebook = new Computer();
    }
    public String toString(){
        return name+"老师上课";
    }
    public void Prelect() throws NoPlanException {
        try {//只负责检测
            notebook.Run();//使用电脑上课
            //传递一个异常对象给catch
        } catch (BlueException B) {
            //要写出蓝屏后具体的解决方法————重启
            System.out.println(B.toString());//toString:返回异常信息/名字+内容
            B.printStackTrace();//将此throwable和其追溯打印到指定的打印流
            notebook.ComputerReset();//重启
        } catch (MaoYanException B) {
            /*
            对于电脑冒烟这个事,老师是无法给出解决方法的所以不能在老师的类里面声明冒烟异常,但是老师可以对冒烟造成的后果进行处理
             */
            System.out.println(B.toString());
            Test();
            //但是电脑冒烟这个问题本质上还是没有解决,因此要向外抛出老师可以传达的异常(由电脑冒烟产生的)
            throw new NoPlanException("课时停止!!!");
        }
    }

    public void Test() {
        System.out.println("做练习题!!");
    }
}

    public class ExceptionTest {
        public static void main(String[] args) {
            Teacher T = new Teacher("Li");
            try {
                T.Prelect();
            }
            catch (NoPlanException N) {
                System.out.println(N.toString());
                Teacher t = new Teacher("liu");
                System.out.println("换老师!!");
                System.out.println(t.toString());
            }
        }
    }

Throw Throws 的区别

1.     throw用在函数内

throws 用在函数上

2.     throw抛出的是异常对象

throws用于对异常类的声明,后面的异常类可以有多个,用逗号隔开


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值