2011-05-25 110 views

回答

2

为什么我们需要System类来调用out.println()方法?

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

...如果我们使用PrintStream对象并使用out.println(data),会有什么区别。

这取决于你如何获得PrintStream对象。

  • 如果您最初得到了System.outSystem.errPrintStream对象,那么就没有什么区别;例如下面有同样的效果:

    public void sayHello(PrintStream ps) { 
        ps.println("hello"); 
    } 
    sayHello(System.out); 
    System.out.println("hello"); 
    
  • 如果创建了为PrintStream上开了自己的流时,行为将类似,但输出(最有可能),去不同的地方;例如

    sayHello(new PrintStream(new FileOutputStream("foo.txt")); 
    

    会将“hello”写入指定文件。

System.in/out/err没什么特别的。它们只是public static final变量,它们在JVM启动时被初始化为特定的流对象。 (好吧,有些东西对他们来说有点不寻常......但它并没有在这里出现。)

4

System.out是“out”的静态引用。所以没有区别。

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

'import static java.lang.System.out;'的工作方式和别名一样好,不必按每个方法完成。 – 2011-05-26 05:18:55

0

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

1

绝对没有区别。从ProgrammerInterview.com

里面的System类是out看起来像声明:public static final PrintStream out,和Printstream类里面的println()宣告了,看起来像一个方法签名:public void println()

PrintStream是一种将数据流传输到标准输出的类。通过在System类中添加staticfinal的对象进行了关联。所以我们作为程序员可以使用它作为System的类名(System.out) out是静态对象PrintStream类和println()PrintStream类中的一种方法,它们都是重载方法。所以我们直接写System.out.println(data)

1

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

0

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

因此,无论采用哪种方式,我们调用该方法都是一样的。

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

0

System.out.println已经使用了这么多在Java代码的每一个不经意的读者知道他们的意思,过去的话。每个人都是这样写的,人们习惯了。

的代码可能会更难读,如果你第一次分配System.out给一个局部变量。这是因为在每一行中,您都必须问自己:“好的,有些东西会打印出来,但是其中?”。另一方面,成语System.out.println回答了这个问题。它显然从代码中作为输出内容展开(即使它仅用于调试目的)。

所以是的,你可以使用System.out.println的快捷方式,但在大多数情况下,你不应该。