1、Java异常体系
2、Error
Error是严重的异常,通常与虚拟机有关,如堆内存不足(OutOfMemoryError)、类加载异常(NoClassFoundError)、线程栈空间不足(StackOverFlowError)。这类异常无需在程序中捕获和处理,因为这类异常无法通过程序来预防和解决。
3、Exception
Exception是可以在程序中捕获和处理的异常,这类异常应该尽可能捕获和处理,使程序能够正常进行。Exception分为运行时异常(RuntimeException)和受检查异常,
RuntimeException
RuntimeException是运行时异常,这类异常是运行时发生的异常,Java编译器不会校验此类异常,即无需在程序中显示的声明和捕获异常,如空指针异常、数组越界异常,此类异常的发生,意味着程序存在问题。
受检查Exception
受检查异常必须显示的声明和捕获,否则,Java编译器会报编译错误。这类异常一般跟业务有关,用于表示某种业务场景的异常。
4、沉淀
4.1 单元测试异常检测
@Test(expected = Exception.class)
public void testFunction(){}
//表示testFunction会抛出Exception异常
4.2 异常统一捕获
服务层根据业务场景抛出异常,由AOP捕获后,统一处理异常。
//使用注解标记此方法需要经过统一异常处理切面
@ExceptonHandler(description = "这里填写异常的描述")
public void function(){}
//定义异常处理切面
@Aspect
@Configuration
@Slf4j
public class ExceptonHandlerAspect {
@Pointcut("@annotation(ExceptonHandler)")
public void exceptonHandlerAspect(ExceptonHandler exceptonHandler) {
}
@Around("exceptonHandlerAspect(exceptonHandler)")
public Object doAround(ProceedingJoinPoint pjp, ExceptonHandler exceptonHandler) throws Throwable {
Object result;
try {
result = pjp.proceed();
} catch (Throwable throwable) {
//处理异常
}
return result;
}
}