程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 【Effective Java】3、避免創建不必要的對象,effectivejava

【Effective Java】3、避免創建不必要的對象,effectivejava

編輯:JAVA綜合教程

【Effective Java】3、避免創建不必要的對象,effectivejava


創建對象的時候,有些變量可以一直保持的時候,可以不必要每次實例化對象的時候都把這些變量初始化一遍,可以使用靜態和靜態塊的方式把這些變量的數據固定下來

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;
    }
}

這樣的話每次創建對象的時候,調用方法使用的私有變量都是最開始初始化好了的,如果調用這個方法的用戶特別多,上千萬個的話,那麼這個方式的優勢就體現出來了

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved