文章目錄
一、Object類
1. toString
1.1 重寫toString方法
我們希望直接打印出該對象的屬性。以這種格式:類名{成員變量名=成員變量值, ...}
1.2 重寫toString方法總結
上面的代碼,可以用快捷鍵快速插入: Alt Insert
2. equals
equals
可以比較兩個地址值是否相等
2.1 重寫equals方法1
比較地址值和==
沒有什麼區別,所以我們應該重寫equals
方法,讓其可以比較值。
分析一波:
- 調用
equals
有一個隱含的多態,man1和man2實際屬於object類 - 要知曉對象屬性,要使用向下轉型
- 再運行一次
2.2 重寫equals方法2
如果obj不是Person類型呢?對,用instanceof
進行判斷
2.3 重寫equals方法3
有一些特殊的值,可以直接給出結果,提高程序效率。
null
直接返回false即可- 如果對象是本身 直接返回true
2.4 重寫equals方法總結
上面的代碼,可以用快捷鍵快速插入: Alt Insert
2.5 Objects
這個Objects是個什麼鬼?我們用Ctrl
點進去看一下源碼:
大致是說,這是一個關於Object類的一個靜態工具集。我們再看向equals方法:
- 如果a的地址值直接等於b的地址值,短路返回true
- 如果a不等於
null
時,輸出a.equals(b)的值
a.equals(b)有一個缺點。當a爲null時,會產生空指針異常。Objects的equals可以防止空指針異常。
二、時間日期類
1. Date
表示特點的瞬間 ,精確到毫秒(ms, 1000ms = 1s)
- 毫秒值可以對日期時間進行直接計算
System.currentTimeMillis()
返回一個Long
類型數。這個數是從1970-01-01 00:00:00(英國格林威治 標準時間)
迄今所經過的毫秒數。(中國屬於東八區,要加八小時)- 換算關係: 1day = 864E+5
2. Date的使用
構造方法(空參): 顯示當前日期
構造方法(全參): 顯示輸入的毫秒值對應的時間(L類型)
轉換爲毫秒值:
3. DateFormat
DateFormat
是日期時間格式化的抽象類。功能是使Date和String
-
格式化: 使Date按特定的格式轉化爲String
-
解析: 按照指定的格式,把String轉換爲Date
3. SimpleDateFormat使用
構造方法: DateFormat是一個抽象類,它有一個直接子類SimpleDateFormat
格式: 比如==“yyyy年MM月DD日 HH小時mm分鐘ss秒”==
3.1 格式化
- 創建對象
- 使用format()方法
3.2 解析
- 創建對象
- 使用parse()成員方法
4. Calendar
日曆類是一個抽象類,它裏面有一個很好用的靜態方法getInstance()
,可以直接創建日曆對象(返回一個Calendar對象),而不需要通過直接子類 。
4.1 Calendar創建
4.2 Calendar常用方法
4.2.1 get方法
獲取指定字段的值,比如年份,月份
int field
: Calendar類對象,可以使用Calendar類靜態成員變量獲取(以下來自Calendar源碼):
PS: 其實就是代號
注意: 這裏面的月份是從0開始的
4.2.2 set方法
設置指定字段的值
set有一個重載形式: set(年, 月, 日)
4.2.3 add
給指定的字段,增加/減少指定的值
4.2.4 getTime
把日曆對象,轉換爲日期對象
三、System類
System用以獲取系統相關信息或進行系統級操作
System不能被實例化,同時擁有許多可以直接使用的靜態方法
1. currentTimeMillis
常用該方法,記錄程序運行時間。
- (對程序進行優化時,可以根據各部分的耗時和理想耗時的差距,確定優化方案)
- (可以進行時間複雜度對比)
2. arraycopy
四、StringBuilder
StringBuilder
又稱爲字符串緩存區
1. 爲什麼要使用StringBuilder
- 字符串底層是被
final
修飾的數組,所以它不可變
private final byte[] values;
- 進行字符串的相加,內存中就會產生多個字符串,佔用空間多,效率低下
StringBuilder
字符串緩存區,可以提高字符串的操作效率。(可以理解爲可變字符串)
- 底層也是數組,但是沒有被
final
修飾
byte[] value = new byte[16]; // 初始容量是16
可以看到,StringBuilder
自始至終就一個數組(StringBuilder容器
),佔用空間少,效率高(超過16會自動擴容)
2. 構造方法
3. append方法
追加方法,返回本身(所以直接調用就行,不用接收返回值)
append(Object vlue)
接收任意對象作參數:
返回值是本身的,可以使用鏈式編程:
剛纔那些代碼,可以寫成這樣
4. toString
StringBuilder
和Sting
可以相互轉化
- 構造方法:
Sting
-->StringBuilder
- toString:
StringBuilder
-->Sting
五、包裝類
還記得ArrayList只能接收引用數據類型時,我們是怎麼傳遞基本數據類型的?答,使用對應的包裝類
1. 什麼是包裝類
包裝類: 基本數據類型雖然使用方便,但是並沒有對應的方法來操作這些數據。於是,可以使用一個類,把基本數據的類型裝起來,在類中定義一些方法,這個類就叫包裝類 。
包裝類在java.lang包下,不需要導包
基本類型(基本類型) | 包裝類(引用類型) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
floot | Floot |
double | Double |
char | Character |
boolean | Boolean |
2. 裝箱與拆箱
裝箱: 基本類型 --> 對應的包裝類
拆箱: 包裝類 --> 對應的基本類型
下面以Integer
和int
爲例
2.1 裝箱
裝箱,可以採用構造方法或成員方法
- 構造方法:
注意: 第二個構造方法,傳入的是諸如"100"之類的字符串。如果是"a",則會報錯。 - 成員方法: 靜態方法直接使用
劃線,表示該方法已廢棄
2.2 拆箱
拆箱,只有一個方法
3. 自動裝箱與拆箱
JDK1.5之後,基本數據類型和包裝類之間,可以互相自動地拆箱和裝箱。
4. 基本類型和字符串相互轉化
4.1 基本類型 --> 字符串
- 基本類型加上一個空字符串(工作中常用)
- 包裝類的靜態方法
toString
(不是Object類的,是重載後的) String
類的valueOf
靜態方法
4.2 字符串 --> 基本類型
使用包裝類型的靜態方法,parseXXX()