本章節收集的類/接口API有:
Object,Enum,包裝類,Comparable,Arrays,Thread,Throwable,String,Collections,正則
Object類
非靜態方法需對象調用
public String toString(): 【把一個對象的信息用一個字符串表示,盡量要能夠簡單易懂,建議子類重寫】
public Class<?> getClass(): 【獲取對象的“運行時”類型】
public void finalize(): 【當一個對象被確定為垃圾時,由GC垃圾回收器來進行調用,每一個對象的finalize()方法只會被調用一次】
public int hashCode(): 【返回一個對象的hashCode值】
常規協定:
(1)如果一個對象的參與計算hashCode值的成員變量沒有修改,那么在程序運行期間,每次獲取的hashCode值不變。
(2)如果兩個對象hashCode不同,那么這兩個一定不“相等”
(3)如果兩個的hashCode值相同,那么這兩個對象不一定“相等”
(4)如果兩個相等,那么他們的hashCode值一定要相同。
public boolean equals(Object obj): 【用於判斷當前對象與指定對象是否相等】
默認的實現,等價於“==”,比較對象的內存地址。
子類可以選擇重寫,重寫有一些要求及原則:重寫equals時,一定要重寫hashCode方法。一致性、對稱性、自反性、傳遞性、非空對象與null的equals一定是false
protected Object clone()throws CloneNotSupportedException : 【獲取一個對象的克隆體對象】
所有類型都可以重寫這個方法,它是獲取一個對象的克隆體對象用的,就是造一個和當前對象各種屬性值一模一樣的對象。當然地址肯定不同。
調用此方法必須實現java.lang.Cloneable接口。
枚舉
1.toString(): 【默認返回的是常量名(對象名),可以繼續手動重寫該方法】
2.name(): 【返回的是常量名(對象名)】
3.ordinal(): 【返回常量的次序號,默認從0開始】
4.values(): 【返回該枚舉類的所有的常量對象,返回類型是當前枚舉的數組類型,是一個靜態方法】
5.valueOf(String name): 【根據枚舉常量對象名稱獲取枚舉對象】
包裝類
大部分方法為靜態方法,可用類名調用
1、基本數據類型和字符串之間的轉換
1)String str = String.valueOf(xxx); 【把基本數據類型轉為字符串】
2)除了Character類之外,其他所有包裝類都具有parseXxx靜態方法
int a = Integer.parseInt("整數的字符串"); 【String轉換成對應的基本類型 】
3)把字符串轉為包裝類,然后可以自動拆箱為基本數據類型,(返回值類型是包裝類)
int a = Integer.valueOf("整數的字符串"); 【把字符串轉為包裝類】
2、數據類型的最大最小值
Integer.MAX_VALUE和Integer.MIN_VALUE 【返回對應類型的最大/小常量值】
3、字符轉大小寫
Character.toUpperCase('x'); 【字符轉大寫】
Character.toLowerCase('X'); 【字符轉小寫】4、整數轉進制
Integer.toBinaryString(int i) 【整數轉二進制】
compareTo(String)和compareToIgnoreCase(String)方法 【對兩個字符串進行比較】
Integer.toHexString(int i) 【整數轉十六進制】
Integer.toOctalString(int i) 【整數轉八進制】
接口Comparable,Comparator
int compareTo(Object obj); 【根據對象屬性的值按自然排序】
第一步:哪個類的對象要比較大小,哪個類就實現java.lang. Comparable接口,並重寫方法
第二步:對象比較大小時,通過對象調用compareTo方法,根據方法的返回值決定誰大誰小。
接口規定:返回值大於0調用對象大於指定對象,小於0就小於指定對象,等於0就兩個對象值相等
(java.util.Arrays數組工具類的public static void sort(Object[] a)就是這么實現的)
int compare(Object o1,Object o2); 【根據對象屬性的值按定制排序】
第一步:編寫一個類,我們稱之為比較器類型,實現java.util. Comparator接口,並重寫方法
第二步:比較大小時,通過比較器類型的對象調用compare()方法,將要比較大小的兩個對象作為compare方法的實參傳入,根據方法的返回值決定誰大誰小。
o1對象大於o2返回正整數
o1對象小於o2返回負整數
o1對象等於o2返回零
(java.util.Arrays數組工具類的public static <T> void sort(T[] a, Comparator<? super T> c)就是這做的)
java.lang.Cloneable接口,和Object類配合使用 【用於復制對象】
類 Arrays
全部為靜態方法
此類包含用來操作數組(比如排序和搜索)的各種方法。此類還包含一個允許將數組作為列表來查看的靜態工廠。而且如下每一個方法都有各種重載形式,以下只
列出int[]類型的,其他類型的數組類推。其可按照參數類型按升序排序,還可指定范圍按升序進行排序。
static int binarySearch(int[] a, int key) 【要求數組有序,在數組中查找key是否存在,如果存在返回第一次找到的下標,不存在返回負數】
static int[] copyOf(int[] original, int newLength) 【根據original原數組復制一個長度為newLength的新數組,並返回新數組】
static int[] copyOfRange(int[] original, int from, int to) 【復制original原數組的[from,to)構成新數組,並返回新數組】
static boolean equals(int[] a, int[] a2) 【比較兩個數組的長度、元素是否完全相同】
static void fill(int[] a, int val) 【用val填充整個a數組】
static void fill(int[] a, int fromIndex, int toIndex, int val) 【將a數組[fromIndex,toIndex)部分填充為val】
static void sort(int[] a) 【將a數組按照從小到大進行排序】
static void sort(int[] a, int fromIndex, int toIndex) 【將a數組的[fromIndex, toIndex)部分按照升序排列】
static String toString(int[] a) 【把a數組的元素,拼接為一個字符串,形式為:[元素1,元素2,元素3。。。]】
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER); 【忽略大小寫排序】
Arrays.sort(strArray, Collections.reverseOrder()); 【反向排序】
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER); 【忽略大小寫反向排序】
sort(T[] a, Comparator<? super T> c)【根據指定比較器產生的順序對指定對象數組進行排序。(同上面接口配合使用)】
Thread類
public String getName() 【獲取當前線程名稱】
public final void setPriority(int newPriority) 【改變線程的優先級,最高10級,最低1級,默認5級】
public static void yield(): 【只是讓當前線程暫停一下,隨后繼續和其他線程競爭】
public static Thread currentThread() 【返回對當前正在執行的線程對象的引用。】
Thread.State getState() 【返回該線程的狀態。】
void interrupt() 【中斷線程。】public final boolean isAlive(): 【測試線程是否處於活動狀態。如果線程已經啟動且尚未終止,則為活動狀態。】
void join() : 【等待該線程終止】
boolean isInterrupted() 【測試線程是否已經中斷】
void join(long millis) : 【等待該線程終止的時間最長為
millis毫秒】setDaemon(true) 【方法可將指定線程設置為守護線程。必須在線程啟動之前設置】
isDaemon() 【可以判斷線程是否是守護線程】
static boolean holdsLock(Object obj) 【當且僅當當前線程在指定的對象上保持監視器鎖時,才返回 true】
(1)public long totalMemory(): 【總內存】
(2)public long freeMemory(): 【空閑內存】
(3)public static Runtime getRuntime() 【返回與當前 Java 應用程序相關的運行時對象。】
(4)gc();
public static double sqrt(double a): 【返回a的平方根】
public static double random(): 【返回[0,1)的隨機值】
public static final double PI: 【返回圓周率】
public static double max(double x, double y): 【返回x,y中的最大值】
public static double min(double x, double y): 【返回x,y中的最小值】
BigInteger add(BigInteger val) 【加】
BigInteger subtract(BigInteger val) 【減】
BigInteger multiply(BigInteger val) 【乘】
BigInteger divide(BigInteger val) 【除】
BigInteger remainder(BigInteger val) 【余】
不可變的、任意精度的有符號十進制小數。
不可直接用運算符計算,要new對象來表示數據,要通過add,subtract,multiply,divide等方法來進行算術運算,參見API,其中除法運算需要指定類型和精度
void nextBytes(byte[] bytes): 【生成隨機字節並將其置於用戶提供的 byte 數組中。】
double nextDouble(): 【返回下一個偽隨機數,它是取自此隨機數生成器序列的、在 0.0 和 1.0 之間均勻分布的 double 值。】
float nextFloat(): 【返回下一個偽隨機數,它是取自此隨機數生成器序列的、在 0.0 和 1.0 之間均勻分布的 float 值。】
double nextGaussian(): 【返回下一個偽隨機數,它是取自此隨機數生成器序列的、呈高斯(“正態”)分布的 double 值,其平均值是 0.0,標准差是 1.0。】
int nextInt(): 【返回下一個偽隨機數,它是此隨機數生成器的序列中均勻分布的 int 值。】
int nextInt(int n): 【返回一個偽隨機數,它是取自此隨機數生成器序列的、在 0(包括)和指定值(不包括)之間均勻分布的 int 值。】
long nextLong(): 【返回下一個偽隨機數,它是取自此隨機數生成器序列的均勻分布的 long 值。】
new Date(): 【當前系統時間】
long getTime(): 【返回該日期時間對象距離1970-1-1 0.0.0 0毫秒之間的毫秒值】
new Date(long 毫秒): 【把該毫秒值換算成日期時間對象】
java.util.Calendar
它是抽象類,無法直接創建對象,直接創建子類對象:GregorianCalendar
通過指定時區和語言環境來創建對象,Calendar.getInstance(時區,語言環境),如果沒有指定,就根據操作系統默認的時區和語言環境
int get(int field) 【返回給定日歷字段的值】
java.util.TimeZone:時區
java.util.Locale:語言環境java.text.DateFormat
抽象類,無法直接創建對象,直接創建它子類的對象:SimpleDateFormat,只支持對Date類型 對象進行格式化
public StringBuffer format(Date date,StringBuffer toAppendTo,FieldPosition pos) 【把日期轉為字符串:format(日期)】
將給定的
Date格式化為日期/時間字符串,並將結果添加到給定的StringBuffer。public Date parse(String text,ParsePosition pos) 【把字符串轉為日期】
java.time包 JDK1.8新增
-
-
java.time.chrono – 提供對不同的日歷系統的訪問。
-
java.time.format – 格式化和解析時間和日期
-
java.time.temporal – 包括底層框架和擴展特性
-
java.time.zone – 包含時區支持的類
static LocalDate now() 【從默認時區的系統時鍾獲取當前日期】
static LocalDate of(int year, int month, int dayOfMonth) 【從一年,一個月和一天獲得一個 LocalDate的實例】
int getMonthValue() 【將月份字段從1到12返回】
Month getMonth() 【使用 Month枚舉獲取月份字段】
LocalDate withYear(int year) 【返回此日期的副本,並修改年份,同下面2個需重新接收】
LocalDate plusYears(long yearsToAdd) 【返回這個 LocalDate的副本,其中指定的時間段以添加的年數表示】
LocalDate minusYears(long yearsToSubtract) 【返回此 LocalDate的副本,以減去的年份為單位】
boolean isLeapYear() 【根據ISO培訓日歷系統規則,檢查年份是否是閏年】
static LocalDate parse(CharSequence text) 【從一個文本字符串(如 2007-12-03獲取一個 LocalDate的實例】
boolean isAfter(ChronoLocalDate other) 【檢查此日期是否在指定日期之后】
boolean isBefore(ChronoLocalDate other) 【檢查此日期是否在指定日期之前】
boolean isEqual(ChronoLocalDate other) 【檢查此日期是否等於指定的日期】
boolean equals(Object obj) 【檢查這個日期是否等於另一個日期】
int compareTo(ChronoLocalDate other) 【將此日期與另一個日期進行比較】
Temporal adjustInto(Temporal temporal) 【調整指定的時間對象與此對象的日期相同】
用於計算兩個持續時間
static Duration between(Temporal startInclusive, Temporal endExclusive) 【獲取一個 Duration表示兩個時間對象之間的持續時間】
static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive) 【獲得一個 Period ,由兩個日期之間的年數,月份和日期組】
異常
e.toString(): 【獲得異常種類和錯誤信息】
e.getMessage(): 【獲得錯誤信息】

