浅谈异常分类及异常处理机制

文章目录


前言

在我们写代码的时候,经常会碰到异常,本篇文章浅谈异常的种类及处理机制


一、异常有哪些种类?

顶级异常:Throwable

子类异常:Error,如OutOfMemoryError(OOM,内存溢出);Exception(这是我们常见的)

而在Exception常见的子类有IOException,RuntimeException

RuntimeException常见的三大异常:

NullPointerException-空指针异常

ClassCastException-类型转换异常

IndexOutOfBoundsException-下标越界异常

下图便于理解,各异常的关系(只列举了部分,常用到的异常)


二、异常处理机制(谁使用谁处理)

1.当前方法声明抛出异常

代码如下(示例):

public class Demo01 {

    public static void main(String[] args) throws FileNotFoundException {

        FileInputStream fis = new FileInputStream("./test.java");
    }
}

如上只是为了演示,不建议在main方法上抛出异常,在main方法上抛出异常,不便处理异常 

2.使用try...catch代码块包裹此方法的调整代码

代码如下(示例):

public class Demo02 {

    public static void main(String[] args){

        try {
            FileInputStream fis = new FileInputStream("./test.java");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

如上使用try...catch处理异常:alt+enter选择try/catch即可或选中代码ctrl+alt+t选择try/catch

另外try...catch有时还会搭配finally一起使用,即try...catch...finally,以后单独演示


总结

1.如果调用的方法抛出了"非RuntimeException异常",则必须处理,遵循一个原则:谁调用谁处理

2.出现异常必须处理,如果不处理,编译有错误,程序无法运行

3.在我们自己写的方法中,如果出现异常,一般的做法是将异常抛出,谁调用谁处理,如下演示

class Demo03 {

    public void methodA() throws FileNotFoundException {
        //将异常抛出
        FileInputStream fis = new FileInputStream("./test.java");
    }

    public void methodB() throws FileNotFoundException {
        //调用了A方法,但是A方法将异常抛出,没有处理
        //所以调用A方法有异常存在
        methodA();
    }

    public void methodC(){
        try {
            //由于B方法依然将异常抛出,所以调用B方法仍存在异常
            //这里选择了处理异常
            methodB();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public void methodD(){
        //由于C方法对异常进行了处理,所以调用C方法,不需要处理异常
        methodC();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_72125569/article/details/126683008