Java@Java是解释型语言?还是编译型语言?

目录

前言

一、先提出一个问题

二、解释型语言和编译型语言的定义

三、回顾前面的问题

四、关于所谓“混合型”语言

五、解释型语言和编译型语言的利弊

六、解释型语言和编译型语言的应用



前言

本章要聊的话题是解释型语言和编译型语言的异同,之所以用《Java是解释型语言?还是编译型语言?》为题,是本人对Java更熟悉,后续举例说明也会相对侧重于Java,其他同学可根据自己学习的语言理解。

一、先提出一个问题

        先不给出解释型语言和编译型语言的定义,如果有人问“Java是解释型语言?还是编译型语言?”,你给出的答案会是什么?你的第一反应是不是“Java是编译型语言”,无他,天天“编译/build”挂在嘴边的缘故......

二、解释型语言和编译型语言的定义

        计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。

        程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后不用重新翻译,直接使用编译的结果就行了(exe文件),编写此类程序的高级语言称为编译型语言。

        解释性语言则不同,解释性语言编写的程序不需要提前编译成机器语言,在运行程序的时候才翻译,比如basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。

三、回顾前面的问题

        到此,如果有人再问“Java是解释型语言?还是编译型语言?”,你给出的答案会是什么?很明显,Java是解释型语言。如果你仍觉Java是编译型语言,只有一个原因,你将Java语言的编译与编译型语言定义中的编译混淆了。了解Java语言的同学可以回忆下,Java虽然提前由翻译器进行了编译,得到的却不是机器语言,而是.class字节码文件,一个恍惚.....机器语言. ≠ .class字节文件

四、关于所谓“混合型”语言

       随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上。

         如上,Java很特殊,Java程序也需要编译,但是没有直接编译称为机器语言,而是编译成.class字节码文件,然后在Jvm上用解释方式解释执行字节码。

        基于“编译+解释”的这种特点,有人也将Java称为混合型语言

        其实C++、.Net 更符合所谓混合型语言,因为不同Java的“编译+解释”,C++、.Net有部分代码是完全编译的,而有部分代码是托管的解释型代码。

        但混合型语言这个表述不是一个标准术语,严格来说,从概念上的定义,所谓混合型语言仍属于解释型语言

        Python 的也采用了类似Java的编译模式,先将Python程序编译成Python字节码,然后由一个专门的Python字节码解释器负责解释执行字节码。

附:

        编译型的语言包括:C、C++、Delphi、Pascal、Fortran等。

        解释型的语言包括:C#、Java等。那些脚本类的语言也被分为解释型,不过不完全相同, 他们没有C#和Java类似的第一次编译, 直接由他们的脚本引擎运行那些字符窜组成的代码,比如 JavaScript、VBScriptBasic、javascript等。

五、解释型语言和编译型语言的利弊

        编译型语言安全性高、易用性高、执行性率高,但依赖编译器、跨平台性差些。

       现在大多数的编程语言都是编译型的, 编译程序将源程序翻译成目标程序后保存在另一个文件中,该目标程序可脱离编译程序直接在计算机上多次独立执行,使用比较方便、效率较高。并且,因为编译型语言的编译是在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),反编译后只能得到汇编代码,又使他人难于盗用其中的技术。

        不过,对于不同的系统,编译型语言需要针对系统提供的API修改。再依赖编译器编译生成对应的目标文件(* .OBJ)才能执行。编译之后如果需要修改就需要整个模块重新编译,如果只有目标文件而没有源代码,修改很不方便( 不过也有类似wine的东西存在,使得编译型也可以直接跨平台运行,前提是足够完善的重新封装整个API......)。

       而 针对每种作业系统、CPU,而提供并测试各自的编译版本,这种做法的可行性很小;开源软件则允许用户自己来编译目的码(object code),这样在跨平台方面更好一些。

         解释型语言安全性较低、执行性率低、 依赖解释器、跨平台性好。

        解释型语言,如C#和java第一次编译成执行文件时编译成字节码,字节码作为一种中间语言,对其反编译的到的结果和源代码还是比较相似的,可能会被盗取其中的技术。

      不过,对于不同的系统, 只要运行环境虚拟机足够符合这门语言的标准,解释型语言使用同一个执行文件即可, 比如java程序运行于JVM、C#程序运行于CLR, 使得一次编译到处运行成为可能。 解释语言编写的程序的优点还在于当语句出现语法错误时,可以立即引起程序员注意,使得一些错误在程序开发期间就能进行校正。一般地,动态语言都是解释型的,如Tcl、Perl、Ruby、VBScript、 JavaScript等。

        因为中间代码的解释是由软件支持的,不能直接使用硬件,需要一个专门的解释器解释执行,所以不是所有解释型语言跨平台性都好,VB是解释型语言,但是不能跨平台……但这并不影响我们对于解释型语言更加符合跨平台的要求的评价。

        解释器解释执行程序时,每条语言只有在执行才被翻译。这种解释型语言每执行一次就翻译一次,因而解释型语言程序的执行效率相比编译型语言较低。

六、解释型语言和编译型语言的应用

        

        由于编译型语言编写的程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它。像C/C++、Pascal/ObjectPascal(Delphi)、VB等基本都可视为编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、

目录

文章目录

前言

一、先提出一个问题

二、解释型语言和编译型语言的定义

三、回顾前面的问题

四、关于所谓“混合型”语言

五、解释型语言和编译型语言的利弊

六、解释型语言和编译型语言的应用


        对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、MATLAB 等等。

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java是一种编译语言Java代码在编译之前需要先经过编译器的处理,将源代码编译成字节码文件,然后这些字节码文件可以在Java虚拟机(JVM)上解释执行。这种方式可以提高Java程序的性能,并且可以使得Java程序跨平台运行,因为不同的平台只需要安装相应的Java虚拟机即可。 ### 回答2: Java是一种混合语言,既可以编译也可以解释。Java程序首先通过编译器将源代码转换成字节码(bytecode),然后这些字节码可以在Java虚拟机(JVM)上解释执行。编译过程将源代码转换成字节码,可以提前发现一些语法错误,这可以减少程序运行时的错误。一旦程序编译完成,字节码可以在不同的操作系统上运行,只要安装有适当版本的Java虚拟机。解释执行过程通过JVM将字节码逐行解释成机器语言执行。这种解释执行方式使得Java具有跨平台的特性,同一份字节码可以在不同的操作系统和硬件上运行,因此被广泛用于开发跨平台应用程序。然而,为了提高Java程序的性能,还可以通过即时编译(Just-In-Time Compilation)将字节码转换成本地机器码执行,这种方式将一些频繁执行的代码编译成本地机器码,以提高程序的执行速度。因此,Java既具备了编译语言的静态检查和跨平台特性,又具备了解释型语言的灵活性和动态性能优化。 ### 回答3: Java是一种编译语言编译语言是指在运行程序之前需要将程序源代码通过编译器转换为机器可执行的二进制代码。在Java中,源代码是通过Java编译器(javac)将源代码(.java文件)编译Java字节码文件(.class文件)。然后,Java虚拟机(JVM)通过解释器(解释和执行字节码)将字节码转换为特定机器的指令执行程序。 与解释型语言不同,Java编译时会将代码转换为机器可以理解的形式,这使得Java在执行时更加快速和高效。此外,Java字节码在不同的平台上是可移植的,这意味着可以在不同的操作系统和硬件上执行同一份Java程序。 总之,Java是一种编译语言,通过编译器将源代码转换为字节码文件,并由Java虚拟机解释执行。这种设计使得Java程序在不同平台上具有高度可移植性和高效性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值