日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Java 答疑:编译器和解释器有何区别?Java 语言属于编译型编程语言还是解释型编程语言?

發(fā)布時(shí)間:2025/3/8 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 答疑:编译器和解释器有何区别?Java 语言属于编译型编程语言还是解释型编程语言? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 前言
  • 一、Java 與 Java 字節(jié)碼
  • 二、什么是編譯器(Compiler)
  • 三、什么是解釋器(Interpreter)
  • 四、編譯器與解釋器有何區(qū)別?
  • 五、Java 語言屬于哪種語言?
  • 總結(jié)


前言

我們都知道開發(fā)語言整體分為兩類,一類是編譯型編程語言,一類是解釋型編程語言。那么你知道二者有何區(qū)別嗎?編譯器和解釋器又各自有何區(qū)分?Java 語言屬于編譯型編程語言還是解釋型編程語言呢?


一、Java 與 Java 字節(jié)碼

首先給大家舉個(gè)例子,使用 Java 語言編寫一段代碼,在沒有語法錯(cuò)誤的前提下,編譯器就會(huì)生成一個(gè)擴(kuò)展名為.class的中間字節(jié)碼文件。

Java 語言是高級(jí)語言,而 Java 字節(jié)碼是低級(jí)語言。字節(jié)碼類似于機(jī)器指令,但它不是體系結(jié)構(gòu)中立的,是可以在任何帶 Java 虛擬機(jī)的平臺(tái)上運(yùn)行的。

Java 代碼的編譯流程大致如下:


對(duì)于 Java 源程序編譯、執(zhí)行原理感興趣的同學(xué)可以移步我的另有一篇文章 Java 版本、語言規(guī)范、API、JDK、IDE、Java 源程序編譯、執(zhí)行原理(跨平臺(tái)性根本原因)、特殊字符用法、8 大數(shù)據(jù)類型小結(jié)

二、什么是編譯器(Compiler)

編譯器是將源代碼編譯(翻譯)成低級(jí)語言的程序。編譯器把源程序的每一條語句都編譯成機(jī)器語言,并保存為二進(jìn)制文件,運(yùn)行時(shí)計(jì)算機(jī)可以直接通過運(yùn)行語言來運(yùn)行此程序,速度會(huì)很快。

英文譯文:A compiler is a program that compiles (translates) source code into a low-level language. The compiler compiles every statement of the source program into machine language and saves it as a binary file. When running, the computer can run the program directly through the running language, and the speed will be very fast.

三、什么是解釋器(Interpreter)

解釋器是直接執(zhí)行用編程語言編寫的指令的程序。只有在執(zhí)行程序時(shí),才一條一條的解釋成機(jī)器語言給計(jì)算機(jī)來執(zhí)行,所以運(yùn)行速度不如編譯后的程序運(yùn)行的快。而執(zhí)行 Java 程序也就是運(yùn)行程序的字節(jié)碼,通過 JVM 來解釋 Java 字節(jié)碼。

英文譯文:An interpreter is a program that directly executes instructions written in a programming language. Only when the program is executed, it is interpreted into machine language to be executed by the computer one by one, so the running speed is not as fast as the compiled program. Executing a java program is the bytecode of the running program. The Java bytecode is interpreted through the JVM.

解釋的過程就是一次將字節(jié)碼中單獨(dú)的一步翻譯為目標(biāo)機(jī)器語言代碼,翻譯后立即執(zhí)行這一步,具體如下圖所示:

四、編譯器與解釋器有何區(qū)別?

編譯器產(chǎn)生更快的程序,它必須把每個(gè)語句分析一次(邊編譯邊分析),而解釋器必須每次分析一次(增加一條分析一次)。此外編譯器還可以優(yōu)化其生成的可執(zhí)行代碼。因?yàn)樗_切的知道它在哪里運(yùn)行,并且需要時(shí)間來優(yōu)化代碼。在不同的情況下具有不同的速度。

五、Java 語言屬于哪種語言?


在上圖的例子中,Hello.java 的源代碼文件是通過 Java 編譯器產(chǎn)生.class的中間字節(jié)碼文件然后再送往 JVM 中執(zhí)行的,進(jìn)入 JVM 之后的運(yùn)行流程大致如下圖所示:


所以說,Java 語言既不屬于編譯型編程語言也不屬于解釋型編程語言,因?yàn)樗?Java 編譯器編譯為字節(jié)碼文件,然后仍需要有 JVM 將字節(jié)碼解釋翻譯為目標(biāo)機(jī)器語言,先編譯后解釋。


總結(jié)

在本文中我們解釋了什么是編譯器,什么是解釋器,并對(duì)二者進(jìn)行了比較,從原理層面指出 Java 語言既不屬于編譯型編程語言也不屬于解釋型編譯語言。關(guān)于進(jìn)一步了解底層原理的,我們可以去看一下 Java 虛擬機(jī)的內(nèi)容,這既是基礎(chǔ),面試必問,也是我們真正想搞懂 Java 這門語言的核心所在。


我是白鹿,一個(gè)不懈奮斗的程序猿。望本文能對(duì)你有所裨益,歡迎大家的一鍵三連!若有其他問題、建議或者補(bǔ)充可以留言在文章下方,感謝大家的支持!

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Java 答疑:编译器和解释器有何区别?Java 语言属于编译型编程语言还是解释型编程语言?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。