目录
一、计算机高级语言主要有编译型和解释型两种。
1、详细说明
首先计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种:编译、解释。
2、两者区别
|
|
|
|
|
|
|
|
|
|
|
|
3、总结
- 主要区别在于,前者源程序编译后即可在该平台运行,后者是在运行期间才编译。所以前者运行速度快,后者跨平台性好。
- 前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,如C/C++等都是编译语言。
- 而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript
二、关于java
1、概述:
Java和其他的语言不太一样。因为java针对不同的平台有不同的JVM,实现了跨平台。所以Java语言有一次编译到处运行的说法。
- 可以说它是编译型:因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有。
- 可以说它是解释型:因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的,那也就算是解释的了。
- 现在的JVM为了效率,都有一些JIT优化。它又会把.class的二进制代码编译为本地的代码直接运行,所以又是编译的。
2、个人理解
java是解释型的语言,因为虽然java也需要编译,编译成.class文件,但是并不是机器可以识别的语言,而是字节码,最终还是需要 jvm的解释,才能在各个平台执行,这同时也是java跨平台的原因。所以可是说java即是编译型的,也是解释型,但是假如非要归类的话,从概念上的定义,恐怕java应该归到解释型的语言中。 比如首先利用文本编辑器编写Java源程序,原文件的后缀名为.java,再利用编译器(javac)将源程序编译成字节码文件(.class)最后利用不同平台的(Linux、Windows)虚拟机解释成机器码由操作系统执行。
三、Java程序的运行过程(执行流程)分析
1、Java 程序的3 个步骤
|
|
|
|
|
|
2、文件概述
- 字节码文件:是一种和任何具体机器环境及操作系统环境无关的中间代码。它是一种二进制文件,是 Java 源文件由 Java 编译器编译后生成的目标代码文件。编程人员和计算机都无法直接读懂字节码文件,它必须由专用的 Java 解释器来解释执行,因此 Java 是一种在编译基础上进行解释运行的语言。
- Java解释器:负责将字节码文件翻译成具体硬件环境和操作系统平台下的机器代码,以便执行。因此 Java 程序不能直接运行在现有的操作系统平台上,它必须运行在被称为 Java 虚拟机的软件平台之上。
- Java虚拟机:是运行 Java 程序的软件环境,Java 解释器是 Java 虚拟机的一部分。在运行 Java 程序时,首先会启动 JVM,然后由它来负责解释执行 Java 的字节码程序,并且 Java 字节码程序只能运行于 JVM 之上。这样利用 JVM 就可以把 Java 字节码程序和具体的硬件平台以及操作系统环境分隔开来,只要在不同的计算机上安装了针对特定平台的 JVM,Java 程序就可以运行,而不用考虑当前具体的硬件平台、操作系统环境、字节码文件是在何种平台上生成的。
3、总结
- JVM 把这种不同软、硬件平台的具体差别隐藏起来,从而实现了真正的二进制代码级的跨平台移植。JVM 是 Java 平台架构的基础,Java 的跨平台特性正是通过在 JVM 中运行 Java 程序实现的。
- Java 语言这种“一次编写,到处运行”的方式,有效地解决了目前大多数高级程序设计语言需要针对不同系统来编译产生不同机器代码的问题,即硬件环境和操作平台的异构问题,大大降低了程序开发、维护和管理的开销。
- 提示:Java 程序通过 JVM 可以实现跨平台特性,但 JVM 是不跨平台的。也就是说,不同操作系统之上的 JVM 是不同的,Windows 平台之上的 JVM 不能用在 Linux 平台,反之亦然。
知识总结
本章梳理
- 首先高级语言都需要翻译成机器码才能被操作系统所识别,而翻译的过程有两种(编译、解释)。解释型就好比翻译官,精通各国语言,能即时翻译,通用性高,但是口述慢。编译型就好比出版书本,一次性翻译好,效率高,但是一本书一种语言,通用性差。
- Java特立独行,将源码一次性编译成字节码文件,但是能通过不同平台的JVM再翻译成机器码。也就是说相当于出版书籍,但是呢,每种语言都有。个人认为其属于解释型,因为编译后的字节码文件是操作系统看不懂的,最终还需要解释成机器码。
- Java执行流程就是先编写源码(.java),再编译好(.class),最后又JVM来运行。
博客原笔记图