System.out 到底是什么?
What is System.out exactly?
我注意到从尚未由命令行启动的 JAR 文件(即用户双击启动的可运行 JAR 文件)对 System.out.println()
的任何调用都不会打开控制台.
经过一些研究,我在网站上找到了多个答案:
System.out.println in jar
There is no problem doing like that. But where do you expect to see the output?
If you run the code in some way that doesn't attach a console - such as javaw
on Windows, which is the default program associated with executable jar files - then the output won't go anywhere. It won't cause any errors - the text will just be lost.
据我了解,System.out
不代表控制台。它确实表示可以由需要显示它的任何东西处理的数据。
我说得对吗?
System.out
到底是什么?
- 如何从用户双击启动的 Runnable JAR 文件打开控制台?
System
是 final
class 来自 java.lang
包(java 中的默认包)并且无法实例化。
out
是 System
class 的 static
成员字段,类型为 PrintStream
,其访问说明符为 public final
。
println
– 是 PrintStream
class 的重载方法。 println
打印传递给标准控制台的参数和换行符。有多个 println
个具有不同参数的重载方法。每 println
调用 print 方法并添加一个换行符。在内部,打印调用 write()
和 write()
负责将数据显示到标准输出 window.
这是它内部的样子:
//the System class belongs to java.lang package
class System {
public static final PrintStream out;
//...
}
//the Prinstream class belongs to java.io package
class PrintStream{
public void println();
//...
}
因此,我们不需要实例化 System
对象来将消息打印到屏幕;我们只需调用系统 class 的 public static PrintStream
成员 out
上的 println
方法。
但是你不能创建PrintStream
的对象并调用println
函数。当你想打印到标准输出时,你将使用System.out
。 这是唯一的方法。实例化 PrintStream
将允许您写入指定的文件或 OutputStream,但与控制台没有任何关系。
但是,您可以将 System.out
传递给 PrintStream
,然后在 PrintStream
对象上调用 println 以打印到标准输出。这是一个小例子:
import java.io.*;
public class SystemOutPrintlnDemo
{
public static void main(String[] args)
{
//creating PrintStream object
PrintStream ps = new PrintStream(System.out);
ps.println("Hello World!");
ps.print("Hello World Again!");
//Flushes the stream
ps.flush();
}
}
此处,System.out
代表输出流 - 您的输出将到达的位置。默认情况下,它设置为控制台。但您可以将其更改为其他类似文本文件。大多数情况下,在大型应用程序中,它用于日志记录(通常由新程序员使用,坏主意)。在这种情况下,您可以在相应的日志文件中看到输出。
现代操作系统(以及就此而言,一些较旧的操作系统)中的进程获得三个与之关联的标准 "streams":
- 标准:基于流的输入 (
stdin
)
- 标准输出:基于流的输出 (
stdout
)
- 标准错误:基于流的错误输出(
stderr
)
它们统称为 standard streams。
默认情况下,System.in
、System.out
和 System.err
是 Java 写入这些流的标准机制。
从命令行调用的程序 运行 在命令行中的击键转到 stdin
的环境中,stdout
和 stderr
的输出在控制台中显示为文本。它们可以被重定向到文件等。
通过 GUI 启动的程序通常不会将这些流挂接到您可以看到的任何内容。
我在上面说 "by default" 是因为您可以使用对 System
的调用来更改这些流指向的位置(它们具有创意名称,例如 setIn
, setOut
, and setErr
。)
How do I open the console from a Runnable JAR file started by user with double-click?
那里存在错误的相关性:jar 是 运行nable 的事实并不是您看不到流的原因。如果你在命令行 运行 一个 运行nable jar,你会看到它的标准输出。
如果你 运行 它没有与某种控制台相关联,你是否可以看到该输出将取决于你如何 运行 安装它,并且可能,它是如何编写的.许多 GUI 框架会将标准输出和错误重定向到日志文件。或者该应用程序可能会提供调试选项。没有一个标准答案(没有双关语)。
我注意到从尚未由命令行启动的 JAR 文件(即用户双击启动的可运行 JAR 文件)对 System.out.println()
的任何调用都不会打开控制台.
经过一些研究,我在网站上找到了多个答案:
System.out.println in jar
There is no problem doing like that. But where do you expect to see the output?
If you run the code in some way that doesn't attach a console - such as
javaw
on Windows, which is the default program associated with executable jar files - then the output won't go anywhere. It won't cause any errors - the text will just be lost.
据我了解,System.out
不代表控制台。它确实表示可以由需要显示它的任何东西处理的数据。
我说得对吗?
System.out
到底是什么?- 如何从用户双击启动的 Runnable JAR 文件打开控制台?
System
是 final
class 来自 java.lang
包(java 中的默认包)并且无法实例化。
out
是 System
class 的 static
成员字段,类型为 PrintStream
,其访问说明符为 public final
。
println
– 是 PrintStream
class 的重载方法。 println
打印传递给标准控制台的参数和换行符。有多个 println
个具有不同参数的重载方法。每 println
调用 print 方法并添加一个换行符。在内部,打印调用 write()
和 write()
负责将数据显示到标准输出 window.
这是它内部的样子:
//the System class belongs to java.lang package
class System {
public static final PrintStream out;
//...
}
//the Prinstream class belongs to java.io package
class PrintStream{
public void println();
//...
}
因此,我们不需要实例化 System
对象来将消息打印到屏幕;我们只需调用系统 class 的 public static PrintStream
成员 out
上的 println
方法。
但是你不能创建PrintStream
的对象并调用println
函数。当你想打印到标准输出时,你将使用System.out
。 这是唯一的方法。实例化 PrintStream
将允许您写入指定的文件或 OutputStream,但与控制台没有任何关系。
但是,您可以将 System.out
传递给 PrintStream
,然后在 PrintStream
对象上调用 println 以打印到标准输出。这是一个小例子:
import java.io.*;
public class SystemOutPrintlnDemo
{
public static void main(String[] args)
{
//creating PrintStream object
PrintStream ps = new PrintStream(System.out);
ps.println("Hello World!");
ps.print("Hello World Again!");
//Flushes the stream
ps.flush();
}
}
此处,System.out
代表输出流 - 您的输出将到达的位置。默认情况下,它设置为控制台。但您可以将其更改为其他类似文本文件。大多数情况下,在大型应用程序中,它用于日志记录(通常由新程序员使用,坏主意)。在这种情况下,您可以在相应的日志文件中看到输出。
现代操作系统(以及就此而言,一些较旧的操作系统)中的进程获得三个与之关联的标准 "streams":
- 标准:基于流的输入 (
stdin
) - 标准输出:基于流的输出 (
stdout
) - 标准错误:基于流的错误输出(
stderr
)
它们统称为 standard streams。
默认情况下,System.in
、System.out
和 System.err
是 Java 写入这些流的标准机制。
从命令行调用的程序 运行 在命令行中的击键转到 stdin
的环境中,stdout
和 stderr
的输出在控制台中显示为文本。它们可以被重定向到文件等。
通过 GUI 启动的程序通常不会将这些流挂接到您可以看到的任何内容。
我在上面说 "by default" 是因为您可以使用对 System
的调用来更改这些流指向的位置(它们具有创意名称,例如 setIn
, setOut
, and setErr
。)
How do I open the console from a Runnable JAR file started by user with double-click?
那里存在错误的相关性:jar 是 运行nable 的事实并不是您看不到流的原因。如果你在命令行 运行 一个 运行nable jar,你会看到它的标准输出。
如果你 运行 它没有与某种控制台相关联,你是否可以看到该输出将取决于你如何 运行 安装它,并且可能,它是如何编写的.许多 GUI 框架会将标准输出和错误重定向到日志文件。或者该应用程序可能会提供调试选项。没有一个标准答案(没有双关语)。