Java常用API(Part1)
java API(Part1)
剛開始學(xué)java,隨便做點學(xué)習(xí)筆記
Part1含Math,System,Runtime,Object,Objects,BigInteger,BigDecimal庫的一些重要函數(shù)
Math
私有化構(gòu)造方法,所有的函數(shù)都是靜態(tài)的

System
工具類,提供一些與系統(tǒng)相關(guān)的方法
計算機中的時間原點:1970年1月1日 00:00:00
原因:1969年8月,貝爾實驗室的程序員肯湯普遜利用妻兒離開一個月的機會。開始著手創(chuàng)造一個全新的革命性的操作系統(tǒng)。 他使用B編譯語言在老舊的PDP-7機器上開發(fā)出了Unix的一個版本。隨后,湯普遜和同事丹尼斯里奇改進了B語言,開發(fā)出了C語言,重寫了UNIX。
1970年1月1日算C語言的生日
中國位于東八區(qū),時間原點為1970年1月1日 08:00:00
1s=1000ms,1ms=1000微秒.1微秒=1000納秒

數(shù)組拷貝:
如果數(shù)據(jù)類型不一樣會報錯
數(shù)組越界會報錯
如果數(shù)據(jù)源數(shù)組和目的地數(shù)組都是引用數(shù)據(jù)類型,則子類類型可以賦值給父類類型
Runtime
表示當(dāng)前虛擬機的運行環(huán)境

可以通過代碼監(jiān)控虛擬機的內(nèi)存
可以加上shutdown關(guān)機參數(shù)實現(xiàn)自動關(guān)機
shutdown -s 默認在1min后關(guān)機 -s -t 指定時間: 指定時間后關(guān)機 -a:取消關(guān)機操作 -r:關(guān)機并重啟
Object
Object是Java中的頂級父類,所有的類都直接或間接地繼承于Object類
Object類中的方法可以被所有子類訪問

toString
兩種打印等價 打印的本質(zhì): System:類名 out:靜態(tài)變量 System.out:獲取打印的對象 println():方法 參數(shù):表示打印的內(nèi)容
核心邏輯:當(dāng)我們打印一個對象的時候,底層會調(diào)用對象的toString方法把對象變成字符串,然后再打印在控制臺上,打印完畢后換行
默認情況下,因為Object類中toString方法返回的是地址值,所以打印一個對象打印的就是對象的地址,如果想要看到對象內(nèi)部的屬性值?
如果我們打印一個對象想要看到屬性值的話:重寫父類toString方法
可用ptg插件快速完成此工作
equals
如果我們比較兩個對象想比較屬性值而不是默認的地址值的話:重寫Object的equals方法
idea中可按alt+insert選擇equals() and hashCode()快速完成此工作
如果沒有重寫equals方法,默認使用Object中的方法進行比較,比較的是地址值
s.equals(sb)
equals方法是s調(diào)用的,s是字符串,所以equals方法要看String類中的
String中的equals方法,先判斷參數(shù)是否為字符串,如果是字符串,再比較內(nèi)部的屬性;如果不是字符串,直接返回false
sb.equals(s)
這里的equals方法要看StringBuilder中的,而StringBuilder中沒有重寫equals方法,使用的是Object中的,所以比較對象的地址值
clone
把A對象的屬性值完全拷貝給B對象,也叫對象拷貝,對象復(fù)制
書寫細節(jié):
重寫Object中的clone方法
讓javabean類實現(xiàn)Cloneable接口
創(chuàng)建原對象并調(diào)用clone
基本數(shù)據(jù)類型:存儲的是真實的值 引用數(shù)據(jù)類型:存儲的是另一個空間的地址值
淺拷貝:引用數(shù)據(jù)類型只拷貝地址值 深拷貝:引用數(shù)據(jù)類型會重新再創(chuàng)建一個新的地址
深拷貝在拷貝String對象時,由于原String對象已在串池StringTable中,所以也只拷貝原地址
Object中的克隆默認為淺克隆,深克隆需要在重寫clone()時自己寫
可采用第三方工具gson進行深拷貝
將第三方代碼導(dǎo)入到項目中
編寫代碼
Objects

Objects中equals方法細節(jié):
方法底層會判斷s1是否為null,若為null,直接返回false;如果不為null,就利用s1再次調(diào)用equals方法
此時s1是Student類型,所以最終還是會調(diào)用Student中的equals方法
如果沒有重寫equals方法,比較地址值,如果重寫了,比較屬性值
如果只用Object中的equals方法,遇到空對象調(diào)用equals方法會報錯
BigInteger
java中,整數(shù)的4種類型byte:1字節(jié),short:2字節(jié),int:4字節(jié),long:8字節(jié)

valueOf細節(jié)
能表示的范圍較小,只能在long的取值范圍之內(nèi),如果超出long的范圍就不行了
在內(nèi)部對常用的數(shù)字-16~16進行了優(yōu)化,提前把-16~16先創(chuàng)建好了BigInteger的對象,如果多次獲取不會創(chuàng)建新的
BigInteger對象一旦創(chuàng)建,內(nèi)部記錄的值不能發(fā)生改變
小結(jié)
如果BigInteger表示的數(shù)沒有超出long范圍可用靜態(tài)方法獲取
如果超出則用構(gòu)造方法獲取
對象一旦創(chuàng)建,內(nèi)部記錄的值不能發(fā)生改變
只要進行計算都會產(chǎn)生一個新的BigInteger對象

BigDecimal
如果要表示的數(shù)字不大,沒有超過double的取值范圍建議使用valueOf
如果比較大,超出了double的取值范圍,建議使用構(gòu)造方法
如果傳遞的是[0,10]之間的整數(shù),方法會返回已經(jīng)創(chuàng)建好的對象
加減乘除類似于BigInteger

舍入模式:RoundingMode.HALF_UP四舍五入

感謝Up主@LuckyPuppy514制作的Markdown轉(zhuǎn)B站專欄油猴腳本