欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于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對象的默認(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代碼實例

    這篇文章主要介紹了Java string類型轉(zhuǎn)換成map代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java貪心算法超詳細(xì)講解

    Java貪心算法超詳細(xì)講解

    人之初性本善,但是隨著自身的經(jīng)歷、生活環(huán)境等因素的影響,人逐漸會生出貪嗔癡。實際上不光人有貪念,我們的算法也會有貪念,今天就和大家介紹下一個有貪念的算法模型---貪心算法,看看一個算法是怎么產(chǎn)生貪念的
    2022-05-05
  • Window中安裝構(gòu)建神器Jenkins詳解

    Window中安裝構(gòu)建神器Jenkins詳解

    Jenkins是一款開源 CI&CD 軟件,用于自動化各種任務(wù),包括構(gòu)建、測試和部署軟件。支持各種運行方式,可通過系統(tǒng)包、Docker 或者通過一個獨立的 Java 程序。是解放人工集成部署的自動化構(gòu)建神器
    2021-07-07
  • SpringCloud 如何提取公共配置

    SpringCloud 如何提取公共配置

    這篇文章主要介紹了SpringCloud 提取公共配置的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解Java反射創(chuàng)建對象

    詳解Java反射創(chuàng)建對象

    今天帶大家學(xué)習(xí)Java的基礎(chǔ)知識,文中對Java反射創(chuàng)建對象作了非常詳細(xì)的介紹及代碼示例,對正在學(xué)習(xí)Java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • springboot項目接入第三方qq郵箱驗證登錄的全過程

    springboot項目接入第三方qq郵箱驗證登錄的全過程

    互聯(lián)網(wǎng)發(fā)展到現(xiàn)在,相必大家都知道發(fā)送郵件應(yīng)該是網(wǎng)站的必備功能之一,下面這篇文章主要給大家介紹了關(guān)于springboot項目接入第三方qq郵箱驗證登錄的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • 如何使用ThreadLocal上下文解決查詢性能問題

    如何使用ThreadLocal上下文解決查詢性能問題

    這篇文章主要介紹了利用ThreadLocal上下文解決查詢性能問題,有兩種解決方案,一種是使用ThreadLocal上下文,另一種是使用Redis緩存,需要的朋友可以參考下
    2023-07-07
  • Spring?Boot?@Autowired?@Resource屬性賦值時機(jī)探究

    Spring?Boot?@Autowired?@Resource屬性賦值時機(jī)探究

    這篇文章主要為大家介紹了Spring?Boot?@Autowired?@Resource屬性賦值時機(jī),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • java讀取大文件簡單實例

    java讀取大文件簡單實例

    這篇文章主要介紹了java讀取大文件簡單實例,有需要的朋友可以參考一下
    2013-12-12
  • MyBatis接口的簡單實現(xiàn)原理分析

    MyBatis接口的簡單實現(xiàn)原理分析

    這里僅僅舉個簡單例子來說明原理,不是完全針對MyBatis的,這種思想我們也可以應(yīng)用在其他地方。地mybatis接口實現(xiàn)原理感興趣的朋友一起看看吧
    2017-07-07

最新評論