一、throw / throws 抛出异常
通过学习try-catch-finally,我们知道自己来处理异常,但是有一些异常,在我们编写的这个方法中,不知道怎么处理,那怎么办呢?
大家换个思维想一想,我处理不了的异常,那就把这个异常抛给别人(也就是调用我这个方法)的来处理,这也有点想我们所说的推卸责任.那怎么抛出异常呢? 就使用我们的throw 来抛出异常,但是你抛出了异常,是不是要告诉调用者,说我这个方法可能会抛出那些异常呢?我们推卸了责任,那也要让背黑锅的人知道他背的是什么黑锅,不能做得太绝,是吧.那怎么在方法上声明可能抛出的异常呢,就使用throws.
语法:throw new 异常类型(异常信息);
eg: throw new Exception("抛个异常");
throw 作用:
1)返回异常结果;
2)结束方法;
throws 异常类型1,异常类型2
eg:
//定义一个除法的方法,并声明异常
public int division(int num1 ,int num2) throws ArithmeticException{
if(num2 == 0){
//抛出异常,如果抛出异常,则抛出异常后面的代码不会执行
throw new ArithmeticException("除数不能为0");
}
return num1/num2;
}
异常常用方法
public String getMessage() 获取异常的信息
public void printStackTrace() 打印异常的栈跟踪信息
throws 在方法签名上, 表示这个方法可能会抛出什么类型的异常
throw 抛出的异常类型是RuntimeException类型或者子类, 这个方法可以使用throws 声明,也可以省略
throw 抛出的异常类型是编译异常, 这个方法一定使用throws 声明
二、异常信息分析与调试
异常信息会沿着方法调用的路径向回传递,直到我们程序的入口点main方法,像上面打印出的异常信息输出的层级结构;
方法调用:方法A方法B方法C(在C方法中出现异常)
异常向上传递:main()方法A方法B方法C(在C方法中出现异常)
三、自定义异常
在实际开发中, 根据项目的业务需求, 把某些情况定义为异常:
删除学生: 通过学号删除, 学号不存在作为一种异常来看, 但是jdk没有这个类型的异常
jdk允许我们程序员根据业务需求, 自定义一些异常类:
步骤:
1) 创建一个类(异常类取名: XxxException)
2) 让这个类继承Exception类(推荐),或者Exception子类
3) 根据Exception的构造方法生成自定义异常类的构造方法
/**
* 学号不存在的异常
*
*/
public class StuNoNotExistsException extends Exception{
public StuNoNotExistsException() {
}
public StuNoNotExistsException(String message) {
super(message);
}
public StuNoNotExistsException(String message, Throwable cause) {
super(message, cause);
}
public StuNoNotExistsException(Throwable cause) {
super(cause);
}
public StuNoNotExistsException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}

6196

被折叠的 条评论
为什么被折叠?



