在java中使用自定义方法将行打印到控制台
我有这样简单的程序在java中使用自定义方法将行打印到控制台,java,Java,我有这样简单的程序 class println { public static void main(String[] args) { System.out.println("Hello World!"); } } 但是我不想使用System.out.println来打印。我想使用我自己的用户定义方法来打印数据。请记住,Java代码在JVM中运行,JVM只以几种指定的方式与外部世界通信。因此,如果您想要打印到控制台,您将需要调用一个方法,该方法(在JNI等之后)以某种方式映射到实
class println
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
但是我不想使用
System.out.println
来打印。我想使用我自己的用户定义方法来打印数据。请记住,Java代码在JVM中运行,JVM只以几种指定的方式与外部世界通信。因此,如果您想要打印到控制台,您将需要调用一个方法,该方法(在JNI等之后)以某种方式映射到实际操作系统上的IO操作。除非您计划构建一个新的OS级IO操作(在这种情况下,您无论如何都不能用Java编写),否则最好使用已经知道如何与外部世界对话的现有类
class HelloWorld
{
public static void main(String[] args)
{
myPrint("Hello World!");
}
public static void myPrint(String message) {
System.out.print(message + "\n");
}
}
碰巧,java.io.PrintStream
类知道如何写入操作系统级文件流,操作系统为控制台提供文件流(stdout
)。(从技术上讲,PrintStream
只知道如何写入OutputStream
,OutputStream
知道如何写入操作系统级的文件流,但我不想陷入细节的泥潭。)Java提供了一个PrintStream
实例,它已经附加到了进程的标准输出流中;该PrintStream
对象可以被引用为java.lang.System
对象的out
属性。鉴于PrintStream
具有类似println()
的方法,您可以编写:
java.lang.System.out.println("Hello, world!");
由于默认情况下总是导入java.lang.*
,因此可以将其缩短为:
System.out.println("Hello, world!");
或者,您可以将PrintStream
实例指定给局部变量:
import java.io.PrintStream;
public class HelloWorld {
public static void main(String[] args) {
PrintStream p = System.out;
p.println("Hello, world!");
}
}
您的“要打印的用户定义方法”做了什么,而
PrintStream
对象的println()方法做不到?如果您对格式化输出感兴趣,那么在调用println()
方法之前,需要将其格式化为字符串。为了方便起见,您可以将格式化和实际打印打包到一个助手方法中。这就是您真正想要的吗?请记住,Java代码在JVM中运行,JVM只以几种特定的方式与外部世界通信。因此,如果您想要打印到控制台,您将需要调用一个方法,该方法(在JNI等之后)以某种方式映射到实际操作系统上的IO操作。除非您计划构建一个新的OS级IO操作(在这种情况下,您无论如何都不能用Java编写),否则最好使用已经知道如何与外部世界对话的现有类
碰巧,java.io.PrintStream
类知道如何写入操作系统级文件流,操作系统为控制台提供文件流(stdout
)。(从技术上讲,PrintStream
只知道如何写入OutputStream
,OutputStream
知道如何写入操作系统级的文件流,但我不想陷入细节的泥潭。)Java提供了一个PrintStream
实例,它已经附加到了进程的标准输出流中;该PrintStream
对象可以被引用为java.lang.System
对象的out
属性。鉴于PrintStream
具有类似println()
的方法,您可以编写:
java.lang.System.out.println("Hello, world!");
由于默认情况下总是导入java.lang.*
,因此可以将其缩短为:
System.out.println("Hello, world!");
或者,您可以将PrintStream
实例指定给局部变量:
import java.io.PrintStream;
public class HelloWorld {
public static void main(String[] args) {
PrintStream p = System.out;
p.println("Hello, world!");
}
}
您的“要打印的用户定义方法”做了什么,而PrintStream
对象的println()方法做不到?如果您对格式化输出感兴趣,那么在调用println()
方法之前,需要将其格式化为字符串。为了方便起见,您可以将格式化和实际打印打包到一个助手方法中。这就是您真正想要的吗?这里有一个猜测:这是用于日志记录的吗?我猜,有相当一部分人希望向控制台写入数据是为了记录日志,而有很大一部分人不想使用System.out.println(),这样他们就可以更好地控制这种特定形式的日志的打开和关闭
如果我的猜测是正确的,我是否可以建议研究像or/k这样的日志框架?您将获得控制台附加程序和所需的任何控制程度。这里有一个猜测:这是用于日志记录的吗?我猜,有相当一部分人希望向控制台写入数据是为了记录日志,而有很大一部分人不想使用System.out.println(),这样他们就可以更好地控制这种特定形式的日志的打开和关闭
如果我的猜测是正确的,我是否可以建议研究像or/k这样的日志框架?您将获得控制台附加程序和所需的任何控制程度。System.out.println
是对类系统的静态实例out
(classPrintStream
)的方法println
的调用
在Java中,无法重命名现有方法或实例字段(即不能将println
或out
的名称更改为任何其他名称)和System.out
是获取out
值的唯一方法(它将您连接到控制台)
因此,没有办法实现您想要的。System.out.println
是对类系统的静态实例out
(classPrintStream
)的方法println
的调用
在Java中,无法重命名现有方法或实例字段(即不能将println
或out
的名称更改为任何其他名称),而System.out
是获取out