14.JAVA基础(自定义异常)

14.JAVA基础(自定义异常)

异常

1.error:没有办法解决,只能修改代码,这个是系统相关的关系

2.Exception:
编译时异常(除了RuntimeException):编译器检查出来异常
运行时异常RuntimeException:出现这个异常的根本原因就是代码不够严谨,就要考虑错误数据

处理异常

1.try…catch…finally
2.throws
如何处理异常:如果该功能内部可以讲问题处理,用try,如果处理不了,就交由调用者处理,就用throws
区别:程序要继续运行就用try,程序不需要继续运行就用throws

在功能方法内部出现某种情况,程序不能继续运行,就用throw把异常抛出
throw 抛
throws声明:写在方法上,格式:方法名throws异常类
定义功能方法时,需要把问题暴露出来,让调用者去处理,那么就通过throws在方法上标识

自定义异常

Exception类和其子类都是系统内置的异常,所有我们去定义一个异常类,就是写一个类去继承Exception和他的子类,

public class ExceptionDemo {
	public static void main(String[] args) {
		Teacher t = new Teacher("one");
		try {
			t.lecture();
		} catch (NoclassException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("换一台电脑");
		}
	}
}

class Teacher {
	private String name;
	private NoteBook book;

	public Teacher() {

	}

	public Teacher(String name) {
		this.name = name;
		book = new NoteBook();
	}

	public void lecture() throws NoclassException {
		try {
			book.run();
		} catch (BlueScreenException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			book.restart();
		} catch (SmokeException e) {
			homeWork();// 临时解决方案
			throw new NoclassException("课程停止");// 异常转换
		}
		System.out.println(name + "讲课");
	}
	
	public void homeWork(){
		System.out.println("大家不要悲伤,我们还有作业,可以写作业");
	}
}

class NoteBook {
	// 笔记本电脑状态,为0正常,为1就表示蓝屏,为2就表示冒烟
	private int state = 2;

	public void run() throws BlueScreenException, SmokeException {
		System.out.println("笔记本电脑运行");
		if (state == 1) {
			throw new BlueScreenException("电脑蓝屏");
		}
		if (state == 2) {
			throw new SmokeException("电脑冒烟");
		}
	}

	public void restart() {
		state = 0;
		System.out.println("笔记本电脑重启");
	}
}

class BlueScreenException extends Exception {
	public BlueScreenException() {

	}

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

class SmokeException extends Exception {
	public SmokeException() {

	}

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

class NoclassException extends Exception {
	public NoclassException() {

	}

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

finally

finally:finally里面的代码无论异常是否发生,都会执行。有一些特定的代码无论异常是否发生,都需要执行,因为异常会引起程序转跳,导致有些语句执行不到,这样我们就可以把执行的代码放到finally当中。我们一般在finally里面写释放资源的代码,如果有return,那么先执行finally再执行return,除非推出jvm

public static void main(String[] args) {
		try {
			throw new Exception();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			// return;
			// System.exit(0);// 退出jvm
		} finally {
			System.out.println("test");
			System.out.println("finally");
		}
		
	}
}

class TestException extends Exception {
	public TestException() {

	}

	public TestException(String message) {
		super(message);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值