面试官:说一说你的第一个Java程序是怎么跑起来的
面試官:“說一說你第一個Java程序是怎么跑起來的?”
我:“啊,您是說Hello World嗎?”
面試官:“嗯,沒錯,幾十年過去了,還是hello world......”
我:“好滴!且聽俺給您嘮一嘮”
話不多說,直接上一段代碼:
/**
* class 關鍵字:用于在 Java 中聲明一個類
*/
public class StaffApplicationTests {
/**
* public 關鍵字:一個表示可見性的訪問修飾符
* static 關鍵字:我們可以用它來聲明任何一個方法,被 static 修飾后的方法稱之為靜態方法。
* void 關鍵字:表示該方法無返回值。
* main 關鍵字:表示該方法為主方法,也就是程序運行的入口。main() 方法由 Java 虛擬機執行,配合上 static 關鍵字后,可以不用創建對象就可以調用。
* String [] args:main() 方法的參數,類型為 String 數組,參數名為 args。
* @param args
*/
public static void main(String[] args) {
//System.out.println():一個 Java 語句,一般情況下是將傳遞的參數打印到控制臺。
System.out.println("welcome to java world");
}
}
這就是Java中最簡單,也是大部分同學在剛接觸Java時看到的第一個程序代碼,運行結果就是在編譯器(IDEA)的控制臺打印出“welcome to java world”:
那么開頭面試官的問題,回答到這里就算完了嗎?當然不是!很明顯面試官想要不止如此。
整個java程序,從編寫的java文件到展出的結果,可以畫一個流程圖,根據流程圖向面試官展開回答
第一步:通過javac命令調用java編譯器,將上述的代碼編譯成.class字節碼文件(命令:javac HelloWorld.java);
第二步:通過java命令調用jvm解釋器,將第一步生成的字節碼文件解釋成機器可以識別的機器碼(命令:java HelloWorld),而字節碼文件是面向JVM的,而不是面向操作系統的,故我們只要選則對應系統(windows、MacOS、Linux)的Java虛擬機,就可以實現跨平臺運行Java代碼;
第三步:機器識別機器碼,響應結果。
講到這里面試官可能會緊跟著追問:“每次都需要解釋器將字節碼解釋成機器碼,如果代碼復雜性很高,豈不是效率很低?”
這時候你就可以淡淡的回一句:“我知道你很急,但請你先別急,俺還沒講完呢,嘿嘿”,雖然好賤,但面試官肯定被你逗笑啦!
作為編程語言的常青樹,Java自然不會如此低效,為了解決單方面的解釋過慢問題,Java引入了 JIT(Just in Time Compilation) 編譯器,而 JIT 屬于運行時編譯。當 JIT 編譯器完成第一次編譯后,其會將字節碼對應的機器碼保存下來,下次可以直接使用。如現在常用的HotSpot就采用了解釋執行和JIT即時編譯相結合的方式,根據二八定律分配資源,也就是說代碼執行的次數越多,速度越快。
嗑嘮到這里,就又延伸出了一個考點:“Java是編譯型還是解釋型語言?”
其實從上面的內容我們已經可以推測答案了,但這里還是想多說幾句,編程語言之所以分編譯型和解釋型是因為計算機并不能直接識別我們所寫的任何一種語言的代碼(Java,c,c++,python,php,Rust,Go等等),在計算機的世界里只有0和1,那么為了讓計算機可以理解我們的代碼,就需要翻譯,翻譯的兩種方式:編譯與解釋。
編譯型: 通過編譯器將源代碼一次性編譯成機器碼,執行速度很快,但開發效率低,常見的編譯性語言有 C、C++、Go、Rust 等等。
解釋型: 通過解釋器將代碼逐句解釋為機器碼后再運行,開發效率高,執行速度慢,常見的解釋性語言有 Python、JavaScript、PHP 等等。
Java 是一種兼具編譯和解釋特性的語言,.java 文件會被編譯成與平臺無關的 .class 文件,但是 .class 字節碼文件無法被計算機直接執行,仍然需要 JVM 進行翻譯成機器語言。所以嚴格意義上來說,Java 是一種解釋型語言。
總結
以上是生活随笔為你收集整理的面试官:说一说你的第一个Java程序是怎么跑起来的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react native在windows
- 下一篇: java美元兑换,(Java实现) 美元