可执行jar中的“System.out.println()”会发生什么?

假设我已经从我使用过的代码中创建了一个executable jar

 System.out.println() 

当我们运行可执行jar时,没有控制台。 那么,这条线会发生什么? java如何处理这种情况?

编辑01

注意 :情况是当我不使用控制台运行jar或任何控制台与它关联时。

编辑02 :让事情更清晰:

我知道没有任何东西可以在任何地方打印,因为没有控制台..! 我想知道java在这种情况下如何处理这一行? 生成可执行jar的字节码时是否省略了这一行? 或者,当没有控制台时,这条线是否被忽略了? 还是什么……

在可执行jar文件中运行代码没什么特别之处。 如果从控制台运行它,例如使用java -jar foo.jar ,输出仍将转到控制台。

如果以某种方式运行代码而不附加控制台 – 例如Windows上的javaw ,这是与可执行jar文件关联的默认程序 – 那么输出将不会出现在任何地方。 它不会导致任何错误 – 文本将丢失。

请注意,在这种情况下,如果您使用System.console()将返回null 。 所以:

 System.out.printf("Foo%n"); // No problem. Goes nowhere. System.console().printf("Foo%n"); // Would throw a NullPointerException. 

只要您不从控制台窗口( java -jar executable.jar )运行应用程序,就会省略输出。 此外,您可以配置Java安装,以便在启动Java应用程序时立即启动控制台窗口。 然后输出将写入JVM的控制台窗口。 您可以找到一篇文章如何启用和查看Java控制台? 在Java官方网站上。

激活Java控制台

我从控制台(java -jar YourJar.jar)打开它,文本将在控制台窗口中打印出来。

如果您在资源管理器(或类似)中打开它,您将看不到该文本

澄清你的第二个编辑:字节码没有被省略,因为编译器无法知道jar将在什么上下文中执行。 jar子总是可以从控制台调用,在这种情况下,println必须留在那里。

事实上,许多jar文件在其他情况下将完全无用。 有许多Java程序通过控制台输入和输出与用户交互。 java-Program 没有必要拥有GUI(或完全在后台运行)。