我正在看某人的代码并看到他多次宣布
PrintStream out = System.out;
后来被称为
out.println("blah");
我其实认为这有点整洁。这是一种常见做法吗?他只是喜欢?
答案 0 :(得分:7)
这是一种合理的方法。他基本上是为System.out
创建别名。有许多优点:
答案 1 :(得分:3)
为避免在执行小型测试时(不使用IDE)特别键入System.out.println
,我使用import static java.lang.System.out
代替
但是,如果您想稍后替换System.out
的值,或许可以将包装器重定向到文件
PrintStream out = new FilePrintStream("MyLogs.log"); // // System.out
立即静音标准输出。我重申 可能 在某些情况下有意义,因为我会使用Logging框架。
顺便说一下,最好将它声明为final和static:class YourClass {
private final static PrintStream out = System.out;
}
答案 2 :(得分:1)
这可能是因为通常不建议深入研究并使用属于其他对象的对象。有人看到有人伸手去拿你的钱从钱包里拿钱,而不是要你借给他一些钱。
这可能会有一些优点,如果需要,可以将输出流更改为文件,套接字或其他任何内容。所以他能够取代:
PrintStream out = System.out;
带
PrintStream out = new PrintStream(new FileOutputStream(filename));
然而,如果他反复一再声明它,他实际上正在失去上述优势,因为重点是将它集中在一个地方并决定在一个地方输出日志的位置。
请注意,这是一种非常粗糙的方式,真正的标准做法是使用日志记录。 Java有自己的包java.util.logging开箱即用,log4j是另一个非常强大的替代品(并且非常受欢迎),还有其他的。
答案 3 :(得分:0)
这是一个快捷方式,如果你做了很多println.
我之前已经看过它,但我倾向于不这样做,因为我觉得System.out.println
更清楚,因为你没有需要弄清楚out
的分配位置。我设置了一个eclipse模板,因此我可以将println
自动填充到System.out.println
,而且非常快。
答案 4 :(得分:0)
不。之前从未见过。
我同意。它不是太破旧......
答案 5 :(得分:0)
如果您查看文档中的Throwable.printStackTrace,您可以不带参数调用它,它只是将System.out传递给采用PrintStream的版本。
很常见的情况是可以传递许多不同的PrintStream对象并使打印代码更加简单。
答案 6 :(得分:0)
这是一个可爱的伎俩,但就像大多数可爱的技巧一样,做正确的事情可能会更好。
一旦你确定要记录日志(确实足以添加类似内容),为什么不让Log4J或其他一些具有更大灵活性和强大功能的日志系统呢?
如果你是独自一人,别名的东西很可爱又有趣,但即使你是一个非常慢的打字员,你每次输入它时都会节省5秒钟(通过System.out或"sysout +<ctrl-space>"
in eclipse / netbeans),当你第一次看到“out out”时,你会失去十倍的时间。并且不知道它的意思。
我的意思是,在一个程序中,让我们说你做了其他海报建议的内容并重定向“out”转到文件而不是STDOUT但是在某些类中,也许“out”仍然转到System.out。或者你可能忘了你将它重定向到一个文件。后来你进来说“嗯,它说:
out.println("WE MADE IT");
但我在STDOUT中没有看到这一行,到底是什么?“
然后你花4个小时跟踪一个不良指示,而不是修复错误。
答案 7 :(得分:0)
这是否是一个好主意是有争议的,可能取决于具体情况。
好的一面:
在负面:
out
变量是实例变量或必须作为参数传递。System.setOut()
,则可能会造成麻烦。应该指出的是,还有其他方法可以做到这一点;例如用实用方法System.out.println(String)
替换printLine(String)
可以在没有交叉耦合的情况下实现类似的效果。
答案 8 :(得分:0)
由于System.out
是final
变量,他所做的与直接引用System.out
相同。
除非有人致电System.setOut()
并重新分配System.out
。