`
tianjun309
  • 浏览: 368370 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于 ArrayList get(0)的异常JDK源码跟进

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

 

 

  • 大小: 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源码Jdk1.8

    ### ArrayList源码解析(JDK 1.8) #### 概述 `ArrayList`是Java集合框架中的一个核心组件,它提供了动态数组的功能。与固定大小的数组不同,`ArrayList`可以随着元素的增加而自动扩展其容量。在JDK 1.8中,`...

    手写精简版List和ArrayList,适合新手入门学习jdk源码demo

    本文将针对新手,详细讲解如何手写一个精简版的`List`和`ArrayList`,帮助大家更好地理解JDK源码中的实现原理。 首先,我们要明白`List`是一个接口,它继承自`Collection`接口,并规定了元素的有序性和可重复性。`...

    jdk1.8source源码

    源码分析是深入理解Java平台工作原理的关键,对于开发者来说,能够查看和学习JDK的源代码是提升技能的重要途径。在这个压缩包中,包含了一些主要的Java核心库的源代码,如`com`, `org`, `launcher`, `java`, 和 `...

    java_jdk8源码

    对于任何希望提升Java技术水平,特别是对性能优化、并发编程或者想要成为一名更高级的Java开发者的人来说,研究JDK源码是不可或缺的一环。在这里,我们将探讨一些关键的知识点,帮助你更好地理解和利用这份宝贵的...

    ArrayList源码分析

    ### ArrayList源码分析 #### 一、概述 `ArrayList` 是 Java 集合框架中的一个重要的类,它实现了 `List` 接口,并且内部使用动态数组来存储元素。由于其灵活的特性(比如可以方便地增加或删除元素),`ArrayList` ...

    JDK1.8源码,亲测好用。

    **JDK 1.8 源码详解** JDK(Java Development Kit)是Java编程语言的核心组件,它包含了编译器、运行时环境、工具集合以及Java API库。JDK 1.8,也被称为Java 8,是Oracle公司发布的一个重要版本,引入了许多创新...

    Jdk1.6 Collections Framework源码解析(2)-LinkedList

    《Jdk1.6 Collections Framework源码解析(2)-LinkedList》 LinkedList是Java集合框架中的一个重要的类,它是List接口的实现,同时继承了AbstractSequentialList,并实现了Deque接口。LinkedList是一种双链表结构,...

    jdk1.8-source:JDK1.8源码分析包

    JDK1.8源码分析 相关的原始码分析结果会以注解的形式体现到原始码中 已完成部分: ReentrantLock CountDownLatch Semaphore HashMap TreeMap LinkedHashMap ConcurrentHashMap 执行器 ...

    JDK1.8、JDK1.7、JDK1.6区别看这里

    本文主要对比了JDK1.8、JDK1.7、JDK1.6中的源码,对比阅读,发现修改问题以及改进点,具有一定的参考价值。下面是对ArrayList类的详细介绍。 一、基本性质 ArrayList是Java集合框架中的一个重要类,它实现了List...

    JDK 7新特性的PPT(本届JAVAONE 2010的演讲材料)

    在JDK 7之前,捕获多个异常通常需要多个`catch`块。现在,可以使用一个`catch`块来处理多种类型的异常,用竖线`|`分隔不同类型的异常,如: ```java try { // 代码 } catch (IOException | SQLException e) { ...

    json-lib-2.4-jdk15及其依赖jar包

    在使用`json-lib`时,开发者可以将Java对象如HashMap、ArrayList等转换为JSON字符串,然后通过网络传输或者存储。反过来,也可以将接收到的JSON字符串解析成对应的Java对象,便于进一步处理。例如: ```java import...

    ArrayList 深入理解底层

    ArrayList在JDK 1.8中,其内部使用一个Object数组`elementData`来存储元素,因此它的性能受到数组操作的影响,比如添加、删除和查找。由于ArrayList是基于数组,所以它的索引访问速度非常快,但插入和删除元素时可能...

    java8源码-JDKSourceCode:阅读jdk1.8的一些注意事项

    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源码学习分析》 LinkedList作为Java集合框架中的一员,是基于链表数据结构实现的线程不安全容器。本文将深入探讨LinkedList的实现原理、核心方法的代码实现,并对比ArrayList,理解其特性和使用场景。 ...

    collectionJava源码-javacollection:学习jdk1.8采集框架源代码

    本文将深入探讨"collectionJava源码",特别是针对"javacollection"项目,这是一个针对JDK 1.8集合框架的源码学习资源。我们将通过源码分析来理解其背后的实现原理,这将对提升Java开发技能大有裨益。 首先,让我们...

    Java容器类源码详解 Deque与ArrayDeque

    因为 ArrayList 会根据需求自动扩充容量,因而在插入元素的时候不会抛出 IllegalState Exception 异常。 ArrayDeque 的底层结构使用数组存储元素,同时还使用了两个索引来表征当前数组的状态,分别是 head 和 tail...

    java毕业设计之 借书小程序源码.zip

    本项目是一个基于Java技术的毕业设计,主要是一个借书小程序的源码实现,适用于学习和理解Java编程在实际项目中的应用。项目的核心是利用Java语言进行后端开发,结合数据库管理,实现图书的借阅、归还等功能。下面将...

    Java Interview Questions/Java面试题

    - JDK源码解析:深入理解String、ArrayList、HashMap等常用类的实现。 6. **工具使用** - IDE:Eclipse、IntelliJ IDEA的使用技巧和配置优化。 - 版本控制:Git的常用命令和协作流程。 - 构建工具:Maven、...

    ReadJDK:JDK原始注解解析

    《ReadJDK: JDK原始注解解析》 在Java开发中,JDK(Java Development Kit)扮演着核心角色,它是Java编程语言的基础。...通过深入研究JDK源码,我们可以从中学习到更多高级编程技巧,提升我们的编程水平。

Global site tag (gtag.js) - Google Analytics