详述throw和throws

一、自定义异常类与throw

1、什么是自定义异常类?什么时候需要自定义异常类?

public class Student {

	private int age;
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		if (1<=age && age<=150) {
			this.age = age;
		}else {
				System.out.println("age范围1~150!");
		}
	}
}
public class Test {

	public static void main(String[] args) {
		Student stu = new Student();
		stu.setAge(1000);
		System.out.println(stu.getAge());
	}
}

上述代码定义一个学生类,类属性有age,因为年龄大小一般为0~150,所以在setAge方法中加判断语句给以警示。在执行Test中的main方法时显然会得到:
在这里插入图片描述
但是这种输出仅仅是输出一句话,无法像抛出异常那样能准确定位到代码出错的位置!有一种更加便利的方法来提醒程序员,就是自定义异常类。

//1、定义一个类,继承异常类以后,若继承或间接继承的是RuntimeException则为运行时异常,否则为检查时异常
public class AgeException extends RuntimeException {

	//2、定义构造方法,调用父类有参构造方法,显示信息
	public AgeException(String message) {
		super(message);
	}	
}

上述代码定义了一个异常类,该异常类继承与RuntimeException,它也为运行时异常,不用显式处理。我们将Student类中的setAge方法改为:

public void setAge(int age){
		if (1<=age && age<=150) {
			this.age = age;
		}else {
			throw new AgeException("age范围1~150!");
		}
	}

运行结果:在这里插入图片描述
一目了然,不仅能看到提示信息,而且根据异常名能知道什么出了异常,以及该去哪找。
也可以得到throw抛出的是对象,且用在方法体内或是代码块中使用。
throw抛出的异常处理方法:

  1. 直接使用try-catch包裹throw语句
  2. throw所在方法体没有处理,抛给创建该异常的异常类
public void setAge(int age) throws AgeException{
}

当然如果该异常属于运行时异常也可不用处理。

  1. 使用try-catch包裹含有throw语句的方法。

二、throws

throws一般用于抛出检查时异常,throws抛出的是类,如果有多个类在类之间加逗号隔开,throws只在参数列表后使用。
有如下代码:

public class Test{
	
	public static void show(int age) throws PrinterException{
		if(age<0||age>150){
			try {
				throw new PrinterException(“操作失败:年龄取值范围为0~150);
			} catch (PrinterException e) {
				System.out.println("show方法");
				e.printStackTrace();
			}
			return;
		}
		System.out.println(age);
	}
	public static void main(String[] args) {
		try {
			show(1000);
		} catch (PrinterException e) {
			System.out.println("main方法");
			e.printStackTrace();
		}
	}
}

运行结果入下:在这里插入图片描述因为throw new PrinterException(“操作失败:年龄取值范围为0~150”);此处异常已经使用try-catch处理,所以定义show方法的参数列表后的throws PrinterException没有起作用,也就是在main方法中show(1000);没有出现异常,main方法中的catch没有执行,符合上述执行结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值