【问题标题】:Problem in System.out.println statementSystem.out.println 语句中的问题
【发布时间】:2010-01-23 13:56:38
【问题描述】:

每当我们在 Java 程序中编写任何要打印到控制台的语句时:

System.out.printSystem.out.println

在上面的两个语句中,我们在没有显式导入 java.io 包的情况下调用 PrintStream 对象的引用变量,那么我们如何访问该对象方法而不导致任何编译时错误?

【问题讨论】:

    标签: java import


    【解决方案1】:

    System 对象具有对嵌入其中的java.io.PrintStream 对象的引用。因此,您不需要显式导入这些信息 - 运行时可以明确地导出这些信息,因为它是在编译时嵌入的。

    如您所见,如果您直接使用 PrintStream 对象,则必须导入该对象。编译阶段不知道在哪里找到它(它可以搜索,但这很容易给出模棱两可的结果)。

    另请注意(以防有任何混淆),java.lang 是隐式导入的,因此您不需要 System 的导入语句。

    【讨论】:

      【解决方案2】:

      您只需要为您希望声明的类导入类名。所以,例如:

      PrintStream out = System.out;
      

      除非您导入了java.io.PrintStream,否则不会编译,但您可以使用 System.out 中的方法,因为此时它是“隐式”导入的,因为编译器确切地知道System.out 是什么类型。在某些语言中,例如Scala,您也不需要声明变量的类型,因为它可以通过type inference 计算出来。

      【讨论】:

        【解决方案3】:

        Imports 是语法糖,可让您避免输入,例如java.io.File file = new java.io.File("foo.txt") 每次,但允许您输入 File file = new File("foo.txt")

        没有别的了。

        因此,除非您必须创建一个新对象或将一个对象分配给一个变量,并且您想避免写出完整的类名,否则您不需要进行任何导入。

        (在上面认为接口是一个隐藏的类)

        【讨论】:

          猜你喜欢
          • 2020-03-19
          • 2013-09-18
          • 2010-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-04
          • 2015-05-11
          • 1970-01-01
          相关资源
          最近更新 更多