ホームページ >Java >&#&チュートリアル >JavaのSystemクラスの詳しい説明

JavaのSystemクラスの詳しい説明

Y2J
Y2Jオリジナル
2017-05-04 09:45:262391ブラウズ

Systemクラスはjdkが提供するツールクラスで、finalの変更があり、継承することができません。この記事では、Power Node Java Academy が提供する Java System クラスの詳細な説明を主に紹介します。System クラスは、jdk が提供するツール クラスであり、継承することはできません。そのうちのほとんどの操作はシステムに関連するものです。その主な機能は次のとおりです:

• 標準入出力 (out、in、err など)

• 外部定義された

プロパティ

および環境 変数 (getenv()/setenv() や getProperties( など) へのアクセス)/setProperties( )• ファイルやクラス ライブラリをロードするためのメソッド(load() やloadLibrary() など)

• 配列を簡単にコピーする方法: arraycopy()

• gc( などの一部の JVM 操作) )、runFinalization()、exit()、この部分はソース コードの Java ドキュメントには記載されていません。おそらく、この部分を積極的に呼び出すことは推奨されていないためです。これらのメソッドは Run

time

.getRuntime() を呼び出すだけです。以下の図を参照してください。主なメソッドと関数がリストされています。

次に、このクラスがどのように初期化されるかに焦点を当てます。 まず最初に、次のコードを見てみましょう。

private static native void registerNatives();
static {
 registerNatives();
}

クラスの

static

コード ブロックは、ネイティブ メソッド registerNatives() を呼び出します。このメソッドがエントリ メソッドであることが推測できます。 アノテーション: 静的初期化を通じて ネイティブ メソッドを登録します。これにより、VM は、initializeSystemClass メソッドを呼び出して初期化作業を完了します。当然のことですが、initializeSystemClass メソッドを見てみましょう:

private static void initializeSystemClass() {
  // 初始化props
  props = new Properties();
  initProperties(props); 
  sun.misc.VM.saveAndRemoveProperties(props);
  //获取系统相关的换行符
  lineSeparator = props.getProperty("line.separator");
  sun.misc.Version.init();
  //分别创建in、out、err的实例对象,并通过setXX0()初始化,查看setXX0()方法可知,这是个native方法,将系统的标准流管理到类内的对象
  FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
  FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
  FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
  setIn0(new BufferedInputStream(fdIn));
  setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));
  setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true));
  //加载zip包以获取java.util.zip.ZipFile这个类,以便之后加载利库使用
  loadLibrary("zip");
  // 设置平台相关的信号处理
  Terminator.setup();
  // 初始化sun.misc相关的环境变量
  sun.misc.VM.initializeOSEnvironment();
  // 主线程不会在同一个线程组中添加相同的线程,我们必须在这里自己实现。注释半天没弄明白,看代码就是主线程自己把自己加到了自己的线程组中......
  Thread current = Thread.currentThread();
  current.getThreadGroup().add(current);
  // 注册共享秘钥?注释没看明白,该方法就是实例化一个JavaLangAccess
  setJavaLangAccess();
  // 子系统在初始化的时候可以调用sun.misc.VM.isBooted(),以保证在application类加载器启动前不做任何事。booted()其实就是改了个状态,使isBooted()变为true。
  sun.misc.VM.booted();
}

以上がJavaのSystemクラスの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。