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

特點:適合操作文本文件







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章