java.lang.System
java.lang.Systemクラスはローレベルな入出力などを提供するユーティリティクラスです。
今までオマジナイとして使用してきたprintln()メソッドもSystemクラスから使用してきました。
Systemクラスはインスタンスを作ることができず、メソッドは全てクラスメソッド(staticメソッド)となっています。
その他に標準入出力の為のpublicなクラス変数が定義されています。
ここでは幾つかのメソッドと標準出力に関してのみ説明を行います。
戻り値 | メソッド | 概要 |
---|---|---|
static long | currentTimeMillis() | 現在の時間をミリ秒で返します。 |
static void | gc() | ガベージコレクタを実行します。 |
現在時刻取得
currentTimeMillis()メソッドは現在の時間をミリ秒の精度で取得します。
このlong値はDateクラスで扱った基準時間からの経過時間です。
従って次の2つのコードは全く同じ結果を示します。
Date now = new Date();
Date now = new Date(System.currentTimeMillis());
しかし、通常は下の記述方法は冗長ですので、new Date()で記述するでしょう。
このメソッドは処理時間を測定する為にしばしば使用されます。
long start = System.currentTimeMillis(); // 測定したい処理 long end = System.currentTimeMillis(); long diff = end - start; System.out.println("処理時間(ミリ秒): " + diff);
ガベージコレクタの実行
gc()メソッドを実行するとJVMに対してガベージコレクタを実行させる事ができます。
ただし、このメソッドを実行したならば直ちにガベージコレクタが実行するわけではありません。
このメソッドを実行するとJVMに対して「なるべく早くガベージコレクタを実行してください」とメッセージを送ります。
その後、JVMの判断で適切なタイミングでガベージコレクタが実行され、死んだインスタンスをメモリから開放していきます。
従って、自動的に実行されるガベージコレクタを手動で行うのではないのです。
標準出力
標準出力(コンソール出力)はローレベルなAPIですが、最も基本的なユーザーインターフェイスです。
ちょっとしたプログラムを実行して結果を確認するときなど、使う機会の多い機能です。
そこで標準出力に関しては、Systemのクラス変数outとして定義され公開されています(public static)。
この変数outはjava.io.PrintStream型です。
したがって、今まで使ってきたprintf()メソッドはPrintStreamクラスで定義されたインスタンス変数だったのです。
java.io.PrintStream
java.io.PrintStreamクラスは主に文字列の出力を行う為のクラスです。
Systemに定義されたクラス変数outにはPrintStream型であり、PrintStreamクラスのメソッドを使用する事ができます。
しばしば使われるのはprint()メソッドとprintln()メソッドで様々な型を引数として呼び出せるようにオーバーロードされています。
以下にその一部を示します。
戻り値 | メソッド | 概要 |
---|---|---|
void | print(boolean b) | boolean 値を出力します。 |
void | print(int i) | 整数を出力します。 |
void | print(long l) | long 整数を出力します。 |
void | print(String s) | 文字列を出力します。 |
void | print(Object obj) | オブジェクトを出力します。 |
void | println(boolean x) | boolean 値を出力して、行を終了します。 |
void | println(int x) | 整数値を出力して、行を終了します。 |
void | println(long x) | long 値を出力して、行を終了します。 |
void | println(String x) | String を出力して、行を終了します。 |
void | println(Object x) | Object を出力して、行を終了します。 |
void | println() | 行区切り文字列を書き込むことによって、現在の行を終了します。 |
println()メソッドとprint()メソッドの違いは、改行が行われるか否かです。
引数には各種プリミティブ型およびにクラスを渡すことができます。
尚、println()メソッドは引数を指定しないことで改行のみを行うことが可能です。