国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【從零開始學(xué)習(xí)JAVA | 第二十五篇】泛型

這篇具有很好參考價(jià)值的文章主要介紹了【從零開始學(xué)習(xí)JAVA | 第二十五篇】泛型。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【從零開始學(xué)習(xí)JAVA | 第二十五篇】泛型,【從零開始學(xué)習(xí)JAVA】,學(xué)習(xí),算法,java

目錄

前言:

泛型:

額外拓展:

總結(jié):


前言:

????????本文將詳細(xì)介紹之前我們在JAVA 中一直在講的泛型,各位感興趣的同學(xué)可以點(diǎn)擊進(jìn)來觀看。

泛型:

????????泛型是一種編程概念,它允許在定義類、接口或方法時(shí)使用類型參數(shù),這樣可以在使用時(shí)指定實(shí)際的類型。通過使用泛型,可以創(chuàng)建可重用、類型安全的代碼,同時(shí)提高代碼的靈活性和可讀性。

????????泛型的主要目的是在編譯時(shí)提供類型檢查,以確保類型的一致性和安全性。它允許在不同的場景中使用相同的代碼,而無需為每種類型都編寫單獨(dú)的實(shí)現(xiàn)。泛型代碼在運(yùn)行時(shí)會被擦除為非泛型形式,這種機(jī)制稱為類型擦除。

????????在Java中,泛型使用尖括號(<>)來指定類型參數(shù)。例如,可以定義一個(gè)泛型類List<E>,其中E是類型參數(shù),表示列表中的元素類型。使用List<String>創(chuàng)建一個(gè)字符串類型的列表,使用List<Integer>創(chuàng)建一個(gè)整數(shù)類型的列表,它們都是相同的泛型類的實(shí)例,但元素類型不同。

????????泛型還可以用于方法和接口的定義。在方法中使用泛型參數(shù)可以使方法適用于不同類型的數(shù)據(jù),而無需為每種數(shù)據(jù)類型編寫不同的方法。接口中的泛型參數(shù)可以在實(shí)現(xiàn)接口時(shí)指定具體的類型。

泛型的優(yōu)點(diǎn):
1. 類型安全:編譯器可以在編譯時(shí)檢查類型錯(cuò)誤,避免運(yùn)行時(shí)類型轉(zhuǎn)換異常。
2. 代碼重用:可以編寫通用的代碼,適用于不同類型的數(shù)據(jù)。
3. 可讀性和可維護(hù)性:泛型代碼更易于理解和維護(hù),因?yàn)轭愋托畔⒖梢栽诙x時(shí)指定。

其實(shí)泛型的出現(xiàn),統(tǒng)一了集合中存儲的元素,如果不使用泛型,當(dāng)我們往集合中添加元素的時(shí)候,可以添加各種元素:數(shù)字,字符串等等,但是泛型規(guī)范了字符串中存儲的類型。

使用泛型時(shí)的注意事項(xiàng):

1.泛型不能寫基本數(shù)據(jù)類型。(下面有解釋)

2.指定泛型的基本類型之后,傳遞數(shù)據(jù)的時(shí)候,可以傳入該類類型或者其子類類型

2.如果不寫泛型,類型默認(rèn)是object類(其實(shí)寫了最后也是object類,下文有解釋)

不使用泛型向集合中輸入數(shù)據(jù):

import java.util.ArrayList;
import java.util.Iterator;

public class test {
    public static void main(String[] args) {

        ArrayList list=new ArrayList();

        list.add(123);
        list.add("abc");
        list.add(1.2);

        //遍歷集合中的每一個(gè)元素
        Iterator it = list.iterator();
        while(it.hasNext())
        {
            Object element =  it.next();
            System.out.println(element);
        }
    }
}

運(yùn)行結(jié)果:

【從零開始學(xué)習(xí)JAVA | 第二十五篇】泛型,【從零開始學(xué)習(xí)JAVA】,學(xué)習(xí),算法,java

在不使用泛型的情況下,所有的數(shù)據(jù)都是Object類型的,此時(shí)可以向集合中添任意類型的數(shù)據(jù),但是缺點(diǎn)就是我們無法調(diào)用這個(gè)類型的特有行為,如果要強(qiáng)制調(diào)用就要使用類型轉(zhuǎn)換,而類型轉(zhuǎn)化有可能會帶來意想不到的錯(cuò)誤。

利用泛型向集合中輸入數(shù)據(jù):

import java.util.ArrayList;
import java.util.Iterator;

public class test {
    public static void main(String[] args) {

        ArrayList<Integer> list=new ArrayList<>();

        list.add(113);
        list.add(125);
        list.add(133);

        //遍歷集合中的每一個(gè)元素
        Iterator <Integer>it = list.iterator();
        while(it.hasNext())
        {
           int em=it.next();
            System.out.println(em);
        }
    }
}

運(yùn)行結(jié)果:
【從零開始學(xué)習(xí)JAVA | 第二十五篇】泛型,【從零開始學(xué)習(xí)JAVA】,學(xué)習(xí),算法,java

?我們可以看到在使用了泛型之后,我們的輸入元素就只能是指定類型,而且也不用object類型接收next的返回值,直接使用int類型的就可以了,這意味著我們可以直接調(diào)用這個(gè)類型的方法。

額外拓展:

但其實(shí)JAVA中的泛型是偽泛型。?

????????Java泛型在編譯時(shí)提供類型檢查的功能,但在運(yùn)行時(shí)會進(jìn)行類型擦除,即泛型的類型信息被擦除為原始類型(raw type)。

????????在Java中,泛型是在編譯時(shí)執(zhí)行類型檢查的機(jī)制,通過使用泛型,可以在定義類、接口和方法時(shí)使用類型參數(shù),并在使用時(shí)指定具體的類型。這樣可以提高代碼的類型安全性,并減少在運(yùn)行時(shí)可能出現(xiàn)的類型錯(cuò)誤。

????????然而,在Java中的泛型機(jī)制實(shí)際上是通過類型擦除來實(shí)現(xiàn)的。在編譯時(shí),編譯器會對泛型類型進(jìn)行檢查,確保類型的一致性。但在生成的字節(jié)碼中,泛型的類型信息會被擦除掉,所有的泛型類型都被替換為其原始類型。

由于類型擦除的存在,導(dǎo)致了一些限制和特殊情況:
1. 無法使用基本類型作為類型參數(shù),只能使用其對應(yīng)的包裝類。例如,不能使用基本類型int,而需要使用Integer。
2. 無法在運(yùn)行時(shí)獲取泛型的實(shí)際類型參數(shù)。例如,無法使用instanceof操作符或通過反射來確定泛型類型的實(shí)際參數(shù)化類型。
3. 在集合中無法存儲具體的泛型類型,只能存儲其原始類型。例如,無法創(chuàng)建一個(gè)ArrayList<int>,只能創(chuàng)建ArrayList<Integer>。

這種泛型類型擦除的機(jī)制被稱為"偽泛型",因?yàn)樵谶\(yùn)行時(shí)無法獲得泛型的類型信息。盡管如此,Java的泛型機(jī)制仍然提供了編譯時(shí)的類型檢查,減少了類型錯(cuò)誤的發(fā)生,并提高了代碼的可讀性和可維護(hù)性。

總而言之,"Java中的泛型是偽泛型"意味著Java的泛型在編譯時(shí)提供類型檢查,但在運(yùn)行時(shí)類型信息被擦除,只剩下原始類型。盡管存在一些限制和特殊情況,泛型仍然是一種有用的編程機(jī)制。

其實(shí)這些話概括起來就是:泛型雖然在向數(shù)組中輸入數(shù)據(jù)的時(shí)候,規(guī)定了數(shù)據(jù)的類型,但是這些數(shù)據(jù)在轉(zhuǎn)向字節(jié)碼的時(shí)候,數(shù)據(jù)類型都會被抹去,還是變?yōu)閛bject類型。我們把這種模式就叫做偽泛型。

總結(jié):

? ? ? ? 泛型是一個(gè)很實(shí)用的概念,它規(guī)范了數(shù)據(jù)的類型,便潔了我們的使用,因此我們要掌握好泛型這個(gè)概念,在后文我們也會對泛型的其他應(yīng)用做詳細(xì)的講解。

如果我的內(nèi)容對你有幫助,請點(diǎn)贊,評論,收藏。創(chuàng)作不易,大家的支持就是我堅(jiān)持下去的動(dòng)力!

【從零開始學(xué)習(xí)JAVA | 第二十五篇】泛型,【從零開始學(xué)習(xí)JAVA】,學(xué)習(xí),算法,java文章來源地址http://www.zghlxwxcb.cn/news/detail-593106.html

到了這里,關(guān)于【從零開始學(xué)習(xí)JAVA | 第二十五篇】泛型的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【從零開始學(xué)習(xí)JAVA | 第二十九篇】Stream流

    【從零開始學(xué)習(xí)JAVA | 第二十九篇】Stream流

    目錄 前言: Stram流: 設(shè)計(jì)目標(biāo): 使用步驟: 1.先得到一條Stream流,并把數(shù)據(jù)放上去。 2.利用Stream流中的各種API進(jìn)行操作。 使用Stream流的注意事項(xiàng): 總結(jié): ? ? ? ? 本文我們將學(xué)習(xí)Stream流,他就像流水線一樣,可以對我們要處理的對象進(jìn)行逐步處理,最終達(dá)到我們想要的效果

    2024年02月17日
    瀏覽(34)
  • 從零開始學(xué)習(xí) Java:簡單易懂的入門指南之泛型及set集合(二十二)

    從零開始學(xué)習(xí) Java:簡單易懂的入門指南之泛型及set集合(二十二)

    1.1泛型概述 泛型的介紹 ? 泛型是JDK5中引入的特性,它提供了編譯時(shí)類型安全檢測機(jī)制 泛型的好處 把運(yùn)行時(shí)期的問題提前到了編譯期間 避免了強(qiáng)制類型轉(zhuǎn)換 泛型的定義格式 類型: 指定一種類型的格式.尖括號里面可以任意書寫,一般只寫一個(gè)字母.例如: 類型1,類型2…: 指定多

    2024年02月09日
    瀏覽(42)
  • 【從零開始學(xué)習(xí)JAVA | 第二十三篇】集合體系結(jié)構(gòu)

    【從零開始學(xué)習(xí)JAVA | 第二十三篇】集合體系結(jié)構(gòu)

    目錄 前言: 單列集合:? ? ? set與list的區(qū)別: 雙列集合: map的特點(diǎn): 總結(jié): ? ? ? ? ? ? ? ? ? JAVA中為我們提供了很多集合,這些集合都有自己很獨(dú)特的特點(diǎn),因此我們要學(xué)習(xí)所有的集合,但是在學(xué)習(xí)所有的集合之前,我們還是先為大家介紹一下JAVA的集合體系結(jié)構(gòu),這

    2024年02月16日
    瀏覽(17)
  • 【從零開始學(xué)習(xí)JAVA | 第二十七篇】JAVA期末練習(xí)(PTA)

    【從零開始學(xué)習(xí)JAVA | 第二十七篇】JAVA期末練習(xí)(PTA)

    目錄 前言: R7-5 Count the letters in a string (統(tǒng)計(jì)字符串中的字符) R7-1 找素?cái)?shù) R7-3 電話號碼同步(Java) 總結(jié): ????????臨近期末,我也更新一下PTA上的JAVA大題,希望各位都可以考出一個(gè)好的成績。 (Count the letters in a string) (統(tǒng)計(jì)字符串中的字符) Write a method that counts th

    2024年02月16日
    瀏覽(124)
  • 【從零開始學(xué)習(xí)JAVA | 第二十篇】常見API介紹 Math

    【從零開始學(xué)習(xí)JAVA | 第二十篇】常見API介紹 Math

    目錄 前言: ?MATH: Math類中的常用方法: 總結(jié): ? ? ? ? ? ? ? ? 本篇往后我們會詳細(xì)介紹一些常用的API,今天我們介紹的是Math的常用方法。但是其實(shí)我們不需要記住所有的方法,在日常工作中自己學(xué)會查詢API文檔就可以了。 Math類是Java中提供的一個(gè)標(biāo)準(zhǔn)類, 它包含了許多

    2024年02月15日
    瀏覽(27)
  • 從零開始學(xué)習(xí) Java:簡單易懂的入門指南之可變參數(shù)及Collections類(二十五)

    在 JDK1.5 之后,如果我們定義一個(gè)方法需要接受多個(gè)參數(shù),并且多個(gè)參數(shù)類型一致,我們可以對其簡化. 格式: 底層: ? 其實(shí)就是一個(gè)數(shù)組 好處: ? 在傳遞數(shù)據(jù)的時(shí)候,省的我們自己創(chuàng)建數(shù)組并添加元素了,JDK底層幫我們自動(dòng)創(chuàng)建數(shù)組并添加元素了 代碼演示: 注意: ?

    2024年02月07日
    瀏覽(24)
  • 【從零開始學(xué)習(xí)JAVA | 第二十一篇】常見API介紹 System

    【從零開始學(xué)習(xí)JAVA | 第二十一篇】常見API介紹 System

    目錄 前言: System: System類中靜態(tài)方法: 總結(jié): ? ? ????????? ? system 是一個(gè)很底層的 API,是一個(gè)工具類, 提供了一些與系統(tǒng)相關(guān)的方法 。他在我們寫項(xiàng)目的時(shí)候提供了一些非常實(shí)用的方法,本篇將會介紹一些實(shí)用的system API 的方法調(diào)用。 System類是Java語言提供的一個(gè)

    2024年02月15日
    瀏覽(90)
  • 【從零開始學(xué)JAVA | 第二十四篇】單列集合的遍歷

    【從零開始學(xué)JAVA | 第二十四篇】單列集合的遍歷

    目錄 前言: 單列集合的遍歷方式: 迭代器遍歷: 增強(qiáng)for遍歷: lambda方法遍歷:? 總結(jié): 本篇我們會講解關(guān)于單列集合的幾種遍歷方式,遍歷集合可以說是對于集合要求掌握的最低技能,因此我們要熟練的掌握遍歷集合的方式。 在這里我們不講for循環(huán)遍歷,for循環(huán)無法對單

    2024年02月16日
    瀏覽(91)
  • 【從零開始學(xué)習(xí)C++ | 第二十一篇】C++新增特性 (上)

    【從零開始學(xué)習(xí)C++ | 第二十一篇】C++新增特性 (上)

    目錄 ?前言: 委托構(gòu)造函數(shù): 類內(nèi)初始化: 空指針: 枚舉類: 總結(jié): ? ? ? ? C++的學(xué)習(xí)難度大,內(nèi)容繁多。因此我們要及時(shí)掌握C++的各種特性,因此我們更新本篇文章,向大家介紹C++的新增特性。 委托構(gòu)造函數(shù)是指一 個(gè)類的構(gòu)造函數(shù)調(diào)用另一個(gè)類的構(gòu)造函數(shù),以減少代

    2024年02月13日
    瀏覽(19)
  • 【從零開始學(xué)習(xí)C++ | 第二十二篇】C++新增特性(下)

    【從零開始學(xué)習(xí)C++ | 第二十二篇】C++新增特性(下)

    目錄 前言: 類型推導(dǎo): constexpr: 初始化列表: 基于范圍的for循環(huán): 智能指針之unique ptr Lambda表達(dá)式: 總結(jié): ????????本文我們將繼續(xù)介紹? ?C++ 11 新增十大特性的剩余六個(gè),如果沒有看過介紹前四個(gè)特性的小伙伴的可以點(diǎn)進(jìn)我C++的專欄就可以看到。 類型推導(dǎo)(

    2024年02月14日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包