异常和错误

 

当我们执行一个方法的时候这个方法可能存在异常,异常发生了是停止继续运行的,所以我们需要通过try{}catch( ){ }去捕获异常

public class Demo {
    int chufa(int a,int b) {
        return a/b;
    }

    public static void main(String[] args) {
        try{
          new Demo().chufa(1,0);
        }catch (ArithmeticException e) {
      // 由于能预见被除数不能为0这个异常是ArithmeticException类所以e的类类型是他,当然写父类也是可以的 System.out.println(e); }
finally {
       // 这里面的代码不管异不异常都会执行 System.out.println(
"我是用来关闭IO流的"); } } }

 那么引出一个问题既然catch里面写最高类和精确的子类都是一样的,那么我所有错误都写最高类好了,反正都能捕捉到,那么写子类的场景在哪

try{
       new Demo().chufa(1,0);
        }catch (ArithmeticException e) {
            System.out.println(e);
        }catch (MissingResourceException e){
        // 因为不是MissingResourceException错误类型所以不会执行到这 System.out.println(
"我是丢失资源异常"); }catch (Exception e){ System.out.println(e); }finally { System.out.println("我是用来关闭IO流的"); }
// 不难看出想要针对精确到各种类型做处理的时候用精确的子类了,这里面有个连用catch相当于if else (不是if) 所以连续catch类型要从小到大不然会报错已经捕捉过了

接下来就是我需要自定义一个异常类(一般在架构会使用)

// 第一步继承 Exception
public class myException extends Exception{
    // 第二步重写toString方法  
    @Override
    public String toString() {
        return "方法有异常";
    }
}

使用自定义类

// 第一步方法抛出throws myException这是最重要的一步
int chufa(int a,int b) throws myException{
        if(b == 0){
            throw new myException(); // 第二步主动抛出异常,如果不写捕获不到你的错误信息了
        }
        return a/b;
    }
// 可以使用了
catch (myException e){
System.out.println(e);
}
posted @ 2021-02-21 15:42  火鸡的呐喊  阅读(44)  评论(0编辑  收藏  举报