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);
}
}
```java
package 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字符串
@ResponseBody
public 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捕获异常;