Java基礎學習和總結四

1.==和 equals

  • ==”運算符用來比較兩個變量的值是否相等。
    • 用於比較變量對應內存中所存儲的數值是否相等。
    • 要比較基本類型數據或引用變量是否相等,只能使用“==”運算符。
      • 對於基本數據類型:可以直接用“==”運算符來比較其對應的值是否相等。
      • 對於引用類型:此時涉及到了兩個內存。例如:String s = new String();變量s佔用一個存儲空間,new String()佔用另一個存儲空間,變量s存儲的就是對象佔用的空間的首地址。此時使用“==”運算符,比較的就是兩個變量中存儲的首地址是否一樣,即兩個對象是否指向同一個存儲空間。
  • equals:
    • equals是Object類提供的方法之一。每個Java類都繼承自Object類,所以每個對象都有equals方法。
    • Object類中定義的equals方法就是使用“==”來進行比較,也就是比較兩個變量指向的對象是否爲同一個對象,比較的是引用。
    • 相比於“==”,equals方法的特殊之處在於可以被覆蓋。例如String類中的equals方法,就是比較兩個獨立對象的內容是否相等,即堆內存中的內容是否相同。
  • 總結:如果一個類沒有定義自己的equals()方法,那麼他默認就是使用"=="運算符進行比較,比較兩個變量指向的是否爲一個變量。如果編寫的類希望能夠比較該類創建的兩個實例對象的內容是否相同,那麼就必須覆蓋equals方法。

2.hashCode()和equals()

  • hashCode的作用是獲取哈希碼,也成爲散列碼。它返回一個int型的整數。
  • 哈希碼的作用是確定該對象在哈希表中的索引位置。
  • hashcode()和equals()
    • 如果兩個對象相同,那麼hashcode()一定相同。
    • 兩個對象相等,對兩個對象調用equals()返回都是true。
    • 兩個對象具有相同的HashCode值,它們不一定相等。
    • equals()被覆蓋,hashCode()一定也要被覆蓋。

3.final關鍵字

  • 變量 :
    • 基本類型:初始化之後變量不可以修改。
    • 引用類型:引用不變,也不能引用其他對象,但是引用對象的本身的值是可以改變的。
  • 方法:
    • 不能被子類重寫。
    • 類中的private被隱形的指定爲final
  • 類:
    • 類不能被繼承
    • 類中的所有成員方法被隱形的指定爲final

4.獲取鍵盤輸入常見的兩種方法

  • Scanner

    Scanner in = new Scanner(System.in);
    String s = in.nextLine();
    in.close;
    
  • BufferReader

    BufferReader in = new BufferReader(new InputStreamReader(System.in));
    String s = in.readLine();
    

5.Java中的IO流

IO流的分類
  • 按照流向劃分:輸入流和輸出流。
  • 按照操作單元分:字節流和字符流
  • 按照流的角色劃分:節點流和處理流
  • JAVA中的四個IO流基類
    • InputStream/Reader:輸入流的基類,字節輸入流/字符輸入流。
    • OurputStrem/Writer:輸出流的基類,字節輸出流和字符輸出流。
字節流和字符流

字符流是由Java虛擬機將字節轉換得到的,這個過程非常耗時,而且容易出現亂碼問題。所以就直接提供了直接操作字符流的接口,方便平時進行操作。

BIO、NIO、AIO
  • BIO:同步阻塞IO模式,數據的讀取和寫入必須阻塞在一個線程內部完成。在活動鏈接數比較少的情況下比較不錯。特點是模式簡單使用方便,併發處理能力低
  • NIO:同步非阻塞的IO模型。傳統IO的升級,客戶端和服務器通過Channel(通道),實現多路複用
  • AIO:Asynchronous IO 是NIO的升級,也叫NIO2,實現了異步非阻塞IO,異步IO的操作基於事件和回調機制。

6.常用關鍵字總結:static、this、super.

  • static:
    • 修飾成員方法和成員變量:
      • 被static修飾的成員屬於類,被類中的所有對象共享,可以通過類名調用。
      • 被static修飾的成員變量屬於靜態成員變量,存放在java內存區域的方法區。
    • 靜態代碼塊:
      • 定義在類中方法外,在非靜態方法之前執行,不論創建多少對象,且只執行一次。
      • 執行順序:靜態代碼塊>非靜態代碼塊>構造函數
    • 靜態內部類:
      • 創建不需要依靠外圍類的創建。
      • 不能使用任何外圍類的非static變量和方法
    • 靜態導包:
      • import static不需要類名就可以調用類中的靜態成員,可以直接使用靜態成員方法和成員變量。
  • this :
    • this關鍵字用於引用類的當前實例
  • super:
    • super關鍵字用於從子類訪問父類的變量和方法。
  • 總結:
    • 在構造器中使用 super() 調用父類中的其他構造方法時,該語句必須處於構造器的首行,否則編譯器會報錯.
    • this 調用本類中的其他構造方法時,也要放在首行。
    • this、super不能用在static方法中。

7.Collections工具類和Arrays工具類常用方法總結

  • Collecrions工具類
    void reverse(List list);//反轉
    void sort(List list);//按自然排序的升序排序
    void sort(List list, Comparator c);//定製排序,由Comparator控制排序邏輯
    void swap(List list, int i , int j);//交換兩個索引位置的元素
    int max(Collection coll);//根據元素的自然順序,返回最大的元素。 
    int min(Collection coll);//根據元素的自然順序,返回最小的元素。
    void fill(List list, Object obj);//用指定的元素代替指定list中的所有元素。
    int frequency(Collection c, Object o);//統計元素出現次數
    int indexOfSubList(List source, List target);
    //統計target在list中第一次出現的索引,找不到則返回-1
    int lastindexOfSubList(List source, List target);
    //統計target在list中第一次出現的索引,找不到則返回-1
    
    
  • Arrays工具類
    Arrays.sort();//排序
    Arrays.binarySearch();//二分查找,一定是排序好的纔可以。
    Arrays.equals();//元素數量相同,並且相同位置的元素相同。
    Arrays.fill();//批量填充值
    Arrays.asList();//轉化爲列表
    Arrays.toString();//轉化爲字符串
    Arrays.copyOf();//複製
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章