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.mzph.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 …

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、实现代码总结前言 我们在项目中&…

MySQL 模糊查询:MySQL 数据库 like 语句通配符模糊查询小结

MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)——MySQL 数据库 like 语句通配符模糊查询小结 文章目录MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)——…