3

クラスでこれを見つけましたが、Systemこれがどのように実装されているか知りたいです。

     /**
     * System properties. The following properties are guaranteed to be defined:
     * <dl>
     * <dt>java.version         <dd>Java version number
     * <dt>java.vendor          <dd>Java vendor specific string
     * <dt>java.vendor.url      <dd>Java vendor URL
     * <dt>java.home            <dd>Java installation directory
     * <dt>java.class.version   <dd>Java class version number
     * <dt>java.class.path      <dd>Java classpath
     * <dt>os.name              <dd>Operating System Name
     * <dt>os.arch              <dd>Operating System Architecture
     * <dt>os.version           <dd>Operating System Version
     * <dt>file.separator       <dd>File separator ("/" on Unix)
     * <dt>path.separator       <dd>Path separator (":" on Unix)
     * <dt>line.separator       <dd>Line separator ("\n" on Unix)
     * <dt>user.name            <dd>User account name
     * <dt>user.home            <dd>User home directory
     * <dt>user.dir             <dd>User's current working directory
     * </dl>
     */

    private static Properties props;
    private static native Properties initProperties(Properties props);

これはネイティブメソッドなので、すべての魔法を実行するCファイルがあると思います。Cのgetenv()を介して変数をロードするOS固有のファイルはありますか、それとも特定のプラットフォーム用にハードコーディングされていますか(動的である必要があるos.name、os.versionなどに関係なく)?

aOSが行区切り文字または<foo>パス区切り文字としての変更されたLinuxカーネルである場合はどうなりますか?..<foo>..<foo>native<foo>amd_xyzパス区切り文字を知る前に、これらのネイティブファイルが下に格納されている場合、JVMはこれらのネイティブファイルを検索する場所をどのように知ることができますか?

実装を調べる方法はありますか?

4

2 に答える 2

5

OpenJDKですべてのソースを見ることができます。ほとんどのソースは、JDKからIDEで利用できます。

私はあなたが持っているよりも多くの魔法があると仮定していると思います。UNIXバージョンの場合、file.separatorは、ドキュメントで示唆されているようにハードコーディングされている可能性があります。

于 2012-12-07T19:00:39.863 に答える
2

OpenJDKソースをご覧ください。たとえば、Linuxのファイルセパレータは次のように定義されています。

inline const char* os::file_separator() {
  return "/"; 
}
于 2012-12-07T19:19:10.877 に答える