Javaのuser.dirとは正確には何ですか? プロパティを取得する System.getProperty メソッド

String workDirectory = System.getProperty("user.dir");

多くの学生は、上記のコードを書いたり見たりしたことがあるはずです。「user.dir」の意味を考えたことはありますか? システム環境変数ですか?それともユーザーフォルダ?

「すべてはソースコードに聞いてください」ということわざにあるように、ソースコードに行って調べてみましょう。

 public static String getProperty(String key) {
    
    
        checkKey(key);
        SecurityManager sm = getSecurityManager();
        if (sm != null) {
    
    
            sm.checkPropertyAccess(key);
        }

        return props.getProperty(key);
    }

// 本地方法,用于初始化props属性
  private static native Properties initProperties(Properties props);  

上記のソース コードから、getProperty メソッドが System クラスの静的プロパティ props から対応する値を取得し、props プロパティにはローカル メソッド initProperties を介して初期値が与えられることがわかります。つまり、このシステム プロパティは、ネイティブ メソッドを実行して JVM を起動すると、自動的に初期化されます。幸いなことに、jdk のドキュメント ノートでは、JVM が保証するプロパティについて説明されており、次の表にそれらを示します。

属性名 例証する 値の例
java.version Java のバージョン番号 11.0.5
java.version.date Java バージョンの日付 2019-10-15
java.ベンダー Java ベンダー固有の文字列 オラクル社
java.vendor.url Java プロバイダーの URL http://java.oracle.com/
java.vendor.version Java ベンダー バージョン 18.9
java.home Java インストール ルート ディレクトリ /usr/lib/jvm/jdk-11.0.5
java.class.version Java クラス ファイルのバージョン番号 55.0
java.class.path Java クラスパス 長すぎるので省略
os.name オペレーティング システム名 Linux
os.arch オペレーティング システムのアーキテクチャ amd64
os.バージョン オペレーティング システムのバージョン 5.0.0-37-ジェネリック
file.separator ファイル区切り /
path.separator パス区切り :
line.separator 改行 \n
ユーザー名 ユーザーアカウント リン17
ユーザー.ホーム ユーザールートディレクトリ /home/ling17
user.dir ユーザーの現在の作業ディレクトリ /home/lhing17/IdeaProjects/rocketDownloader

上記の表の値の例は、私のパーソナル コンピューターでテスト クラスによって出力された結果です。「user.dir」がユーザーの現在の作業ディレクトリを参照していることは明らかです。IDE でプロジェクトを実行している場合、このディレクトリは現在のプロジェクトのルート ディレクトリです。「user.dir」に加えて、「java.home」、「user.home」など、いくつかの便利なプロパティがここで提供されます。JVM (Java 仮想マシンを参照) は、上の表のプロパティが価値があることを保証します. プロジェクトでは、null ポインターの例外を心配することなく、System.getProperty(propertyName) を介して安全に取得できます.

System.setProperty(propertyName, propertyValue) を使用してこれらのプロパティを変更したり、いくつかの新しいプロパティをカスタマイズしたりすることもできます。ただし、Java の公式ドキュメントでは、これらのシステム プロパティを変更すると予期しない副作用が発生する可能性があり、通常はこれらのプロパティを変更すべきではないことを明確に示しています。

要約する

System.getProperty メソッドによって取得されるプロパティは、ユーザーの現在の作業ディレクトリを表す「user.dir」など、JVM のロード時に初期化されるプロパティです。JVM は、指定されたいくつかのプロパティ値が存在することを保証し、それらを安全に呼び出すことができます。

おすすめ

転載: blog.csdn.net/qq_43842093/article/details/130175513