創建對象的時候,有些變量可以一直保持的時候,可以不必要每次實例化對象的時候都把這些變量初始化一遍,可以使用靜態和靜態塊的方式把這些變量的數據固定下來
package cn.xf.cp.ch02.item5; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; /** * *功能:一般情況下創建對象的寫法 *時間:下午9:27:25 *文件:PersonSlow.java *@author Administrator * */ public class PersonSlow { private final Date birthDate; public PersonSlow(Date birthDate) { this.birthDate = new Date(birthDate.getTime()); } /** * 在固定的時間區間內 * @return */ public boolean isBetweenTheDate() { //獲取對應GMT時間標准下的這段代碼程序開始運行的時間,TimeZone.getTimeZone("GMT") Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); //吧時間設置到相應的位置 gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0); Date timeStart = gmtCal.getTime(); gmtCal.set(1965, Calendar.JANUARY, 1, 0, 0, 0); Date timeEnd = gmtCal.getTime(); return birthDate.compareTo(timeStart) >= 0 && birthDate.compareTo(timeEnd) < 0; } }
把上面的代碼改進到使用靜態代碼塊的模式
package cn.xf.cp.ch02.item5; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; public class PersonFast { private Date birthDate; //在類初始化的時候就把起始時間和結束時間確定好 private static final Date BOOM_START; private static final Date BOOM_END; public PersonFast(Date birthDate) { this.birthDate = new Date(birthDate.getTime()); } //通過靜態代碼塊來實現和類一起初始化之後不在改變 static { Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0); BOOM_START = gmtCal.getTime(); gmtCal.set(1965, Calendar.JANUARY, 1, 0, 0, 0); BOOM_END = gmtCal.getTime(); } //比較時間函數 public boolean isBetweenDate() { return birthDate.compareTo(BOOM_START) >= 0 && birthDate.compareTo(BOOM_END) < 0; } }
這樣的話每次創建對象的時候,調用方法使用的私有變量都是最開始初始化好了的,如果調用這個方法的用戶特別多,上千萬個的話,那麼這個方式的優勢就體現出來了