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的判断就可以了![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bhb0NS1E-1616911992596)(img/image-20210328121637082.png)]](https://img-blog.csdnimg.cn/20210328141440153.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzk2Nzk2,size_16,color_FFFFFF,t_70)
3 得出结论
出现异常前与解决问题后代码展示
我想大家可能就会有一个问题了,平时使用List的时候也没有做过非空跟长度判断,为什么程序不报错呢?其实这也是我的问题,之前代码是能正常运行的,加了几条数据就挂了。后来自己做了个初步的猜想:写的时候使用的链式编程,是否是上图蓝框中us.getAllUser还未获取到数据库中的数据,程序就往下执行了.get(0).getName(),从而导致异常的发生。而能想到唯一合理的解释就是jdbc连接数据库获取数据太慢了(要求是使用jdbc)
4 留下问题
目前还不知道具体原因,如有经验的大哥可留言,万分感谢!
小贴士:不知道异常什么意思时,可以把异常粘贴到JDK的api中搜索,就能看到是什么异常了,参考文章第一张图
版权声明:本文为qq_42396796原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。