美文网首页程序员
盘点一下你做Java开发那些一定碰到过的异常,一次性帮你搞定所有

盘点一下你做Java开发那些一定碰到过的异常,一次性帮你搞定所有

作者: 程序员伟杰 | 来源:发表于2020-07-26 13:16 被阅读0次

异常:

所谓异常是指程序在运行时出现错误时提示调用者的机制。
异常的种类有很多,不同种类的异常有不同的含义,也有不同的处理方式。
示例:

public class Demo1 {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        System.out.println(arr[5]);  //数组下标越界异常
    }
}

异常的基本用法

捕捉异常基本语法:

try{
    可能出现的异常;
} catch(异常类型  异常对象) {
} finally {
    异常出口
}

try中存放可能出现异常的代码块;
catch中存放出现异常后的处理行为;
finally代码块中的代码用于处理善后工作,会在最后执行;
其中catch代码块和finally代码块可以根据具体情况可加可不加。

如果不处理异常,程序在遇到异常之后会终止运行。

public class Demo1 {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        System.out.println("====1=====");
        System.out.println(arr[5]);
        System.out.println("====2=====");
    }
}

输出结果:程序在运行到arr[5]时发生数组下标越界异常,程序终止。故只打印了有1 的输出语句,2没有正常输出。


2. 使用try处理异常之后

public class Demo1 {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        try {
            System.out.println("====1=====");
            System.out.println(arr[5]);
            System.out.println("====2=====");
        } catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace(); //打印出现异常的调用栈
        } 
        System.out.println("调用try catch");
    }
}

输出结果:


由输出结果可以看出try代码块中一旦遇到异常则不会继续执行,而是执行catch代码块中的代码,catch代码块执行完毕之后,继续向下执行。

一段代码也可能出现多个异常,不同的异常有不同的处理方法,因此可以搭配多个catch代码块。示例:

public class Demo1 {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        try {
            System.out.println("====1=====");
            arr = null;
            System.out.println(arr[5]);
            System.out.println("====2=====");
        } catch (ArrayIndexOutOfBoundsException e){
            System.out.println("数组下标越界异常");
            e.printStackTrace();
        }  catch (NullPointerException e){
            System.out.println("空指针异常");
            e.printStackTrace();
        }
        System.out.println("调用try catch");
    }
}

输出结果:由于arr= null,故应捕获空指针异常

3. finally代码块表示进行最后的善后工作

无论代码是否存在异常,finally代码块中的代码最后一定会被执行

异常处理流程

程序先执行try代码块的代码;
如果try代码块出现异常,结束try代码块,查看catch代码块是否有匹配的异常类型;
若找到匹配的异常类型,执行catch代码块;
若没有找到匹配的异常类型,就会将异常向上传递到上层调用者;
无论是否找到匹配的异常类型,finally代码块都会在方法结束前执行;
如果上层调用者没有匹配的异常类型则会一直向上传递;
一直到main方法还是没有代码处理异常,则会将异常交给JVM处理,程序终止。

抛出异常

Java中除了一些内置类抛出异常之外,还可以手动抛出异常,使用throw关键字完成。

public class Demo1 {
    public static void main(String[] args) {
        int x = func(2,0);
        System.out.println(x);
    }

    public static int func(int x,int y){
        if (y == 0){
            throw new ArithmeticException("抛出除数为0的异常");
        }
        return x/y;
    }
}

输出结果:


最后

感谢你看到这里,看完有什么的不懂的可以在评论区问我,觉得文章对你有帮助的话记得给我点个赞,每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!

相关文章

网友评论

    本文标题:盘点一下你做Java开发那些一定碰到过的异常,一次性帮你搞定所有

    本文链接:https://www.haomeiwen.com/subject/psuwlktx.html