天天看點

JAVA 常用類庫總結(1)

寫在前面

要想成為一個優秀的Java工程師,會看源碼是不可或缺的必備技能。在IDEA裡,Ctrl+滑鼠左鍵就可以看到類的源碼。同樣的,也要熟悉Java的API文檔。這裡簡單的介紹一些Java類庫及其常用的方法,會根據我自己的學習進度進行不定時更新。

java.util.Objects

我們知道 java.lang.Object 是類層次的根,所有類的基類,即所有類都繼承自Object。這裡我們介紹的是 java.util.Objects 類。

此類包含static實用程式方法,用于操作對象或在操作前檢查某些條件。 這些實用程式包括null或null方法,用于計算對象的哈希代碼,傳回對象的字元串,比較兩個對象,以及檢查索引或子範圍值是否超出範圍。

  1. Objects.equals

    equals​(Object a, Object b) 如果參數相等,傳回true;其他則傳回false。 是以,如果這兩個參數是null , 傳回true,如果隻有一個參數為null,傳回false。如果二者都不為空,通過使用第一個參數的equals方法确定相等性。

觀察下面的代碼

String s1 = "123";
String s2 = "456";
System.out.println(s1.equals(s2));
           

這樣寫當然沒有問題,但是考慮傳參時,有可能傳過來null,即

String s1 = null;
String s2 = "456";
System.out.println(s1.equals(s2));
           

這樣會産生空指針異常,因為一個空的null不能調取方法。如果使用Objects類的方法,就不會産生異常。

String s1 = null;
String s2 = "456";
System.out.println(Objects.equals(p1, p2));
           

我們來看Objects類equals方法的源碼。

public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }
           

a == b 比較的是兩個對象的記憶體位址,如果記憶體位址相同,即同一個對象,傳回true;(a != null && a.equals(b) 這段代碼是先判斷a不為空,a不為空後再調用基類Object的equals方法,就不會出現空指針異常了。

  1. Objects.checkFromIndexSize​(int fromIndex, int size, int length)

    檢查是否在子範圍從 fromIndex (包括)到 fromIndex + size (不包括)是範圍界限内 0 (包括)到 length(不包括)。( java裡常用包括上界,不包括下界的區間)源碼為

public static
    int checkFromIndexSize(int fromIndex, int size, int length) {
        return Preconditions.checkFromIndexSize(fromIndex, size, length, null);
    }
           
  1. Objects.isNull(Object obj)

    空則傳回true,不空傳回false。源碼為

public static boolean isNull(Object obj) {
       return obj == null;
  	}
           
  1. Objects.nonNull(Object obj)

    不空則傳回true,空傳回false。源碼為

public static boolean nonNull(Object obj) {
        return obj != null;
    }
           
  1. Objects.requireNonNull​(T obj)

    如果傳參為空,直接抛出異常。當我們需要判斷傳過來的對象必須不能為空時,可以使用這個方法,調用方法的程式如果不處理異常,程式就會中斷。源碼為

public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }
           

java.lang.Math

類Math包含用于執行基本數字運算的方法,例如基本指數,對數,平方根和三角函數。

  1. public static double abs​(int a)

    該方法為求絕對值,重載了int,float,double,long等基本資料類型。

  2. public static double min​(int a, int b)

    該方法傳回兩數種較小的一個,同樣有重載方法。

  3. public static int min​(int a, int b)

    該方法傳回兩數種較大的一個,同樣有重載方法。

  4. public static long round​(double a)

    該方法傳回四舍五入後的值,1.5結果為2,-1.5四舍五入後為-1。

  5. public static double floor​(double a)

    傳回小于或等于參數且等于數學整數的最大值,1.5結果為1,-1.5結果為-2

  6. public static double ceil​(double a)

    傳回大于或等于參數且等于數學整數的最小值,1.2結果為2,-1.2結果為-1

java.util.Arrays

該類包含用于操作數組的各種方法(例如排序和搜尋)。 此類還包含一個靜态工廠,允許将數組視為清單。

  1. static int binarySearch​(int[] a, int fromIndex, int toIndex, int key)

    使用二進制搜尋算法搜尋指定值的指定數組的範圍,有重載。

  2. static int binarySearch​(int[] a, int key)

    使用二進制搜尋算法在指定的int數組中搜尋指定的值,有重載。

  3. static int compare​(boolean[] a, boolean[] b)

    boolean字典順序比較兩個 boolean陣列。

  4. static void sort​(Object[] a)

    根據元素的natural ordering ,将指定的對象數組按升序排序。

  5. static void sort​(Object[] a, int fromIndex, int toIndex)

    根據元素的natural ordering ,将指定對象數組的指定範圍按升序排序。

  6. static String toString​(double[] a)

    傳回指定數組内容的字元串表示形式。

  7. static int mismatch​(double[] a, double[] b)

    查找并傳回兩個 double數組之間第一個不比對的索引,否則如果未找到不比對則傳回-1。

  8. static boolean equals​(int[] a, int[] a2)

    如果兩個指定的int數組彼此 相等 ,則傳回 true 。

  9. static double[] copyOf​(double[] original, int newLength)

    實作數組的動态擴容,傳入原數組和新長度,即可擴容。如下代碼塊,數組長度已經更改為15。

int arr[] = {1,2,3,4,5};
arr = Arrays.copyOf(arr, 15);
arr[6] = 1;
System.out.println(arr.length);
           

java.math.BigDecimal

在寫一些簡單的程式的時候,你是否會有這樣的疑問。

輸出結果毫無疑問應當是0.3,但是其實是…

JAVA 常用類庫總結(1)

在java中,如果使用double float等基本資料類型進行運算時,運算的結果會失去一些精準。當我們想做一個金融方面的程式時,這樣小的誤差積累起來會導緻結果錯誤。BigDecimal類可以解決小數誤差問題。來看一下這個類的使用方法吧。

public class Demo1 {
    public static void main(String[] args) {
        BigDecimal b1 = new BigDecimal("0.1");
        BigDecimal b2 = new BigDecimal("0.2");
        BigDecimal b3 = b1.add(b2);
        System.out.println(b3);
    }
}
           

需要注意以下幾點

  • 建立對象時傳入的時字元串類型
  • add subtract multiply divide分别表示加減乘除方法,這些方法傳回的也是一個BigDecimal對象,參與運算的對象不會發生變化
  • 可以使用 intValue doubleValue 等方法,傳回基本資料類型。

java.lang.System

對于這個類我們并不陌生,System類提供的方法包括标準輸入,标準輸出和錯誤輸出流; 通路外部定義的屬性和環境變量; 加載檔案和庫的方法; 以及用于快速複制陣列的一部分的實用方法。

  • static PrintStream err “标準”錯誤輸出流。
  • static InputStream in “标準”輸入流。
  • static PrintStream out “标準”輸出流。
  • static void arraycopy​(Object src, int srcPos, Object dest, int destPos, int length)

    将指定源數組中的數組從指定位置開始複制到目标數組的指定位置。

  • static void gc()

    運作垃圾回收器。