如何重新实现System.out.print()

时间:2017-07-20 01:11:59

标签: java methods

出于好奇,可以制作一个在参数中打印字符串的方法 我没有理由这样做我只是想知道out.print和out.println幕后发生了什么

consoleString("Hello World!");    

public consoleString(string stringForConsole) {
    stringForConsole = What would go here to print this into the console?;

}

3 个答案:

答案 0 :(得分:1)

非常基本的问题,但

public consoleString(String stringForConsole) {
    System.out.println (stringForConsole);
}

如果你使用像Eclipse这样的IDE,你可以进入代码并看看它在做什么。

例如,如果单击out,您将看到它正在使用PrintStream并使用

 * @see     java.io.PrintStream#println()
 * @see     java.io.PrintStream#println(boolean)
 * @see     java.io.PrintStream#println(char)
 * @see     java.io.PrintStream#println(char[])
 * @see     java.io.PrintStream#println(double)
 * @see     java.io.PrintStream#println(float)
 * @see     java.io.PrintStream#println(int)
 * @see     java.io.PrintStream#println(long)
 * @see     java.io.PrintStream#println(java.lang.Object)
 * @see     java.io.PrintStream#println(java.lang.String)

答案 1 :(得分:1)

这是特定于平台的,但在Linux系统(和其他* nix系统)上,您可以打开/dev/stdout并写入它。像,

PrintStream ps = new PrintStream(new FileOutputStream(new File("/dev/stdout")));
ps.println("Hello, World");

答案 2 :(得分:0)

问: 在out.print和out.println

的幕后发生了什么

这是一个棘手的问题。我不确定,但您实际上可以看到System.out.println(...)的源代码,并从那里开始跟踪其代码路径。

Java源代码可从JDK包中获得,可以在Oracle的Java下载页面here上获取。

- 这适用于Linux x64软件包.--

解压缩包,您将在其中看到名为src.zip的另一个嵌套zip包。解压缩源代码。

System.out代码路径

签出文件lang/System.java文件,您将看到println()的实施。

万一你懒得做上面的步骤。这就是它的样子。

public final class System {
    ...
    public final static PrintStream out = null;
    ...
}

所以System.out实际上是PrintStream类。所以现在......你需要看一下PrintStream类......

Blah Blah和故事从PrintStream课继续。

你最终会看到这段代码。

public void write(...) {
    try {
        synchronized (this) {
            ensureOpen();
            out.write(b);
            if ((b == '\n') && autoFlush)
                out.flush();
        }
    }
    catch (InterruptedIOException x) {
        Thread.currentThread().interrupt();
    }
    catch (IOException x) {
        trouble = true;
    }
}

注意。这不是故事的结尾......代码仍在继续,直到您在屏幕上看到输出。