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

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

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

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

前言

Vector是線程安全的動(dòng)態(tài)數(shù)組類,提供4個(gè)創(chuàng)建Vector對象的構(gòu)造方法,接下來我們逐個(gè)分析每個(gè)創(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個(gè)參數(shù)的構(gòu)造方法中,數(shù)字10代表的是Vector對象持有的底層數(shù)組對象的容量

構(gòu)造方法Vector(int)分析

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

創(chuàng)建Vector對象時(shí)可以指定底層數(shù)組的容量,傳入的int參數(shù)表示數(shù)組容量,該構(gòu)造方法的內(nèi)部會將傳入的initialCapacity和一個(gè)數(shù)字0,又傳入到2個(gè)參數(shù)的構(gòu)造方法中,這個(gè)數(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è)基類的構(gòu)造方法)

2、檢查數(shù)組的初始化容量值

如果initialCapacity小于0,則拋出一個(gè)IllegalArgumentException對象,IllegalArgumentException對象接受一個(gè)字符串對象,這個(gè)字符串對象會告知我們發(fā)生異常的原因

3、創(chuàng)建一個(gè)Object數(shù)組對象(容量為initialCapacity值),由Vector對象持有的實(shí)例變量elementData負(fù)責(zé)保存該對象的引用,這個(gè)elementData保存的數(shù)組對象,就是Vector實(shí)現(xiàn)存儲元素的底層數(shù)組對象

4、為Vector對象持有的實(shí)例變量capacityIncrement進(jìn)行賦值,為其賦的值是傳入的局部變量capacityIncrement

這個(gè)capacityIncrement有什么用途呢?原來這個(gè)值表示數(shù)組擴(kuò)充容量時(shí)的增量,比如現(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個(gè)實(shí)例變量,創(chuàng)建對象時(shí)進(jìn)行初始化

capacityIncrement:表示Vector對象持有的數(shù)組進(jìn)行擴(kuò)容時(shí)的增量

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

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

2個(gè)靜態(tài)變量,類加載時(shí)進(jìn)行初始化

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

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

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

相關(guān)文章

  • Java的常用包

    Java的常用包

    本文主要對Java的常用包進(jìn)行一一介紹。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    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ā)布時(shí)端口占用問題的解決方法

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

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

    基于SpringBoot制作一個(gè)PDF切圖小工具

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

    詳解Spring的StringUtils踩坑記錄

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

    深入分析Comparable與Comparator及Clonable三個(gè)Java接口

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

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

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

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

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

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

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

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

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

最新評論

沙田区| 崇州市| 姚安县| 茌平县| 清原| 鄂托克前旗| 宁远县| 阿勒泰市| 玉山县| 成都市| 苍溪县| 江达县| 民丰县| 资兴市| 栾城县| 葫芦岛市| 长葛市| 当阳市| 巫溪县| 荔浦县| 河源市| 广水市| 沙洋县| 安义县| 扎鲁特旗| 藁城市| 莆田市| 额济纳旗| 舞钢市| 柳河县| 西盟| 芜湖市| 峨山| 延川县| 石泉县| 高碑店市| 哈巴河县| 林口县| 墨玉县| 藁城市| 建昌县|