1. 程式人生 > >JavaSE高階知識總結

JavaSE高階知識總結

1. 集合

JavaSE高階知識總結JavaSE高階知識總結
從上圖可以看出,集合框架包含兩種型別的容器:一是Collection,用來儲存元素,二是Map,用來鍵值對關係對映,Collection介面又分為List、Set、Queue三個子介面,下面又分為一個抽象類,最後是具體實現類,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap

  • 介面

    Collection:Collection儲存一組不唯一、無序的物件

    List:List儲存一組不唯一、有序的物件

    Set:Set儲存一組唯一、無序的物件

    SortSet:繼承自Set,儲存有序的物件

    Map:Map儲存一組鍵值物件

    Map.Entry:描述Map中的一個物件

    SortMap:j繼承自Map,使Key保持升序

  • List和Set的區別

    List支援有序且不唯一的物件,Set只能存放無序物件,並且可以重複

    List可以通過索引取值,查詢速度快,刪除和插入速度慢,插入資料時,會影響當前資料的位置

    Set不可以通過索引取值,查詢速度慢,刪除和插入速度快,插入資料時,不會影響當前資料的位置

  • 實現類

    LinkList:允許為null,用於建立連結串列資料結構,執行緒非安全

    ArrayList:動態增長陣列,執行緒非安全,增長偏移量為當前長度的50%

    HashSet:不允許出現重複物件,只允許儲存一個null

    LinkedHashSet:具有可預知迭代順序的Set介面的雜湊表和連結列表實現

    HashMap 是一個散列表,它儲存的內容是鍵值對對映,根據鍵的HashCode值儲存資料,具有很快的訪問速度,最多允許一條記錄的鍵為null,執行緒非安全

    LinkedHashMap:繼承於HashMap,使用元素的自然順序對元素進行排序

  • 如何使用迭代器

    iterationiterator():通過容器獲得該容器的迭代器物件

    hasNext():判斷迭代器中是否存在下一個元素

    next():返回迭代器中的下一個元素

2. 泛型

泛型允許提供編譯型別的安全檢測機制,該機制能夠確保在編譯時就能夠檢測到非法資料。泛型的本質是引數化l型別,就是操作的資料被指定為一個數據型別

  • 泛型方法

    範圍方法在呼叫時可以接收不同型別的引數

    定義規則:

    所有泛型方法宣告都有一個引數型別宣告部分<>,該引數宣告在方法返回值之前

    每個引數宣告部分可以包含一個或多個數據型別,用逗號隔開

    型別引數能被宣告返回值型別,也能被宣告為形參型別

    型別引數只能表示引用型別

  • 泛型類

    泛型類的宣告和非泛型類的宣告類似,除了在類名後面添加了型別引數宣告部分

    因為他們接受一個或多個引數,這些類被稱為引數化的類或引數化的型別

    public class Box<T> { private T t; public void add(T t) { this.t = t; } public T get() { return t; }

  • 型別萬用字元

    ?:可以接收任意泛型物件

    泛型的上限:extends

    泛型的下限:super

3. 流

JavaSE高階知識總結JavaSE高階知識總結

  • 抽象基類

    Reader:字元輸出流

    Writer:字元輸入流

    InputStream:位元組輸出流

    OutputStream:位元組輸入流

  • 實現類

    FileReader:字元輸入流,從檔案中讀取某個字元

    BufferedReader:緩衝字元輸入流,作用是為其他字元輸入流提供緩衝功能,建立時需要向它傳遞一個字元輸入流,BufferedReader會將Reader中的字元分批讀取,每次讀取一部分

    InputStreamReader:輸入轉換流,將一個位元組流中的位元組解碼成字元,建立時需要一個位元組輸入流

    FileWriter:字元輸出流,向檔案中寫入某個字元

    BufferedWriter:緩衝字元輸出流,作用是為其他字元輸出流提供緩衝功能,建立時需要向它傳遞一個字元輸出流,BufferedWriter會將Writer中的字元分批寫入,每次寫入一部分

    OutputStreamReader:用於將寫入的字元編碼成位元組後寫入一個位元組流,建立時需要一個位元組輸出流

    FileInputStream:位元組輸入流,從檔案中讀取某個位元組,通常用來讀取圖片

    FileOutputStream:位元組輸出流,向檔案中寫入某個位元組,通常用來寫入圖片

4. 序列化

  • 序列化物件

    ObjectOutputStream類用來序列化一個物件,建立時需要傳遞一個位元組輸出流,通過呼叫writeObject()方法將物件寫入到檔案中

  • 反序列化物件

    ObjectInputStream類用來反序列化一個物件,建立時需要傳遞一個位元組輸入流,通過呼叫readObject()方法將物件從檔案中取出

5. 程式、程序和執行緒

程式:程式是指令和資料的有序集合,其本身沒有任何執行的含義,是一個靜態的概念

程序:程序就是程式的執行過程

執行緒:通常一個程序中包含若干個執行緒,執行緒是一個比程序更小的執行單位,多個執行緒貢獻一塊記憶體空間

6. 執行緒的基本狀態

新建:新建一個執行緒物件

可執行:執行緒建立後,呼叫該執行緒start()方法後,該執行緒就位於可執行執行緒池中等待執行緒排程,獲得時間片

執行:可執行的執行緒獲得了時間片,執行程式程式碼

阻塞:執行緒因為某種原因放棄了cpu使用權,讓出時間片,程式暫停。直到執行緒進入可執行狀態,才有可能再次獲得時間片。發生阻塞無外乎三種情況,一是呼叫了wait()方法,JVM會將其放入等待佇列中。只有其他執行緒呼叫notify()或notifyAll(),等待佇列中的執行緒才會被加入到鎖池。二是執行執行緒在獲取物件的同步鎖時,發現同步鎖已被其他執行緒佔用,JVM會將其放入鎖池,只有拿到鎖才能進入可執行狀態。三是執行執行緒呼叫了sleep()、join()、或者I/O請求,JVM會將該執行緒置為到阻塞狀態,當sleep超時、join等待執行緒結束或超時、I/0處理完畢,執行緒可重新進入可執行狀態。

死亡:執行緒run()、main()方法執行結束,或者因異常退出了run()方法,則該執行緒結束生命週期,執行緒死不可復生

JavaSE高階知識總結JavaSE高階知識總結

7. 反射

Java反射機制就是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法,對於任意一個物件,都能夠呼叫它的任意方法和屬性,這種動態獲取屬性以及呼叫方法的機制稱為反射

  • Class 表示正在執行的Java應用程式中的類和介面

    如何獲取某個class檔案物件的class物件?

    已知類和物件,通過類名.class或物件.getClass()

    未知類和物件通過Class.forName("包名.類名")

  • Constructor 關於類的單個構造方法的資訊以及對它的訪問許可權

    Constructor類的例項物件代表類的一個構造方法

    如何獲取某個類的所有構造方法?

    通過class物件的getConstructors()方法

  • Field 提供有關類或介面的單個欄位的資訊,以及對它的動態訪問許可權

    Field代表某個類中的一個成員變數,並提供動態訪問的許可權

    如何獲取所有的成員變數?

    通過getFields()方法獲取所有public屬性,通過getDeclaredFields()方法獲取所有宣告屬性

    如何獲取指定的成員變數

    通過getField("")獲取public屬性,通過getDeclaredField("name")獲取宣告屬性

    設定Field變數是否可以訪問

    field.setAccessible(boolean);

    Field變數值的讀取、設定

    • field.get(obj);

    • field.set(obj, vlaue);
  • Method 提供關於類或介面上單獨某個方法的資訊

    Method類代表某個類中的一個成員方法

    如何獲取所有方法?

    通過getMethods()方法獲取所有public方法,通過getDeclaredMethods()方法獲取所有宣告方法

    如何獲取指定方法?

    通過getMethod(String name, Class<?>...parameterTypes)獲取指定public方法,通過getDeclaredMethod(String name, Class<?>...parameterTypes)方法獲取指定宣告方法

  • 通過反射執行方法

    invoke(Object obj, Object...args)