1.靜態(tài)方法什么時候初始化,在main前還是main后
?在main方法后,靜態(tài)方法是屬于類的,只有在調(diào)用時才初始化(main例外,main的調(diào)用是在初始化工作完成后程序進(jìn)入運(yùn)行狀態(tài)時),但靜態(tài)方法在內(nèi)存中只有一份;

2.構(gòu)造函數(shù)與繼承的關(guān)系
子類的構(gòu)造函數(shù)內(nèi)會包含一個父類構(gòu)造函數(shù),因為在子類構(gòu)造函數(shù)第一行會默認(rèn)調(diào)用父類構(gòu)造函數(shù),如果覆寫該行則可以自行控制父類構(gòu)造函數(shù)版本;可見得父類構(gòu)造函數(shù)和子類構(gòu)造函數(shù)得關(guān)系是“繼承”不是“覆寫”,(每個)子類構(gòu)造函數(shù)繼承(包含)父類構(gòu)造函數(shù)的一個版本,并可以有自己的部分,類似繼承,子類不完全繼承父類方法并可由自己的方法,父類私有不能繼承。

3.接口沒有構(gòu)造函數(shù)的原因
1.接口里的方法完全抽象構(gòu)造函數(shù)沒有實(shí)現(xiàn)體,無意義
2.接口為了實(shí)現(xiàn)多繼承,子類構(gòu)造函數(shù)必須調(diào)用父類構(gòu)造函數(shù),如果接口有構(gòu)造函數(shù)子類不知道調(diào)用哪個父類構(gòu)造函數(shù)

4.String與StringBuffer

String類用來表示那些創(chuàng)建后就不會再改變的字符串,它是immutable的。
而StringBuffer類用來表示內(nèi)容可變的字符串,并提供了修改底層字符串的方法。


--當(dāng)我們進(jìn)行字符拼接時,請使用StringBuffer類而非String類,因為前者將比后者快上百倍。


的確,在程序的太多場合我們都會進(jìn)行字符串拼接工作,簡單的代碼示例如下:


String str="You are nice.";
str+="I love you so much.";


如果用StringBuffer類的話,代碼如下:


StringBuffer str= new StringBuffer("You are nice.");
str.append("I love you so much.");


??????? 從表面看來String類只用一個加號(+)便完成了字符串的拼接,
而StringBuffer類卻要調(diào)用一個append()方法,是否實(shí)現(xiàn)起來更簡潔,更單純呢?其實(shí)不然,
讓我們了解一下程序運(yùn)行內(nèi)部發(fā)生了哪些事情:


??????? 經(jīng)編譯后程序的bytecode(字節(jié)碼)展示出了實(shí)質(zhì):? 在用String類對象直接拼接時,
JVM會創(chuàng)建一個臨時的StringBuffer類對象,并調(diào)用其append()方法完成字符串的拼接,
這是因為String類是不可變的,拼接操作不得不使用StringBuffer類(并且--JVM會將"You are nice."和"I love you so much."
創(chuàng)建為兩個新的String對象)。
之后,再將這個臨時StringBuffer對象轉(zhuǎn)型為一個String,代價不菲!可見,在這一個簡單的一次拼接過程中,
我們讓程序創(chuàng)建了四個對象:兩個待拼接的String,一個臨時StringBuffer,
和最后將StringBuffer轉(zhuǎn)型成為的String--它當(dāng)然不是最初的str了,這個引用的名稱沒變,但它指向了新的String對象。


??????? 而如果直接使用StringBuffer類,程序?qū)⒅划a(chǎn)生兩個對象:
最初的StringBuffer和拼接時的String("I love you so much."),
也不再需要創(chuàng)建臨時的StringBuffer類對象而后還得將其轉(zhuǎn)換回String對象。


??????? 可以想象,當(dāng)我們的字符串要被循環(huán)拼接若干段時,
用String類直接操作會帶來多少額外的系統(tǒng)開銷,生成多少無用的臨時StringBuffer對象,
并處理多少次無謂的強(qiáng)制類型轉(zhuǎn)換哪。

5. equals() 和 ==?
???equals() 比對象值,即屬性是否相等?
?? ==比引用,地址
?? 在編譯時期確定的兩個字符串對象引用相等(==)
?? 不在編譯期確定的兩個字符串字符串引用不相等