java println源码_System.out.println()相关源码
System.out.println是一個Java語句,一般情況下是將傳遞的參數,打印到控制臺。
System:是 java.lang包中的一個final類。根據javadoc,“java.lang.System該類提供的設施包括標準輸入,標準輸出和錯誤輸出流; 訪問外部定義的屬性和環境變量; 一種加載文件和庫的方法; 以及用于快速復制數組等一部分的實用方法… ”
out:是System類的靜態成員字段,類型為PrintStream。
public static final PrintStream out
他在啟動時就會被實例化,并與主機的標準輸出控制臺進行映射。該流在實例化之后立即打開,并準備接受數據。
println:是PrintStream類的一個方法。println打印(參數內容+換行符) 到控制臺。
PrintStream類中有多個重載的println方法。每個println是通過調用print方法并添加一個換行符實現的。print方法是通過調用write方法實現的。
System.out.println() 結構圖如下:
部分代碼段:
public final classSystem {
staticPrintStream out;
staticPrintStream err;
staticInputStream in;
...
}
public class PrintStream extendsFilterOutputStream {
//out object is inherited from FilterOutputStream class
public voidprintln() {
...
}
有一個普遍的觀念需要大家知道——System.out.println性能并不好。當我們深入分析時,其調用順序如下println - > print - > write()+ newLine()。這個順序流是Sun / Oracle JDK的實現。write()和newLine()都包含一個synchronized塊。同步有一點開銷,但更多的是添加字符到緩沖區和打印的開銷更大。
當我們運行性能分析時,運行多個System.out.println并記錄時間,執行時間會按比例增加。當打印超過50個字符并打印超過50,000行時,性能下降。
當然這一切都取決于我們使用的場景。不過無論如何請勿使用System.out.println打印日志( logging)到stdout。
靜態導入來縮短System.out.println
有時我們覺得System.out.println是一個很長的語句要打印。靜態導入可能會縮短一點,但不推薦使用,因為它導致可讀性差。我只是使用這種情況來解釋靜態導入,并避免在下面的情況下使用它。
import staticjava.lang.System.out;public classShortSOP {public static voidmain(String[] args) {
out.println("Hello, world");
}
}
不靜態導入的話直接寫out.println會提示編譯錯誤的。
輸出重定向——改變輸出路徑
out對象可以自定義的。在啟動時由java運行時環境初始化,并且可以在執行期間由開發人員更改。代替在默認情況下的標準輸出。當您通過命令行運行程序時,輸出將打印在同一個命令窗口中。我們可以使用setOut方法來改變這種行為。在以下示例中,我將輸出重定向到同一目錄中的文本文件。
public classChangeOut {public static voidmain(String args[]) {try{
System.setOut(new PrintStream(new FileOutputStream("log.txt")));
System.out.println("Now the output is redirected!");
}catch(Exception e) {}
}
}
總結
以上是生活随笔為你收集整理的java println源码_System.out.println()相关源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通 1345:【例4-6】
- 下一篇: css矩形凹陷效果_被低估的CSS滤镜: