内置异常和 Throwable 核心方法
Java 内置异常
可查异常 (必须要在方法里面捕获或者抛出)
ClassNoFoundException 应程序试图加载类, 找不到对应的类
IllegalAccessException 拒绝访问个类的时候
NoSuchFieldExcetion 请求的变量不存在
NoSuchMethodException 法不存在
不可查异常
ArrayIndexOutOfBoundsException 数组索引越界
ClassCastException 强制失败抛出异常
NullPointerException 需要对象的地使 null 时, 抛出该异常
NumberFormatException 将字符串转换成种数值类型, 但该字符串不能转换为适当格式时, 抛出该异常
Throwable 类核心方法
public String getMessage()
异常的详细信息
public synchronized Throwable getCause()
异常原因
publicvoid printStackTrace()
打印错误的堆栈信息, 即错误输出流, 可以看到错误原因和所在位置
private synchronized StackTraceElement[] getOurStackTrace()
堆栈层次的数组, 下标为 0 的元素代表栈顶, 最后一个元素代表方法调用堆栈的栈底
Try Catch 异常捕获
异常处理之捕获语法
- try{
- // 可能发异常的代码
- }catch(AExceptionName e){
- // 出异常的时候处理
- }catch(BExceptionName e){
- }fianall{
- }
try 后面跟一个或多个 catch 块, 或一个 finally 块, 或两者的组合
catch 不能独立于 try 而单独存在
如果代码没有对应的异常类进行捕获, 则默认打印异常堆栈
异常进阶
finally 和多重异常捕获
一个 try 代码块后面跟多个 catch 代码块的情况就叫多重捕获
语法
- try{
- // 可能发异常的代码
- }catch(ExceptionName1 e1){
- // 出异常的时候处理
- }catch(ExceptionName2 e2){
- // 出异常的时候处理
- }
代码中发生异常, 异常被抛给第一个 catch 块, 如果不匹配则继续往下一个 catch 进行传递
finally 关键字
用来创建在 try 代码块后面执行的代码块
finally 代码块中的代码总会被执行
一般用于资源回收释放等操作
语法
- try{
- // 可能发异常的代码
- }catch(ExceptionName1 e1){
- // 出异常的时候处理
- }finally{
- // 肯定执的代码
- }
或者
- try{
- // 可能发异常的代码
- }finally{
- // 肯定执的代码
- }
throws/throw 关键字
异常的抛出 throw 和声明 throws
代码出异常常见的处理方法
try catch 捕获
throws 声明异常, 往外抛出
语法: throws 子句放在方法参数列表的右括号之后, 一个方法可以声明抛出多个异常, 多个异常之间用逗号隔开
例子
- public class Main {
- public static void readChar() throws IOException,RemoteException {
- int input = System.in.read();
- }
- }
try catch 中捕获了异常, 处理方法
当前捕获自己处理
捕获自己处理然后继续往外面抛异常
语法
throw new ExceptionName("异常信息");
例子
throw new IOException("File not found");
总结
当抛出异常被检查的异常, 我们必须使用 try-catch 块来处理它, 或者在方法声明中使用 throws 子句继续往外抛
自定义异常
为什么要使用自定义异常
当前 JDK 内置的一出场不满足需求, 项目会出现特有异常
自定义异常可以让业务更清晰
如何自定义异常
异常都是继承自 Exception 类, 所以我们要自定义的异常也需要继承这个基类
例子
- public class BaseException extends Exception {
- private String errorMessage;
- private String errorCode;
- public BaseException(String errorCode, String errorMessage) {
- super(errorMessage);
- this.errorCode = errorCode;
- this.errorMessage = errorMessage;
- }
- public String getErrorMessage() {
- return errorMessage;
- }
- public String getErrorCode() {
- return errorCode;
- }
- public void setErrorCode(String errorCode) {
- this.errorCode = errorCode;
- }
- public void setErrorMessage(String errorMessage) {
- this.errorMessage = errorMessage;
- }
- }
来源: https://www.cnblogs.com/chenyanbin/p/13381120.html