Java の学習を始めると、真っ先に出会うメソッドが System.out.println("Hello, World!");
です。画面に文字を表示する代表的な方法として、初心者から熟練エンジニアまで幅広く使われます。

しかし、「なぜこんなにも当たり前のように使えるのか?」「このメソッドはいったいどんな仕組みなのか?」を、意外と曖昧にしている方も多いのではないでしょうか。
この記事では「なるほど、そうだったのか」と納得できるよう、基本的な知識は取得した中級者の方向けにSystem.out.println
の正体や動作原理を整理して解説していきます。
System クラスと println の関係
まず超前提ですがSystem.out.println
は、Systemクラスの「outフィールド」にある printlnメソッドを呼び出す、という意味です。
要素 | 説明 |
---|---|
System | Javaの標準クラス(java.langパッケージ) |
out | System クラスのpublic staticなフィールド。型は PrintStream 。 |
println() | PrintStream クラスのメソッド。画面に文字を表示する。 |
まずは、System
というクラスから。これは一体どんなクラスなの?ってのを見ていきたいと思います。
System クラス→java.langパッケージに属する
out フィールド:何者なのか
System
クラスにはout
、err
、in
というフィールドがありますが、そのうちのout
は 標準出力 を指し示すフィールドです。- シグニチャは次のようになっています。
public static final PrintStream out;
- Q標準出力とは?
- A
「画面(コンソール)に文字を表示すること」を指します。標準出力は「出力先」の1つで、他にも「ファイル出力」や「ネットワーク出力」などがあります。が標準出力と言ったら「コンソール」です。
println メソッド:実は PrintStream のメソッド
ポイント よく使うメソッド
メソッド | 説明 | 使用例 | 出力例 |
---|---|---|---|
print() | 改行なしで表示する | System.out.print("Hello"); | Hello |
println() | 表示して改行する | System.out.println("World"); | World (+改行) |
printf() | 書式付きで出力する | System.out.printf("%d円", 100); | 100円 |
write() | バイトを出力する(低レベル) | System.out.write(65); | A (65 = 'A'のASCII) |
flush() | バッファに溜まったデータを強制的に出力 | バッファを明示的に流す(通常は不要) | - |
どうして画面に文字が出るの?:JVM と OS 標準出力のしくみ
Java コード上は println
を呼び出すだけで文字が表示されますが、背後ではもう少し複雑な処理が行われています。
- Java コード →
PrintStream
への書き込みprintln("Hello")
が呼ばれると、まずはPrintStream
オブジェクトに文字列やバイトデータが渡されます。 PrintStream
→ OS(標準出力、stdout)PrintStream
は内部バッファを通して、必要に応じて OS が提供する「標準出力 (stdout)」に書き込みを行います。Windows ならCONOUT$
、Unix 系ならファイルディスクリプタ1
が相当。- コンソールに文字が表示される
OS が受け取った文字データをコンソールに転送し、結果として開発者は文字が画面に映ったのを確認できるわけです。
コード例:ちょっと応用してみる
実際に、簡単なコード例を見てみましょう。
public class Main { public static void main(String[] args) { System.out.println("=== プログラム開始 ==="); // 数値や真偽値も出力できる System.out.println(123); System.out.println(true); // 改行なし出力 → print System.out.print("改行はなく、"); System.out.print("ここに続く。"); System.out.println(); // 改行のみ System.out.println("=== プログラム終了 ==="); } }
System.out.println("=== プログラム開始 ===");
→ 文字列を改行付きで表示System.out.println(123);
→ 整数を文字列に変換して表示System.out.print(...)
→ 改行せず、文字が連続して表示される
こうしたコードを書きながら、「println
は PrintStream
のメソッドなんだ」と意識しておくと、理解が深まるはずです。
Systemクラスの代表的なメソッド一覧
メソッド | 説明 | サンプルコード | 出力例/動作 |
---|---|---|---|
currentTimeMillis() | 現在の時刻(ミリ秒)を取得 | System.out.println(System.currentTimeMillis()); | 例:1711529876543 |
nanoTime() | より高精度な時間(ナノ秒)を取得 | System.out.println(System.nanoTime()); | 例:753318543210987 |
exit(int status) | プログラムを終了させる | System.exit(0); | JVMを終了(以降の処理は行われない) |
gc() | ガベージコレクションを起動(お願いベース) | System.gc(); | メモリの整理を試みる(強制ではない) |
arraycopy() | 配列の一部をコピーする | System.arraycopy(src, 0, dest, 0, 3); | 配列要素がコピーされる |
getProperties() | システム情報(プロパティ)を取得 | System.out.println(System.getProperties()); | JavaやOSの情報一覧 |
getProperty(String key) | 特定のシステムプロパティを取得 | System.out.println(System.getProperty("java.version")); | 例:17.0.8 |
使い方のサンプル
① 時間の測定
long start = System.currentTimeMillis(); // 処理をする long end = System.currentTimeMillis(); System.out.println("処理時間:" + (end - start) + "ms");
② 配列コピー
int[] src = {1, 2, 3, 4, 5}; int[] dest = new int[3]; System.arraycopy(src, 0, dest, 0, 3); System.out.println(java.util.Arrays.toString(dest)); // [1, 2, 3]
③ システム情報の取得
System.out.println(System.getProperty("os.name")); // OS名を表示 System.out.println(System.getProperty("user.dir")); // カレントディレクトリ