Javase 基礎加強 —— 02 泛型

本系列為筆者學習Javase的課堂筆記,視頻資源為B站黑馬程序員出品的《黑馬程序員Java+AI智能輔助編程全套視頻教程,java零基礎入門到大牛一套通關》,章節分布參考視頻教程,為同樣學習Javase系列課程的同學們提供參考。

01 認識泛型

概念:定義類、接口、方法時,同時聲明了一個或者多個類型變量(如:<E>) 稱為泛型類、泛型接口,泛型方法、它們統稱為泛型。

作用:泛型提供了在編譯階段約束所能操作的數據類型,并自動進行檢查的能力!

package generic;import java.util.ArrayList;public class GenericDemo1 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>(); //泛型list.add("msc");list.add("zlg");list.add("phd");list.add("zqy");for(int i=0; i<list.size(); i++){String s = list.get(i);System.out.println(s);}}
}

02 泛型類

在這里插入圖片描述

MyArrayList.java

//自定義泛型類
public class MyArrayList<E>{//換湯不換藥private ArrayList list = new ArrayList();public boolean add(E e){return list.add(e);}public boolean remove(){return list.remove(e);}@Overridepublic String toString(){return list.toString();}
}

03 泛型接口

在這里插入圖片描述

Student.java 自定義類

public class Student {
}

Teacher.java 自定義類

public class Teacher {
}

Data.java 自定義接口

public interface Data<T> {void add(T t);void delete(T t);void update(T t);T find(int id);
}

StudentData.java 自定義接口實現類(傳遞Student類)

public class StudentData implements Data<Student>{@Overridepublic void add(Student student) {}@Overridepublic void delete(Student student) {}@Overridepublic void update(Student student) {}@Overridepublic Student find(int id) {return null;}
}

TeacherData.java 自定義接口實現類(傳遞Teacher類)

public class TeacherData implements Data<Teacher>{@Overridepublic void add(Teacher teacher) {}@Overridepublic void delete(Teacher teacher) {}@Overridepublic void update(Teacher teacher) {}@Overridepublic Teacher find(int id) {return null;}
}

GenericDemo3.java

public class GenericDemo3 {public static void main(String[] args) {//目標:自定義泛型接口StudentData stu = new StudentData();stu.add(new Student());stu.delete(new Student());Student stu2 = stu.find(1);}
}

04 泛型方法

在這里插入圖片描述

public class GenericDemo4 {public static void main(String[] args) {String[] names = {"張三","李四","王五","趙六"};printArray(names);String max = getMax(names);Student[] stus = new Student[100];printArray(stus);Student max2 = getMax(stus);}public static <T> void printArray(T[] names){}public static <T> T getMax(T[] names){return null;}
}

05 通配符和上下限

通配符就是?,可以在使用泛型的時候代表一切類型,ETKV是在定義泛型的時候使用。

在這里插入圖片描述

Car.java

public class Car {
}

Xiaomi.java

public class Xiaomi extends Car{
}

Weilai.java

public class Weilai extends Car{
}

GenericDemo5.java

import java.util.ArrayList;public class GenericDemo5 {public static void main(String[] args) {ArrayList<Xiaomi> xiaomis = new ArrayList<>();xiaomis.add(new Xiaomi());xiaomis.add(new Xiaomi());xiaomis.add(new Xiaomi());ArrayList<Weilai> weilais = new ArrayList<>();weilais.add(new Weilai());weilais.add(new Weilai());weilais.add(new Weilai());}public static void go(ArrayList<? extends Car> cars){}
}

06 泛型支持的類型

泛型不支持基本數據類型,故產生了包裝類,包裝類就是把基本數據類型包裝成對象類型。

在這里插入圖片描述

  • 自動裝箱:基本數據類型可以自動轉換為包裝類型。
  • 自動拆箱:包裝類型可以自動轉換為基本數據類型。

為了萬物皆對象,并且泛型和集合都不支持基本類型,我們支持包裝類!

package generic;import java.util.ArrayList;public class GenericDemo6 {public static void main(String[] args) {Integer it1 = Integer.valueOf(100); //不是數字100,而是對象100Integer it2 = Integer.valueOf(100); //it1 == it2//自動裝箱Integer it3 = 150;Integer it4 = 145;ArrayList<Integer> list = new ArrayList<>();list.add(138);//自動拆箱int i1 = it3;int i2 = list.get(138);System.out.println("-----------------------------------------");//重要作用:包裝類可以將字符串數值轉化為對應的基本數據類型String s1 = "98";int i = Integer.valueOf(s1);System.out.println(i + 2); //100String s2 = "3.14";double d = Double.valueOf(s2);System.out.println(d + 2); //5.14}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79458.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79458.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79458.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle VirtualBox 在 macOS 上的詳細安裝步驟

Oracle VirtualBox 在 macOS 上的詳細安裝步驟 一、準備工作1. 系統要求2. 下載安裝包二、安裝 VirtualBox1. 掛載安裝鏡像2. 運行安裝程序3. 處理安全限制(僅限首次安裝)三、安裝擴展包(增強功能)四、配置第一個虛擬機1. 創建新虛擬機2. 分配內存3. 創建虛擬硬盤4. 加載系…

RAGFlow 接入企業微信應用實現原理剖析與最佳實踐

背景 近期有醫美行業客戶咨詢我們智能客服產品&#xff0c;期望將自己企業的產品、服務以及報價信息以企微應用的方式給到客戶進行體驗互動&#xff0c;提升企業運營效率。關于企業微信對接&#xff0c;我們分享下最佳實踐&#xff0c;拋磚引玉。效果圖如下&#xff1a; 這里也…

【心海資源】子比主題新增注冊與會員用戶展示功能模塊及實現方法

內容改寫&#xff1a; 本次分享的是子比主題頂部展示注冊用戶與會員信息的功能模塊及其實現方式。 你可以通過兩種方式啟用該功能&#xff1a; 直接在后臺進入“外觀 → 小工具”啟用該展示模塊&#xff0c;操作簡便&#xff1b;也可將提供的代碼覆蓋至子比主題目錄中&#…

CSDN積分詳解(介紹、獲取、用途)

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 積分**一、積分類型及用途****二、積分獲取途…

【iview】es6變量結構賦值(對象賦值)

變量的解構賦值 以iview的src/index.js中Vue.prototype.$IVIEW改造為例練習下怎么使用變量的解構賦值 原來的寫法&#xff1a; const install function(Vue, opts {}) {if (install.installed) return;locale.use(opts.locale);locale.i18n(opts.i18n);Object.keys(iview).fo…

【c++深入系列】:萬字詳解vector(附模擬實現的vector源碼)

&#x1f525; 本文專欄&#xff1a;c &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 種子破土時從不問‘會不會有光’&#xff0c;它只管生長 ★★★ 本文前置知識&#xff1a; 模版 1.什么是vector 那么想必大家都學過順…

MySQL基礎關鍵_007_DQL 練習

目 錄 一、題目 二、答案&#xff08;不唯一&#xff09; 1.查詢每個部門薪資最高的員工信息 2.查詢每個部門高于平均薪水的員工信息 3. 查詢每個部門平均薪資等級 4.查詢部門中所有員工薪資等級的平均等級 5.不用分組函數 max 查詢最高薪資 6.查詢平均薪資最高的部門編…

Jenkis安裝、配置及賬號權限分配保姆級教程

Jenkis安裝、配置及賬號權限分配保姆級教程 安裝Jenkins下載Jenkins啟動Jenkins配置Jenkins入門Jenkins配置配置中文配置前端自動化任務流新建任務拉取代碼打包上傳云服務并運行配置后端自動化任務流新建任務拉取代碼打包上傳云服務并運行賬號權限分配創建用戶分配視圖權限安裝…

虛函數 vs 純虛函數 vs 靜態函數(C++)

&#x1f9e9; 一圖看懂&#xff1a;虛函數 vs 純虛函數 特性虛函數&#xff08;Virtual&#xff09;純虛函數&#xff08;Pure Virtual&#xff09;語法virtual void foo();virtual void foo() 0;是否必須實現? 必須在類中實現? 不在基類實現&#xff0c;派生類必須實現是…

2025年滲透測試面試題總結-拷打題庫36(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 2025年滲透測試面試題總結-拷打題庫36 PHP代碼常見入口函數查找 PHP框架路由方法熟悉度 PHP變量覆蓋…

STL之vector容器

vector的介紹 1.vector是可變大小數組的容器 2.像數組一樣&#xff0c;采用連續的空間存儲&#xff0c;也就意味著可以通過下標去訪問&#xff0c;但它的大小可以動態改變 3.每次的插入都要開空間嗎&#xff1f;開空間就要意味著先開臨時空間&#xff0c;然后在拷貝舊的到新…

[學成在線]22-自動部署項目

自動部署 實戰流程 下邊使用jenkins實現CI/CD的流程。 1、將代碼使用Git托管 2、在jenkins創建任務&#xff0c;從Git拉取代碼。 3、拉取代碼后進行自動構建&#xff1a;測試、打包、部署。 首先將代碼打成鏡像包上傳到docker私服。 自動創建容器、啟動容器。 4、當有代…

74HC123的電路應用場景

74HC123的電路應用場景 **1. 引腳功能示例****2. 核心功能****&#xff08;1&#xff09;單穩態觸發器****&#xff08;2&#xff09;雙獨立通道****&#xff08;3&#xff09;靈活觸發方式** **3. 工作原理****4. 典型應用場景****&#xff08;1&#xff09;定時與延時控制***…

【人工智能】大模型安全的深度剖析:DeepSeek漏洞分析與防護實踐

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 隨著大語言模型(LLM)的廣泛應用,其安全性問題日益凸顯。DeepSeek作為中國領先的開源AI模型,以低成本和高性能著稱,但近期暴露的數據庫…

《ESP32音頻開發實戰:I2S協議解析與WAV音頻錄制/播放全指南》

前言 在智能硬件和物聯網應用中&#xff0c;音頻處理能力正成為越來越重要的功能——無論是語音交互、環境音采集&#xff0c;還是音樂播放&#xff0c;都離不開高效的音頻數據傳輸與處理。而I2S&#xff08;Inter-IC Sound&#xff09;作為專為音頻設計的通信協議&#xff0c…

大數據實時數倉的數據質量監控解決方案

實時數倉不僅僅是傳統數據倉庫的升級版,它更強調數據的實時性、流動性和高可用性,通過對海量數據的即時處理和分析,為企業提供近乎實時的洞察力。這種能力在金融、零售、制造、互聯網等行業中尤為關鍵,例如,電商平臺可以通過實時數倉監控用戶行為,動態調整推薦算法;金融…

56認知干貨:智能化產業

如果在不久的未來,一座高樓大廈的建設,只需將圖紙輸入系統,無數臺機器人就能精準協作完成任務; 電影節的主角不再是人類,動漫與影視作品將不再需要人類創作; 當播種和收獲的工作無人參與,所有過程都能自動化進行; 這將預示著我們將迎來一個智能化社會,在這個社會中,…

使用synchronized關鍵字同步Java線程

問題 在Java多線程編程中&#xff0c;你需要保護某些數據&#xff0c;防止多個線程同時訪問導致數據不一致或程序錯誤。 解決方案 在需要保護的方法或代碼段上使用synchronized關鍵字。 討論 synchronized關鍵字是Java提供的同步機制&#xff0c;用于確保在同一時刻只有一…

MATLAB基于格拉姆角場與2DCNN-BiGRU的軸承故障診斷模型

本博客來源于CSDN機器魚&#xff0c;未同意任何人轉載。 更多內容&#xff0c;歡迎點擊本專欄目錄&#xff0c;查看更多內容。 目錄 0 引言 1 格拉姆角場原理 2 2DCNN-BiGRU網絡結構 3 應用實例 3.1 數據準備 3.2 格拉姆角場數據提取 3.3 網絡模型搭建-重中之重 3.4 …

電氣設備器件選型參數---斷路器

斷路器 一、基本電氣參數 額定電壓&#xff08;Ue&#xff09; 必須≥系統最高工作電壓&#xff08;如380V、660V等&#xff09;。 注意直流/交流系統的區別&#xff0c;直流斷路器需專門設計。 額定電流&#xff08;In&#xff09; 根據負載的持續工作電流選擇&#xff0c;…