为什么说Java同时具有编译型语言和解释型语言的特性呢?

为什么说Java同时具有编译型语言和解释型语言的特性呢?

编译型和解释型是对高级语言的一种分类,所谓的高级语言是指我们容易理解的语言。但是对于计算机硬件而言,它们只理解二进制语言(0和1),因此计算机想要执行一个程序,就要把这个程序的源代码翻译成二进制的可执行文件。两种类型语言的区别就在于什么时候将源代码翻译成二进制文件。

什么是编译型语言?

编译型语言有C语言,C++,Golang,Pascal和汇编等,这种语言的特点是一次编译后可以多次执行。但是呢,编译型语言是不能跨平台的,因为不同的平台对可执行文件的内部结构,语法等有不同的要求,统一平台的不同版本之间也可能是不兼容的(例如x64的程序不能在x86上运行,而下86的程序能在x64上运行)。此外,如果源代码做出一点改变,之前的可执行文件便作废,要重新编译源代码。如果源代码经常改变,将会消耗大量的资源。

什么是解释型语言?

解释型语言有 Python,JavaScript,PHP,Shell,MATLAB等,这种语言的特点是每次运行程序时一边翻译,一边执行,用到哪些源代码,就将哪些源代码翻译成二进制语言。这种语言是可跨平台的,不同的平台对应不同的解释器,因此解释型语言一般都有很好的可移植性。但是每次运行程序都需要翻译源代码,这样会消耗很多资源,而是速度也比不上编译型语言。

为什么说Java同时具有编译型语言和解释型语言的特性呢?

首先我们都知道Java程序在执行前会被编译成类文件(.class文件也叫字节码文件),这个过程是编译过程。但是计算机硬件并不能理解字节码文件,因此还需要一步,就是通过JVM虚拟机将字节码文件翻译成二进制可执行文件,而这个翻译过程是解释型的过程(用到哪里就翻译哪里)。

一些相关的问题

  1. 问什么需要将Java源代码翻译成类文件,然后再由类文件翻译成二进制文件,直接将Java源代码解释成二进制文件不也可以实现跨平台吗?

    这个问题可能没有官方的答案,但是也不难理解,因为语义检查和语义分析这一步可能会耗费大量的时间,在将源代码翻译成类文件时会进行这些检查。同时呢,类文件是JVM的输入,而并非是Java源代码,每次执行程序时将类文件翻译成二进制文件会节省语义检查和语义分析消耗的资源和时间。因此,类文件这一步还是很有意义的。

  2. 如果说不同的平台拥有不同的编译器,那编译型语言不也能够跨平台吗,为什么不这样做?

    首先这个问题没有什么意义,我们是根据在什么时候将高级语言翻译成二进制语言来区分解释型语言和编译型语言的,并不依据该语言能否跨平台。其次Java就是编译型和解释型的结合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值