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

相关文章

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

redis在spring boot中异常退出的问题解决方案

《redis在springboot中异常退出的问题解决方案》:本文主要介绍redis在springboot中异常退出的问题解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴... 目录问题:解决 问题根源️ 解决方案1. 异步处理 + 提前ACK(关键步骤)2. 调整Redis消费者组

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J

解决Java异常报错:java.nio.channels.UnresolvedAddressException问题

《解决Java异常报错:java.nio.channels.UnresolvedAddressException问题》:本文主要介绍解决Java异常报错:java.nio.channels.Unr... 目录异常含义可能出现的场景1. 错误的 IP 地址格式2. DNS 解析失败3. 未初始化的地址对象解决