1.避免建立沒必要要的對象
靜態的初始化器,能夠避免重複建立對象。
2.內存泄露
a.對象過時。
b.緩存。
c.監聽器和其它回調。
監視工具:Heap剖析工具。
3.避免使用終結方法
使用終結方法有一個很是嚴重的性能損失,因此纔會出現池化技術,好比數據庫池,線程池。
顯示終止方法:InputStream等文件流,try-finally結構。
4.儘可能使用equals代替「==」
由於使用「==」 會檢查參數是否爲這個對象的引用。
補充:使用instanceof操做符檢查參數是否爲正確的類型。
檢查是否爲空:
java
(file == null ? o.filed == null : filed.equals(o.filed))
5.確保惟一
覆蓋equals時總要覆蓋hashCodespring
6.使可變性最小數據庫
靜態工廠也使得客戶端間能夠共享現有的實例,而不用建立新的實例。注意:static、final等關鍵詞
7.複合優於繼承緩存
構造器不能調用可被覆蓋的方法,不管是直接調用,仍是間接調用。ide
public class Supper{ public Supper(){ } public void ovverideMe(){ } } public final class Sub extends Supper{ private final Date date; Sub(){ date = new Date(); } public void ovverideMe(){ System.out.println(date); } public static void main(String[] args){ Sub sub = new Sub(); sub.ovverideMe(); } }
你可能會期待這個程序會打印日期兩次,可是它第一次打印的是null,由於ovverideMe方法被Supper構造器調用的時候,構造器Sub尚未機會初始化date域。
8.枚舉類型工具
爲了將數據與枚舉類型常量關聯起來,得聲明實例域,並編寫一個帶有數據並將數據保存在域中的構造器。
注意:枚舉類型使用時一類的,而且數據量還不少,其它的可使用常量。
好比:App中的錯誤碼,不可能把每一個錯誤定義一個常量。尚未在springMVC中渲染的頁面,也可使用枚舉類型進行管理。
9.方法性能
a.檢查參數的有效性。
b.慎用可變參數。
10.通用程序設計ui
a.若是須要精確的答案,請避免使用float 和 double。
貨幣單位,最明顯的作法是以分單位計算,使用int和long。
b.基本類型因爲裝箱基本類型。
基本類型:int,long;裝箱基本類型:Integer,Long.
之間的區別:1.基本類型只有值,而裝箱基本類型則具備與他們的值不一樣的同一性。2.基本類型只有功能完備的值,而每一個裝箱基本類型除了
它對應基本類型的全部值以外,還有非功能值:null。3.基本類型比裝箱基本類型更節省時間和空間。
總結:1.裝箱基本類型是類,類是能夠爲null,這是主要的區別。因此若是使用「==」判斷,在Integer是有問題的。
2.當在一項操做操做中混合使用基本類型和裝箱基本類型時,裝箱基本類型就會自動拆箱。
c.小心字符串鏈接的功能。就是「+」
可使用StringBuild代替String的「+」,或者使用StringBuffer。
11.異常spa
a.優先使用經常使用異常。
線程