Collections,泛型,File,IO流,字節/符輸入輸出流
1.Collections集合幫助類
2.泛型
泛型是一種編譯時的一種概念,就是爲了能夠避免發生類型轉換異常。
所謂的泛型就是說在定義方法,類,參數時指定爲通用類型,使用這些方法或者類時,需要把通用類型指定爲具體的數據類型。
定義泛型的語法:
類名<數據類型> 對象名稱=new 類名();
類名<數據類型> 對象名稱=new 類名<數據類型>();
作用:
1.消除類型轉換
2.自動解包裝
3.限制參數類型的範圍
<?>:表示任何數據類型都可以
<? extends 類名>:只允許當前類或者當前類的子類
<? super 類名>:只允許當前類或者當前類的父類
<? extends 接口>:只允許實現了該接口的類
4.泛型方法
語法:
[訪問修飾符] 泛型 返回類型 方法名稱(參數列表){
}
用法1:
<T>:允許所有的泛型調用
<T extends 類名>:允許當前類以及當前類的子類調用
<T extends 接口>:允許實現了該接口的類調用
<T extends 類名&接口>:
5.類的泛型
ArrayList<String> list=new ArrayList();
不能new泛型類的對象
1. 泛型:就是在定義類、接口、方法、方法參數或成員變量時,指定它的操作對象的數據類型爲一個參數(這個參數叫類型參數)。
在具體使用類、接口、方法、方法參數或成員變量時,將這個參數用具體的某一數據類型來代替。
2. 泛型的好處:它在編譯時進行類型安全檢查,並且在運行時所有的轉換都是強制的、隱式的。提高了代碼的重用率。
3. 定義語法: 類型參數的名稱建議使用:E、K、V、T。在泛型類或接口中就可以把類型參數當作一種特定的類類型來使用。
class 類名<類型參數的名稱> { …}
interface 接口名<類型參數的名稱> { …}
class Test<T>{
public T get(int i){}
public static <C> void (C c){}
}
4. 當某個類的父類是泛型類時:這個子類要把類型參數傳遞給父類;也可以把子類定義成特定於指定類型的,這個子類就不再是泛型類了。
當某個類實現的接口是泛型接口時:具體子類要把類型參數傳遞給所實現的接口;也可以把具體子類定義成特定於指定類型的。
class TT<T> extends Test<T>{}
class TTT extends Test<Integer>{}
5. 有界類型參數:在指定類型參數時可以通過“T extends 父類名”來指定一個上界
class C<T extends Number>{
}
6. 泛型類中的任何實例方法本質上都是泛型方法。只有靜態方法需要顯式定義成泛型方法,定義語法:
訪問控制符 [修飾符] <類型參數列表> 返回值類型 方法名(參數列表)
class Test<T>{
public T get(int i){}
public static <C> void (C c){}
}
7. 當使用泛型類或接口聲明屬性、局部變量、參數類型或返回值類型時,可使用通配符來代替類型參數。
通配符上界:<? extends Number>表示這個類型參數必須是Number類或其子類的實例。
通配符下界:<? super Integer>表示這個類型參數必須是Integer類或其父類的實例。
class Test{
private List<?> list;
public void test(List<? extends Number> list){}
}
8. 擦除:JDK1.5以前的版本中沒有泛型,爲了保證對以前版本的兼容,Java採用了被稱爲擦除的方式來處理泛型。
當Java代碼被編譯成字節碼時,泛型類型的定義信息會被刪除(擦除)
9. 泛型的侷限
1) 不能使用基本類型的類型參數: 因爲,在擦除時基本類型無法用Object類來代替。可以使用基本類型的包裝類來代替它們。
2) 靜態成員無法使用類型參數:因爲靜態成員獨立於任何對象,是在對象創建之前就已經存在了,此時,編譯器根本還無法知道它使用的是哪一個具體的類型。
3) 不能使用泛型類異常: Java代碼中不能拋出也不能捕獲泛型類的異常。
4) 不能使用泛型數組:這是Java語法的規定。 Generic<Integer> arr[] = new Generic<Ingeger>[10];//error
5) 不能實例化參數類型對象:也就是說,不能直接使用泛型的參數類型來構造一個對象。
public class A<T>{ T a = new T(); //編譯報錯 }
3.File類
4.IO流的原理
IO流就是讓Java程序和數據源通過數據通道以流的形式進行數據的輸入和輸出操作。
5.IO流的分類
按流向分:
輸入流:程序可以從中讀取數據的流
輸出流:程序能向其中寫入數據的流
按數據傳輸單位分:
字節流:以字節爲單位傳輸數據的流
字符流:以字符爲單位傳輸數據的流
按功能分:
節點流:用於直接操作目標設備的流
過濾流:是對一個已存在的流的連接和封裝,通過對數據的處理爲程序提供更爲強大、靈活的讀寫功能。
6.字節輸入流InputStream
特點:擅長對視頻,音頻,二進制文件的操作,不適合操作文本文件,而且在讀取中文時,會出現亂碼,因爲它是以
字節的形式讀取數據的。
子類:FileInputStream
使用步驟:
step1:創建輸入流類對象,並且指定要操作的文件
step2:調用read方法讀
step3:循環讀
step4:輸出內容
step5:關閉IO流類對象,釋放資源
7.字節輸出流OutputStream
子類:FileOutputStream
使用步驟:
step1:創建FileOutputStream對象,並指定數據源
step2:調用write方法寫數據
step3:寫完數據,調用flush方法刷新
step4:關閉IO流類對象.
8.字符輸入輸出流
Reader--->FileReader
Writer--->FileWriter
特點:適合操作文本文件
2.泛型
泛型是一種編譯時的一種概念,就是爲了能夠避免發生類型轉換異常。
所謂的泛型就是說在定義方法,類,參數時指定爲通用類型,使用這些方法或者類時,需要把通用類型指定爲具體的數據類型。
定義泛型的語法:
類名<數據類型> 對象名稱=new 類名();
類名<數據類型> 對象名稱=new 類名<數據類型>();
作用:
1.消除類型轉換
2.自動解包裝
3.限制參數類型的範圍
<?>:表示任何數據類型都可以
<? extends 類名>:只允許當前類或者當前類的子類
<? super 類名>:只允許當前類或者當前類的父類
<? extends 接口>:只允許實現了該接口的類
4.泛型方法
語法:
[訪問修飾符] 泛型 返回類型 方法名稱(參數列表){
}
用法1:
<T>:允許所有的泛型調用
<T extends 類名>:允許當前類以及當前類的子類調用
<T extends 接口>:允許實現了該接口的類調用
<T extends 類名&接口>:
5.類的泛型
ArrayList<String> list=new ArrayList();
不能new泛型類的對象
1. 泛型:就是在定義類、接口、方法、方法參數或成員變量時,指定它的操作對象的數據類型爲一個參數(這個參數叫類型參數)。
在具體使用類、接口、方法、方法參數或成員變量時,將這個參數用具體的某一數據類型來代替。
2. 泛型的好處:它在編譯時進行類型安全檢查,並且在運行時所有的轉換都是強制的、隱式的。提高了代碼的重用率。
3. 定義語法: 類型參數的名稱建議使用:E、K、V、T。在泛型類或接口中就可以把類型參數當作一種特定的類類型來使用。
class 類名<類型參數的名稱> { …}
interface 接口名<類型參數的名稱> { …}
class Test<T>{
public T get(int i){}
public static <C> void (C c){}
}
4. 當某個類的父類是泛型類時:這個子類要把類型參數傳遞給父類;也可以把子類定義成特定於指定類型的,這個子類就不再是泛型類了。
當某個類實現的接口是泛型接口時:具體子類要把類型參數傳遞給所實現的接口;也可以把具體子類定義成特定於指定類型的。
class TT<T> extends Test<T>{}
class TTT extends Test<Integer>{}
5. 有界類型參數:在指定類型參數時可以通過“T extends 父類名”來指定一個上界
class C<T extends Number>{
}
6. 泛型類中的任何實例方法本質上都是泛型方法。只有靜態方法需要顯式定義成泛型方法,定義語法:
訪問控制符 [修飾符] <類型參數列表> 返回值類型 方法名(參數列表)
class Test<T>{
public T get(int i){}
public static <C> void (C c){}
}
7. 當使用泛型類或接口聲明屬性、局部變量、參數類型或返回值類型時,可使用通配符來代替類型參數。
通配符上界:<? extends Number>表示這個類型參數必須是Number類或其子類的實例。
通配符下界:<? super Integer>表示這個類型參數必須是Integer類或其父類的實例。
class Test{
private List<?> list;
public void test(List<? extends Number> list){}
}
8. 擦除:JDK1.5以前的版本中沒有泛型,爲了保證對以前版本的兼容,Java採用了被稱爲擦除的方式來處理泛型。
當Java代碼被編譯成字節碼時,泛型類型的定義信息會被刪除(擦除)
9. 泛型的侷限
1) 不能使用基本類型的類型參數: 因爲,在擦除時基本類型無法用Object類來代替。可以使用基本類型的包裝類來代替它們。
2) 靜態成員無法使用類型參數:因爲靜態成員獨立於任何對象,是在對象創建之前就已經存在了,此時,編譯器根本還無法知道它使用的是哪一個具體的類型。
3) 不能使用泛型類異常: Java代碼中不能拋出也不能捕獲泛型類的異常。
4) 不能使用泛型數組:這是Java語法的規定。 Generic<Integer> arr[] = new Generic<Ingeger>[10];//error
5) 不能實例化參數類型對象:也就是說,不能直接使用泛型的參數類型來構造一個對象。
public class A<T>{ T a = new T(); //編譯報錯 }
3.File類
4.IO流的原理
IO流就是讓Java程序和數據源通過數據通道以流的形式進行數據的輸入和輸出操作。
5.IO流的分類
按流向分:
輸入流:程序可以從中讀取數據的流
輸出流:程序能向其中寫入數據的流
按數據傳輸單位分:
字節流:以字節爲單位傳輸數據的流
字符流:以字符爲單位傳輸數據的流
按功能分:
節點流:用於直接操作目標設備的流
過濾流:是對一個已存在的流的連接和封裝,通過對數據的處理爲程序提供更爲強大、靈活的讀寫功能。
6.字節輸入流InputStream
特點:擅長對視頻,音頻,二進制文件的操作,不適合操作文本文件,而且在讀取中文時,會出現亂碼,因爲它是以
字節的形式讀取數據的。
子類:FileInputStream
使用步驟:
step1:創建輸入流類對象,並且指定要操作的文件
step2:調用read方法讀
step3:循環讀
step4:輸出內容
step5:關閉IO流類對象,釋放資源
7.字節輸出流OutputStream
子類:FileOutputStream
使用步驟:
step1:創建FileOutputStream對象,並指定數據源
step2:調用write方法寫數據
step3:寫完數據,調用flush方法刷新
step4:關閉IO流類對象.
8.字符輸入輸出流
Reader--->FileReader
Writer--->FileWriter
特點:適合操作文本文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.