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

Java?泛型超詳細(xì)入門講解

 更新時(shí)間:2022年04月02日 15:55:21   作者:Scintillator.?/  
這篇文章主要介紹了Java基礎(chǔ)泛型詳情,泛型是JDK5中引入的特性,它提供了編譯時(shí)類型安全檢測機(jī)制,該機(jī)制允許在編譯時(shí)檢測到非法的類型,下面文章的詳細(xì)介紹,需要的朋友可以參考一下

1、什么是泛型?

泛型其實(shí)就是將類型作為參數(shù)傳遞,泛型允許程序員在編寫代碼時(shí)使用一些以后才指定的類型 ,在實(shí)例化該類時(shí)將想要的類型作為參數(shù)傳遞,來指明這些類型。

為什么要引入泛型?

例如:自己實(shí)現(xiàn)一個(gè)順序表

public class MyArrayList {
    public int[] elem;
    public int usedSize;

    public MyArrayList() {
        this.elem = new int[10];
    }
    // add方法
    public void add(int val) {
        // 暫時(shí)不考慮擴(kuò)容問題,這里只是為了講泛型
        elem[usedSize++] = val;
    }
    // get方法
    public int get(int pos) {
        return elem[pos];
    }
}

這里可以看出,在使用上面這個(gè)自定義的順序表時(shí),我們只能添加 int 類型的元素,我們知道java集合中的順序表,可以添加任何類型的數(shù)據(jù),怎么實(shí)現(xiàn)的呢?這里我們先嘗試將 int 類型變?yōu)镺bject類型,這樣就可以保證能傳入任何類型。

public class MyArrayList {
    public Object[] elem;
    public int usedSize;

    public MyArrayList() {
        this.elem = new Object[10];
    }
    // add方法
    public void add(Object val) {
        // 暫時(shí)不考慮擴(kuò)容問題,這里只是為了講泛型
        elem[usedSize++] = val;
    }
    // get方法
    public Object get(int pos) {
        return elem[pos];
    }
}

main方法中往對象中添加數(shù)據(jù)時(shí),可以添加任意類型的數(shù)據(jù)。但是,當(dāng)需要取出數(shù)據(jù)時(shí),因?yàn)榉祷氐氖荗bject類型,需要進(jìn)行強(qiáng)轉(zhuǎn)才能用相對應(yīng)的類型來接收,非常麻煩。

public static void main(String[] args) {
        MyArrayList myArrayList = new MyArrayList();
        myArrayList.add(1);
        myArrayList.add("hello");
        int array1 = (int)myArrayList.get(0);
        String array2 = (String)myArrayList.get(1);
    }

所以問題來了,難道每次都要強(qiáng)轉(zhuǎn)一下才能接收嗎,能否不強(qiáng)轉(zhuǎn)呢?這時(shí)候我們就想到在創(chuàng)建一個(gè)實(shí)例對象時(shí),可以將想要的類型作為參數(shù)傳遞,讓這個(gè)對象中全部存?zhèn)魅氲念愋偷臄?shù)據(jù),那么拿出來的時(shí)候,就可以明確該對象中所有的數(shù)據(jù)都是該類型,不需要強(qiáng)轉(zhuǎn)了。這就引入了泛型。

public class MyArrayList<E> {
	// 在編寫程序時(shí),不指定具體的類型,而用<E>這里的E來暫時(shí)代替
    // 具體的類型在實(shí)例化對象時(shí)傳入
    public E[] elem;
    public int usedSize;

    public MyArrayList() {
    	// 這里的寫法不是特別準(zhǔn)確,應(yīng)該用反射機(jī)制,這里先這樣寫
        this.elem = (E[])new Object[10];
    }
    // add方法
    public void add(E val) {
        // 暫時(shí)不考慮擴(kuò)容問題,這里只是為了講泛型
        elem[usedSize++] = val;
    }
    // get方法
    public E get(int pos) {
        return elem[pos];
    }
}
public static void main(String[] args) {

        MyArrayList<Integer> myArrayList1 = new MyArrayList<>();
        myArrayList1.add(1);
        myArrayList1.add(3);
        // myArrayList1.add("world");// 這里會報(bào)錯(cuò),因?yàn)閭魅氲臄?shù)據(jù)不是指定的類型,所以泛型還有自動(dòng)對類型進(jìn)行檢查的作用
        int I1 = myArrayList1.get(0);
        
        MyArrayList<String> myArrayList2 = new MyArrayList<>();
        myArrayList2.add("hello");
        myArrayList2.add("world");
        String s1 = myArrayList2.get(0);
    }

這樣就保證了能傳入任何類型的數(shù)據(jù),同時(shí)在拿出時(shí)也不需要強(qiáng)轉(zhuǎn)!

泛型的意義:

1、自動(dòng)對類型進(jìn)行檢查

2、自動(dòng)對類型進(jìn)行強(qiáng)制類型轉(zhuǎn)換

那么這里MyArrayList對應(yīng)對象的類型是什么呢?是MyArrayList< Integer > 之類的嗎?

在這里插入圖片描述

這里可以看出,實(shí)例創(chuàng)建的對象他的類型都是MyArrayList,而<>中的內(nèi)容不參與泛型類型的組成,那么<>里面的類型哪里去了呢?這就要了解泛型的工作機(jī)制了。

2、泛型是怎么編譯的

數(shù)組和泛型之間的一個(gè)重要區(qū)別是它們?nèi)绾螐?qiáng)制類型檢查。具體來說,數(shù)組在運(yùn)行時(shí)存儲和檢查類型信息。但是,泛型在編譯時(shí)檢查類型錯(cuò)誤,并且在運(yùn)行時(shí)沒有類型信息。

泛型的編譯機(jī)制:擦除機(jī)制

在編譯時(shí),將 MyArrayList 中的 E 擦成了 Object 類型。

請?zhí)砑訄D片描述

在main方法中都擦成了 MyArrayList 類型。

請?zhí)砑訄D片描述

參考: 在java中創(chuàng)建泛型數(shù)組

到此這篇關(guān)于Java 泛型超詳細(xì)入門講解的文章就介紹到這了,更多相關(guān)Java 泛型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java泛型映射不同的值類型詳解及實(shí)例代碼

    Java泛型映射不同的值類型詳解及實(shí)例代碼

    這篇文章主要介紹了Java泛型映射不同的值類型詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java性能調(diào)優(yōu)概述

    Java性能調(diào)優(yōu)概述

    本文介紹了Java程序性能的主要表現(xiàn)點(diǎn)、衡量程序性能的主要指標(biāo)、性能調(diào)優(yōu)的層次、基本調(diào)優(yōu)策略和手段等,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • Java數(shù)組實(shí)例練習(xí)題整理

    Java數(shù)組實(shí)例練習(xí)題整理

    在本篇文章中小編給各位分享的是關(guān)于Java數(shù)組實(shí)例練習(xí)題以及相關(guān)代碼整理,有需要的朋友們跟著學(xué)習(xí)下。
    2019-07-07
  • Spring?boot事務(wù)無效報(bào)錯(cuò):Transaction?not?enabled問題排查解決

    Spring?boot事務(wù)無效報(bào)錯(cuò):Transaction?not?enabled問題排查解決

    在業(yè)務(wù)代碼中經(jīng)常需要保證事務(wù)的原子性,但是有的時(shí)候確實(shí)是出現(xiàn)事務(wù)沒有生效,這篇文章主要給大家介紹了關(guān)于Spring?boot事務(wù)無效報(bào)錯(cuò):Transaction?not?enabled問題排查的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • 使用@RequestBody傳對象參數(shù)時(shí)碰到的坑

    使用@RequestBody傳對象參數(shù)時(shí)碰到的坑

    這篇文章主要介紹了使用@RequestBody傳對象參數(shù)時(shí)碰到的坑,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解Java向服務(wù)端發(fā)送文件的方法

    詳解Java向服務(wù)端發(fā)送文件的方法

    這篇文章主要為大家詳細(xì)介紹了Java向服務(wù)端發(fā)送文件的方法,主要是IO流,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java泛型通配符的使用詳解

    Java泛型通配符的使用詳解

    本文主要介紹了Java泛型通配符的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • java中ThreadLocal取不到值的兩種原因

    java中ThreadLocal取不到值的兩種原因

    這篇文章主要介紹了java中ThreadLocal取不到值的兩種原因,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java鏈接redis_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java鏈接redis_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java鏈接redis,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 解決SpringMvc后臺接收json數(shù)據(jù)中文亂碼問題的幾種方法

    解決SpringMvc后臺接收json數(shù)據(jù)中文亂碼問題的幾種方法

    本篇文章主要介紹了解決SpringMvc后臺接收json數(shù)據(jù)中文亂碼問題的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論

六盘水市| 沾益县| 乐都县| 冷水江市| 棋牌| 德化县| 盐亭县| 通山县| 华亭县| 三河市| 汉寿县| 巴中市| 栾城县| 哈巴河县| 乌海市| 天峻县| 博湖县| 佛学| 普安县| 内江市| 嘉定区| 准格尔旗| 九寨沟县| 冕宁县| 仙居县| 兴城市| 兴业县| 永州市| 平江县| 青阳县| 错那县| 铁力市| 忻城县| 诸城市| 阿克陶县| 永春县| 定结县| 新宾| 化德县| 图们市| 江津市|