文章目录

  • 前言
  • 一、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 这门语言的核心所在。


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

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

  1. java的编译器、解释器和JIT编译器(转载)

    这篇我们来聊聊java的编译器和解释器.先看看官方的解释: Java Compiler (Java 编译器) Java compiler reads source files written in t ...

  2. python语言是编译性语音_最强编程语言 Java 和最受欢迎之 Python 的巅峰对决

    作为程序员们的看家利器之编程语言,倘若技术开发者对其掌握得越深则对自身职业生涯越有益处,然随着技术的更新变革,我们在日常使用不单单只会用到一门编程语言,那么究竟该如何选择一门新的语言来上手?本文中,将 ...

  3. java具有自动无用内存回收_Java语言程序设计(一)试卷及答案解释

    Java语言程序设计(一)试卷及答案解释 本试卷共6页,满分l00分,考试时间l50分钟. 第一部分选择题 一.单项选择题:本大题共l0小题,每小题l分,共10分.在每小题列出的备选项中只有一项是最符 ...

  4. java在线编译器_什么是Java内存模型

    在知识星球中,有个小伙伴提了一个问题:有一个关于JVM名词定义的问题,说"JVM内存模型",有人会说是关于JVM内存分布(堆栈,方法区等)这些介绍,也有地方说(深入理解JVM虚拟机 ...

  5. 编译器构造java语言描述pdf_(基于Java)编写编译器和解释器-第3A章:基于Antlr构造词法分析器(连载)...

    在上一章(第三章)中我们用纯手工的方式构造了一个Pascal的扫描器(也称词法分析器).细心的读者会想到,大部分语言的词法构造过程都差不多,都有变量ID,字符串,整数,浮点数,关键字,特殊符号等(如比 ...

  6. Java 答疑:JDK 11(Java 11)之后没有 JRE 目录,环境用户变量配置的解决方法

    文章目录 前言 一.JDK 11(Java 11)之后 JRE 说明 二.选择自己需要的 JDK 版本 三.对下载的 JDK 进行解压 四.执行 Dos 命令生成 JRE 总结 前言 我们之前的 JD ...

  7. 浅谈Java JIT编译器概念

    文章目录 一.解释器 二.编译器 1.传统编译器 2.GraalVM 三.热点代码 四.编译器优化技术 1.方法内联 2.锁消除 3.标量替换 4.逃逸分析 一.解释器 Java程序在运行的时候,主要 ...

  8. Java核心技术(Java白皮书)卷Ⅰ 第一章 Java程序设计概述

    第1章 Java程序设计概述 1.1 Java程序设计平台  具有令人赏心悦目的语法和易于理解的语言,与其他许多优秀语言一样,Java满足这些要求.  可移植性  垃圾收集  提供大型的库   如果想 ...

  9. 浅谈汇编器、编译器和解释器

    作者: 硬核老王 简单介绍一下编程方式的历史演变. -- Erik O'shaughnessy(作者) 在计算机诞生不久的早期年代,硬件非常昂贵,而程序员比较廉价.这些廉价程序员甚至都没有" ...

最新文章

  1. 奇瑞s61鸿蒙,数码提前曝光,奇瑞新能源 S61 将搭载华为鸿蒙车机系统
  2. ASP.NET MVC 音乐商店 - 1 创建项目
  3. HDU1102 Constructing Roads 最小生成树
  4. .Net Core 部署到 CentOS7 64 位系统中的步骤
  5. javascript event
  6. android 折叠式布局,Android卡片式折叠交互效果
  7. dhcpd.conf配置的有关说明
  8. jupyter notebook 内核挂掉
  9. fromPromise
  10. 用HackRF One模拟GPS信号
  11. 串口uart编程——基于imx6ull
  12. 无人驾驶综述:等级划分
  13. zxr10交换机配置手册vlan_中兴ZXR10交换机配置
  14. 大数据学习入门到实战教程,精心整理万字长文入门第一章,老奶奶看了都说学会了
  15. 灵活操作MS SQL 2005 中的数据库 - 分离、附加、离线、在线、日志截断
  16. dwf怎么合成一个_油菜素内酯合成基因DWF1、DET2影响毛白杨木质部形成
  17. Window10下VS2019编译 Chromium
  18. android在国内如何盈利,安卓系统在中国靠什么盈利?
  19. 寒假集训1字符串专题
  20. 计算机导论——程序设计基础07

热门文章

  1. 爬虫爬到的网页源代码不是真正的源代码_Python爬虫经常爬不到数据?你可以看一下这篇文章...
  2. oracle back log,11g闪回日志(flashback log)保留时间参数 - db_flashback_retention_target
  3. fullcalendar 显示的时间间隔只有四十五分钟_NHR系列智能显示控制仪表RS485通信中应用...
  4. 导入Oracle 数据库镜像,创建Oracle虚拟机_01
  5. RuoYi-Vue 部署 Linux环境 若依前后端分离项目(jar包+nginx 单机版本)
  6. 02_Spring Cloud Alibaba整合通用Mapper+Lombok+Mysql
  7. Redis 工具类_慕课版本
  8. vue控制元素的隐藏和显示
  9. 将html表格导出到excel表格,table2excel-将HTML表格内容导出到Excel中_html/css_WEB-ITnose...
  10. java复杂性_java – 计算Big-O复杂性