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

2024-04-03 19:18

本文主要是介绍关于 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源码跟进的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/873756

相关文章

Java JDK Validation 注解解析与使用方法验证

《JavaJDKValidation注解解析与使用方法验证》JakartaValidation提供了一种声明式、标准化的方式来验证Java对象,与框架无关,可以方便地集成到各种Java应用中,... 目录核心概念1. 主要注解基本约束注解其他常用注解2. 核心接口使用方法1. 基本使用添加依赖 (Maven

Python异常处理之避免try-except滥用的3个核心原则

《Python异常处理之避免try-except滥用的3个核心原则》在Python开发中,异常处理是保证程序健壮性的关键机制,本文结合真实案例与Python核心机制,提炼出避免异常滥用的三大原则,有需... 目录一、精准打击:只捕获可预见的异常类型1.1 通用异常捕获的陷阱1.2 精准捕获的实践方案1.3

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保