4-2 Java中的實用工具類

2020-10-02 12:00:22

常用類庫

  • 學習方法
    必須熟悉,長期記憶。大量測試一個類,記錄並掌握其功能。
    例如:X工具類,有X方法,方法有什麼功能,需要傳遞X引數,能得到X結果。

一、常用類庫

(基於JDK 11)

1、java.util.Objects

所有Java類的基礎類別(頂級父類別),所有類層次結構的根。JDK7版本新增,包含了很多靜態方法。

  • equals:語法格式:Object.equals(a, b);

  • checkFromIndexSize:檢查下標是否越界

  • hashCode:計算物件的雜湊值

  • isNull:語法格式:Object.isNull(a);

其他的方法在API中檢視,都需要整理

2、java.lang.Math

執行數位運算,API中也有大量方法。

  • Math.abs(-10);:-10的絕對值,結果為10

  • Math.min(100, 200):兩數之間較小值,結果為100

  • Math.max(100, 200):兩數之間較大值,結果為200

  • 約等

    • Math.round(24.5)四捨五入,結果為25;Math.round(24.5),結果為-24
    • Math.floor(3.5)返回小於等於引數的最大整數,結果為3.0;Math.floor(-3.5),結果為-4.0
    • Math.ceil(3.5)返回大於等於引數的最大整數,結果為4.0;Math.ceil(-3.5),結果為-3.0

3、java.util.Arrays

可以對陣列進行操作,運用較多,重點整理API中的方法。

  • binarySearch:查詢陣列中某元素的下標
  • compare:比較兩個陣列
  • toString:列印陣列,可以取代for迴圈遍歷陣列
  • sort:對陣列進行排序
  • copyOf:將陣列動態擴容
    • arr = Array.copyOf(arr, 15);將arr擴容為長度15的陣列

4、java.math.BigDecimal

double d1 = 0.1;
double d2 = 0.2;
  • 結果:並不是0.3。

  • 在這裡插入圖片描述

  • 問題:在Java中如果使用double進行算術運算,運算結果會缺失精度。

java.math.BigDecimal的作用:算術運算專用,解決小數運算問題

使用方式:傳遞一個String引數

BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.1");
構造方法說明
public BigDecimal(String val) {}常用構造方法
常用方法作用
add加法運算
subtract減法運算
multiply乘法運算
divide除法運算
  • API中BigDecimal有更多其他方法,建議仔細檢視,並整理

5、java.util.Date

表示特定時刻,精度為毫秒。

PS:一天的毫秒數:24*60*60*1000

檢視API,發現大部分方法已經過時,真正有用的是用它表示時刻的方法。

  • getTime()方法,返回一個long型別的值。

    • 獲取的是格林威治時間:1970年1月1日東八區早上8點整~現在的毫秒數
    • setTime()也可以用
    • 有可能用到:對時間的比較
      • after(Date when):測試此日期是否在指定日期之後。
      • before(Date when):測試此日期是否在指定日期之前。
  • 構造方法:沒過時的兩個

    構造方法概述
    Date()不傳引數,表示當前時間(此時此刻
    Date(long date)傳入一個毫秒數,表示從格林威治日到現在的時間,可以表示過去或未來的時間

new Date使用。

6、java.text.DateFormat

格式化日期。

字母表示
y
M
d
H
m
s
  • format()方法

    例:2020年12月12日 12:12 12

    SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm ss");
    
    String text = format.format(new Date());
    System.out.println(text);

    執行結果:

  • parse()方法

    將一段字串轉成Date

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm ss");
    //parse:將yyyy-MM-dd HH:mm ss日期字串,轉為date物件
    String text = format.format(new Date());
    System.out.println(text);
    System.out.println(format.parse("2021-12-12 12:12 12"));

    執行結果:
    在這裡插入圖片描述

  • 此處注意:太容易混淆了,format是返回的StringBuffer型別資料進行格式化日期。parse是傳入字串,返回的是一個Date物件

7、java.util.Calendar

抽象類,存在getInstance方法,不通過new,直接獲取即可。

其中提供了大量常數值,常用的有get和set。

  • Calendar.YEAR:獲取年份
  • Calendar.DAY_OF_YEAR:獲取一年中的第幾天
Calendar c = Calendar.getInstance();
//取出日曆中的資料
int year = c.get(Calendar.YEAR);
int day = c.get(Calendar.DAY_OF_YEAR);

System.out.println(year);
System.out.println(day);

執行結果:
在這裡插入圖片描述

//將年設定為2021年
c.set(Calendar.YEAR,2021);
int year = c.get(Calendar.YEAR);
int day = c.get(Calendar.DAY_OF_YEAR);

System.out.println(year);
System.out.println(day);

執行結果:

在這裡插入圖片描述

  • c.get(Calendar.WEEK_OF_YEAR); :獲取現在是一年中的第幾周

  • c.add(Calendar.YEAR,1);:給當前年份加1

    • 需要注意的一點:
      • 在日曆中月份是從0-11的,0表示1月份,11表示12月份
      • 星期國外將星期七當作一週的第一天,星期六是一週的最後一天。
  • getActualMaxmun:獲取某個欄位的最大值

8、java.lang.System

  • System.out

  • System.in

  • System.gc

二、泛型

1、概述

泛型,即「引數化型別」。就是將型別由原來的具體的型別引數化,類似於方法中的變數引數,此時型別也定 義成引數形式(可以稱之為型別形參),然後在使用/呼叫時傳入具體的型別(型別實參)。

使用泛型可以:

  1. 提高程式碼複用率
  2. 泛型中的型別在使用時指定,不需要強制型別轉換(型別安全,編譯器會檢查型別)

2、使用

  1. 泛型類
public class ClassName<T> {
    private T data;
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
}
  1. 泛型介面
public interface IntercaceName<T> {
    T getData();
}

​ 實現介面時是否實現泛型:

  • 指定型別
public class Interface1 implements IntercaceName<String> {
    private String text;
    @Override
    public String getData() {
        return text;
    }
} 
  • 不指定型別
public class Interface1<T> implements IntercaceName<T> {
    private T data;
    @Override
    public T getData() {
        return data;
    }
}
  1. 泛型方法
private static <T> T 方法名(T a, T b) {}

注意:

  • 在編譯之後程式會採取去泛型化的措施。也就是說Java中的泛型只在編譯階段有效,泛型資訊不會進入到執行時階段。
  1. 泛型限定和萬用字元

在使用泛型時,可以指定泛型的限定區域

  • 例如:必須是某某類的子類或 某某介面的實現類,

    格式:<T extends 類或介面1 & 介面2>

型別**萬用字元是使用?**代替方法具體的型別實參。

  • 泛型上屆限定使用:<? extends Parent> 指定了泛型型別的上屆
  • 泛型下屆限定使用:<? super Child> 指定了泛型型別的下屆
  • 可以簡單理解為Object,但是使用時有很大區別:<?> 指定了沒有限制的泛型型別

三、String(非常重要

Java程式中所有字串文字都是String類的範例。

API 中檢視!

後續補充。

總結

學習這些類庫為我們提供了非常方便的工具,提高了編碼效率,就是記憶起來比較花費時間,多多使用,多多熟悉。