本文主要是介绍关于 ArrayList get(0)的异常JDK源码跟进,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
关于 ArrayList get(0) 的异常 JDK 源码跟进
( 1 )下面是模拟代码
( 2 ) debug 过来后看到 ArrayList 内部是用 Object 数组来初始化。
直接运行完毕会报出如下错误。
( 3 )然后我们来看看源码,也发现确实使用名为 elementData 的数组来做 ArrayList 的相关操作。
3 个构造方法。
3 个构造方法全部都是初始化这个 elementData 数组。
( 4 )我们的 get(int index) 方法 是 ArrayList 实现的 List 的 get 方法。里面有个很关键的地方,就是在返回这个泛型 Object 的时候,经过了 RangeCheck(index) 检查。
我们进到这个方法就明白肯定是进入这个 if 了。
再来看看我们天天使用的 isEmepty() 和 size() 的含义。
并且在进行 add 方法后是这样处理的。
总结:
这下我们就明白 RangeCheck(index) 的用意了,是 jdk 内部做了一定的异常处理,在我们要使用之前就先报了 IndexOutOfBoundsException 异常,并且 List 底层是由数组实现,其实也不会报 NullPointerException 的异常,因为它已经知道,我们在并没有初始化 elementData 数组内容之前就开始调用内部数组的值,希望大家能通过此文更加了解 ArrayList ,如果我说的有错,请知会我,大家共同进步。
田军 tKF25401
2010-04-27
这篇关于关于 ArrayList get(0)的异常JDK源码跟进的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!