1. 程式人生 > 實用技巧 >System.getenv和getProperty的區別

System.getenv和getProperty的區別

/**
 * System.getenv()是獲取---環境變數(environment variables),
 *      系統層面的,好比我linux系統裡的.bash_profile檔案裡面的變數
 *      返回一個只讀的 Map,不能進行新增或者修改
 *
 *
 * System.getProperty()是獲取---讀取系統屬性(system properties)
 *      系統屬性包括當前使用者、當前 Java 執行時版本 以及 檔案路徑分隔符諸如此類的資訊
 *       返回的一定是一個字串
 *      System.getProperty("name") 獲取系統屬性名字為name對應的值
 *      也可以通過System.setProperty("name","zhiqiang")去執行時更改
 *
 *      引數可以通過-D注入
 *
 *  區別:
 *我們可以在執行時變更 系統屬性(Properties),但是 環境變數(Environment Variables)僅是作業系統環境變數的一個不可變拷貝。
 * 僅 Java 平臺包含這個 系統屬性 特性,而 環境變數 則是作業系統層面提供,全域性可用的 - 執行在同一個機器上的所有應用都可以訪問。
 * 系統屬性 在打包應用時就必須存在1,而 環境變數 則任意時刻都可以在作業系統中建立。
 *

例子:

public class SystemTest {
    public static void main(String[] args) {
        Map<String,String> hashMap = System.getenv();
        Set<String> set = hashMap.keySet();
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next()
+"-->"+hashMap.get(iterator.next())); } // System.out.println(System.getenv().toString()); System.out.println(System.getProperty("name"));//啟動引數加入-Dname=quanzhiqiang } /** * PATH-->/bin/zsh * JAVA_HOME-->https://mirrors.ustc.edu.cn/homebrew-bottles * OLDPWD-->186a9 * USER-->unix2003 * LaunchInstanceID-->/var/folders/cd/k46tpp310gl43w8_1_p42wkw0000gn/T/ * MVN_HOME-->/private/tmp/com.apple.launchd.N9TMljHQGe/Listeners * XPC_FLAGS-->2.7 * __CF_USER_TEXT_ENCODING-->quan * LC_CTYPE-->/Users/quan/sotfware/pushgateway-1.2.0.darwin-amd64/pushgateway * JAVA_MAIN_CLASS_92876-->/Users/quan/Desktop/ALLLL/quan-springframework * XPC_SERVICE_NAME-->/usr/local/mysql-5.7.25-macos10.14-x86_64/bin * HOME-->/Users/quan/sotfware/mongodb/bin * quanzhiqiang
*/ }