https://www.bilibili.com/video/BV1Kb411W75N?p=303
Object類
equals函數,
官方建議重寫equal方法。
Date類:注意計算原點。
Java 的傳遞機制是值傳遞,地址也是地址值,所以基本類型無法通過值傳遞,交換原有,引用卻可以。
string 類型因爲常量池的存在,所以 == 和 重寫的equals 方法一樣
toString()注意源碼,object的源碼,輸出的是類名加地址:
單元測試方法:
static在內存中只留存一份。這樣,一個類的所有實例,都可以共享同一個變量。靜態變量又叫類變量,隨類 在方法區初始化一起初始化,且只一次。可以用類.靜態變量調用。
注意靜態和類是綁定的,和對象無關,所以在類方法中,super,this 等都不可用。且類初始化早於對象初始化,所以用這個邏輯去理解現象。
重載和重寫,很重要。
構造器是用來造類對象的,所以不應該理解爲對象能調用的方法。
JavaBean:
UML圖:
封裝和隱藏:private,關鍵字,是封裝的體現,因爲可以設置修改變量的條件,變量對外不可見。
this關鍵字,意指當前對象,而不是當前類。
this調用構造器:
super關鍵字:子類屬性不會覆蓋父類屬性
子類構造器默認調用super()
從紅線部分,可以看出,構造器和類綁定,並不和對象相關,所以用了構造器,未必就創造了對象。
包裝類:
基本數據類型和object類沒有關係,基本類型沒有成員變量和方法。爲了讓基本數據類型,也具有類的特徵,所以有了包裝類。
基本數據類型轉包裝類,注意boolean-》Boolean。
包裝類轉基礎類型,做加減乘除:
jdk5開始實現了自動裝箱與拆箱。
基本數據類型,包裝類和string的轉換:
String 轉int 和 Integer等:
面試題;因爲三元運算符要保證所有東西類型範圍一致,所以把Integer擴成Double了。看來println對Integer是值敏感的。而不是地址。
Integer底層實現了緩存區數組,將常用數放進數組。會讓多個對象指向同一個地址,提高效率。這個數組【-128,127】.超出緩存區規定大小,則new一個新對象。
單例模式:系統中,只有一個當前類的對象。
注意成員和方法都是靜態的,因此才能單例,直接通過類...調用,下圖爲餓漢式。
懶漢式創建:
應用場景:
代碼塊:
靜態代碼塊,不需要new就會執行,只要有申明就執行,非靜態代碼塊,要new對象才執行。多個同類代碼塊的執行順序按定義時的先後順序。但,靜態代碼塊優先於非靜態。
初始化時,由父及子,靜態先行。
按代碼塊的位置,比較和顯示初始化的順序
final:不可以通過對象.屬性來修改。注意static final 修飾全局常量。
abstract關鍵字:
abstract不能修飾的東西,僅考慮和是否能重寫矛盾。
模版方法設計模式:聯繫填空題。或者英語論文模版
應用舉例,計算某個函數運行時間。使用抽象方法,暴露出去,讓子類實現。
接口定義了一組規範,因爲必須實現所有抽象方法才能實例化,這個抽象方法可理解爲規範,:
接口的應用,代理模式:
工廠模式:
接口中的靜態方法和默認方法:默認方法的意義是,在這一組行爲規範上,增加新的公有的行爲規範,如果沒有默認方法,所有實現類,都得添加這個相同的行爲。
內部類:
實例化成員內部類,注意靜態和非靜態成員的區別,非靜態得先實例化外面的類,再調用裏面的初始化構造器。
局部內部類的實際使用。一般用來返回一個類或者接口類型
局部內部類一個注意點:好理解,因爲一個類中使用的變量,其修改權限不應該隨意交給外部方法,這樣會增加錯誤。所以它調用的外部方法中的變量,必須是個final
異常:
異常處理過程:編譯異常用try catch處理。運行時異常不處理。因爲處理不了。
、hello---1不會執行,因爲這個異常在上一條語句出現,並且被被處理掉了,直接進了catch
return 3:
throws 方式:把問題往上拋。一直到main方法,這個鍋沒人甩了,只能自己try catch 掉
手動拋出異常:注意是throw,而不是throws。 通過throw,手動創建一個異常。手動拋出會報錯。
自定義異常類: