2011-04-15 79 views
0
import static java.lang.System.out; 
import java.io.FileNotFoundException; 
import java.io.PrintWriter; 

public class ShadowingByImporting 
{ 
    public static void main(String[] args)throws FileNotFoundException 
    { 
     out.println("Calling println() in java.lang.System.out"); 
     PrintWriter pw=new PrintWriter("log.txt"); 
     writeInfo(pw); 
     pw.flush(); 
     pw.close(); 
    } 

    public static void writeInfo(PrintWriter out)  
    { 
     out.println("Calling pritnln() in the parameter out"); 
     System.out.println("Calling println() in java.lang.System.out Example"); 
    } 
} 

上面的程序是在哈立德Mugal的SCJP指南中給出的,據他介紹,靜態導入中的shadowing原理是writeInfo中的第二個println方法。方法將執行兩次,但是當我運行以下不同的輸出時。關於java靜態導入的問題

請有人解釋一下實際的概念。

Calling println() in java.lang.System.out 

Calling println() in java.lang.System.out Example 
+2

不要這樣寫,請。 – dantuch 2011-04-15 09:46:06

回答

7

此無關,在一般情況下, 靜態導入,而是與該參數的writeInfoout是隱藏的out外定義,在這種情況下,恰好是一個靜態導入的事實。

這個隱藏也有可能當你有

public class ShadowingByImporting 
{ 
    PrintWriter out = ...; 
    public static void main(String[] args)throws FileNotFoundException 
    { 
0

在功能writeInfo,該出是一個局部變量,而的System.out是完全合格的,表示標準輸出流。

靜態導入通常用於將靜態公共對象導入到您的作用域中,如本例中的System.out。因此,您可以直接使用輸出,而不使用完全限定名稱ClassName.ObjectName,在這種情況下爲System.out。