最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于java構(gòu)造方法Vector創(chuàng)建對象源碼分析

 更新時間:2021年09月09日 17:38:58   作者:叫我王員外就行  
這篇文章主要介紹了java構(gòu)造函數(shù)中對Vector源碼及原理的分析,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪

(注意:本文基于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對象的默認構(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ù)組默認容量、指定數(shù)組的增量值,傳入的參數(shù)initialCapacity表示數(shù)組默認容量,傳入的參數(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負責保存該對象的引用,這個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的子類,說明必須與當前Vector對象持有的元素類型保持一致

1、首先將Collection對象轉(zhuǎn)換為數(shù)組對象,toArray()方法返回的Object數(shù)組對象由Vector對象持有的elementData負責保存

2、取出elementData持有的數(shù)組對象的長度賦值給Vector對象持有的elementCount

3、當elementData對象的類型不是Object數(shù)組對象,則通過Arrays.copyof方法做一次復制與轉(zhuǎn)換,仍然把轉(zhuǎn)換后的Object數(shù)組對象由Vector對象持有的elementData負責保存

重要字段介紹(不含基類中定義的字段)

3個實例變量,創(chuàng)建對象時進行初始化

capacityIncrement:表示Vector對象持有的數(shù)組進行擴容時的增量

elementCount:表示Vector對象持有實際元素總數(shù)

elementData:表示Vector對象持有的數(shù)組對象,該數(shù)組實際負責持有元素

2個靜態(tài)變量,類加載時進行初始化

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

serialVersionUID:long類型常量,用于Vector對象序列化。在不同的JDK版本中區(qū)分是否為同一個Vector類

以上就是對于java中Vector源碼原理分析的詳細內(nèi)容,更多關(guān)于java中Vector源碼分析的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java的常用包

    Java的常用包

    本文主要對Java的常用包進行一一介紹。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 深入探究Java線程的創(chuàng)建與構(gòu)造方法

    深入探究Java線程的創(chuàng)建與構(gòu)造方法

    這篇文章主要給大家分享的是java線程的創(chuàng)建以及構(gòu)造方法,想了解具體方式的小伙伴可以參考下面文章內(nèi)容,希望對你有所幫助
    2022-04-04
  • Myeclipse工程發(fā)布時端口占用問題的解決方法

    Myeclipse工程發(fā)布時端口占用問題的解決方法

    這篇文章主要介紹了Myeclipse工程發(fā)布時端口占用問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 基于SpringBoot制作一個PDF切圖小工具

    基于SpringBoot制作一個PDF切圖小工具

    這篇文章主要為大家詳細介紹了如何基于SpringBoot制作一個PDF切圖小工具,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • 詳解Spring的StringUtils踩坑記錄

    詳解Spring的StringUtils踩坑記錄

    這篇文章主要介紹了詳解Spring的StringUtils踩坑記錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 深入分析Comparable與Comparator及Clonable三個Java接口

    深入分析Comparable與Comparator及Clonable三個Java接口

    接口不是類,而是對類的一組需求描述,這些類要遵從接口描述的統(tǒng)一格式進行定義,這篇文章主要為大家詳細介紹了Java的Comparable,Comparator和Cloneable的接口,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-05-05
  • Java開發(fā)必會的Linux命令

    Java開發(fā)必會的Linux命令

    這篇文章主要介紹了Java開發(fā)必會的Linux命令,幫助大家更好地進行java開發(fā),感興趣的小伙伴們可以參考一下
    2015-12-12
  • java之使用多線程代替for循環(huán)(解決主線程提前結(jié)束問題)

    java之使用多線程代替for循環(huán)(解決主線程提前結(jié)束問題)

    這篇文章主要介紹了java之使用多線程代替for循環(huán)(解決主線程提前結(jié)束問題),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java實現(xiàn)周期性執(zhí)行(定時任務)

    java實現(xiàn)周期性執(zhí)行(定時任務)

    這篇文章主要為大家詳細介紹了java實現(xiàn)周期性執(zhí)行定時任務,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • FeignClient實現(xiàn)接口調(diào)用方式(不同參數(shù)形式)

    FeignClient實現(xiàn)接口調(diào)用方式(不同參數(shù)形式)

    這篇文章主要介紹了FeignClient實現(xiàn)接口調(diào)用方式(不同參數(shù)形式),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論

繁昌县| 沙坪坝区| 当涂县| 望谟县| 交口县| 射阳县| 嘉善县| 宁安市| 岳普湖县| 墨脱县| 漯河市| 龙江县| 定兴县| 花垣县| 徐州市| 临泽县| 河南省| 斗六市| 磴口县| 商城县| 贡觉县| 南木林县| 辽源市| 招远市| 仁化县| 简阳市| 和静县| 镇康县| 竹山县| 桐乡市| 米林县| 泗阳县| 扶风县| 绥滨县| 苍山县| 泸定县| 陵水| 浦北县| 莫力| 长岛县| 新余市|