1,异常的概念:
2,异常体系:
Error:严重问题,通过代码无法处理,比如:电源断电;
Exception:称为异常,表示程序本身可以处理的问题;
1. 编译时异常;(Exception)1. 运行时异常;(RuntimeException)
3,虚拟机的默认异常处理:
默认处理方式:
throws:表明处理异常,如果真的出现问题时,这个异常就会抛给调用者;
- try_catch:
- 格式:(选中代码+快捷键:ctrl + alt + t)
try {
可能出现的异常代码;
} catch (异常类名 变量名){
异常的处理代码;
}
2. 在catch里面的方法:
5,处理异常的原则:
不要把异常抛给JVM虚拟机即可;(main方法运行在JVM虚拟机)
- 方式 1:直接try——catch处理异常;
方式 2:
作用:在这个代码块存放的代码都是一定会被执行的;
- 什么样的代码放到finally里:举例:资源的释放(IO流的关闭… );
场景代码:
public class Text01 {public static void main(String[] args) {try {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date parse = sdf.parse("2000lain-09yue-90ri");System.out.println(parse);} catch (ParseException e) {System.out.println("dadadada");e.printStackTrace();return;}finally {System.out.println("finally");}}}
7,在继承中方法重写的异常处理:
子类中的重写方法throws的异常要比父类方法的异常相同或更多;
父类方法没有throws异常的情况下,子类方法只能try_catch处理;
8,* 自定义异常:
- 记得要在全局异常处理器中进行注册;否则不会有效执行 ```java package top.jztice5.reggie.exception;
import org.springframework.dao.DuplicateKeyException;
/**
- @author Jztice5
- @date 2022年04月07日 11:45 */
/**
- 用户名重复异常处理类 */ public class DuplicateUserNameException extends DuplicateKeyException {
public DuplicateUserNameException (String msg) {super(msg);}
}
```javapackage top.jztice5.reggie.exception;/*** @author Jztice5* @date 2022年04月06日 20:57*/import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;import top.jztice5.reggie.common.R;/*** 设置异常处理器*///表示这是一个异常处理类@ControllerAdvice@Slf4j//该注解将会自动将返回的数据转换成JSON字符串@ResponseBodypublic class GlobalExceptionHandler {/*** 添加用户重名的异常处理注册* @param e* @return*///该注解:代表仅处理由该异常处理类传来的异常(DuplicateUserNameException)@ExceptionHandler (DuplicateUserNameException.class)//public R <String> DuplicateKeyException (DuplicateUserNameException e) {//将信息放到日志中;log.info("====异常信息====");e.printStackTrace();//返回错误的信息到前端控制器return R.error(e.getMessage());}@ExceptionHandler (value = Exception.class)public R <String> handleException (Exception e) {log.info("====异常信息====");e.printStackTrace();return R.error("异常信息:" + e.getMessage());}}
- 异常的**抛出**:
//获取查询的对象Employee userName = employeeMapper.setSelectUserName(username);//将对象与异常信息一同传到异常处理类if (userName != null){throw new DuplicateUserNameException("该用户 "+userName.getUsername()+" 已存在,请重试");}
9,在工作中如何处理异常:
- 运行时异常,一般修改代码;
- 空指针异常:常见于对象为null的情况下,在容易出现空指针异常的情况下要对对象是否为null进行判断,避免空指针异常;
- 编译时异常,必须处理,其中方式有两种:
- throws抛出异常;
- try_catch捕获异常;
