关于
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

- 大小: 27.2 KB

- 大小: 8.4 KB

- 大小: 4.8 KB

- 大小: 19.8 KB

- 大小: 53.1 KB

- 大小: 6.3 KB

- 大小: 69.4 KB

- 大小: 61.4 KB

- 大小: 88.4 KB

- 大小: 50.9 KB

- 大小: 7.5 KB

- 大小: 6.2 KB

- 大小: 8.5 KB

- 大小: 42.1 KB
分享到:
相关推荐
### ArrayList源码解析(JDK 1.8) #### 概述 `ArrayList`是Java集合框架中的一个核心组件,它提供了动态数组的功能。与固定大小的数组不同,`ArrayList`可以随着元素的增加而自动扩展其容量。在JDK 1.8中,`...
本文将针对新手,详细讲解如何手写一个精简版的`List`和`ArrayList`,帮助大家更好地理解JDK源码中的实现原理。 首先,我们要明白`List`是一个接口,它继承自`Collection`接口,并规定了元素的有序性和可重复性。`...
源码分析是深入理解Java平台工作原理的关键,对于开发者来说,能够查看和学习JDK的源代码是提升技能的重要途径。在这个压缩包中,包含了一些主要的Java核心库的源代码,如`com`, `org`, `launcher`, `java`, 和 `...
对于任何希望提升Java技术水平,特别是对性能优化、并发编程或者想要成为一名更高级的Java开发者的人来说,研究JDK源码是不可或缺的一环。在这里,我们将探讨一些关键的知识点,帮助你更好地理解和利用这份宝贵的...
### ArrayList源码分析 #### 一、概述 `ArrayList` 是 Java 集合框架中的一个重要的类,它实现了 `List` 接口,并且内部使用动态数组来存储元素。由于其灵活的特性(比如可以方便地增加或删除元素),`ArrayList` ...
**JDK 1.8 源码详解** JDK(Java Development Kit)是Java编程语言的核心组件,它包含了编译器、运行时环境、工具集合以及Java API库。JDK 1.8,也被称为Java 8,是Oracle公司发布的一个重要版本,引入了许多创新...
《Jdk1.6 Collections Framework源码解析(2)-LinkedList》 LinkedList是Java集合框架中的一个重要的类,它是List接口的实现,同时继承了AbstractSequentialList,并实现了Deque接口。LinkedList是一种双链表结构,...
JDK1.8源码分析 相关的原始码分析结果会以注解的形式体现到原始码中 已完成部分: ReentrantLock CountDownLatch Semaphore HashMap TreeMap LinkedHashMap ConcurrentHashMap 执行器 ...
本文主要对比了JDK1.8、JDK1.7、JDK1.6中的源码,对比阅读,发现修改问题以及改进点,具有一定的参考价值。下面是对ArrayList类的详细介绍。 一、基本性质 ArrayList是Java集合框架中的一个重要类,它实现了List...
在JDK 7之前,捕获多个异常通常需要多个`catch`块。现在,可以使用一个`catch`块来处理多种类型的异常,用竖线`|`分隔不同类型的异常,如: ```java try { // 代码 } catch (IOException | SQLException e) { ...
在使用`json-lib`时,开发者可以将Java对象如HashMap、ArrayList等转换为JSON字符串,然后通过网络传输或者存储。反过来,也可以将接收到的JSON字符串解析成对应的Java对象,便于进一步处理。例如: ```java import...
ArrayList在JDK 1.8中,其内部使用一个Object数组`elementData`来存储元素,因此它的性能受到数组操作的影响,比如添加、删除和查找。由于ArrayList是基于数组,所以它的索引访问速度非常快,但插入和删除元素时可能...
get set add-2 remove-2 clear addAll write/readObject fast-fail subList iterator forEach sort removeIf Vector different with ArrayList 2018/3/26 ChangeLogs LinkedList ctor-2 addFirst addLast addAll add...
《LinkedList源码学习分析》 LinkedList作为Java集合框架中的一员,是基于链表数据结构实现的线程不安全容器。本文将深入探讨LinkedList的实现原理、核心方法的代码实现,并对比ArrayList,理解其特性和使用场景。 ...
本文将深入探讨"collectionJava源码",特别是针对"javacollection"项目,这是一个针对JDK 1.8集合框架的源码学习资源。我们将通过源码分析来理解其背后的实现原理,这将对提升Java开发技能大有裨益。 首先,让我们...
因为 ArrayList 会根据需求自动扩充容量,因而在插入元素的时候不会抛出 IllegalState Exception 异常。 ArrayDeque 的底层结构使用数组存储元素,同时还使用了两个索引来表征当前数组的状态,分别是 head 和 tail...
本项目是一个基于Java技术的毕业设计,主要是一个借书小程序的源码实现,适用于学习和理解Java编程在实际项目中的应用。项目的核心是利用Java语言进行后端开发,结合数据库管理,实现图书的借阅、归还等功能。下面将...
- JDK源码解析:深入理解String、ArrayList、HashMap等常用类的实现。 6. **工具使用** - IDE:Eclipse、IntelliJ IDEA的使用技巧和配置优化。 - 版本控制:Git的常用命令和协作流程。 - 构建工具:Maven、...
《ReadJDK: JDK原始注解解析》 在Java开发中,JDK(Java Development Kit)扮演着核心角色,它是Java编程语言的基础。...通过深入研究JDK源码,我们可以从中学习到更多高级编程技巧,提升我们的编程水平。