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");
}
}
上面的程序在Khalid Mugal的SCJP指南中给出,根据他的静态导入中的阴影原理写入writeInfo中的第二个println方法。方法将执行两次,但是当我运行以下不同的输出时。
请有人解释一下实际的概念。
Calling println() in java.lang.System.out
Calling println() in java.lang.System.out Example
答案 0 :(得分:7)
这一般与静态导入无关,
但更确切地说,out
的参数writeInfo
隐藏了out
的外部定义,在这种情况下恰好是静态导入。
当你有
时,这种隐藏也是可能的public class ShadowingByImporting
{
PrintWriter out = ...;
public static void main(String[] args)throws FileNotFoundException
{
答案 1 :(得分:0)
在函数writeInfo
中,out是局部变量,而 System.out 是完全限定的,表示标准输出流。
静态导入通常用于将静态公共对象导入范围,例如在本例中为System.out。因此,您可以直接使用 out 而不使用完全限定名称 ClassName.ObjectName ,在这种情况下为System.out。