详述自定义异常类与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抛出异常的处理方法:
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只能用在方法的参数列表后面。
推荐阅读
-
异常类的了解、异常的处理方案、编译时期异常和运行时期异常区别、throws和throw的区别、自定义异常类 、捕获异常的标准格式、final、finally、finalize的区别
-
自定义异常和throw、throws的使用
-
详述自定义异常类与throw和throws的区别
-
面试题:有关异常处理中的throw和throws的区别
-
异常的使用,try-catch-finally的使用,自定义异常,throws和throw的区别
-
异常(try……catch……finally、throws和throw的区别、自定义异常)
-
Java 异常、try catch、Thorwable、printStackTrace、throws和throw的区别、自定义异常
-
java异常中throw和throws的区别
-
详解Java异常处理中throw与throws关键字的用法区别
-
详解Java异常处理中throw与throws关键字的用法区别