关于java上静态导入的问题

yag*_*nya 0 java

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");
    }  
}
Run Code Online (Sandbox Code Playgroud)

上面的程序是在Khalid Mugal的SCJP指南中给出的,根据他的静态导入中的阴影原理写入writeInfo中的第二个println方法.方法将执行两次,但是当我运行以下不同的输出时.

请有人解释一下实际的概念是什么.

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

Calling println() in java.lang.System.out Example
Run Code Online (Sandbox Code Playgroud)

Hei*_*upp 7

这无关与一般的静态导入,而是用事实参数outwriteInfo隐藏着外定义的out,在这种情况下,恰好是一个静态导入.

你有这种隐藏也是可能的

public class ShadowingByImporting
{
    PrintWriter out = ...;
    public static void main(String[] args)throws FileNotFoundException
    {
Run Code Online (Sandbox Code Playgroud)