一、异常描述
1.异常:就是程序出现了不正常的情况
2.异常体系
Error:严重问题,不需要处理
Exception:称为异常类,他表示程序本身可以处理问题。
RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码
非RuntimeException:编译器就必须处理的,否则程序不能通过编译,就更不能正常运行了。
二、JVM的默认处理方案
如果程序出现了问题,我们没有做任何处理,最终JVM会做默认处理
- 把异常的名称,异常原因及异常位置输出在控制台
- 程序停止执行
1.异常处理try。。。。catch。。
执行流程:
程序从try里面的代码开始执行
出现异常,会自动生成一个异常对象,该异常对象将被提交给java运行时系统
当java运行时系统接受到异常对象时,回到catch中区找匹配的异常,找到后进行异常处理执行完毕后,程序还可以往下执行。
2.Throwable的成员方法
方法名称 | 说明 |
public String getMessage() | 返回throwable的详细消息字符串 |
public String toString() | 返回此可抛出的简短描述 |
public void printStactTrace() | 把异常的错误信息输出在控制台 |
三、编译时异常和运行异常的区别
1.java中的异常被分为两大类:
编译时异常和运行时异常,也被称为受检异常和非受检异常。所有是RuntimeException类及其子类被称为运行时异常,其他的异常都是编译异常
- 编译时异常:必须显示处理,否则程序就会发生错误,无法通过编译
- 运行时异常:无需显示处理,也可以和编译时异常一样处理。
2.异常处理之throws
虽然我们通过try...catch.....可以对异常进行处理,但是并不是所有情况我们都有权力进行异常处理也就是说,有时候出现的异常我们处理不了,针对这种情况java提供了throws的处理方案。
3.格式:
throws 异常类名;
4.注意这个格式时跟在方法的括号后面的
- 编译时异常必须要进行处理,两种处理方案:try...catch....或者throws,如果采用throws这种方案,将来谁调用谁处理。
- 运行时异常可以不处理,出现问题后,需要我们回来修改代码。
四、自定义异常
1.代码演示
public class ScoreException extends Exception{
//生成一个无参构造
public ScoreException() {
}
//带参构造
public ScoreException(String message){
super(message);
}
}
public class Teacher {
public void checkScore(int score) throws ScoreException {
if (score<0||score>100){
throw new ScoreException("你给的分数有误分数应该在0到100之间");
}else {
System.out.println("分数正常!");
}
}
}
public class TeacherTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入分数:");
int score = scanner.nextInt();
Teacher teacher = new Teacher();
try {
teacher.checkScore(score);
} catch (ScoreException e) {
throw new RuntimeException(e);
}
}
}
2.throws和throw的区别
throws
- 用在方法生命后面跟的是异常类名
- 表示抛出异常,由该方法的调用者来处理
- 表示出现异常的一种可能性,并不一定会发生这些异常
throw
- 用在方法体内,跟的是异常对象名
- 表示抛出异常,由方法体内的语句处理
- 执行throw一定抛出了某种异常