一、 Hash Code方法預設是呼叫該物件的地址,如果你重寫了equals方法應該重寫hash Code方法,例如你的equals方法是比較的物件的ID,就用該物件的ID來hash。
二、 instanceof並不完美,不能夠查出父子類,所以在寫equals方法的時候應該比較下是否同一個類。。
三、 String類和包裝類的值都是不能改變的,所以如果希望實現它們的引用傳遞需要使用StringHolder類和包裝類的Holder類,例如:IntHolder。
四、 C#中的委託可以用JAVA中的反射invoke方法傳遞方法指標method完成。
五、 不要使用protected修飾field因為整個包內都可以訪問,破壞了封裝性。
六、 throwable介面的實現類有2個分支,一個是error,一般情況JAVA系統的內部錯誤或者資源耗盡,對於它,除了通知使用者錯誤和讓使用者安全退出外別無他法。還有一個是exception,又分為Runtime Exception和非Runtime Exception。
七、 要使用精確的浮點運算請使用Big Decimal。除法的時候注意使用小數位,否則會導致得不到精確值錯誤。
八、 建議不要在程式中使用char,因為char使用的是utf-16編碼。
九、 三種處理錯誤的機制:異常,日誌和斷言。java預設關閉使用斷言,想使用應該在執行的jvm引數中使用-ea。例如:int x= 5;要判斷x是否大於0可以使用assert x>0 : x;斷言不應該使用在程式發生了可恢復性錯誤。斷言只能用在開發和測試階段。是一種戰術性工具,而日誌才是貫穿整個生命週期的策略性工具。
十、 序列化除了能夠儲存簡單物件以外,對複雜物件也有很好的處理方式,比如如果在幾個物件共同引用一個共享物件時,就不會把這個共享物件儲存幾次,而是檢查是否已經儲存這個共享,如果沒有則儲存,如果已經儲存,則儲存一個該物件的序列號。
十一、 泛型可以單獨在非泛型類中使用,例如下泛型方法:public static void test(T t){},而且泛型可以使用多個介面。一般的,帶有超類的泛型可以向物件寫入,帶有子類的泛型可以從物件讀取。
只有掌握真正的Java開發技術,才能逐漸成為高階Java開發工程師。Java開發的前景是毋庸置疑的,如果想進入這個“吸金”的領域,選擇專業的學習方式是明智之舉。
一、 Hash Code方法預設是呼叫該物件的地址,如果你重寫了equals方法應該重寫hash Code方法,例如你的equals方法是比較的物件的ID,就用該物件的ID來hash。
二、 instanceof並不完美,不能夠查出父子類,所以在寫equals方法的時候應該比較下是否同一個類。。
三、 String類和包裝類的值都是不能改變的,所以如果希望實現它們的引用傳遞需要使用StringHolder類和包裝類的Holder類,例如:IntHolder。
四、 C#中的委託可以用JAVA中的反射invoke方法傳遞方法指標method完成。
五、 不要使用protected修飾field因為整個包內都可以訪問,破壞了封裝性。
六、 throwable介面的實現類有2個分支,一個是error,一般情況JAVA系統的內部錯誤或者資源耗盡,對於它,除了通知使用者錯誤和讓使用者安全退出外別無他法。還有一個是exception,又分為Runtime Exception和非Runtime Exception。
七、 要使用精確的浮點運算請使用Big Decimal。除法的時候注意使用小數位,否則會導致得不到精確值錯誤。
八、 建議不要在程式中使用char,因為char使用的是utf-16編碼。
九、 三種處理錯誤的機制:異常,日誌和斷言。java預設關閉使用斷言,想使用應該在執行的jvm引數中使用-ea。例如:int x= 5;要判斷x是否大於0可以使用assert x>0 : x;斷言不應該使用在程式發生了可恢復性錯誤。斷言只能用在開發和測試階段。是一種戰術性工具,而日誌才是貫穿整個生命週期的策略性工具。
十、 序列化除了能夠儲存簡單物件以外,對複雜物件也有很好的處理方式,比如如果在幾個物件共同引用一個共享物件時,就不會把這個共享物件儲存幾次,而是檢查是否已經儲存這個共享,如果沒有則儲存,如果已經儲存,則儲存一個該物件的序列號。
十一、 泛型可以單獨在非泛型類中使用,例如下泛型方法:public static void test(T t){},而且泛型可以使用多個介面。一般的,帶有超類的泛型可以向物件寫入,帶有子類的泛型可以從物件讀取。
只有掌握真正的Java開發技術,才能逐漸成為高階Java開發工程師。Java開發的前景是毋庸置疑的,如果想進入這個“吸金”的領域,選擇專業的學習方式是明智之舉。