標籤:
1:泛型(掌握)
(1)泛型概述
是一種把明確類型的工作延遲到建立對象或者調用方法的時候才去明確的特殊的類型。
(2)格式:
<資料類型>
注意:該資料類型只能是參考型別。
(3)好處:
A:把運行時期的問題提前到了編譯期間
B:避免了強制類型轉換
C:最佳化了程式設計,解決了黃色警告線問題,讓程式更安全
(4)泛型的前世今生
A:泛型的由來
Object類型作為任意類型的時候,在向下轉型的時候,會隱含一個轉型問題
B:泛型類 :public class 類名<泛型型別1,泛型型別2、、、> 如:public class studet<T>{ //裡面T表示的是一個類型名。 }
C:泛型方法:(它會進行類型推斷)
類型1:類上有泛型型別。
public class stduet<T> {
public void method(T t){ }
}
類型2:類上沒有泛型型別
public class students{
public <T> void show(T t){ }
}
D:泛型介面:public interface 介面名 <泛型型別1,泛型型別2、、、>{ }
public interface ter<T t>{
public void add(T t){ }
}
E:泛型進階萬用字元:
由於泛型在明確的指定類型後,前後的類型必須是一樣的,否則報錯。而有時候,我們往往不知道是該類還是該類的子類,因此,剛開始無法確定類型,因此需要萬用字元。
? 表示的是任意類型,如果沒有明確,那麼就是Object以及任意的java類
如: Collection<?> c =new ArrayList<Object>();
? extends E 表示的是向下限定,E及其子類 ,這裡是表示只能統配該類和該類的子類可以。
如: Collection<? extends animal> c =new ArrayList<Dog>();可以
Collection<? extends animal> c =new ArrayList<Object>(); 不可以
? super E 表示的是向上限定,E及其父類 ,這裡是表示只能統配該類和該類的父類。
如:Collection<? extends animal> c =new ArrayList<Dog>(); 不可以
Collection<? extends animal> c =new ArrayList<Object>(); 可以
(5)JDK5的新特性:自動拆裝箱,泛型,增強for,靜態匯入,可變參數,枚舉。
2:增強for迴圈
(1)是for迴圈的一種
(2)格式:
for(元素的資料類型 變數名 : 數組或者Collection集合的對象) {
使用該變數即可,該變數其實就是數組或者集合中的元素。
}
(3)好處:
簡化了數組和集合的遍曆
(4)弊端
增強for迴圈的目標不能為null。建議在使用前,先判斷是否為null。
3:靜態匯入
(1)可以匯入到方法層級的匯入,可以直接調用方法名即可。
(2)格式:
import static 包名....類名.方法名;
(3)注意事項:
A:方法必須是靜態
B:如果多個類下有同名的方法,就不好區分了,還得加上首碼。
所以一般我們並不使用靜態匯入,但是一定要能夠看懂。
4:可變參數(掌握)
(1)如果我們在寫方法的時候,參數個數不明確,就應該定義可變參數。
(2)格式:
修飾符 傳回值類型 方法名(資料類型... 變數) {}
public static int sum(int... a){ } //在調用該方法的時候會有具體的參數的個數。
注意:
A:該變數a其實是一個數組名
B:如果一個方法有多個參數,並且有可變參數,可變參數必須在最後
(3)Arrays工具類的一個方法
asList()把數組轉成集合。
注意:雖然可以把數群組轉換成集合,但是這個集合的長度不能改變,原因是這個集合本質上還是數組,數組的長度是不變的。
Java中的泛型