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

作者:叫我王员外就行 时间:2023-11-25 11:27:54 

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

前言

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

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负责保存

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

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

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

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

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

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

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

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

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

来源:https://blog.csdn.net/cadi2011/article/details/106592728

标签:Vector,构造方法,创建对象
0
投稿

猜你喜欢

  • Android开发中计算器的sin、cos及tan值计算问题分析

    2023-11-11 08:21:40
  • Java基于栈方式解决汉诺塔问题实例【递归与非递归算法】

    2023-04-10 08:05:02
  • Android中EditText光标在4.0中的bug及解决方法

    2023-10-01 19:24:17
  • RSA密钥--JAVA和C#的区别及联系

    2022-09-18 12:16:44
  • C++类和对象之多态详解

    2023-05-10 18:52:03
  • ToStringBuilder类的一些心得

    2022-10-10 04:02:27
  • c# 引用类型与值类型的区别详解

    2021-05-27 00:34:33
  • java随机生成8位数授权码的实例

    2022-04-24 12:03:47
  • C语言结构体版学生成绩管理系统

    2021-11-05 03:29:41
  • 23种设计模式(7) java代理模式

    2023-01-28 21:57:20
  • Spring Boot Actuator自定义健康检查教程

    2022-06-12 14:54:59
  • Android 处理OnItemClickListener时关于焦点颜色的设置问题

    2021-09-02 01:47:00
  • 浅谈java对象结构 对象头 Markword

    2023-04-26 04:50:34
  • C# IsDefined的问题

    2022-07-15 10:37:13
  • C#利用iTextSharp添加PDF水印

    2022-03-23 23:37:44
  • C++实现简易反弹小球游戏的示例代码

    2023-06-15 08:18:50
  • Java动态规划之硬币找零问题实现代码

    2023-01-23 20:37:38
  • C++调试追踪class成员变量的方法

    2022-11-21 01:32:12
  • Android开发软键盘遮挡登陆按钮的完美解决方案

    2022-05-09 07:44:47
  • mybatis-plus生成mapper扩展文件的方法

    2023-08-10 07:29:05
  • asp之家 软件编程 m.aspxhome.com