所有的异常都继承自java.lang.Throwable
JDK中的异常体系
- Error
- 表示错误 底层和硬件的错误 与程序本身无关 这类错误无法被捕获 也不应被捕获
- Exception
- 表示异常 程序本身错误,因为逻辑错误或程序不够严谨造成 可以被捕获 也可以不捕获 如果不主动捕获则会被JVM自身去处理
- (非受检异常)RuntimeException:运行时异常 是指编译时无法获知的错误 可以捕获也可以不捕获 比如NullPointerException
- (受检异常)CheckedException:编译时为了保证程序的健壮性 可以提前预料到的异常,必须捕获 如:FileNotFoundException
- 举例
- 受检异常 只能try或者throw
- 受检异常 只能try或者throw
- 非受检异常
- 受检异常和非受检异常的差异
如果方法抛出多个受检异常 则代码逻辑需要处理多次受检异常 违背程序开发规范
public interface IUserService {
void changPwd(String pwd) throws SafeException,NoSafeException;
}
public class NoSafeException extends Exception {
public NoSafeException() {
}
public NoSafeException(String message) {
super(message);
}
}
public class SafeException extends Exception {
public SafeException() {
}
public SafeException(String message) {
super(message);
}
}
public static void main(String[] args) {
IUserService userService=null;
try {
userService.changPwd("");
} catch (SafeException e) {//需要多次处理受检异常
e.printStackTrace();
} catch (NoSafeException e) {//需要多次处理受检异常
e.printStackTrace();
}
}
解决方案:
将受检异常转换为非受检异常
在威胁系统安全性的场景下,还是建议使用受检异常