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)
这无关与一般的静态导入,而是用事实参数out的writeInfo隐藏着外定义的out,在这种情况下,恰好是一个静态导入.
你有这种隐藏也是可能的
public class ShadowingByImporting
{
PrintWriter out = ...;
public static void main(String[] args)throws FileNotFoundException
{
Run Code Online (Sandbox Code Playgroud)