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

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

文章目录


前言

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

image.png


一、Java 与 Java 字节码

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

Java 语言是高级语言,而 Java 字节码是低级语言。字节码类似于机器指令,但它不是体系结构中立的,是可以在任何带 Java 虚拟机的平台上运行的。

Java 代码的编译流程大致如下:

image.png

对于 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.

解释的过程就是一次将字节码中单独的一步翻译为目标机器语言代码,翻译后立即执行这一步,具体如下图所示:

image.png

四、编译器与解释器有何区别?

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

五、Java 语言属于哪种语言?

image.png

在上图的例子中,Hello.java 的源代码文件是通过 Java 编译器产生.class的中间字节码文件然后再送往 JVM 中执行的,进入 JVM 之后的运行流程大致如下图所示:

image.png

所以说,Java 语言既不属于编译型编程语言也不属于解释型编程语言,因为它由 Java 编译器编译为字节码文件,然后仍需要有 JVM 将字节码解释翻译为目标机器语言,先编译后解释。


总结

在本文中我们解释了什么是编译器,什么是解释器,并对二者进行了比较,从原理层面指出 Java 语言既不属于编译型编程语言也不属于解释型编译语言。关于进一步了解底层原理的,我们可以去看一下 Java 虚拟机的内容,这既是基础,面试必问,也是我们真正想搞懂 Java 这门语言的核心所在。

image.png


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


相关文章
|
17天前
|
设计模式 前端开发 安全
Java是一种广泛使用的编程语言,其学习路径可以大致分为以下几个阶段
【4月更文挑战第9天】Java是一种广泛使用的编程语言,其学习路径可以大致分为以下几个阶段
15 1
|
1月前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
1天前
|
安全 Java 大数据
探索Java的奇妙世界:语言特性与实际应用
探索Java的奇妙世界:语言特性与实际应用
|
1天前
|
JavaScript 前端开发 Oracle
java和JavaScript的区别
java和JavaScript的区别
6 3
|
2天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
8天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
8天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
147 10
|
13天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
18天前
|
Java 关系型数据库 MySQL
大厂面试题详解:Java抽象类与接口的概念及区别
字节跳动大厂面试题详解:Java抽象类与接口的概念及区别
40 0
|
24天前
|
Java
Java语言打印九九乘法表(详解)
Java语言打印九九乘法表(详解)
15 1
Java语言打印九九乘法表(详解)