轉載自http://blog.csdn.net/yyaf2013/article/details/17356813
當我們需要給Configuration類中的CONFIG常量第一次使用時動態指定一個值時,而此時我們又不想去修改源代碼,那我們有三種方法去實現這種需求。
第一種:使用一個static靜態代碼塊來指定,然後在靜態代碼塊中,我們去動態讀取外部的一個Properties文件的值。(最推薦)
import java.util.Properties;
/**
* 第一種實現方法
* @author William
*
*/
public class Configuration {
public static final String CONFIG;//常量聲明時不馬上初始化
static {
Properties properties = new Properties();
//把一個properties讀進來
CONFIG = "properties.getConfig";//通過properties的配置項config來初始化我們的常量config
}
}
第二種:我們可以配置Java的運行時配置,來指定一個-Dname=value的參數,這樣也可以在類內部動態的接受到運行時指定的一個參數。
/**
* 第二種實現方法
* @author William
*
*/
public class Configuration {
public static final String CONFIG;//常量聲明時不馬上初始化
static {
CONFIG = System.getProperty("CONFIG");//通過系統的-D配置參數name=value形式來拿到這個配置值
//如果是eclipse,右鍵->RUN AS->Run Configurations->arguments->VMarguments 裏輸入(-DCONFIG=我們想要加入的配置)
}
public static void main(String[] args) {
System.out.println(Configuration.CONFIG);
}
}
第三種:我們還可以讀的到系統配置的PATH或者CLASSPATH裏面的值,同理,我們也可以配置自己的環境變量,然後在程序中一樣也能讀到這些配置的環境變量
/**
* 第三種實現方法
* @author William
*
*/
public class Configuration {
public static final String CONFIG;//常量聲明時不馬上初始化
static {
CONFIG = System.getenv("PATH");//通過System.getenv()方法可以拿到系統環境變量,但我自己指定的環境變量沒有取得成功,如果有知道原因的給我留言哈謝謝
}
public static void main(String[] args) {
System.out.println(Configuration.CONFIG);
}
}
PS.System.getenv()方法,可以獲得自己設定的系統變量,不過,在自己誰的設定過後一定要重啓IDE工具,這樣才能成功讀取到。要不就會只讀到一個null。