PR

System.out.printlnをあえて中級者向けに3分でわかりやすく解説

Java

Java の学習を始めると、真っ先に出会うメソッドが System.out.println("Hello, World!"); です。画面に文字を表示する代表的な方法として、初心者から熟練エンジニアまで幅広く使われます。しかし、「なぜこんなにも当たり前のように使えるのか?」「このメソッドはいったいどんな仕組みなのか?」を、意外と曖昧にしている方も多いのではないでしょうか。

この記事では「なるほど、そうだったのか」と納得できるよう、基本的な知識は取得した中級者の方向けにSystem.out.println の正体や動作原理を整理して解説していきます。

スポンサーリンク

System クラスと println の関係

まず超前提ですが、Systemクラスです。一体これはどんなクラスなの?ってのを見ていきたいと思います。

System クラス→java.langパッケージに属する

  • Systemjava.lang パッケージに属します。
  • java.lang は Java 言語の最も基本的なクラス群を集めた特別なパッケージで、StringMathThread などもこの中に含まれます。
  • Systemfinal 修飾子が付与されているため、継承ができません。

out フィールド:何者なのか

  • System クラスには outerrin というフィールドがありますが、そのうちの out標準出力 を指し示すフィールドです。
  • シグニチャは次のようになっています。
public static final PrintStream out;
  • public : どのクラスからでもアクセス可能
  • static : クラスに紐づくフィールド(インスタンス化不要)
  • final : 再代入は基本できない(※運用上は System.setOut(...) で差し替えられるが、特殊用途)
  • 型 : PrintStream(後述)

println メソッド:実は PrintStream のメソッド

  • System.out.printlnprintln は、out フィールドが指す PrintStream クラスのメソッドです。
  • フルネームは java.io.PrintStream#println(...)
  • 文字列や数値など、様々な引数型にオーバーロードされており、末尾に改行を付加して出力します。改行を付けない場合は print(...) を使います。

どうして画面に文字が出るの?:JVM と OS 標準出力のしくみ

Java コード上は println を呼び出すだけで文字が表示されますが、背後ではもう少し複雑な処理が行われています。

  1. Java コード → PrintStream への書き込み
    println("Hello") が呼ばれると、まずは PrintStream オブジェクトに文字列やバイトデータが渡されます。
  2. PrintStream → OS(標準出力、stdout)
    PrintStream は内部バッファを通して、必要に応じて OS が提供する「標準出力 (stdout)」に書き込みを行います。Windows なら CONOUT$、Unix 系ならファイルディスクリプタ 1 が相当。
  3. コンソールに文字が表示される
    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(...)
    → 改行せず、文字が連続して表示される

こうしたコードを書きながら、printlnPrintStream のメソッドなんだ」と意識しておくと、理解が深まるはずです。

タイトルとURLをコピーしました