Java 答疑:編譯器和解釋器有何區別?Java 語言屬于編譯型編程語言還是解釋型編程語言?

文章目錄

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


前言

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

在這里插入圖片描述


一、Java 與 Java 字節碼

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

Java 語言是高級語言,而 Java 字節碼是低級語言。字節碼類似于機器指令,但它不是體系結構中立的,是可以在任何帶 Java 虛擬機的平臺上運行的。

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

在這里插入圖片描述
對于 Java 源程序編譯、執行原理感興趣的同學可以移步我的另有一篇文章 Java 版本、語言規范、API、JDK、IDE、Java 源程序編譯、執行原理(跨平臺性根本原因)、特殊字符用法、8 大數據類型小結

二、什么是編譯器(Compiler)

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

英文譯文: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)

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

英文譯文: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.

解釋的過程就是一次將字節碼中單獨的一步翻譯為目標機器語言代碼,翻譯后立即執行這一步,具體如下圖所示:
在這里插入圖片描述

四、編譯器與解釋器有何區別?

編譯器產生更快的程序,它必須把每個語句分析一次(邊編譯邊分析),而解釋器必須每次分析一次(增加一條分析一次)。此外編譯器還可以優化其生成的可執行代碼。因為它確切的知道它在哪里運行,并且需要時間來優化代碼。在不同的情況下具有不同的速度。

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

在這里插入圖片描述
在上圖的例子中,Hello.java 的源代碼文件是通過 Java 編譯器產生.class的中間字節碼文件然后再送往 JVM 中執行的,進入 JVM 之后的運行流程大致如下圖所示:

在這里插入圖片描述
所以說,Java 語言既不屬于編譯型編程語言也不屬于解釋型編程語言,因為它由 Java 編譯器編譯為字節碼文件,然后仍需要有 JVM 將字節碼解釋翻譯為目標機器語言,先編譯后解釋。


總結

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

在這里插入圖片描述


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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530754.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530754.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530754.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java 案例練習:編寫 Java 程序,輸入年份和月份,使用 switch 結構計算對應月份的天數。月份為 1、3、5、7、8、10、12 時,天數為 31 天。月份為 4、6、9、11 時,天數為

文章目錄一、練習題目二、使用 switch 語句實現代碼三、將代碼改寫回 if else 的選擇結構一、練習題目 編寫 Java 程序,輸入年份和月份,使用 switch 結構計算對應月份的天數。 月份為 1、3、5、7、8、10、12 時,天數為 31 天。 月份為 4、6、…

SRA 案例練習:解釋 CRUD 矩陣方法,并從上面 “用于化學品跟蹤管理系統的 CRUDL 矩陣示例”圖中找出被遺漏的需求,并解釋是如何找的?

文章目錄 一、練習題目二、CRUD 矩陣介紹三、矩陣分析四、尋找遺漏需求一、練習題目 解釋 CRUD 矩陣方法,并從上面 “用于化學品跟蹤管理系統的 CRUDL 矩陣示例”圖中找出被遺漏的需求,并解釋是如何找的。 二、CRUD 矩陣介紹 CRUD 矩陣是用于尋找遺漏需求比較精確的方法,其…

《軟件需求分析(第二版)》第 14 章——需求管理的原則和實踐 重點部分總結

文章目錄 前言一、討論二、簡答題三、名詞解釋總結前言 軟件需求分析就是把軟件計劃期間建立的軟件可行性分析求精和細化,分析各種可能的解法,并且分配給各個軟件元素。需求分析是軟件定義階段中的最后一步,是確定系統必須完成哪些工作,也就是對目標系統提出完整、準確、清…

《軟件需求分析(第二版)》第 15 章——變更管理 重點部分總結

文章目錄 前言一、討論二、判斷題三、簡答題總結前言 軟件需求分析就是把軟件計劃期間建立的軟件可行性分析求精和細化,分析各種可能的解法,并且分配給各個軟件元素。需求分析是軟件定義階段中的最后一步,是確定系統必須完成哪些工作,也就是對目標系統提出完整、準確、清晰…

《軟件需求分析(第二版)》第 16 章——需求鏈中的聯系鏈 重點部分總結

文章目錄 前言一、討論總結前言 軟件需求分析就是把軟件計劃期間建立的軟件可行性分析求精和細化,分析各種可能的解法,并且分配給各個軟件元素。需求分析是軟件定義階段中的最后一步,是確定系統必須完成哪些工作,也就是對目標系統提出完整、準確、清晰、具體的要求。本文是…

《軟件項目管理(第二版)》第 10 章——項目收尾 重點部分總結

文章目錄 前言一、討論二、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版)》第 10 章——項目…

《軟件項目管理(第二版)》第 9 章——項目監督與控制 重點部分總結

文章目錄 前言一、討論二、選擇題三、判斷題四、簡答題總結前言 學習了項目的開發與發布之后,我們就可以單獨對一個項目進行開發了,但是在企業中開發中,除了編碼之外,還需要項目管理、團隊協作開發等,這就是軟件項目管理板塊要學習的內容。本文是對《軟件項目管理(第二版…

SSM(Spring+Spring MVC+Mybatis)整合 1:整體概述、目錄內容及實驗環境介紹

文章目錄 前言一、概述二、系列文章全目錄三、實驗環境總結前言 通過本次 Java EE 三大框架(Spring、Spring MVC、MyBatis)原理、技術和方法的整合,大量的項目實踐實際動手能力,解決總結在 SSM 項目中存在的問題,為畢業設計以及后期從事 Java 相關開發工作打下堅實的基礎。…

Tomcat 服務:解決 Apache Tomcat 更新后 Tomcat9w.exe 無法啟動 Tomcat 服務的問題

解決 Tomcat9w.exe 無法啟動 Tomcat 服務的問題/解決 Apache Tomcat 更新后 Apache Tomcat 9.0 Tomcat9 Properties 配置不匹配的問題 文章目錄解決 Tomcat9w.exe 無法啟動 Tomcat 服務的問題/解決 Apache Tomcat 更新后 Apache Tomcat 9.0 Tomcat9 Properties 配置不匹配的問題…

IDEA 新手入門:創建項目/包/類、運行/關閉/導入項目、字體/字號設置、常用快捷鍵等使用詳解

文章目錄前言一、創建新項目 Project1.1、選擇“Create New Project”1.2、選擇左下角的“Empty Project”1.3、輸入項目名稱并選擇保存路徑二、創建新模塊 Module2.1、在彈出的“New Module”窗口中,點擊“New”2.2、根據項目需要,選擇合適的 SDK2.3、對…

IDEA/Tomcat 原理:如何將 Tomcat 集成到 IDEA?實現由傳統部署延伸到熱部署 Java EE 項目?

文章目錄前言一、將 Tomcat 集成到 IDEA 中1.1、進入 IDEA Tomcat 配置頁面1.2、配置并集成 Tomcat1.3、配置完成說明1.4、集成檢查1.4.1、檢查主頁面信息及服務器配置信息二、創建并部署 Java EE 項目2.1、創建新項目或者模塊(自行選擇)2.2、進行 Java …

SSM 整合 2:Java EE 開發環境的搭建(JDK 配置、Tomcat 安裝、IDE 安裝、IDE 集成 Tomcat、Spring 及其組件的下載)

文章目錄 前言一、安裝并配置 JDK1.1、下載并安裝 JDK1.2、配置環境變量1.2.1、從控制面板進入用戶變量設置1.2.2、新建用戶變量 Java_Home 和 Path(根據自己安裝目錄設置)1.2.3、檢測 JDK 是否安裝成功二、安裝 Tomcat 應用服務器2.1、下載 apache-tomcat-9.02.2、啟動 Tomc…

Eclipse 答疑:如何使用 Eclipse 進行斷點(Breakpoints)調試?

文章目錄前言一、打開需要調試的程序二、設置斷點三、進行代碼調試3.1、在上方標簽欄,點擊“Debug As→Java Application”3.2、進入調試頁面并查看設置斷點的具體位置信息3.3、產看具體變量信息總結前言 我們在使用 Eclipse 進行代碼調試時,可以選擇在一…

在 Windows 命令提示符下啟動 MySQL:net start mysql 發生系統錯誤 5。 拒絕訪問。解決方式小結

文章目錄前言一、錯誤描述二、錯誤產生場景三、產生錯誤原因四、解決方式總結前言 我們有時候需要通過 Windows 命令提示符來啟動 MySQL 服務,但是如果你不注意操作權限的話,可能就會報以下錯誤,現在我們來解決這個問題:net start…

XHTML 語法規則及 HTML/XHTML(XHTML 1.0/XHTML 1.1 和 HTML 4.01/HTML 5) 文檔類型說明

文章目錄前言一、XHTML 語法規則二、XHTML、HTML 文檔類型說明三、XHTML 文檔類型3.1、XHTML 1.0 過渡類型(Transitional)3.2、XHTML 1.0 嚴格類型(Strict)3.3、XHTML 1.0 框架類型(Frameset)3.4、XHTML 1.…

Eclipse 答疑:代碼版權?如何更改 Eclipse 中注釋塊的 @author 版權信息?

文章目錄前言一、打開需要進行版權標注的類二、進入配置頁面三、編輯配置信息四、測試總結前言 我們在使用 IDE——Eclipse 進行開發時,在需要注明版權信息的時候,如果不更改默認設置的話,在注釋塊 author 的內容就是電腦系統默認的&#xff…

Java 修飾符詳解:吐血整理,帶你從底層語法和開發案例疏通這 11 種常見修飾符

文章目錄前言一、11 種常見的 Java 修飾符1.1、修飾符應用表1.2、修飾符訪問權限對比二、public 修飾符2.1、public 修飾符語法說明2.2、public 修飾符開發應用三、private 修飾符3.1、private 修飾符語法說明3.2、private 修飾符開發應用四、protected 修飾符4.1、protected 修…

Java 反射機制詳解:私有方法調用頭大?如何通過反射調用類中的私有方法?

文章目錄前言一、私有方法在本類中直接調用1.1、在本類中實例化,調用私有方法1.2、嘗試在其他類直接調用私有方法(錯誤示范)二、使用反射實例化類強制調用私有方法2.1、使用類加載器加載被調用的類2.2、使用 Object 類對獲取的類進行實例化2.…

jQuery 遍歷:思路總結,項目場景中如何處理/控制獲取的 each 遍歷次數?

文章目錄前言一、項目場景分析二、實體類定義描述(僅關鍵代碼)2.1、實體類定義描述2.2、邏輯處理與分析2.3、遍歷數據如何修改的問題暴露三、處理思路3.1、源碼分析 jQuery 中的 each 遍歷3.2、如何解決 jQuery 中控制獲取 each 的遍歷次數總結前言 前臺…

JavaScript 事件:Web 表單如何實現禁用右鍵、復制粘貼/剪切和輸入框自動填充?

文章目錄前言一、禁用鼠標右鍵1.1、分析說明1.2、操作原理1.3、實現效果1.4、實現代碼1.5、補充:JS 中的 button 事件屬性二、禁用復制粘貼2.1、分析說明2.2、實現代碼三、禁用輸入框自動填充功能3.1、分析說明3.2、實現效果3.3、實現代碼總結前言 我們在項目中&…