异常--异常转换的理解

一、案例:Coco老师来上课

为了程序的健全性,程序可能会出现的问题:
1 电脑蓝屏
2 电脑冒烟
(1)电脑类

class Computer {
	// 定义一种状态控制异常发生
	private int state = 2;

	// 电脑运行方法
	public void run() throws LanPingException, SmokingException {
		if (state == 1) {
			// 电脑蓝屏,抛出异常
			throw new LanPingException("电脑蓝屏了");
		}
		if (state == 2) {
			// 电脑蓝屏,抛出异常
			throw new SmokingException("电脑冒烟了");
		}
		System.out.println("笔记本电脑正在运行");
	}

	// 电脑启动功能
	public void reSet() {
		// 将电脑状态恢复到默认值
		state = 0;
		System.out.println("重新启动电脑");
	}
}

(2)coco老师

class Teacher {
	// 成员变量
	private String name;
			//(2) 引用类型成员变量
	private Computer com;

	// 构造方法
	public Teacher(String name) {
		this.name = name;
		// 每次创建老师对象时就带上电脑类
		this.com = new Computer();
	}

	// 老师上课方法
	public void lesson() throws StopLessonException {
		try {
			// 调用电脑的方法
			com.run();
		} catch (LanPingException e) {
			System.out.println(e.toString());// 打印异常信息
			// 调用电脑重新启动功能
			com.reSet();
		} catch (SmokingException s) {// SmokingException s = new BluePingException();
			// 紧急处理方式,做练习
			this.test();
			// 做练习只是一个临时解决方式,但是此时并没有解决电脑冒烟问题。所以继续向上抛异常,抛给main方法
			//	throw s;
			/* 讲课中冒烟,问题可以临时解决,但是冒烟问题讲课时不能解决,所以使用throw向上抛
			* 抛给main方法后我们发现,这个问题不属于讲课方法的问题,讲课方法的调用者也没有办法解决这个问题
			* main方法只能解决因为上课无法继续进行的问题。对冒烟问题并没有针对性的解决。
			 因此,就需要重新定义一个课时停止异常来解决这个冒烟问题。
			*/
			throw new  StopLessonException("课程停止");
			//上述过程叫异常转换(将冒烟异常转给课时停止异常转换)
		}
		System.out.println(name + "老师正在给大家激情地上课");
	}

	// 紧急处理方式:布置作业
	public void test() {
		System.out.println("同学们做小练习");
	}
}

(3)自定义异常类

// 电脑蓝屏异常类
class LanPingException extends Exception {
	public LanPingException() {
		super();
	}

	public LanPingException(String message) {
		super(message);
	}
}

// 电脑冒烟异常类
class SmokingException extends Exception {
	public SmokingException() {
		super();
	}

	public SmokingException(String message) {
		super(message);
	}
}

//课时停止异常类
class StopLessonException extends Exception {
	public  StopLessonException() {
		super();
	}

	public  StopLessonException(String message) {
		super(message);
	}
}

(4)测试类

public class ExceptionDemo03 {

	public static void main(String[] args) {
		Teacher t = new Teacher("coco");
		try {
			t.lesson();
		} catch (StopLessonException sp) {
			sp.printStackTrace();
			//课程停止异常后的解决方法:换老师
			System.out.println("换老师");
		}
	}
}

二、思路总结

(1)自定义蓝屏异常后,电脑发生异常。电脑自己不能处理异常,就向上抛出异常。老师类调用了电脑的方法,因此老师讲课方法接受到了蓝屏异常,老师可以处理这个异常,就使用catch()进行捕获,然后在老师自己调用重新启动电脑的方法。
(2)自定义冒烟异常后,电脑发生异常。电脑抛给调用者(老师类),我们发现老师也不能解决这个冒烟异常。只能暂时停止上课,让学生先做小练习。如果继续向上抛出给main方法中的讲课方法,发现也不能解决冒烟异常。
(3)此时就可以采用异常转换。直接在老师讲课方法中抛出课时停止异常类,在main方法中进行处理,处理方法就是换老师。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值