基本知识:
java中类库中的每一个包都定义了异常类,所有这些类都是Throwable类的子类。Throwable类派生出两个子类,分别是Exception和Error类。
捕捉异常:通常使用try,catch,finally三个部分组成。try语句块存放的是可能会发生异常的代码;catch语句块用来获取异常信息和输出异常性质。try-catch语句块一般放置于主程序main()当中.。
....main(){
try{
//程序代码块
}
catch(//具体的异常或者自定义异常Exception){
//输出异常性质,一般由自定义语句
syso("错误信息");
}
catch(){
}
.
.
.
}
catch代码块中语句Exception.getMessage()函数:用来输出错误性质。Exception.toString()函数:给出异常的类型与性质。一般常用 Exception.getMessage()函数:指出异常的类型、性质、栈层次以及出现在程序中的位置。
自定义异常:
首先要了解为什么要自定义异常,一开始的疑问在于有Exception这个大类,在查找资料(链接:为什么要自定义异常??)后得知以下情况:
1.我们在工作的时候,项目是分模块或者分功能开发的,基本不会是一个人开发一整个项目,使用自定义异常类就统一了对外异常展示的方式。
2.有时候我们遇到某些校验或者问题的时候,需要直接结束掉当前的请求,这时便可以通过抛出自定义异常来结束。如果你的项目中使用了SpringMVC比较新的版本的话有控制器增强,可以通过@ControllerAdvice注解写一个控制器增强类来拦截自定义的异常并响应给前端响应的信息。
3.自定义异常可以在我们的项目中某些特殊的业务逻辑时抛出异常。
4.使用自定义异常继承相关的异常来抛出处理后的异常信息,可以隐藏底层的异常。这样更安全,异常信息也会更加直观。自定义异常可以抛出我们自己想要抛出的异常,可以通过抛出的信息区分异常发生的位置,根据异常名我们就可以知道哪里有异常,根据异常提示信息对程序进行修改。比如空指针异常NullPointException,我们可以抛出信息为"XXX为空"的定位异常位置,而不用输出堆栈信息(默认异常抛出的信息)。
如果希望写一个检查异常类,则需要继承Exception类;如果希望写一个运行时异常类,则需要继承RuntimeException类
public class MyException extends Exception() {//创建自定义异常类,继承于Exception类
//无参的构造方法,可写可不写
public MyException() {
}
public MyException(string Errormsg) {//构造方法
super (Errormsg);//父类构造方法
}
}
public void function(/*参数*/) throws MyException{
throw new MyException("//各种错误");
}
//在main方法中的catch部分
catch(MyException e) {
System.out.println(e);
}