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 这门语言的核心所在。
在这里插入图片描述


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

写在最后

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

image

,Hadoop,Spark,Storm,YARN,机器学习,云计算…

[外链图片转存中…(img-DtccF7my-1714317207824)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值