Java:为什么Java中没有clrscr? - 想要更多澄清

时间:2013-07-14 05:35:07

标签: java cross-platform

我的朋友问了一个问题

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。我对John和mvp的答案持怀疑态度

3 个答案:

答案 0 :(得分:1)

System.out.println使用the standard output stream,它可以是控制台或其他东西(比如你的IDE的输出窗口)。

可以使用System.console()访问控制台本身,正如the documentation所指出的那样,它可以返回null。在那种情况下,不清楚clrscr应该做什么。

答案 1 :(得分:1)

问题是clrscr的可靠实现需要库方法知道它连接到哪种设备......这样它就可以做适当的事情来清除屏幕。库可能能够知道如何在Windows上执行此操作,但无法在所有平台上完成。

一般的理念是,如果某些功能无法在所有支持的平台上实现,那么标准Java类将不支持它。

但是,这并不意味着您无法自己实现clrscr自己的库...在了解了如何在与您相关的所有平台上执行此操作之后。或者你可以找到一个合适的第三方库。您可能会使您的应用程序不可移植,但这是您的担忧。

另一种解释是Java SE库不为老式终端/终端仿真器提供任何支持。 (相当于旧的“termcap”库。)为什么?因为现在很少有电脑和带有图形屏幕的电话。 (我不记得上次我使用真正的24x80终端了......但可能超过25年前!)


  

我对John和mvp的答案持怀疑态度:

很难解决你的怀疑。也许唯一可以说服你的是你尝试在各种各样的平台和输出设备上用Java实现clrscr ......

  

Thread.sleep()和System.out.println()之类的函数如何工作呢?

所有操作系统(或至少所有能够支持Java的操作系统)都提供具有所需功能的本机API /库。

  • 对于Thread.sleep,JVM实现通常使用POSIX sleep(...)函数。

  • 对于System.out.printlnoutPrintWriter,JVM创建一个连接到标准输出设备的PrintWriterprintln通话最有可能导致调用POSIX write功能。

clrscr不是这种情况。 C标准库不支持此功能。

答案 2 :(得分:0)

正如您引用的问题中所述,C不支持clrscr作为标准功能。由于控制台被清除,它意味着存在O.S.允许执行此操作的系统调用。假设并非所有O.S.都实现了这个系统调用,那么就不可能用Java实现它,或者实际上用任何其他语言实现它作为标准特性。