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