Java-异常机制

异常机制

正常情况下,程序按照我们希望的样子和步骤去执行,但是,代码就像人生,要是一帆风顺了,就要想想是不是哪里出事了。程序若是有报错还好,就怕没有报错。

实例


public class Test {
    public static void main(String[] args) {
        test(1, 0);
    }

    public static  int test(int a,int b){
        return a / b;
    }
}

如上,除数等于0时会发生算数异常错误,程序直接中止。


Java-异常机制_第1张图片

异常是个什么样的

程序运行时,出现我们没有考虑的情况时,会出现异常,因为计算机是比较死板的,要严格遵守规则。

异常种类

运行时异常

数组越界、空指针异常等。

编译时异常

明确会发生的异常,必须要在编译阶段处理,不处理无法通过编译。

都是继承自父类异常类

错误和异常不是一个东西,有相似之处。 ERROR,错误等级高于异常。但是都继承于Throwable类。

异常处理有三种,不处理,立即处理(try-catch-finally结构处理),抛给调用处解决(throws),但是在main函数抛出会给JVM,这样是不行的,JVM会直接中断程序。

抛出异常

调用方法出现异常程序终止时,这时我们可以手动抛出一个异常来终止程序运行,同时告知上一级调用方法出现问题,有异常,终止程序。

public class Test {
    public static void main(String[] args) {
        test(1, 0);
    }

    public static  int test(int a,int b){
        ArithmeticException ae = new ArithmeticException("除数不能为0");
        if (b == 0){
            throw ae;
        }
        return a / b;
    }
}

Java-异常机制_第2张图片

在构造方法可以写入原因,遇到异常未处理时,不会往后执行,直接结束程序。

运行结果指明异常种类,发生异常的地方,行数。从结构可以看出时堆栈的形式打印的。

有些不能直接抛出

必须指明异常具体种类,给出对应解决方案,不然是不能直接抛出的。
throws 关键词,会接着抛出异常,不会对其进行处理。如果没有异常,在重写时可以不抛出异常。

异常处理

自行处理异常需要捕获,使用 try-catch-finally结构。
try中写可能出现异常的语句,catch负责匹配异常对象并进行相应处理。


public class Test {
    public static void main(String[] args) {
        try{
            test(1, 0);
        }catch (ArithmeticException ae){
            System.out.println("除数不能为0");
        }
    }

    public static  int test(int a,int b){
        ArithmeticException ae = new ArithmeticException("除数不能为0");
        if (b == 0){
            throw ae;
        }
        return a / b;
    }
}

Java-异常机制_第3张图片
在对异常进行处理后,程序可以正常开始结束

处理可以打印出错信息,告知调用者不要进行非法操作。

捕获要有相应匹配的类来进行处理。

catch捕获处理的只能是Throwable类及其子类。但是出现错误不要去捕获,直接处理,catch一般处理异常。catch可以写多个,捕获多种不同异常。但是要注意父类写子类前的话,会导致子类变成不可达的语句。多种不同的类型也是可以合并的,类似于或运算。

finally

无论如何都会执行的语句。

你可能感兴趣的:(JAVA,java,jvm,开发语言)