我的 friend 问了一个问题
Why Java doesn't support function like clrscr in C?
SO用户给出的答案是
John3136:由于 Java 是跨平台的并且可以在没有控制台的情况下运行,因此 clrscr 的含义必须根据应用程序的运行方式和平台而变化。>
mvp: Java 被设计为一次编写/编译,随处运行。而且这个功能不太适合这个议程。
我的问题是跨平台差异不是由 JVM 处理的吗? 那么像 Thread.sleep() 和 System.out.println() 这样的函数如何工作呢?它们还依赖于底层平台,比如 Linux 和 Windows 中线程的实现方式 [可能] 不同?
我主要关心的是如果像 System.out.println() 这样的函数可以在不同的平台上工作,那么也可以为不同的平台实现 clrscr 。我对约翰和 mvp 的回答有点怀疑
最佳答案
问题在于,clrscr
的可靠实现需要库方法知道它连接到哪种设备......以便它可以执行适当的操作来清除屏幕。库可能知道如何在 Windows 上执行此操作,但无法在所有平台上执行此操作。
一般的理念是,如果某些功能无法在所有支持的平台上实现,那么标准 Java 类将不支持它。
但是,这并不意味着您无法实现自己的库来自己执行clrscr
...在弄清楚如何在对您重要的所有平台上执行此操作之后。或者您可以找到合适的第三方库。您可能会面临使应用程序变得不可移植的风险,但这是您所关心的。
另一个解释是 Java SE 库不为老式终端/终端仿真器提供任何支持。 (相当于旧的“termcap”库。)为什么?因为如今带有图形屏幕的电脑和手机已经很少需要它了。 (我不记得上次使用真正的 24x80 终端是什么时候了……但可能是超过 25 年前了!)
<小时/>I am a little skeptical on John's and mvp's answer:
很难消除你的怀疑。也许唯一能让您信服的是您尝试自己在各种平台和输出设备上用 Java 实现 clrscr ...
How would a function like Thread.sleep() and System.out.println() work then?
所有操作系统(或至少所有能够支持 Java 的操作系统)都提供具有所需功能的 native API/库。
对于
Thread.sleep
,JVM 实现通常使用 POSIXsleep(...)
函数。对于
System.out.println
,out
是一个PrintWriter
,JVM 创建一个PrintWriter
连接到标准输出设备。println
调用很可能会导致调用 POSIXwrite
函数。
clrscr
的情况并非如此。 C 标准库不支持此功能。
关于Java : why no clrscr in Java ? - 需要更多说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17636816/