欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

详述自定义异常类与throw和throws的区别

程序员文章站 2022-07-14 10:27:32
...

一、自定义异常类

创建一个Student类,控制其年龄在0-150

public class Student {
	private int age;

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if(age > 0 && age <= 150) {
			this.age = age;
		}else{
			System.out.println("输入的年龄应在1-150范围内!");
		}
	}
}

测试代码

public class Test {
   public static void main(String[] args) { 
   	Student student = new Student();
   	student.setAge(1000);
   }
}

结果

输入的年龄应在1-150范围内

但是在现实中,程序员需要通过运行结果知道程序中发生了什么样的异常以及异常发生的具体位置,便于找到和修改它。因此,我们需要自定义异常类。代码如下:

public class AgeException extends RuntimeException {
	public AgeException(String message) {
		super(message);
	}
}

上述代码定义了一个异常类AgeException,该异常类继承与RuntimeException,它也为运行时异常。

二、throw

此时,我们将Student类中的setAge方法改为:

public void setAge(int age){
	if (1<=age && age<=150) {
		this.age = age;
	}else {
		throw new AgeException("输入的年龄应在1-150范围内!");
	}
}

运行结果:详述自定义异常类与throw和throws的区别
结果不仅可以提示代码发生了什么异常,还可以很容易找到出现异常的位置。

throw抛出异常的处理方法:
1、用try-catch包裹throw语句,即直接在该方法内把异常处理;
2、抛给创建该异常的异常类,即让方法的调用者处理。
(try-catch和thows使用一种即可 )

public void setAge(int age) throws AgeException{
}

三、throws

throws一般用于抛出检查时异常,且throws抛出的是类,如果有多个类在类之间加逗号隔开,throws只在参数列表后使用。
如上文中提到,利用显示处理方法,使用throws在方法上抛出,在调用该方法的代码中处理:

public void setAge(int age) throws AgeException {
	if(age> 0 && age <=150) {
		this.age = age;
	}
	throw new AgeException("输入的年龄应在1-150范围内!");
}

throw与throws的区别

1、抛出的东西不同:throw抛出的是具体的异常对象,而throws抛出的是抽象的异常类;
2、使用位置不同:throw一般用在方法体中,也可用在代码块中,但是如果抛出的是检查时异常类创建的对象,则必须使用try-catch自行处理;throws只能用在方法的参数列表后面。