Java到底是解释型还是编译型语言
Java到底是解释型还是编译型语言?
定义
回答这个问题,我们首先来看下概念:
开发人员编写代码,语言是人类可理解的方式,是具有语义的,然而计算机无法理解和执行,因此需要做一层转换。
解释型语言:
- 运行时,由专门的解释器将代码解释成机器可运行的机器语言。这种方式副作用就是执行效率会差一些。但是只要解释器支持不同平台,代码是不需要变动的,可移植性好。
- 编译型语言:将源码一次性编译成计算机可识别的机器语言,结果往往以可执行文件的形式存在,例如C、C++等。由于事前编译,具有运行速度快的特点,但是面对不同的操作系统,可移植性较差。
分析
回过头来看Java,我们知道,Java代码执行前需要先编译成class文件,再交由JVM执行。因此从这一过程来看,Java可以称之为编译型语言。
然而,class文件的内容属于一种中间语言,计算机无法直接识别,仍然需要由JVM解释成机器语言执行,因此这个角度来说,可以称之为解释型语言。
拓展
那么Java为什么要这么设计呢?
个人理解:
- Java能这么强势的列于开发语言之林这么多年,不光是因为开源和丰富的第三方库,还因为其平台无关性。而平台无关性正是因为JVM的存在,所以设计之初就是解释型的。
- 源文件需要进行的解释步骤前,还需要进行语法检查、语义分析等复杂过程,影响解释效率。而先将源文件编译成class,省去了这个步骤;同时因为编译成class(字节码),文件大小也会小很多,有利于移植和跨平台
综上,我认为Java设计之初就考虑到了:可移植型和效率的兼顾。