1. 程式人生 > >Java學習周記week03

Java學習周記week03

math 內部原理 子集 jdb exit 子類 array oid 存儲

一.繼承

1.什麽叫繼承?

繼承是面向對象的三大特征之一。

在程序中,繼承描述的是類與類之間的關系,通過繼承多個類之間形成一種關系體系。

在Java中,類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出的類被稱作子類,現有的類被稱作父類。

繼承後子類的特點: 子類自動擁有父類所有可繼承的屬性和方法。

在程序中,如果想聲明一個類繼承另一個類,需要使用extends關鍵字。

2.繼承的註意事項

(1)繼承必須合理(子類必須屬於父類的一種時,符合is a 法則時,才會繼承)

(2)父類中成員是共性的內容(父類抽取出了共性的內容,子類可以在父類基礎上擴展新的屬性和行為)

(3)子類自動擁有父類的成員並且可以直接使用非私有的父類成員

3.子類中訪問父類成員變量特點

如果父類中的成員變量是非私有的,那麽子類可以直接訪問。

如果出現了成員變量同名的情況,在程序中使用子類對象會自動調用子類的成員變量,如果想調用父類的成員變量,需要使用super關鍵字。

4.子類中訪問父類成員方法特點

當程序通過對象調用方法時,會先在子類中查找是否有對應方法,如果有的話就執行子類中的方法,如果沒有的話就會執行父類中的對應方法。

在子類中,訪問父類中的成員方法格式:

super.父類中的成員方法();

5.繼承特點

1.Java只支持單繼承:就一個子類 只能最多直接繼承一個父類。(Java不支持多繼承)

2.Java支持多層繼承。

3.父類定義了繼承樹中共性內容,子類定義了該類個性內容。

6.繼承中方法的重寫與應用

子父類成員方法特殊情況——覆蓋

子類中出現與父類一模一樣的方法時,會出現覆蓋操作,也稱為override重寫、復寫或者覆蓋。

當子類需要父類的功能,而功能主體子類有自己特有內容時,可以重寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容。

7.方法重寫的註意事項

  • 子類方法覆蓋/重寫/覆寫(override)父類方法,必須要保證權限大於等於父類權限。

  • 如果父類的方法是private的修飾的,那麽在子類中沒法重寫(其他修飾符都可以重寫)。

  • 寫法上稍微註意:必須一模一樣:方法的返回值類型 方法名 參數列表都要一樣。

總結:當一個類是另一個類中的一種時,可以通過繼承,來繼承屬性與功能。如果父類具備的功能內容需要子類特殊定義時,進行方法重寫。

二. 抽象類

1.抽象方法的產生與定義

分析事物時,發現了共性內容,就出現向上抽取。會有這樣一種特殊情況,就是方法功能聲明相同,但方法功能主體不同。那麽這時也可以抽取,但只抽取方法聲明,不抽取方法主體。那麽此方法就是一個抽象方法。

當定義了抽象函數的類也必須被abstract關鍵字修飾,被abstract關鍵字修飾的類是抽象類。

1 抽象方法定義的格式:
2 public abstract 返回值類型 方法名(參數);
3 
4 抽象類定義的格式:
5 abstract class 類名 {
6 }

2.抽象方法的使用

抽象類無法直接創建對象,只能被子類繼承後,創建子類對象。

三.接口

1.接口的概念

類:具有相同屬性和功能的事物集合

接口是功能的集合,同樣可看做是一種數據類型,是比抽象類更為抽象的”類”。

接口只描述所應該具備的方法,並沒有具體實現,具體的實現由接口的實現類(相當於接口的子類)來完成。這樣將功能的定義與實現分離,優化了程序設計。

一切事物均有功能,即一切事物均有接口。

2.接口的定義

與定義類的class不同,接口定義時需要使用interface關鍵字。

定義接口所在的仍為.java文件,雖然聲明時使用的為interface關鍵字的編譯後仍然會產生.class文件。這點可以讓我們將接口看做是一種只包含了功能聲明的特殊類。

1 public interface 接口名 {
2 抽象方法1;
3 抽象方法2;
4 抽象方法3;
5 }

3.實現類接口

類與接口的關系為實現關系,即類實現接口。實現的動作類似繼承,只是關鍵字不同,實現使用implements

class 實現類 implements 接口 { 重寫接口中所有方法 }

在類實現接口後,該類就會將接口中的抽象方法繼承過來,此時該類需要重寫該抽象方法,完成具體的邏輯。

4.接口中成員的特點

1、接口中可以定義成員變量,但是變量必須有固定的修飾符修飾,public static final 所以接口中的變量也稱之為常量,其值不能改變。後面我們會講解static與final關鍵字

2、接口中可以定義方法,方法也有固定的修飾符,public abstract

3、接口不可以創建對象。

4、實現類必須覆蓋掉接口中所有的抽象方法後,實現類才可以實例化。否則實現類是一個抽象類。

5.接口特點

接口可以繼承接口。

如同類繼承類後便擁有了父類的成員,可以使用父類的非私有成員。A接口繼承B接口後,A接口便擁有了A、B兩個接口中所有的抽象方法。

Java支持一個類同時實現多個接口,或一個接口同時繼承多個接口。

類可以在繼承一個類的同時,實現多個接口。

接口與父類的功能可以重復,均代表要具備某種功能,並不沖突。

6.抽象類與接口的比較

相同點:

都位於繼承的頂端,用於被其他類實現或繼承;

都不能直接實例化對象;

都可以包含抽象方法,其子類都必須覆寫這些抽象方法;

區別:

抽象類為部分方法提供實現,避免子類重復實現這些方法,提高代碼重用性;

接口只能包含抽象方法;

一個類只能繼承一個直接父類(可能是抽象類),卻可以實現多個接口;(接口彌補了Java的單繼承)

抽象類為繼承體系中的共性內容,接口為繼承體系外的擴展功能

二者的選用:

優先選用接口,盡量少用抽象類;

需要定義子類的行為,又要為子類提供共性功能時才選用抽象類;

四.多態

1.多態的概念

多態是繼封裝繼承之後,面向對象的第三大特性。

父類引用變量可以指向子類對象。

多態的前提是必須有子父類關系或者類實現接口關系,否則無法完成多態。

在使用多態後的父類引用變量調用方法時,會調用子類重寫後的方法。

2.多態的代碼體現

父類類型 變量名 = new 子類類型();

此時,雖然該變量指向的是子類對象,但表現為一個父類的形態,可以調用一切父類的方法,子類特有的方法將不能調用。

3.多態調用註意事項

成員變量編譯看父類中是否存在,不存在編譯失敗

成員變量運行父類中的變量

成員方法編譯看父類中是否存在,不存在編譯失敗

成員方法運行子類重寫的方法

4.多態的好處和弊端

多態的存在意義(優點)為:配合繼承與方法重寫提高了代碼的復用性與擴展性,如果沒有方法重寫,則多態同樣沒有意義。

多態的弊端: 不能調用子類的特有方法。

5.向上轉型與向下轉型

向上轉型:當有子類對象賦值給一個父類引用時,便是向上轉型,多態本身就是向上轉型的過程。

向上轉型的使用格式

1 父類類型  變量名 = new 子類類型();
2 如:Animal  p = new Cat();

向下轉型:一個已經向上轉型的子類對象可以使用強制類型轉換的格式,將父類引用轉為子類引用,這個過程是向下轉型。如果是直接創建父類對象,是無法向下轉型的!

向下轉型的使用格式

1 子類類型 變量名 = (子類類型) 父類類型的變量;
2 如:Cat c = (Cat) a;  //變量p 實際上指向Cat對象

instanceof關鍵字

判斷對象是否可以向下轉型 返回值為boolean

1 boolean b = 引用變量 instanceof 類;
2 if(a instanceof Dog){
3    Dog d = (Dog)a;
4 }

五.static關鍵字

1.static概念

static它是靜態修飾符,一般用來修飾類中的成員。

2.static 的特點

static是靜態修飾符,一般修飾成員。被static修飾的成員屬於類,不屬於單個對象。

static修飾的成員被多個對象共享。

static修飾的成員屬於類,但是會影響每一個對象。

被static修飾的成員又叫類成員,不叫對象的成員。

3.static修飾成員的使用

被static修飾的成員可以並且建議通過類名直接訪問。也可以通過某個對象訪到屬於類的靜態成員,原因即多個對象均屬於一個類,共享使用同一個靜態成員。

格式:

類名.靜態成員變量名

類名.靜態成員方法名(參數)

對象名.靜態成員變量名 ------不建議,出現警告

對象名.靜態成員方法名(參數) ------不建議,出現警告

 1 class Demo {
 2     //非靜態成員變量
 3     public int num1 = 100;
 4 //靜態成員變量
 5 public static int num2 = 100;
 6 
 7     //非靜態方法
 8     public void method(){
 9         System.out.println("靜態方法");
10     }
11 //靜態方法
12     public static void method(){
13         System.out.println("靜態方法");
14     }
15 
16 }
17 class Test {
18     public static void main(String[] args) {
19         System.out.println(Demo.num);
20         Demo.method();
21     }
22 }

4.靜態代碼快

靜態代碼塊是定義在成員位置,使用static修飾的代碼塊。

特點:

在同一個類中,它優先於主方法執行、優先於構造代碼塊執行,當以任意形式第一次使用到該類時執行。

該類不管創建多少對象,靜態代碼塊只執行一次。

可用於給靜態變量賦值,用來給類進行初始化。//數據庫JDBC

1 public class Person {
2     private String name;
3     private int age;
4  //靜態代碼塊
5     static{
6         System.out.println("靜態代碼塊執行了");
7     }

六.final關鍵字

1.final關鍵字的概念

繼承的出現提高了代碼的復用性,並方便開發。但隨之也有問題,有些類在描述完之後,不想被繼承,或者有些類中的部分方法功能是固定的,不想讓子類重寫。這個時候就要使用到final關鍵字。

2.final關鍵字的特點

  • final修飾類不可以被繼承,但是可以繼承其他類。

  • final修飾的方法不可以被覆蓋,但父類中沒有被final修飾方法,子類覆蓋後可以加final。

  • final修飾的變量稱為常量,這些變量只能賦值一次。

  • 引用類型的變量值為對象地址值,地址值不能更改,但是地址內的對象屬性值可以修改。

  • 修飾成員變量,需要在創建對象前賦值,否則報錯。

  • 也可以成員變量不賦值,但是構造方法必須賦值

七.四種訪問權限修飾符

public protected default private
同一類中 可調用 可調用 可調用 可調用
同一包中 可調用 可調用 可調用
不同包中 可調用 可調用
不同包中的無關類 可調用
  • 要想僅能在本類中訪問使用private修飾;

  • 要想本包中的類都可以訪問不加修飾符即可;

  • 要想本包中的類與其他包中的子類可以訪問使用protected修飾

  • 要想所有包中的所有類都可以訪問使用public修飾。

  • 如果類用public修飾,則類名必須與文件名相同。一個文件中只能有一個public修飾的類

八.內部類

1.內部類的概念

將類寫在其他類的內部,可以寫在其他類的成員位置和局部位置,這時寫在其他類內部的類就稱為內部類。其他類也稱為外部類。

訪問方式

外部類名.內部類名 變量名 = new 外部類名().new 內部類名();

2.匿名內部類

內部類是為了應對更為復雜的類間關系。

最常用到的內部類就是匿名內部類,它是局部內部類的一種。

定義的匿名內部類有兩個含義:

  • 臨時定義某一指定類型的子類。
  • 定義後即刻創建剛剛定義的這個子類的對象。

格式

1 new 父類或接口(){
2     //進行方法重寫
3 };

九.Object類

Object類是Java語言中的根類,即所有類的父類。它中描述的所有方法子類都可以使用。所有類在創建對象的時候,最終找的父類就是Object。

兩個常用方法1.equals 2.toString

開發中經常重寫這兩個方法,讓這兩個方法更符合開發時的使用。

1. equals(Object);方法,用於比較兩個對象是否相同,它其實就是比較兩個對象的地址值是否相同。

2.toString();方法,就是返回該對象的字符串表示,其字符串內容是對象的類型[email protected]+內存地址值。

十.異常

1.異常的概念

在Java等面向對象的編程語言中,異常本身是一個類,產生異常就是創建異常對象並拋出了一個異常對象。Java處理異常的方式是中斷處理。

2.異常的分類

異常和錯誤的根類是Throwable,異常類皆繼承java.lang.Throwable;

旗下有兩個子類,Error與Exception。

  • 嚴重錯誤Error:無法通過處理的錯誤。
  • 編譯時異常Exception,編譯時無法通過。
  • 運行時異常RuntimeException,是Excption的子類,運行時可能會報錯,可以不處理。

3.異常的基本操作

  • 創建異常對象
  • 對異常的基本操作有兩種
  1. 拋出異常
  2. 捕獲異常(使用try/catch做分支處理)

聲明拋出處理,出現異常後不處理,聲明拋出給調用者處理。

方法聲明上加throws 異常類名

註意:異常處理,指處理的一種可能性,即有了異常處理的代碼,不一定會產生異常。如果沒有產生異常,則代碼正常執行,如果產生了異常,則中斷當前執行代碼,執行異常處理代碼。

拋出異常 throw(動詞,表示拋出異常的動作)

使用格式:

throw new 異常類名(參數);

聲明異常 throws(將異常標識出來,報告給調用者我這個方法可能會出現這種異常)

聲明異常格式:

修飾符 返回值類型 方法名(參數) throws 異常類名1,異常類名2… { }

4.捕獲異常 try…catch…finally

捕獲:Java中對異常有針對性的語句進行捕獲,可以對出現的異常進行指定方式的處理

捕獲異常格式:

 1 try {
 2 
 3     //需要被檢測的語句。
 4 
 5 }
 6 
 7 catch(異常類 變量) { //參數。
 8 
 9     //異常的處理語句。
10 
11 }
12 
13 finally {
14 
15     //一定會被執行的語句。
16 
17 }

try:該代碼塊中編寫可能產生異常的代碼。

catch:用來進行某種異常的捕獲,實現對捕獲到的異常進行處理。

finally有一些特定的代碼無論異常是否發生,都需要執行。另外,因為異常會引發程序跳轉,導致有些語句執行不到。而finally就是解決這個問題的,在finally代碼塊中存放的代碼都是一定會被執行的。

5.異常的註意事項

  • 多異常處理

     捕獲處理:

  1. 多個異常分別處理
  2. 多個異常一次捕獲多次處理
  3. 多個異常一次捕獲一次處理

     聲明拋出異常:

聲明上使用,一次聲明多個異常

  • 運行時異常被拋出可以不處理。即不捕獲也不聲明拋出
  • 如果父類方法拋出了多個異常,子類覆蓋父類方法時,只能拋出相同的異常或者是他的子集
  • 父類方法沒有拋出異常,子類覆蓋父類該方法時也不可拋出異常。此時子類產生該異常,只能捕獲處理,不能聲明拋出[多線程會用到這個]
  • 當多異常處理時,捕獲處理,前邊的類不能是後邊類的父類
  • 在try/catch後可以追加finally代碼塊,其中的代碼一定會被執行,通常用於資源回收。

十一.常用API

1.Date類

類 Date 表示特定的瞬間,精確到毫秒。

繼續查閱Date類的描述,發現Date擁有多個構造函數,只是部分已經過時,但是其中有未過時的構造函數可以把毫秒值轉成日期對象。

  • Date(); 獲取一個當前日期對象
  • Date(long date); 獲取一個距離標準基準時間 date毫秒數的日期對象。
  • Date方法默認調用了toString對象
  • long getTime(返回一個自標準基準時間以來的此Date對象表示的毫秒數);

2.DateFormat

DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和標準化。

我們通過這個類可以幫我們完成日期和文本之間的轉換。

DateFormat類的作用:即可以將一個Date對象轉換為一個符合指定格式的字符串,也可以將一個符合指定格式的字符串轉為一個Date對象。

1 代碼演示:
2 //創建日期格式化對象,在獲取格式化對象時可以指定風格
3 DateFormat df= new SimpleDateFormat("yyyy-MM-dd");//對日期進行格式化
4 Date date = new Date(1607616000000L);
5 String str_time = df.format(date);
6 System.out.println(str_time);//2020年12月11日

指定格式的具體規則我們可參照SimpleDateFormat類的說明,這裏做簡單介紹,規則是在一個字符串中,會將以下字母替換成對應時間組成部分,剩余內容原樣輸出:

  • 當出現y時,會將y替換成年
  • 當出現M時,會將M替換成月
  • 當出現d時,會將d替換成日
  • 當出現H時,會將H替換成時
  • 當出現m時,會將m替換成分
  • 當出現s時,會將s替換成秒

DateFormat的兩個常用方法

1.format(Date date);將一個Date格式化為日期/時間字符串。

2.parse(String source); 從給定字符串的開始解析文本,以生成一個日期。

format方法,用來將Date對象轉換成String

parse方法,用來將String轉換成Date(轉換時,該String要符合指定格式,否則不能轉換)。

2.calendar類

Calendar是日歷類,在Date後出現,替換掉了許多Date的方法。該類將所有可能用到的時間信息封裝為靜態成員變量,方便獲取。

Calendar為抽象類,由於語言敏感性,Calendar類在創建對象時並非直接創建,而是通過靜態方法創建,將語言敏感內容處理好,再返回子類對象。

Calendar類靜態方法

getInstance(); 使用一個默認時區和語言環境獲得一個日歷

Calendar c = Calendar.getInstance(); //返回當前日歷對象

Calendar類常用方法

  1. add(int field , int mount); 為給定的日歷字段添加或減去指定的時間量
  2. get(int field); 返回給定日歷字段的值
  3. getInstance(); 使用默認時區和語言環境獲得一個日歷
  4. getTime(); 返回一個表示此Calendar時間值的Date對象
  5. set(int field, int mount);將給定的日歷字段設置為給定值

YEAR 年

MONTH 月,從0開始算起,最大11;0代表1月,11代表12月。

DATE 天

HOUR 時

MINUTE分

SECOND秒

註意事項

西方星期的開始為周日,中國為周一。

在Calendar類中,月份的表示是以0-11代表1-12月。

日期是有大小關系的,時間靠後,時間越大。

3.System類

在API中System類介紹的比較簡單,我們給出定義,System中代表程序所在系統,提供了對應的一些系統屬性信息,和系統操作。

查看文檔System類不能手動創建對象,因為構造方法被private修飾,阻止外界創建對象。System類中的都是static方法,類名訪問即可。在JDK中,有許多這樣的類。

常用方法

static long currentTimeMillis(); 返回以毫秒值為單位的當前時間。

static void exit(int status); 終止當前正在運行的Java虛擬機(0記為正常狀態,其他為異常狀態)

static void gc(); 運行垃圾回收(並沒有什麽卵用)

static String getProperty(String key); 獲取指定鍵的系統屬性

4.Math類

Math 類是包含用於執行基本數學運算的方法的數學工具類,如初等指數、對數、平方根和三角函數。

類似這樣的工具類,其所有方法均為靜態方法,並且一般不會創建對象。如System類

static double abs(double a); 返回double值的絕對值

static double ceil(double a); 向上取整

static double floor(double a);向下取整

static double max(double a , double b); 返回較大值

static double min(double a ,double b); 返回較小值

static double pow(double a , double b); 返回 a的b次冪的值

static double random(); 返回一個隨機的大於等於0.0且小於1.0的double 值

static long round(double a ); 四舍五入

5.基本類型包裝類

java將基本數據類型值封裝成了對象。

其中需要註意int對應的是Integer,char對應的Character,其他6個都是基本類型首字母大寫即可。

parseXXX(String s);其中XXX表示基本類型,參數為可以轉成基本類型的字符串,如果字符串無法轉成基本類型,將會發生數字轉換的問題NumberFormatException

在需要的情況下,基本類型與包裝類型可以通用。有些時候我們必須使用引用數據類型時,可以傳入基本數據類型。

自動拆箱:對象轉成基本數值

自動裝箱:基本數值轉成對象

6.正則表達式

正則表達式(英語:Regular Expression,在代碼中常簡寫為regex)。

正則表達式是一個字符串,使用單個字符串來描述、用來定義匹配規則,匹配一系列符合某個句法規則的字符串。在開發中,正則表達式通常被用來檢索、替換那些符合某個規則的文本。

常用方法

1.matches(String regex); 判斷字符串是否匹配給定的規則

2.split(String regex);根據給定正則表達式的匹配規則,拆分此字符串

十一.集合

數組的長度是固定的。集合的長度是可變的。

數組中存儲的是同一類型的元素,可以存儲基本數據類型值。

集合存儲的都是對象。而且對象的類型可以不一致。

Collection接口是集合中的頂層接口,它中定義的所有功能子類都可以使用。查閱API中描述的Collection接口。Collection 層次結構 中的根接口。Collection 用來存儲一組對象,這些對象也稱為 collection 的元素。一些 collection 允許有重復的元素,而另一些則不允許。

1.Collection接口的基本方法

boolean add(E e); 添加對象,並判斷是否刪除成功 (増)

void clear(); 刪除集合中的所有成員 (刪)

boolean contains(Object o); 判斷集合中是否包含o(查)

boolean remove(Object o); 刪除對象,並判斷是否刪除成功 (刪)

int size(); 返回collection的元素數(查)

Object[] toArray(); 返回包含此collection中所有元素的數組

2.Iterator 叠代器

java中提供了很多個集合,它們在存儲元素時,采用的存儲方式不同。我們要取出這些集合中的元素,可通過一種通用的獲取方式來完成。

Collection集合元素的通用獲取方式:在取元素之前先要判斷集合中有沒有元素,如果有,就把這個元素取出來,繼續在判斷,如果還有就再取出出來。一直把集合中的所有元素全部取出。這種取出方式專業術語稱為叠代。

常用方法

boolean hasNext(); 如果仍有元素可以叠代,則返回true,說明可以叠代。

E next(); 返回叠代的下一個元素,並把指針向後移動一位。

 1 //1,創建集合對象。
 2 Collection<String> coll = new ArrayList<String>();
 3 coll.add("abc1");
 4 coll.add("abc2");
 5 coll.add("abc3");
 6 coll.add("abc4");
 7 
 8 //2.獲取容器的叠代器對象。通過iterator方法。
 9 Iterator it = coll.iterator();
10 
11 //3,使用具體的叠代器對象獲取集合中的元素。參閱叠代器的方法
12 while(it.hasNext()){
13     System.out.println(it.next());
14 }
15 
16 /* 
17 叠代器for循環的形式的使用
18 for (Iterator it = coll.iterator(); it.hasNext();  ) {
19     System.out.println(it.next());
20 }
21 */

叠代的常規用法中我們要盡量避免在叠代過程中為集合添加/刪除數據。否則會報錯,原因是Java拋出了並發修改異常。

叠代過程中並發修改異常的原因為:

叠代器中”記憶”的集合長度與集合中實際長度不同,而導致出現索引與實際元素不符甚至無限循環的情況發生。

3.增強for循環

增強for循環是JDK1.5以後出來的一個高級for循環,專門用來遍歷數組和集合的。它的內部原理其實是個Iterator叠代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作。

格式:

for(元素的數據類型 變量 : Collection集合or數組){

}

它用於遍歷Collection和數組。通常只進行遍歷元素,不要在遍歷的過程中對集合元素進行增刪操作。

增強for循環和老式的for循環有什麽區別?

註意:新for循環必須有被遍歷的目標。目標只能是Collection或者是數組。

建議:遍歷數組時,如果僅為遍歷,可以使用增強for如果要對數組的元素進行 操作,使用老式for循環可以通過角標操作。

十二.泛型

泛型:就是一種不確定的類型(JDK1.5的一個新特性)

基本體現: <E>這就是泛型 可以是任意類型

  • 泛型用來靈活地將數據類型應用到不同的類、方法、接口當中。將數據類型作為參數傳遞。
  • 泛型是數據類型的一部分,將類名與泛型合並一起看做數據類型。
  • 泛型的定義:定義泛型可以在類中預支地使用未知的類型。
  • 泛型的使用:一般在創建對象時,將未知的類型確定具體的類型。當沒有指定泛型時,默認類型為Object類型。

1.使用泛型的好處

  • 將運行時期的ClassCastException,轉移到了編譯時期變成了編譯失敗。
  • 避免了類型強轉的麻煩。

2.含有泛型的類:泛型類

定義格式:修飾符 class 類名<代表泛型的變量> { }

使用格式:創建對象時,確定泛型的類型

3.含有泛型的方法

定義格式:修飾符 <代表泛型的變量> 返回值類型 方法名(參數){ }

使用格式:調用方法時,確定泛型的類型

4.含有泛型的接口

定義格式:修飾符 interface接口名<代表泛型的變量> { }

使用格式:

1、實現接口時,確定泛型的類型

2、實現接口,不指定泛型的類型,直到創建對象時,確定泛型的類型

5.泛型通配符

當使用泛型類或者接口時,傳遞的數據中,泛型類型不確定,可以通過通配符<?>表示。但是一旦使用泛型的通配符後,只能使用Object類中的共性方法,集合中元素自身方法無法使用。

定義:(查看ArrayList的構造方法或者addAll方法)無法在類中使用

使用:調用方法時可以給予任意類型。參照Arraylist的構造方法或者addAll方法

? extends E代表只要是E類型的子類即可

? super E代表只要是E類型的父類即可

Java學習周記week03