每当我们在Java程序中编写任何要打印到控制台的语句时:
System.out.print
或System.out.println
在上面的两个语句中,我们调用PrintStream对象的引用变量而不显式导入java.io包,那么我们如何访问该对象方法而不会导致任何编译时错误?
答案 0 :(得分:6)
System对象引用了嵌入其中的java.io.PrintStream
个对象。因此,您不需要显式导入这些 - 运行时可以明确地获取此信息,因为它是在编译时嵌入的。
正如您所确定的,如果您直接使用PrintStream
对象,则必须导入该对象。编译阶段不知道在哪里找到它(可以搜索,但这很容易产生模糊的结果)。
另请注意(如果有任何混淆),隐式导入java.lang
,因此您不需要System
的导入语句。
答案 1 :(得分:4)
您只需为要声明的人导入类名。所以,例如:
PrintStream out = System.out;
除非您导入java.io.PrintStream
,否则不会编译,但您可以使用System.out之外的方法,因为它在那时“隐式”导入,因为编译器确切地知道什么类型System.out
是。在某些语言中,例如Scala,您也不需要声明变量的类型,因为它可以通过type inference来解决。
答案 2 :(得分:3)
进口是语法糖,可以让你避免打字,例如每次java.io.File file = new java.io.File("foo.txt")
,但允许您输入File file = new File("foo.txt")
。
别无其他。
因此,除非您必须创建新对象或将对象分配给变量,并且您希望避免完整地写出类名,否则不需要执行任何导入。
(在上面考虑接口为封闭类)