异常
概述
代码不正常运行
- 编译时异常:在编译阶段程序就会识别到可能出现异常,解决后才能运行代码
注意:编译时异常不一定会出现问题 - 非编译时异常:编译时没问题,可能在运行中出现问题,需要修改代码
ps: 可以在API中查看该异常继承的父类,继承了java.lang.RuntimeException的就是运行时异常 - Throwable 类是所有异常类的父类
Throwable的成员方法
处理办法
JVM处理办法
在控制台打印出异常的详细信息、出现异常位置后,直接结束程序
自己的处理办法
- 方法名后添加
public static void main(String [] args) throws xxxException{
xxx代码体
}
- 使用try{}catch(){}包裹住可能出现问题的代码
try {
可能出现异常的代码
} catch (对应异常类型的参数 e) {
e.printStackTrace();
}
**好处:**这样对异常进行处理,异常发生后不会像JVM一样直接结束程序,而是可以进行相应操作,程序还会继续向下执行
自定义异常
只要继承了Exception类就是一个异常类
throws | throw |
---|---|
用在方法名后面,后面跟的是异常类名 | 用在方法体内,后面跟的是异常类对象 |
抛出异常,由方法的调用者进行处理 | 抛出异常,由方法体内自己的代码进行处理 |
声明存在,不一定会出现异常 | 执行了throw,一定是程序除了异常 |
//自定义异常类,需要继承Exception类或者RuntimeException类
public class CustomException extends Exceptiom{
//方法内一定要有无参和带参构造方法
public CustomException(){}
public CustomException(String message){
//传递的信息最后可以和异常信息一起输出在控制台
super(message);
}
}
//测试类
public class Demo{
//由于下面调用的方法抛出了异常类,所以调用该方法的方法也需要抛出
public static void main(String [] args) throws CustomException{
int i = new Scanner(System.in).nextInt();
test(i);
}
//以学生成绩范围监测方法作为示例
//方法体内部使用了throw关键字抛出了一场,方法就必须使用throws关键字抛出异常类
public static void test(int score) throws CustomException {
if(score <0 || score > 100){
//使用throw关键字,跟着自定义异常类对象,使用无参还是带参构造方法根据需要
throw new CustomException("成绩范围应该在0-100之间");
}else{
System.out.println("成绩范围无误");
}
}
}
程序运行截图