基于java構(gòu)造方法Vector創(chuàng)建對象源碼分析
(注意:本文基于JDK1.8)
前言
Vector是線程安全的動態(tài)數(shù)組類,提供4個創(chuàng)建Vector對象的構(gòu)造方法,接下來我們逐個分析每個創(chuàng)建Vector對象的構(gòu)造方法
構(gòu)造方法Vector()分析
public Vector() { this(10); }
用于創(chuàng)建Vector對象的默認(rèn)構(gòu)造方法,此構(gòu)造方法的內(nèi)部會將數(shù)字10傳入到1個參數(shù)的構(gòu)造方法中,數(shù)字10代表的是Vector對象持有的底層數(shù)組對象的容量
構(gòu)造方法Vector(int)分析
public Vector(int initialCapacity) { this(initialCapacity, 0); }
創(chuàng)建Vector對象時可以指定底層數(shù)組的容量,傳入的int參數(shù)表示數(shù)組容量,該構(gòu)造方法的內(nèi)部會將傳入的initialCapacity和一個數(shù)字0,又傳入到2個參數(shù)的構(gòu)造方法中,這個數(shù)字0代表什么呢?繼續(xù)往下看……
構(gòu)造方法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; }
創(chuàng)建Vector對象的構(gòu)造方法,可以指定數(shù)組默認(rèn)容量、指定數(shù)組的增量值,傳入的參數(shù)initialCapacity表示數(shù)組默認(rèn)容量,傳入的參數(shù)capacityIncrement即表示增量
1、首先調(diào)用基類的無參構(gòu)造方法(子類必須至少調(diào)用一個基類的構(gòu)造方法)
2、檢查數(shù)組的初始化容量值
如果initialCapacity小于0,則拋出一個IllegalArgumentException對象,IllegalArgumentException對象接受一個字符串對象,這個字符串對象會告知我們發(fā)生異常的原因
3、創(chuàng)建一個Object數(shù)組對象(容量為initialCapacity值),由Vector對象持有的實例變量elementData負(fù)責(zé)保存該對象的引用,這個elementData保存的數(shù)組對象,就是Vector實現(xiàn)存儲元素的底層數(shù)組對象
4、為Vector對象持有的實例變量capacityIncrement進(jìn)行賦值,為其賦的值是傳入的局部變量capacityIncrement
這個capacityIncrement有什么用途呢?原來這個值表示數(shù)組擴(kuò)充容量時的增量,比如現(xiàn)有數(shù)組的容量為10,如果擴(kuò)充增量為5,則下次擴(kuò)充的容量為15
構(gòu)造方法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); }
用于創(chuàng)建Vector對象的構(gòu)造方法,傳入的Collection對象持有的元素類型必須是類型參數(shù)E或者類型參數(shù)E的子類,說明必須與當(dāng)前Vector對象持有的元素類型保持一致
1、首先將Collection對象轉(zhuǎn)換為數(shù)組對象,toArray()方法返回的Object數(shù)組對象由Vector對象持有的elementData負(fù)責(zé)保存
2、取出elementData持有的數(shù)組對象的長度賦值給Vector對象持有的elementCount
3、當(dāng)elementData對象的類型不是Object數(shù)組對象,則通過Arrays.copyof方法做一次復(fù)制與轉(zhuǎn)換,仍然把轉(zhuǎn)換后的Object數(shù)組對象由Vector對象持有的elementData負(fù)責(zé)保存
重要字段介紹(不含基類中定義的字段)
3個實例變量,創(chuàng)建對象時進(jìn)行初始化
capacityIncrement
:表示Vector對象持有的數(shù)組進(jìn)行擴(kuò)容時的增量
elementCount
:表示Vector對象持有實際元素總數(shù)
elementData
:表示Vector對象持有的數(shù)組對象,該數(shù)組實際負(fù)責(zé)持有元素
2個靜態(tài)變量,類加載時進(jìn)行初始化
MAX_ARRAY_SIZE
:整型常量,存儲了int最大值-8的一個值
serialVersionUID
:long類型常量,用于Vector對象序列化。在不同的JDK版本中區(qū)分是否為同一個Vector類
以上就是對于java中Vector源碼原理分析的詳細(xì)內(nèi)容,更多關(guān)于java中Vector源碼分析的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java string類型轉(zhuǎn)換成map代碼實例
這篇文章主要介紹了Java string類型轉(zhuǎn)換成map代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03Spring?Boot?@Autowired?@Resource屬性賦值時機(jī)探究
這篇文章主要為大家介紹了Spring?Boot?@Autowired?@Resource屬性賦值時機(jī),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07