以 Java 语言为例,说明编译器和解释器有什么区别?Java 语言属于编译型编程语言还是属于解释型编程语言?

举报
白鹿第一帅 发表于 2020/12/28 01:01:50 2020/12/28
【摘要】 我们都知道开发语言整体分为两类,一类是编译型语言,一类是解释型语言。那么你知道二者有何区别吗?编译器和解释器又有什么区别?

文章目录

  • 前言
  • 一、Java 与 Java 字节码
  • 二、什么是编译器(Compiler)
  • 三、什么是解释器(Interpreter)
  • 总结

前言

我们都知道开发语言整体分为两类,一类是编译型语言,一类是解释型语言。那么你知道二者有何区别吗?编译器和解释器又有什么区别?

在这里插入图片描述


一、Java 与 Java 字节码

首先给大家举个例子,使用 Java 语言编写一段代码,在没有语法错误的前提下,编译器就会生成一个扩展名为.class的中间字节码文件。

Java 语言是高级语言,而 Java 字节码是低级语言。字节码类似于机器指令,但它不是体系结构中立的,是可以在任何带 Java 虚拟机的平台上运行的。
在这里插入图片描述
关于更多 Java 源程序编译、执行原理的内容可以移步我的另有一篇帖子 Java 版本、语言规范、API、JDK、IDE、Java 源程序编译、执行原理(跨平台性根本原因)、特殊字符用法、8 大数据类型小结

二、什么是编译器(Compiler)

编译器是将源代码编译(翻译)成低级语言的程序。编译器把源程序的每一条语句都编译成机器语言,并保存为二进制文件,运行时计算机可以直接通过运行语言来运行此程序,速度会很快。

编译器产生更快的程序,它必须把每个语句分析一次(边编译边分析),而解释器必须每次分析一次(增加一条分析一次)。此外编译器还可以优化其生成的可执行代码。因为它确切的知道它在哪里运行,并且需要时间来优化代码。在不同的情况下具有不同的速度。

例如在上面的例子中,Hello.java 的源代码文件是通过 Java 编译器产生.class的中间字节码文件然后再送往 JVM 中执行的。
在这里插入图片描述

三、什么是解释器(Interpreter)

解释器是直接执行用编程语言编写的指令的程序。

只有在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度不如编译后的程序运行的快。而执行 Java 程序也就是运行程序的字节码,通过 JVM 来解释 Java 字节码。

解释的过程就是一次将字节码中单独的一步翻译为目标机器语言代码,翻译后立即执行这一步。
在这里插入图片描述


总结

所以说,Java 语言既不属于编译型编程语言也不属于解释型编程语言,因为它由 Java 编译器编译为字节码文件,然后仍需要有 JVM 将字节码解释翻译为目标机器语言,先编译后解释。关于进一步了解底层原理的,我们可以去看一下 Java 虚拟机的内容,这既是基础,面试必问,也是我们真正想搞懂 Java 这门语言的核心所在。

在这里插入图片描述


我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。