目 录CONTENT

文章目录

java中的异常

在水一方
2021-12-08 / 0 评论 / 0 点赞 / 719 阅读 / 1,561 字 / 正在检测是否收录...

项目中很容易各种异常,对于这些异常情况有必要对原因进行总结分析,避免重复踩坑,提高编码的效率

常见运行期异常:

参照RuntimeException类的子类,NullPointerException(空指针),IndexOutOfBoundsException(数组越界)、IllegalArgumentException、ClassNotFoundException(类找不到异常)、

空指针异常:

NullPointerException extends RuntimeException属于运行期异常

通过查看java se手册看到产生的原因有哪些

当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:
调用 null 对象的实例方法。
访问或修改 null 对象的字段。
将 null 作为一个数组,获得其长度。
将 null 作为一个数组,访问或修改其时间片。
将 null 作为 Throwable 值抛出。
应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用。

image.png

例如:
image.png

这里没有通过new或者其他方式构建对象,此时调用这个对象的方法或做任何修改都会抛出空指针异常

当new了对象之后,即便List中没有值,循环也不会出现问题

对象的默认值为Null
image.png

image.png

这里需要增加判空的方法

空指针异常的情况:

注意 NPE 产生的场景:
1) 返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。
反例:public int f() { return Integer 对象}, 如果为 null,自动解箱抛 NPE。
2) 数据库的查询结果可能为 null
3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。
4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。
5) 对于 Session 中获取的数据,建议进行 NPE 检查,避免空指针。
6) 级联调用 obj.getA().getB().getC();一连串调用,易产生 NPE。

IndexOutOfBoundsExcention(数组下标越界)

指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。

异常捕获try代码块

try-catch-finally是处理程序异常的三部曲,当存在try时可以只存在catch,也可以只有finally代码块,就是不能只有try这个代码块(会编译错误)

try代码块:监视程序执行,一旦发生异常则直接跳转至catch中,如果没有catch则直接跳到finally块中

finally块:不管是否有异常产生这部分都会执行,即时发生OutOfMemeryError也会执行,通常用于处理善后清理工作

注意:finally是在return表达式运行后执行的
此时将要return的结果已经暂存起来,待到finally块执行完之后再次执行return语句返回结果

测试小案例


public static void main(String[] args) {
        System.out.println(test());
    }

public static int test(){
        int b = 20;

        try {
            System.out.println("try block");

            return b += 80;
        }
        catch (Exception e) {

            System.out.println("catch block");
        }
        finally {

            System.out.println("finally block");

            if (b > 25) {
                System.out.println("b>25, b = " + b);
            }
        }

        return b;
    }

使用lambda表达式进行过滤、排序时,出现了空指针异常

说明:按键盘上 ctrl+alt+ t 快捷键可以选择快速生成try catch

0

评论区