Java异常处理从入门到精通

文章资讯 2020-07-27 07:40:24

Java异常处理从入门到精通

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;
}
}