异常处理

一. 异常处理

Exception: 在java中,所有的异常类都继承了该类

1, 运行时异常: 可以不处理

........

2, 检查性异常: 必须得处理,不处理程序不能运行

...... 调用 带有检查性异常的方法时,idea软件会提示,必须处理

Error 不是 异常,比异常严重

二. 如何处理异常

2.1, try{} catch(){}

把有异常的代码放到try{}中,运行时一旦有异常会被catch给捕获

有助于程序员调试程序

try{
  ....可能 有异常的代码
}
catch(异常类型一  e){
   System.out.println(e.getMessage()); //输出错误信息
   如果try{}中出现的异常类型属于 异常类型一, 那么执行这里的代码
}
catch(异常类型二  e){
   如果try{}中出现的异常类型属于 异常类型二, 那么执行这里的代码
}
catch(异常类型三 e){
   如果try{}中出现的异常类型属于 异常类型三, 那么执行这里的代码
}
catch(异常类型四  e){
   如果try{}中出现的异常类型属于 异常类型四, 那么执行这里的代码
}
.......
catch(Exception e){
   兜底
}

或:
try{
  ....可能 有异常的代码
}
catch(异常类型一 | 异常类型二 | 异常类型三 e){
   如果try{}中出现的异常类型属于 异常类型一, 那么执行这里的代码
}  
......这里的代码可以继续执行

2.2 throws 异常

抛出异常: 自己不处理,告诉调用本方法的人,我这里可能会有异常,让调用者来处理

public class Test{
   public void t1() throws 异常类{
       
  }
   //谁调用t1, 就告诉谁, t1方法可能会有异常
}

2.2 @SneakyThrows(引用第三方包 lombok @Data)

伪装异常: 该注解把 检查性异常 伪装成 运行时异常,可以不再处理

 

实例代码:

public class YiChang {
    public static void t1(int a, int b){
        if(b == 0){
            System.out.println("除数不能是0");
            return; //停止代码继续执行
        }
        System.out.println( a / b);
    }
​
    public static void t2(int a, int b){
        try{
            System.out.println( a / b);
        }
        catch (ClassCastException e){
            System.out.println("ClassCastException");
        }
        catch (NullPointerException e){
            System.out.println("NullPointerException");
        }
        catch (ArithmeticException e){
            System.out.println("ArithmeticException");
        }
        catch (Exception e){
            System.out.println("Exception");
        }
        finally {
            //无论前边有没有异常,这里的代码都会执行
            System.out.println("一切正常,请放心");
        }
    }
    public static void t3(int a,int b) throws ArithmeticException{
        System.out.println(a / b);
    }
    public static void t4(int a,int b) throws SQLException {
        System.out.println(a / b);
    }
}
public class YiChangTest {
​
    public static void main(String[] args) {
       YiChang.t1(10,5);
       YiChang.t2(10,0);
       //异常与哪个catch匹配,就执行哪个catch后面的代码
//调用抛出运行时异常,可以不处理
        try{
            YiChang.t3(10,0);
        }
        catch (ArithmeticException e){}
        //调用抛出检查性异常的方法,必须处理
        try{
            YiChang.t4(10,0);
        }
        catch (SQLException e){}
        catch (ArithmeticException e){}
        System.out.println("一切都不影响");
​
    }
}
 

 

 

 

posted @ 2024-09-06 17:22  白头吟  阅读(37)  评论(0)    收藏  举报