Java三大特性
繼承,封裝 ,多態
基礎數據類型
-
包裝類的自動拆箱,自動裝箱
-
String類型
String拼接String str = “a” + “b”;
String str2 = str + “a”;
表達式中只有常量,在編譯期間就會完成拼接計算。
表達式存在變量,等到運行期纔會計算。
注意指向地址問題.String.intern()
在jdk1.6中,程序會從常量池中返回或者創建
在jdk.1.7中,程序會從常量池中返回,沒有就去堆中查詢和創建。(new 出來的都在堆裏面)String.equals()
判斷的是地址用==
然後比內容。 -
StringBuffer 和 StringBuild
兩者最底層都繼承自可變字符數組
> char[] value
>初始化容量爲16,擴容方式爲: length2+2
>如果length2+2大於等於int.MAX_VALUE,就取int.MAX_VALUE,否則就拋出異常了。OutOfMemoryError(); -
String的不可變性
即對String進行賦值或者修改的話,實現是直接修改指針,指向新值就行了。、
原因:
底層實現爲數組,被final修飾,不可繼承,private私有。private final char value[];
final關鍵字
- 修飾類,方法,引用
- 修飾類,該類不能被繼承。並且這個類的對象在堆中分配內存後地址不可變。
修飾方法,方法不能被子類重寫。
修飾引用,引用無法改變,對於基本類型,無法修改值,對於引用,雖然不能修改地址> > 值,但是可以對指向對象的內部進行修改。
抽象類和接口
1 抽象類一般會實現一部分操作,並且留一些抽象方法讓子類自己實現,比如Stringbuffer和Stringbuilder的父類abstractStringbuilder。
2 接口一般指一種規定,比如一個map接口中,可能需要實現增刪改查等功能,如果你想實現一個具體map,這些方法就必須按照規定去實現。
3 另外,一個類可以實現多個接口,但是不能繼承多個類。
然而接口卻可以繼承多個其他接口。這一點很神奇。
代碼和代碼塊加載順序
局部代碼塊
主要作用是限定變量生命週期,達到GC標準來做內存管理。
方法內部。
構造代碼塊
構造代碼塊先於構造方法執行,每次創建對象時都會執行一次。
用於對象初始化。
類內部。
靜態代碼塊
靜態代碼塊只執行一次,所以對象共用。用於初始信息配置。
內部類
待續…