# finally -> 01 【Obiect類、常用API】
## 1.Object類
### 1.1主要方法(兩個 API中)
`java.lang.Object`類是Java語言中的根類,即所有類的父類。
- `public String toString()`:返回該對象的字符串表示。
- `public boolean equals(Object obj)`:指示其他某個對象是否與此對象“相等”。如果希望進行兩個引用類型對象的比較,非常推薦使用Objects.equals方法(兩個參數)。
這個方法可以極大地避免NullPointerException.
`注意`:
Object類當中定義了equals方法,默認就是進行地址值比較。
如果希望子類進行內容比較,不用Object默認equals方法,那么子類就需要:覆蓋重寫equals方法和hashCode方法。
##### 備注:hashCode方法必須和equals方法成雙成對、形影不離、不離不棄。
### 1.2Objects類(工具類)
在JDK7中添加了一個Objects工具類,它提供一些方法操作對象(由一些靜態的實用方法組成)
`public static boolean equals(Object a, Object b)`:判斷兩個對象是否相等。
## 2.Date類(日期與時間)
### 2.1 java.util.Date類
` java.util.Date`類 表示特定的瞬間,精確到毫秒
`public Date()`:分配Date對象并初始化此對象,以表示分配它的時間(精確到毫秒)。
`public Date(long date)`:分配Date對象并初始化此對象,以表示自從標準基準時間(稱為“歷元(epoch)”,即1970年1月1日00:00:00 GMT)以來的指定毫秒數。
`public long getTime()` 把日期對象轉換成對應的時間毫秒值。
### 2.2 DateFormat類
`java.text.DateFormat` 是日期/時間格式化子類的抽象類,我們通過這個類可以幫我們完成日期和文本之間的轉換,也就是可以在Date對象與String對象之間進行來回轉換。
**格式化**:按照指定的格式,從Date對象轉換為String對象。
**解析**:按照指定的格式,從String對象轉換為Date對象。
### 構造方法
由于DateFormat為抽象類,不能直接使用,所以需要常用的子類`java.text.SimpleDateFormat`。這個類需要一個模式(格式)來指定格式化或解析的標準。構造方法為:
`public SimpleDateFormat(String pattern)`:用給定的模式和默認語言環境的日期格式符號構造SimpleDateFormat。
##### 參數pattern是一個字符串,代表日期時間的自定義格式。
java.text.DateFormat是一個抽象類,負責將String和Date之間來回轉換。
格式化:Date --> String public String format(Date date):將參數日期時間對象,變成字符串的樣子。
解析:String --> Date public Date parse(String str):將參數字符串轉換成為對應的日期時間對象。
這是一個抽象類,不能直接new對象,常用的子類是:【java.text.SimpleDateFormat】
如果Date類當中的默認toString方法格式不喜歡,可以使用這個子類來自己指定格式。
SimpleDateFormat構造方法:
public SimpleDateFormat(String pattern):參數就是我們希望使用的格式。
參數字符串代表格式,只要記住一套即可:(嚴格區分大小寫)
##### yyyy-MM-dd HH:mm:ss.SSS
yyyy四位數字代表:年
MM兩位數字代表:月
dd兩位數字代表:天
HH兩位數字代表:小時
mm兩位數字代表:分鐘
ss兩位數字代表:秒鐘
SSS三位數字代表:毫秒
## 3.Calendar類
### 3.1 calendar類的使用
##### java.util.Calendar抽象類,作用就是自動根據毫秒數計算得到年月日、時分秒等各種日期時間信息,想用什么,就拿什么。
這是一個抽象類,不能直接new對象。常用的子類是(了解即可,不要去背):GregorianCalendar。
強烈建議不要自己new這個子類。(如果自己new子類,那么就要自己手動計算復雜的日期時間。)
推薦的、正確的、常用的Calendar獲取姿勢,通過靜態方法:
##### public static Calendar getInstance():獲取一個日歷對象。
### 3.2 calendar類中常用方法
##### 1.public int get(int field):
根據參數指定的數據項,獲取對應的數值。
參數代表:你想要哪一條數據?是年、月、還是日?
備注:不推薦直接參數使用int數字,不好記憶。推薦使用Calendar當中的常量。
##### 2.public void set(int field, int value):
設置指定的數據項,成為指定的數值。
參數field代表:你想設置年、月還是日還是其他?
參數value代表:你想設置成多少?
##### 3.public void add(int field, int amount):
對指定的數據項進行偏移量計算。
參數field代表:你想對哪個數據項進行修改?
參數amount代表:你想偏移(加減)多少?
##### 4.public Date getTime():
將Calendar轉換成為Date對象。
##### 注意事項:
1. Date類當中的getTime是獲取毫秒數,得到long值。
2. Calendar當中的getTime是獲取Date對象。
## 4.System類
### 4.1調用方式
java.lang.System是一個與系統相關的工具類,本身是final太監類不能繼承,構造方法被私有化了,不能new。
這個類只能通過靜態形式調用方法。
##### 獲取當前系統的毫秒數:
public static long currentTimeMillis():獲取系統運行此時此刻的毫秒數(相對于Unix時間而言)。
### 4.2 底層復制數組方法
System提供的一個底層的復制數組的方法:
##### public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
參數src代表:源數組,也就是數據本來在哪
參數srcPos代表:源數組的起始索引
參數dest代表:目標數組,也就是數據需要拷貝到哪里去
參數destPos代表:目標數組的起始索引
參數length代表:代表長度,也就是總共復制過去幾個元素
##### 備注:
1. 如果索引值或者長度超過了有效范圍,那么將會發生ArrayIndexOutOfBoundsException
2. 不推薦自己使用for循環,推薦使用arraycopy方法。因為后者性能更高。
## 5.StringBuilder
### 5.1構造方法(有參和無參)
##### 1.java.lang.StringBuilder構造方法:
public StringBuilder():無參,內容空白。
public StringBuilder(String str):有字符串參數,代表初始內容,直接將參數內容放在底層數組當中。
StringBuilder已經覆蓋重寫了Object當中的toString方法,不顯示地址哈希值,而是顯示內容。
如果希望向StringBuilder當中追加更多內容,可以使用方法:
##### 2.public StringBuilder append(任意類型的數據):
追加參數數據進去,如果底層數組空間不夠,將會自動擴容。
### 5.2字符串轉換
字符串轉換成為StringBuilder:
1. 構造方法:public StringBuilder(String str)
2. 成員方法:append后續追加進去也行。
StringBuilder轉換成為字符串:
只要調用toString方法即可。
## 6.包裝類
### 6.1 八種數據類型
包裝類是引用類型,是八種類,和八種基本類型對應,全都位于java.lang包下,意味著不用導包。
byte Byte
short Short
int Integer 【特殊】
long Long
float Float
double Double
char Character 【特殊】
boolean Boolean
##### 基本數據類型只能用來存放數值,
但是對應的包裝類功能更加豐富,就是將基本類型的數據套上一個“殼子”。
### 6.2自動裝箱拆箱
從JDK 1.5+開始,Java當中添加了非常好用的特性:
自動裝箱:自動地把基本類型轉換成為對應的包裝類 int --> Integer
自動拆箱:自動地把包裝類轉換成為對應的基本類型 Integer --> int
語法糖:底層原理其實沒變,只不過是表面的寫法更簡單,這種優化叫做語法糖。
##### 將基本類型轉換成為字符串:
? 1. "" + 基本類型數據【推薦,很簡單,棒棒噠!Wonderful!】
2. String.valueOf方法
3. 先把基本類型變成包裝類,然后調用toString(不推薦,太麻煩)
##### 將字符串轉換成為基本類型:
? 包裝類的轉換方法:
public static XXX parseXXX(String str):將參數字符串轉換成為基本類型
備注:XXX就代表基本類型名
##### `注意事項:`
1. 如果String轉換成基本類型,格式對不上,那么將會發生NumberFormatException。
2. 八個包裝類只有七個parseXXX方法,Character沒有。