finalizer通常是不可預測的,最好不要使用。
Java主要是用GC來處理記憶體回收相關事宜,所以也沒有類似C++的destructor的東西出現
finalizer最主要的缺點就是他不能保證會及時地被執行,從一個object被移除全部的reference開始到finalizer被執行的這段時間是任意長度的,如果受到時效性影響的行為是不能用finaliz…
這篇開始之前先來複習一下Java上面的變數,底下的內容都是參考深入淺出Java的第3,4,9章的整理
有兩種:
最好能重用對象而不是在每次需要的時候就創建一個相同功能的新對象.
有個極端的錯誤例子,不過應該是不會這樣寫。
String s = new String(“test”);
有時候可能需要一些class只有static method或static field,像是java.lang.Math,等等的utility的class
什麼是singleton,我自己的理解是在application的生命週期中,只存在這唯一的一份instance的class。本書上有提到兩種initial singleton的方式1. instance是public final field的
在需要多參數的情況下,static factory跟一般的constructor不太適用,書上的例子提到像是你需要建立一個食品上的添加物跟成分的class,然後這些成分都是你的輸入,如果用一般的constructor你就可能會產生以下這樣的程式碼:
如果要寫一個class然後用constructor去實例化它之前,可以考慮看看用static factory method的方式去實現這個class的實例化(跟factory method沒有關係).這種方法跟constructor相比有幾個好處
底下是可以不需要Override equals的條件,任一皆可:
如果你有override了equals的話,那麼一定也要override hashCode,如果沒有override hashCode,除了違反Object.hashCode的規定(第二條)之外(因為你沒有保證兩個equals的物件產生一樣的hashCode,sample code放在github上面…
如果不override toString的話,在System.out.print(yourObject)的時候出現的會是YourObject@12345這類的16進位hashCode,不會有什麼壞影響,”只是”會不好閱讀,然後不好debug。