java println源码_System.out.println()相关源码
System.out.println是一個Java語句,一般情況下是將傳遞的參數(shù),打印到控制臺。
System:是 java.lang包中的一個final類。根據(jù)javadoc,“java.lang.System該類提供的設(shè)施包括標準輸入,標準輸出和錯誤輸出流; 訪問外部定義的屬性和環(huán)境變量; 一種加載文件和庫的方法; 以及用于快速復(fù)制數(shù)組等一部分的實用方法… ”
out:是System類的靜態(tài)成員字段,類型為PrintStream。
public static final PrintStream out
他在啟動時就會被實例化,并與主機的標準輸出控制臺進行映射。該流在實例化之后立即打開,并準備接受數(shù)據(jù)。
println:是PrintStream類的一個方法。println打印(參數(shù)內(nèi)容+換行符) 到控制臺。
PrintStream類中有多個重載的println方法。每個println是通過調(diào)用print方法并添加一個換行符實現(xiàn)的。print方法是通過調(diào)用write方法實現(xiàn)的。
System.out.println() 結(jié)構(gòu)圖如下:
部分代碼段:
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性能并不好。當我們深入分析時,其調(diào)用順序如下println - > print - > write()+ newLine()。這個順序流是Sun / Oracle JDK的實現(xiàn)。write()和newLine()都包含一個synchronized塊。同步有一點開銷,但更多的是添加字符到緩沖區(qū)和打印的開銷更大。
當我們運行性能分析時,運行多個System.out.println并記錄時間,執(zhí)行時間會按比例增加。當打印超過50個字符并打印超過50,000行時,性能下降。
當然這一切都取決于我們使用的場景。不過無論如何請勿使用System.out.println打印日志( logging)到stdout。
靜態(tài)導入來縮短System.out.println
有時我們覺得System.out.println是一個很長的語句要打印。靜態(tài)導入可能會縮短一點,但不推薦使用,因為它導致可讀性差。我只是使用這種情況來解釋靜態(tài)導入,并避免在下面的情況下使用它。
import staticjava.lang.System.out;public classShortSOP {public static voidmain(String[] args) {
out.println("Hello, world");
}
}
不靜態(tài)導入的話直接寫out.println會提示編譯錯誤的。
輸出重定向——改變輸出路徑
out對象可以自定義的。在啟動時由java運行時環(huán)境初始化,并且可以在執(zhí)行期間由開發(fā)人員更改。代替在默認情況下的標準輸出。當您通過命令行運行程序時,輸出將打印在同一個命令窗口中。我們可以使用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) {}
}
}
總結(jié)
以上是生活随笔為你收集整理的java println源码_System.out.println()相关源码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通 1345:【例4-6】
- 下一篇: 信息学奥赛一本通 1171:大整数的因子