Java系统属性是什么?

今天的议题是“系统属性”。由于这方面的内容只有简单的书籍介绍,所以我们的目标是结合官方文档等进行整理。

系统属性是指

首先,什么是属性(プロパティ)?
属性(プロパティ)被翻译为日语中的「属性」或「特性」。换句话说,它表示关于某个对象特征的信息。
举个例子,浏览某个文件的属性时,可以看到它是何时创建的,扩展名是什么,编码是什么等等,包含了各种各样的属性。

在中文中,系统属性是指Java的系统,即JVM相关信息。在Java中,它可以使用Map的形式进行处理,并被存储在Properties类中。关于Properties类的详细内容将稍后说明,而Map是一种可以存储多个字符串和字符串对的容器。

更具体的例子是,例如Java的版本:11.0.9,这个字符串和字符串将作为键值对存储在Properties类中。

除此之外,还包括了其他各种内容。虽然不需要记住所有这些信息,但它们非常方便,所以至少要理解它们表示的是什么。

キー対応する値の説明java.versionJava Runtime Environmentのバージョンjava.vendorJava Runtime Environmentのベンダーjava.vendor.urlJavaベンダーのURLjava.homeJavaのインストール先ディレクトリjava.vm.specification.versionJava仮想マシンの仕様バージョンjava.vm.specification.vendorJava仮想マシンの仕様のベンダーjava.vm.specification.nameJava仮想マシンの仕様名java.vm.versionJava仮想マシンの実装バージョンjava.vm.vendorJava仮想マシンの実装のベンダーjava.vm.nameJava仮想マシンの実装名java.specification.versionJava Runtime Environmentの仕様バージョンjava.specification.vendorJava Runtime Environmentの仕様のベンダーjava.specification.nameJava Runtime Environmentの仕様名java.class.versionJavaクラスの形式のバージョン番号java.class.pathJavaクラス・パスjava.library.pathライブラリのロード時に検索するパスのリストjava.io.tmpdirデフォルト一時ファイルのパスjava.compiler使用するJITコンパイラの名前java.ext.dirs拡張ディレクトリDeprecated.のパスこのプロパティおよびこれを実装するメカニズムは将来のリリースで削除されます。os.nameオペレーティング・システム名os.archオペレーティング・システムのアーキテクチャos.versionオペレーティング・システムのバージョンfile.separatorファイル区切り文字(UNIXでは”/”)path.separatorパス区切り文字(UNIXでは”:”)line.separator行区切り文字(UNIXでは”\n”)user.nameユーザーのアカウント名user.homeユーザーのホーム・ディレクトリuser.dirユーザーの現在の作業ディレクトリ

属性类

Properties类的官方文件

根据公式文档显示,Properties类是

表示属性的集合。

這是對之前討論過的內容的實行。這個類別擁有多種方法,但這個Properties類別本來就是被System類別的getProperties()方法所呼叫的。
System類別的官方文件。

此外,由于Map的形式,可以使用key来调用value。可以通过System类的getProperty(key)方法调用相应的value。

通过使用系统属性,可以有效地消除环境依赖。例如,

System.out.println("私の名前は\n太郎です。");

这段代码会根据不同的操作系统显示不同的内容。
如果是Linux系统,

我叫太郎。

虽然在旧版的Mac OS中,

我的名字是太郎。

由于不同的操作系统对”\n”有不同的意义,这就是原因。
要使上面的代码在任何操作系统中都包含换行符,只需采用下面的方法。

final String BR = System.getProperty("line.separator");
System.out.println("私の名前は" + BR + "太郎です。");

如果按照上述的方式进行,会插入表示操作系统换行的特殊字符,因此将总是发生换行。
就像上述的例子一样,如果使用得当,可以编写不依赖操作系统的程序。

过去我们已经看到了获取属性的函数,但是也有设置属性的函数。该函数是通过System.setProperty(key, value)方法实现的。

在这里需要注意。
系统属性是一个方便的存储区域,可以从任何类直接读写,但容易成为故障的原因,因此滥用是不可取的。

获取系统属性的代码示例

    public static void main(String[] args) {
        // Propertiesクラスを取得
        Properties properties = System.getProperties();

        Iterator<String> iterator = properties.stringPropertyNames().iterator();

        System.out.println("「システムプロパティ一覧」");
        while (iterator.hasNext()) {
            String key = iterator.next();
            System.out.print(key + " = ");
       // getProperty(key)で指定されたシステムプロパティの値を返す。
            System.out.println(System.getProperty(key));
        }

        final String LINEBREAKER = System.getProperty("line.separator");
        System.out.println("全てのOSで改行" + LINEBREAKER + "されるよ。" );
    }

今天就到这里吧。因为我还没有用代码来体验过系统属性,所以无法真正感受,但是了解到了一个能够获取JVM信息的类,我感到非常高兴。

请按照指导思想办事。

    • https://docs.oracle.com/javase/jp/8/docs/api/java/util/Properties.html

 

    https://docs.oracle.com/javase/jp/8/docs/api/java/util/Map.html
bannerAds