Java中的System.out.println到底是什么,而且Java源码中System.java的out是null,为什么可以调用println方法?
在我們接觸Java第一個程序時,我們使用了public class和public static void main(String[]) args)以及System.out.println("Hello World")代碼,至于public class和public static void main(String[] args)的解釋,可以參考另一篇文章主類及main方法,要仔細(xì)研究該問題,請在有一定語法基礎(chǔ)再細(xì)看。
1. System和out
首先,System是java.lang包中的一個類,該類中定義了一個PrintStream類型的常量out,并且賦值為null,如下圖。
2. println()
3. 模擬System.out.println()形式
4. static問題
雖然我們實現(xiàn)了System.out.println類似形式方法,也可以打印輸出,實現(xiàn)類似的功能。但是我們定義的printlnTest是static修飾的靜態(tài)方法,static方法可以不用對象,直接調(diào)用。假如我們?nèi)サ魀rintlnTest前修飾的static修飾符,那么輸出結(jié)果會怎樣呢?
5. 最終原因?
如果System.out是null的話,最后肯定是沒法調(diào)用PrintStream非靜態(tài)方法的,而且out是public static final修飾,在賦值null后是沒法修改和賦值的,所以out肯定是在哪里有設(shè)置。不知道你是否有了解過Java里native標(biāo)識符修飾的方法,native修飾的方法說明方法實現(xiàn)部分不在當(dāng)前文件在,而是調(diào)用C++的動態(tài)鏈接庫,因為Java的底層使用C++編寫的,所以在底層與系統(tǒng)硬件打交道時,虛擬機(jī)JVM通過C++的動態(tài)鏈接庫來實現(xiàn)和操作系統(tǒng)的交互。而且System類的頂部有靜態(tài)代碼塊,靜態(tài)代碼塊中有registerNative()方法,而且該靜態(tài)代碼塊會在程序加載時執(zhí)行,所以系統(tǒng)會在程序運行前先對out進(jìn)行操作,實際上out不再等于null。
?
總結(jié)
以上是生活随笔為你收集整理的Java中的System.out.println到底是什么,而且Java源码中System.java的out是null,为什么可以调用println方法?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中方法签名signature、方
- 下一篇: 二进制、八进制、十六进制和十进制的相互转