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

Java是一种特殊的语言,它的执行涉及编译和解释两个阶段。Java源代码首先被编译成字节码,然后由JVM解释执行。虽然它既有编译的过程,也有解释的过程,但根据文中所述的原则,由于彻底的分析和非平凡的变换,Java应被视为编译型语言。然而,在执行时,字节码的解释执行特征使其也带有解释型语言的特点。
摘要由CSDN通过智能技术生成

首先我们应该了解这两种语言的概念 .

高级语言在计算机上执行 , 有两种方式 , 分为编译型语言和解释型语言 .

编译型语言 : 编写源代码–>编译–>链接. 典型的编译型语言 : C/C++ .

特点 : 源代码中一处有错 , 就不允许编译 ; 编译过程中出现一处错误 , 就停止编译 .

优点 : 直接运行生成最终产物 , 以C语言为例 , 最终产物就是二进制机器代码 , 速度快 , 效率高 !

解释性语言 : 编写源代码 , 一行一行解释执行 , 而不是一次编译全部代码 . 典型的解释型语言 : JavaScript , Python , Matlab .

特点 : 边解释 , 边执行 .

优点 : 源代码有错照样能解释执行 , 遇到错再停下 .

缺点:不断地对源代码进行解释、执行、解释、执行 . 由于解释型程序是将翻译过程放到执行过程中 , 这就决定了解释型程序注定要比编译型慢上一大截,而且每次运行程序 , 都要对源代码进行重新解释 , 而不是执行最终产品 , 所以速度比编译型慢得多得多 .

Java比较特殊 , 是编译型 + 解释型 .

Java的编译器先将其编译为class文件,也就是字节码;然后将字节码交由JVM(java虚拟机)解释执行;所以很多地方都说“Java是一种半编译、半解释执行”的语言 .

看上去陷入了一个困境,Java到底是编译型语言呢,还是解释型语言呢?

一种朴素的判定方式:如果翻译器部分较为简单,我们说这个语言是“解释的”,反之如果翻译器部分很复杂,我们就说这个语言是“编译的” .事实上这两者之间的界限是模糊的,因为“简单”和“复杂”都具有主观性 . “解释型”和“编译型”并不是一个清晰的描述 . 故强行将某种具有混合形式的语言划入两者之一是不当的。
但实践中肯定还是有进行分类的需求,所以这里有一条启发性原则用以判断语言的类型:

如果翻译器对程序进行了彻底的分析而非某种机械的变换,而且生成的中间程序与源程序之间没有很强的相似性,我们就认为这个语言是编译的 . 彻底的分析和非平凡的变换,是编译方式的标志性特征 .

因此,从这一角度讲 , Java应当被认作一种编译型语言 .

由Java的代码执行过程可知 ,一个Java 代码的执行过程是由 . Java–>. class–>对应平台机器码 ;

  1. . Java–>. class是由 Javac 编译,这个过程符合编译型语言的特点 (一次性编译,注意并未编译为实际平台的机器码) .
  2. 而. class–>对应平台机器码 的这一过程 是由Java解释执行 (逐行解释为特定平台机器码)这一过程符合解释语言的特点 ;

我本人更倾向于Java既是编译型语言语言 ,又是解释型语言。

参考文章 : Java是编译性语言还是解释型语言 ?

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值