クラスの実装java.lang.System
を調べると、次のことがわかります。
public final static PrintStream out = null;
その定義だけから、 の値System.out
は常に であることがわかりますnull
。ただし、プログラムの開始時に初期化され ( System.initializeSystemClass()
JVM によってメソッドが自動的に呼び出されます)、セキュリティ チェックを実行する を使用してその値を変更できます。次に、値を変更するメソッドであるメソッドにSystem.setOut
呼び出しを委任します。の。宣言されているのに値を変更できるのはなぜですか?setOut0
native
System.out
System.out
final