基于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進行賦值,為其賦的值是傳入的局部變量capacityIncrement
這個capacityIncrement有什么用途呢?原來這個值表示數(shù)組擴充容量時的增量,比如現(xiàn)有數(shù)組的容量為10,如果擴充增量為5,則下次擴充的容量為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)建對象時進行初始化
capacityIncrement:表示Vector對象持有的數(shù)組進行擴容時的增量
elementCount:表示Vector對象持有實際元素總數(shù)
elementData:表示Vector對象持有的數(shù)組對象,該數(shù)組實際負(fù)責(zé)持有元素
2個靜態(tài)變量,類加載時進行初始化
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線程的創(chuàng)建與構(gòu)造方法
這篇文章主要給大家分享的是java線程的創(chuàng)建以及構(gòu)造方法,想了解具體方式的小伙伴可以參考下面文章內(nèi)容,希望對你有所幫助2022-04-04
深入分析Comparable與Comparator及Clonable三個Java接口
接口不是類,而是對類的一組需求描述,這些類要遵從接口描述的統(tǒng)一格式進行定義,這篇文章主要為大家詳細(xì)介紹了Java的Comparable,Comparator和Cloneable的接口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-05-05
java之使用多線程代替for循環(huán)(解決主線程提前結(jié)束問題)
這篇文章主要介紹了java之使用多線程代替for循環(huán)(解決主線程提前結(jié)束問題),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
java實現(xiàn)周期性執(zhí)行(定時任務(wù))
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)周期性執(zhí)行定時任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-09-09
FeignClient實現(xiàn)接口調(diào)用方式(不同參數(shù)形式)
這篇文章主要介紹了FeignClient實現(xiàn)接口調(diào)用方式(不同參數(shù)形式),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

