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