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 は、指定されたいくつかのプロパティ値が存在することを保証し、それらを安全に呼び出すことができます。