console.writeline
和 System.out.println
之间的技术区别到底是什么?我知道 System.out.println
写入标准输出,但这与控制台不是一回事吗?
我不完全理解 console.writeline
的 文档。
原文由 ziggy 发布,翻译遵循 CC BY-SA 4.0 许可协议
它们本质上是相同的,如果您的程序是从交互式提示符运行的并且您没有重定向标准输入或标准输出:
public class ConsoleTest {
public static void main(String[] args) {
System.out.println("Console is: " + System.console());
}
}
结果是:
$ java ConsoleTest
Console is: java.io.Console@2747ee05
$ java ConsoleTest </dev/null
Console is: null
$ java ConsoleTest | cat
Console is: null
Console
存在的原因是提供在您从交互式命令行运行的特定情况下有用的功能:
Console
会将它们很好地排队,而如果您使用 System.in/out 那么所有提示将同时出现)。请注意,即使重定向 其中一个 流也会导致 System.console()
返回 null
;另一个令人恼火的是,当从另一个程序(如 Eclipse 或 Maven)生成时,通常没有可用的 Console
对象。
原文由 SimonJ 发布,翻译遵循 CC BY-SA 2.5 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
这是使用
System.out
/.err
.in
System.console()
System.console()
如果您的应用程序未在终端中运行,则返回 null( 尽管您可以在您的应用程序中处理此问题)System.console()
提供不回显字符读取密码的方法System.out
和System.err
使用默认平台编码,而Console
类输出方法使用控制台编码后一种行为可能不会立即显而易见,但像这样的代码可以证明差异:
在我的系统编码为 windows-1252 和默认控制台编码为 IBM850 的 Windows XP 上,这段代码将写成:
请注意,此行为取决于控制台编码被设置为与系统编码不同的编码。由于一系列历史原因,这是 Windows 上的默认行为。