【JavaSE】异常

一、简介

        异常即是在代码运行期间,程序没有按照原本的计划执行,发生了错误,我们用异常对象表示。

        在代码编写期间导致的代码编译错误,被称为编译错误,不是异常。

二、异常的分类

Throwable(所有异常的父类)

        Exception(代码允许出现的不正常情况,可以给出解决方案)

                ...

                ...

        Error(对于非常严重的问题,我们用Error来进行描述)

                ...

                ...

三、异常的使用

throw和throws

        throw表示抛出一个异常,真正遇到了某个异常,使用该方法抛出异常。若异常没有被捕获,将抛出到控制台上,throw产生作用后,具有结束当前方法的效果。

        throws用于声明在方法运行过程中可能存在的异常,当调用者使用该方法是,需要给出解决方案或同样抛出该方法中可能出现的异常,让下一个调用者去解决

public class TestException {
    public void sum(int a,int b) throws OneException,TwoException {
        System.out.println("准备执行");
        if (a<0){
            throw new OneException("变量一错误");
        }
        if(b<0){
            throw new TwoException("变量二错误");
        }
        System.out.println(a+b);
    }
}

        在主方法中创建该对象并同样声明可能出现的异常不给出解决方案

public class Test01 {

    public static void main(String[] args) throws TwoException, OneException {
        TestException te = new TestException();
        te.sum(-1,6);
    }

}

四、异常处理机制

try {
        
    } catch () {
        
    }finally {
        
    }

        try中一旦出现了异常,catch会对()指定的异常就行捕捉,成功捕捉后将不会在控制台抛出异常,没有异常则正常执行,try后可以跟多个catch进行异常的捕捉并给出解决方案,被捕捉异常的类型通常从小到大,finally表示最后。

        在上述方法中,在主方法中创建对象后对可能出现的异常进行捕获并给出解决方案

public class Test01 {

    public static void main(String[] args) throws TwoException, OneException {
        TestException te = new TestException();
        try {
            te.sum(1,-2);
        } catch (OneException e) {
            System.out.println("1");
            e.printStackTrace();
        } catch (TwoException e){
            System.out.println("2");
            e.printStackTrace();
            System.out.println("3");
        }finally {
            System.out.println("了解");
        }
    }

}

注意:

        1、当方法只声明异常而不提供解决方法(即不捕捉异常),在程序的运行过程中遇到该异常会报错并返回code -1。

        2、当对异常进行了捕获时,可以选择不在控制台打印异常信息。当使用了e.printStackTrace()进行打印时,异常的打印将被程序放在最后执行,并返回code 0。

五、自定义异常

        当遇到相同类型的异常时,由于throw关键字的作用,该异常自会被抛出一次,并且在一个catch中只能捕捉一次。所以通常我们需要自定义异常。只需要继承Exception类并实现超类的构造方法即可。

public class OneException extends Exception{
    public OneException() {
    }

    public OneException(String message) {
        super(message);
    }

    public OneException(String message, Throwable cause) {
        super(message, cause);
    }

    public OneException(Throwable cause) {
        super(cause);
    }

    public OneException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

六、RunTimeException

        运行时异常。

                1、一些程序在运行中出现的问题,不需要给出解决方案,调用者也不用声明该异常

                2、遇到该异常时让程序自然报错

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