java.lang.IndexOutOfBoundsException: Index: 0, Size: 0与ArrayIndexOutOfBoundsException是一个东西吗?

文章目录

      • 1 问题场景
      • 2 问题分析
      • 3 得出结论
      • 4 留下问题

1 问题场景

最近接了一个小项目(原生jdbc+servlet+jsp),原本正常运行的程序,出现了一个BUG,具体异常信息如下:

exception java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

2 问题分析

1.刚开始猛一看以为是数组越界异常,定位到代码处发现写的是增强for,不可能会出现数组越界异常(取数时,索引超过数组长度)

2.通过报错提示index:0,size:0,我第一反映就是没连上数据库,没有查到数据,导致集合为空导致的,因为使用的原生的JDBC来跟数据库建立连接的,很久没这么写了,难免会有问题,打断点跟了一下,定位到错误代码位置,进行第三步

3.查看JDK中文API来找找答案,发现IndexOutOfBoundsException与ArrayIndexOutOfBoundsException二者是继承关系,搜索后问题得到解决,就是在使用List之前加一个非空判断跟size>0的判断就可以了
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0与ArrayIndexOutOfBoundsException是一个东西吗?_第1张图片

3 得出结论

出现异常前与解决问题后代码展示
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0与ArrayIndexOutOfBoundsException是一个东西吗?_第2张图片
我想大家可能就会有一个问题了,平时使用List的时候也没有做过非空跟长度判断,为什么程序不报错呢?其实这也是我的问题,之前代码是能正常运行的,加了几条数据就挂了。后来自己做了个初步的猜想:写的时候使用的链式编程,是否是上图蓝框中us.getAllUser还未获取到数据库中的数据,程序就往下执行了.get(0).getName(),从而导致异常的发生。而能想到唯一合理的解释就是jdbc连接数据库获取数据太慢了(要求是使用jdbc)

4 留下问题

目前还不知道具体原因,如有经验的大哥可留言,万分感谢!

小贴士:不知道异常什么意思时,可以把异常粘贴到JDK的api中搜索,就能看到是什么异常了,参考文章第一张图

你可能感兴趣的:(开发遇到的问题集锦,java,异常,IndexOutOfBound,问题分析)