2011-04-15 77 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。