Java 为什么我们需要系统类来调用.println()方法?

Java 为什么我们需要系统类来调用.println()方法?,java,Java,当我们想在控制台中打印行时,我们编写System.out.println(数据),若我们使用PrintStream对象out和out.println(数据),会有什么不同 谢谢。系统。out是对打印流的静态引用。所以没有区别 PrintStream out = System.out; out.println("Badgers"); 无,但out通常用作程序中的变量,因此它可能不明确。完全没有区别。发件人: 在系统类内部是输出的声明,看起来像:公共静态最终打印流输出,在打印流类内部是printl

当我们想在控制台中打印行时,我们编写System.out.println(数据),若我们使用PrintStream对象out和out.println(数据),会有什么不同


谢谢。

系统。out
是对
打印流的静态引用。所以没有区别

PrintStream out = System.out;
out.println("Badgers");

无,但
out
通常用作程序中的变量,因此它可能不明确。

完全没有区别。发件人:

系统
类内部是
输出
的声明,看起来像:
公共静态最终打印流输出
,在
打印流
类内部是
println()
的声明,其方法签名看起来像:
public void println()


PrintStream
是一个将数据流传输到标准输出的类。通过在
系统
类中添加
静态
最终
输出的对象来建立关联。因此,作为程序员,我们可以使用它作为系统。类名
(System.out)
out是
PrintStream
类的静态对象,
println()
PrintStream
类中的方法,它们是重载方法。因此,我们直接编写
System.out.println(data)

System.out
是一个静态
PrintStream
对象,它绑定到系统的一个特殊文件:标准输出。您可以将其引用分配给任何其他
PrintStream
变量

为什么我们需要系统类来调用.println()方法

我们没有。这只是一种获取
PrintStream
对象以写入标准输出的方便方法

。。。如果我们使用PrintStream对象out和out.println(数据),会有什么不同

这取决于您如何获得
PrintStream
对象

  • 如果最初从
    System.out
    System.err
    获取
    PrintStream
    对象,则没有区别;e、 g.以下各项具有相同的效力:

    public void sayHello(PrintStream ps) {
        ps.println("hello");
    }
    sayHello(System.out);
    System.out.println("hello");
    
  • 如果您在自己打开的流上创建了PrintStream,其行为将是类似的,但输出(很可能)将转到不同的位置;e、 g

    sayHello(new PrintStream(new FileOutputStream("foo.txt"));
    
    将向命名文件写入“hello”

系统没有什么特别之处。in/out/err
。它们只是在JVM启动时初始化为特定流对象的
公共静态final
变量。(好的,它们有点不寻常……但在这里没有体现出来。)

println()
PrintStream
类中的一个方法。out是
PrintStream
类的对象,在
System
类中定义为带有控制台地址的静态常量

因此,无论我们以何种方式调用该方法,它都是相同的


但是,如果您不想使用
System
类,则需要通过提供标准的输出地址来创建
PrintStream
对象。

单词
System.out.println
在过去被大量使用,以至于Java代码的每一个普通读者都知道它们的含义。每个人都这样写,人们已经习惯了

如果首先将
System.out
赋值给局部变量,则代码可能更难读取。这是因为在每一行中,你都必须问自己:“嗯,有些东西被打印出来了,但是在哪里?”。另一方面,成语
System.out.println
回答了这个问题。它从代码中清晰地显示为输出的内容(即使只是为了调试目的)


因此,是的,您可以使用
System.out.println
的快捷方式,但在大多数情况下,您不应该这样做。

导入静态java.lang.System.out
与别名一样有效,不必按照每个方法执行。