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