自定义异常抛出案例
自定义异常的目的:有时候java提供的异常不足以说明我们碰到的问题。
根据我们的需求抛出我们想要抛出的异常。主要我们是想根据抛出的异常类名知道程序到底抛出了什么样的异常。通过异常的名字马上就知道发生了什么问题,所以我们要自定义异常。
比如说成绩范围异常,java中没有这样的异常,所以我们要创建这样的异常类。
案例:
- 首先创建一个异常类(ScoreException)继承Exception
public class ScoreException extends Exception{
public ScoreException() {
}
public ScoreException(String message) {
super(message);
}
}
- 再创建一个对象类,在方法中使用抛出(throw)自己创建的异常类对象
- 这里的异常是编译时异常,因此方法需要throws自己创建的异常类
- 方法体的语句超出自己设定的范围后使用throw一个new出来的异常类对象
public class Teacher {
public void checkScore(int score) throws ScoreException {
if (score<0 || score>100){
throw new ScoreException("分数有误,应该在0-100之间");
}else{
System.out.println("分数正常");
}
}
}
- 创建一个main测试
- 这里创建的Teacher对象调用checkScore方法时会有可能会抛出编译时异常因此需要try…catch…处理
import java.util.Scanner;
public class TeacherTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入分数:");
int score = sc.nextInt();
Teacher t = new Teacher();
//t.checkScore(); 这里报错,因为前面的checkScore属于编译时错误(throws抛出),所以需要使用try..catch处理好
try {
t.checkScore(score);
} catch (ScoreException e) {
e.printStackTrace();
}
}
}
请输入分数:120
it_xiaodou.API_Exception.ScoreException: 分数有误,应该在0-100之间
at it_xiaodou.API_Exception.Teacher.checkScore(Teacher.java:6)
at it_xiaodou.API_Exception.TeacherTest.main(TeacherTest.java:14)
总结Throw和Throws的区别
throws | throw |
---|---|
用在方法声明后面,跟的是异常类名 | 用在方法体以内,跟的是异常对象名 |
表示抛出异常,由该方法的调用者来处理 | 表示抛出异常,由方法体内的语句处理 |
表示出现异常的一种可能性,并不一定会发生这些异常 | 执行throw一定抛出了某种异常 |
只有一类异常,抛出的时候方法可以不用声明,就是RuntimeException异常 | 执行到 throw 语句则后面的语句块不再执行 |
throws可以跟多个异常类名,用逗号隔开 | throw只能抛出一个异常对象名 |