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

Posted 糠猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么说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同时具有编译型语言和解释型语言的特性呢?的主要内容,如果未能解决你的问题,请参考以下文章

为什么说 Java 语言“编译与解释并存”?

JavaJS简介

JavaJS简介

有关java是编译型语言还是解释性语言

V8引擎——详解

编译型和解释型语言