我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于java构造方法Vector创建对象源码分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于java构造方法Vector创建对象源码分析

(注意:本文基于JDK1.8) 

前言

Vector是线程安全的动态数组类,提供4个创建Vector对象的构造方法,接下来我们逐个分析每个创建Vector对象的构造方法

构造方法Vector()分析


    public Vector() {
        this(10);
    }

用于创建Vector对象的默认构造方法,此构造方法的内部会将数字10传入到1个参数的构造方法中,数字10代表的是Vector对象持有的底层数组对象的容量

构造方法Vector(int)分析


    public Vector(int initialCapacity) {
        this(initialCapacity, 0);
    }

创建Vector对象时可以指定底层数组的容量,传入的int参数表示数组容量,该构造方法的内部会将传入的initialCapacity和一个数字0,又传入到2个参数的构造方法中,这个数字0代表什么呢?继续往下看……

构造方法Vecotor(int,int)分析


    public Vector(int initialCapacity, int capacityIncrement) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
        this.capacityIncrement = capacityIncrement;
    }

创建Vector对象的构造方法,可以指定数组默认容量、指定数组的增量值,传入的参数initialCapacity表示数组默认容量,传入的参数capacityIncrement即表示增量

1、首先调用基类的无参构造方法(子类必须至少调用一个基类的构造方法)

2、检查数组的初始化容量值

如果initialCapacity小于0,则抛出一个IllegalArgumentException对象,IllegalArgumentException对象接受一个字符串对象,这个字符串对象会告知我们发生异常的原因

3、创建一个Object数组对象(容量为initialCapacity值),由Vector对象持有的实例变量elementData负责保存该对象的引用,这个elementData保存的数组对象,就是Vector实现存储元素的底层数组对象

4、为Vector对象持有的实例变量capacityIncrement进行赋值,为其赋的值是传入的局部变量capacityIncrement

这个capacityIncrement有什么用途呢?原来这个值表示数组扩充容量时的增量,比如现有数组的容量为10,如果扩充增量为5,则下次扩充的容量为15

构造方法Vector(Collection)分析


    public Vector(Collection<? extends E> c) {
        elementData = c.toArray();
        elementCount = elementData.length;
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class)
            elementData = Arrays.copyOf(elementData, elementCount, Object[].class);
    }

用于创建Vector对象的构造方法,传入的Collection对象持有的元素类型必须是类型参数E或者类型参数E的子类,说明必须与当前Vector对象持有的元素类型保持一致

1、首先将Collection对象转换为数组对象,toArray()方法返回的Object数组对象由Vector对象持有的elementData负责保存

2、取出elementData持有的数组对象的长度赋值给Vector对象持有的elementCount

3、当elementData对象的类型不是Object数组对象,则通过Arrays.copyof方法做一次复制与转换,仍然把转换后的Object数组对象由Vector对象持有的elementData负责保存

重要字段介绍(不含基类中定义的字段)

3个实例变量,创建对象时进行初始化

capacityIncrement:表示Vector对象持有的数组进行扩容时的增量

elementCount:表示Vector对象持有实际元素总数

elementData:表示Vector对象持有的数组对象,该数组实际负责持有元素

2个静态变量,类加载时进行初始化

MAX_ARRAY_SIZE:整型常量,存储了int最大值-8的一个值

serialVersionUID:long类型常量,用于Vector对象序列化。在不同的JDK版本中区分是否为同一个Vector类

以上就是对于java中Vector源码原理分析的详细内容,更多关于java中Vector源码分析的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

基于java构造方法Vector创建对象源码分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么使用Java构造方法创建对象

要使用Java构造方法创建对象,可以按照以下步骤进行操作:首先,在类中定义一个构造方法。构造方法的名称必须与类的名称相同,没有返回类型(连void也没有),并且可以带有任意数量的参数。在构造方法中,可以使用参数来初始化对象的属性。可以通过使
2023-10-23

如何用JVM源码分析Java对象的创建过程

这篇文章将为大家详细讲解有关如何用JVM源码分析Java对象的创建过程,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。基于HotSpot实现对Java对象的创建过程进行深入分析。定义两个简单的
2023-06-17

【Java基础教程】(七)面向对象篇 · 第一讲:上干货!面向对象的特性、类与对象、内存结构引用分析、垃圾收集器 GC处理、封装性详解、构造方法、匿名对象、简单 Java 类~

Java基础教程之面向对象 · 第一讲 🍉 篇章介绍本节学习目标1️⃣ 面向对象的三个特性2️⃣ 类与对象2.1 基本概念2.2 定义 3️⃣ 引用分析🔍 关于`垃圾收集器 GC`处理的介绍
2023-08-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录