2017-05-30 8 views
1

PrintStramクラスのメソッドにアクセスするには、オブジェクトが作成されていなければなりません。したがって、out変数がnullに割り当てられたときに、それらのメソッドにアクセスする方法は同じです。Systemクラスで静的に定義され、nullに割り当てられたOut変数は、PrintStreamクラスの非静的メソッドにどのようにアクセスできますか。

public final static PrintStream out = null; 

これはSystemクラスの宣言です。

同様のコードを書き込もうとしましたが、NullPointerExceptionを返します。私のコードは以下の通りです。

class First{ 

public void display(){ 
    System.out.println("Hello"); 
} 

} 

class Second{ 

public final static First s1=null; 

} 

    public class Third{ 

    public static void main(String[] args) { 

    Second.s1.display(); 

} 
} 

私は静的な表示方法のいずれかを行うか、フィールドが実行時にnullない

public final static First s1=new First(); 
+4

実行時に 'ヌル'ではありません。 – Kayaman

+1

System.outにネイティブコードではnull以外の値が割り当てられています。クラスにネイティブコードがありません。 – VGR

答えて

0

AS-S1を定義する必要があります。このコードの実行を作ること。関連するストリームstdoutなどがリダイレクトされている場合は割り当て済みです。このメカニズムはJVMの内部にあるため、コードはJDKソースでは容易には見えません。 System.setOut()を使用してフィールドを変更することができます。フィールドは最終的なもので、通常は割り当てられないため、内部メカニズムも使用します。

0

クラスの初期化後にドキュメントが呼び出されるため、System.initializeSystemClass()が見つかりませんでした。 in、out、errストリームを初期化します。これはネイティブメソッドを使用しているため、最終的な修飾子を尊重する必要はありません。

関連する問題