Java知识(一):Java是解释型语言还是编译型语言?

目录

  • 编译型语言和解释型语言的区别
  • Java语言需要先编译后解释

编译型语言和解释型语言的区别

计算机是不能识别高级语言的,当然也就不能直接指定高级语言了,最初的计算机只能识别低级语言(机器语言),高级语言如:Java、C、C++等,机器语言也就是机器指令,通常以二进制代码形式出现,以纸袋打孔的形式输入,不过操作麻烦,为了方便记忆,将0,1序列表示的机器指令用符号帮助记忆,就形成了汇编语言,无论是机器语言还是汇编语言都是面向机器(计算机)的,统称为低级语言。因为是针对特定机器的机器指令的助记符,所以汇编语言是无法独立于机器(特定的CPU体系结构)的。但汇编语言也是要经过翻译成机器指令才能执行的,所以也有将运行在一种机器上的汇编语言翻译成运行在另一种机器上的机器指定的方法,那就是交叉汇编技术。

计算机只能理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算机才能运行高级语言编写的程序。

高级语言翻译成低级语言的方式不同,主要分为两种:一种是编译型语言,另一种是解释型语言,两种方式只是翻译的时间不同。

编译型语言:程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,例如exe可执行文件,以后运行的时候就不需要重新编译了,直接使用编译之后的结果就行了,因为翻译只做一次,运行时不需要翻译,所以编译型语言的程序执行效率高。

编译型语言是将程序的源代码通过特定的编译器,翻译成能在指定平台上运行并且被识别的机器码,由于编译型语言具有一次编译成机器码,通常可以脱离开发环境,独立运行,所以运行效率高,但是不具备移植性,如果想移植,就必须将源代码复制到新的平台,针对新平台进行特定的修改,在特定平台的编译器进行重新编译。

常见的编译型语言:C、C++、FORTRAN、Pascal

解释型语言:程序不需要编译,省了一道工序,解释型语言在运行程序的时候才翻译,比如解释型Python语言,专门有一个解释器能够直接执行Python程序,每个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。

解释型型语言是指专门的解释器对源程序进行逐行解释成特定平台的机器码并立即执行的语言,解释型语言相当于把编译器型语言的编译过程和解释过程混合到一起同时完成。

可以认为:每次执行解释型语言的程序都需要进行一次翻译,因此解释型语言的程序运行效率低,而且不能脱离解释器独立运行。但解释型有一个优势:跨平台比较容易,只需提供特定平台的解释器即可,每个特定平台上的解释器负责将源程序解释成特定平台的机器指令即可。解释型语言可以方便的实现源程序级的移植,但这是以牺牲程序执行效率为代价的。

常见的解释型语言:Ruby、Python

虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是将它编译成字节码(中间语言)。在运行的时候,由JVM将字节码再翻译成机器语言

Java语言需要先编译后解释

Java是一种特殊的高级语言,它具有编译型语言的特征,同时也具有解释型语言的特征,因此,Java语言需要先经过编译,后解释才能运行

曾经有人说Java是编译型的。因为所有的Java代码都是要编译的,.java文件不经过编译就无法执行。也有人说Java是解释型的。因为Java代码编译后不能直接运行,它是解释运行在JVM上的。对于C和C++,它们经过一次编译之后,可以由操作系统直接运行,所以它们是编译型语言。而Java不一样,它首先由编译器编译成.class(字节码)文件,然后在通过JVM从.class文件中读一行解释执行一行,所以它是解释型语言。也正是由Java对于多种不同操作系统有不同的JVM,所以实现了真正意义上的跨平台

Java知识(一):Java是解释型语言还是编译型语言?_第1张图片
先编译成字节码文件,也即*.class文件:开发人员使用Java语言编写的 *.java源文件,需要经过编译器执行javac命令编译成字节码文件,也即 *.class文件。注意:该字节码文件与平台无关,可被特定平台的Java解释器执行,字节码文件可以看做成一种中间语言。
Java知识(一):Java是解释型语言还是编译型语言?_第2张图片
然后根据不同平台的Java解释器,将字节码文件解释成特定平台的机器文件:Java语言中负责解释字节码文件的是Java虚拟机,即JVM(Java Virtual machine)。不同平台,各自实现了其JVM,JVM向编译器提供相同的编程接口,所以可解释编译器生成的字节码文件,但其解释成特定平台的机器语言文件。
Java知识(一):Java是解释型语言还是编译型语言?_第3张图片
Java知识(一):Java是解释型语言还是编译型语言?_第4张图片

你可能感兴趣的:(Java)