Systemクラスを通じたシステムの操作

Javaの仮想マシン(Virtural Machine)を取り扱うためのクラスが System です。
Systemクラスは仮想マシンをコントロールするための インターフェイスを提供するクラスです。 あるいは仮想マシンそのものと考えもかまわないでしょう。 このため、Systemクラスは新しいオブジェクトを生成したりはしません。 フィールドもメソッドもすべて staticです。
Systemが提供してくれる機能には下記のようなものがあります。 まず、通常のアプリケーションでもしばしば使用されるものから紹介しましょう。
  1. 標準入出力
  2. 時刻の情報の取得
  3. アプリケーションの実行環境の情報

まず、標準入出力は staticで public なフィールドとして in, out, err の3つが用意されています。それぞれ、 標準入力、標準出力、標準エラー出力に対応します。 in は java.io.Inputstream, out と err は java.io.Printstream クラス のオブジェクトです。 JavaのアプリケーションはウィンドウベースのGUIを利用する場合が多いので、 これらのフィールドはむしろデバッグなどのために利用されます。

時刻の情報の取得は currentTimeMillis()メソッドによって行えます。 ただし、時刻や日付の情報は java.util.Date や java.util.Calendar クラスに よっても知ることができます。また、イベントの発生時刻などは、イベント情報 を伝えるクラスのオブジェクトからも取り出せます。 また、処理の時間調整は Threadクラスの sleep()メソッドを使うのが便利でしょう。

環境の情報を手に入れるには、getenv()メソッドもしくは getProperty()メソッドを 用います。ただし、getenv()メソッドは古いアプリケーションとの互換性のために 残されている機能で、現在では getProperty()を使うようにしてください。 getProperty()はあらかじめ予約されているキーとなるストリングを指定し、 それに対応するシステムの情報を String型のオブジェクトとして返します。


import java.util.Properties;

public class ShowEnvironment {

   public static void main( String argv[] ){

          Properties prps = System.getProperties();

          String classpath = prps.getProperty( "java.class.path" );
          String osname = prps.getProperty( "os.name" );
          System.out.println("CLASSPATH is " + classpath);
          System.out.println("OS NAME is " + osname);
    }
}

その他に、Systemクラスには VMを直接コントロールするためのメソッドが いくつか用意されています。これらの多くは通常のアプリケーションでは 用いられませんが、次の2つは知っておいた方がいいでしょう。

  1. exit() 仮想マシンを強制的に終了させます。
  2. gc() ガーベジコレクションの機能をただちに呼び出します。