计算机高级编程语言,按照程序执行的方式来分的话,主要分为两大类型:编译型语言和解释型语言。下面我们先来说说这两种类型语言的分别。如果对这部分内容已经很清楚的话,可以跳过。
1.编译型:
编译型语言是指使用专门的编译器、针对特定平台(操作系统)将某种高级语言源程序一次性“翻译”成可被该平台硬件运行的机器码(包括指令和操作数),并包装成该平台的操作系统所能识别和运行的格式。这一过程称为“编译”。最后生成的程序(可执行文件)可以脱离开发环境在特定平台上独立执行。我们常见的Windows系统中的可执行文件(以.exe为后缀的文件)都是使用编译型高级程序语言进行编写的。
有时编译过程结束之后,还可能需要对其它编译好的目标代码模块进行链接,即组装两个以上的目标代码模块生成最终的可执行文件,以实现较低层次上的代码重用。通过这样的方式,就可以在已有代码的基础上进行软件开发,提高了最终开发程序的效率和稳定性。
编译型高级语言的程序执行时效率较高,因为它被针对特定的平台一次性编译成机器码、且可以脱离开发环境而独立运行。但编译后生成的目标码文件也就无法再移植到不同的平台上,如要移植则必须修改源程序,或至少针对不同的平台,采用不同的编译器进行重新编译(比如大家都非常熟悉的QQ,就必须针对不同的操作系统,开发不同的客户端版本)。现有的大多数高级语言,如FORTRAN、C、C++、Pascal、LISP等都是编译型的。
2.解释型
解释型语言是指使用专门的解释器,将某种高级语言源程序逐条指令的解释成特定平台的机器码指令,并立即执行,解释一句执行一句,这类似于会场中的“同声翻译”,而不进行整体性的编译和链接处理。解释型语言相当于把编译型语言相对独立的编译和执行过程混合到一起,而且每一次执行时都要重复进行“解释”,因而执行的效率较低。且不能脱离解释器独自执行。但只要针对不同平台提供相应的解释器,就能方便的实现源程序级的移植,但这是以牺牲程序的执行效率为代价。比如现在最流行的互联网开发语言php、ruby、Python等,都是解释型语言。它们大都开发效率高于编译型语言,且在更换系统平台时基本不需要进行源代码的修改,就可以正常运行,非常适合互联网软件系统的要求,在当前互联网大热的时代,大行其道。
也许上面的说明有点专业化了,如果刚刚接触软件编程的话,可能不太好理解,那么下面就举个简单的例子来说明一下。
计算机编程语言发展到现在,已经从最初的机器语言(计算机唯一能够识别的由01组成的代码),经历了汇编、c、C++的由低级到高级的发展(这里的低级高级并不是我们通常意义上的高下之分,而是根据计算机编程语言距离计算机硬件的“距离”而言的),计算机编程语言逐渐的向人类的自然语言靠拢,离机器语言越来越远。但是计算机硬件终究只能识别机器语言,这样,如何让计算机能够识别高级编程语言编写的代码,就成了需要首先解决的问题。
这个问题与不同语言之间的人们如何交流类似。比如程序员使用高级程序语言编程,就像是中国人使用汉语一样。而不同的操作系统是不懂高级程序语言的,比如Windows就像是美国人,只懂英语;Linux是俄罗斯人,只懂俄语。如果我们直接把高级程序语言代码交给操作系统,就像是把一本中文书直接交个美国人或俄国人,它们根本看不懂,当然也就不会按照代码里面的要求去执行计算机指令了。
这个时候,就需要对这本中文书进行翻译了。编译型与解释型就像是使用两种不同的翻译方式,让不懂中文的读者来读懂代码。
编译型语言是这么做的,编译器就像是一个译者,首先拿到了原文,然后开始进行翻译,知道全部翻译完成之后,在将译本交给读者,这个时候读者自然能使用自己的母语来读了。当然译本只是另外一种语言,比如英语。如果这时候换了另外一种语言,比如俄语的读者,就必须重新换个俄语翻译者,然后将原文翻译为俄语的译本,这样俄语的读者才能读懂。但是如果翻译完毕后,翻译的译本就可以给所有的英语或者俄语读者来读了,不需要译者进行重复的劳动。
但是如果这个时候,原文进行重新编订修改,译本就和原版不同步了,这个时候读者拿到的译本就和原本有了出入,需要译者重新进行翻译,读者得等待新的译本。这就是编译型语言的优缺点举例。
那么解释型语言呢,就像前面说的,需要解释器,就像是同声传译。读者不懂汉语,没关系,找一个专业的同声传译,坐在读者旁边,逐字逐句的翻译给读者听。如果这个时候原本发生了变化,只要将原本交给译者,直接翻译给读者的就是最新版本,或者又来了一个俄语读者,那么只要找个俄语同声传译(找个俄语的解释器),同声传译就行了,读者不需要进行等待,这点相比编译型是有优势的。
但是它的缺点也很明显,同声传译给这个读者翻译完了,又来了一个新的读者,即使译者刚刚给一个英语读者翻译完,来的还是一个英语读者,译者还得重复一次,这个就是解释型语言的缺点,效率是比较低的。每次都得重复一次译者劳动。
所以一般来说,程序的编译效率和执行效率存在互斥关系、此消则彼长、难以同时达到最优。
那么Java是怎么做的呢?它是编译型语言呢,还是解释型语言?
答案是:都不是。
Java的独特的运行机制,在当时看来也算是一个创新,即使是现在,主流计算机编程语言中,也只有.Net平台采用了类似的机制,并且实现的效果也不如Java。
那么Java的运行机制独特在哪里呢?它是解释型与编译型结合型的。
如何结合的?下面来详细说明一下。
首先,Java的源代码在编写好之后,先采用通用的Java编译器对源代码进行编译,但是编译的结果并不是针对某一种具体的操作系统平台,比如C语言针对Windows平台编译好的exe可执行文件,而是一种叫做字节码的文件。
字节码的文件内容相对于高级程序语言的源代码来说,更接近计算机机器语言,但是它并不是真正的编译好的机器语言,而仍然是与平台无关的,编译的结果针对的是一种称之为Java虚拟机(JVM—-Java Virtual Machine)的虚拟计算机技术。
JVM按照统一的标准来读取分析字节码文件,然后就像是解释型语言的解释器一样,将字节码指令翻译为具体的某操作系统平台的机器指令,然后去执行指令。
虽然JVM也是解释执行的,当相比于解释型语言,它不是直接解释执行源代码,而是经过处理后的字节码文件,将字节码文件解释为该JVM针对的特定平台的机器指令。这样解释执行的效率要远高于其他解释型语言(比如最常见的web开发,Jsp的运行效率是php的10倍以上)。
并且JVM解释字节码的标准都是一样的,这样Java源代码就不需要针对不同的JVM(或者操作系统平台)重新进行编译或者改写,实现了像解释型语言那样,非常容易的实现了跨平台运行。
通过这种结合型的运行机制,Java既实现了跨平台运行,同时还是高效的跨平台运行。
这样看来,JVM在Java独特的运行机制中,起着举足轻重的作用,我们下一篇内容就来详细讲解JVM——Java虚拟机。
相关推荐
Java程序的运行机制 了解Java程序的运行机制 掌握使用命令行方式开发Java程序的步骤 Java程序的运行机制 编写源程序 编译源程序 由Java解释器解释运行 字节码文件 命令行方式开发Java程序的步骤 1.用记事本编写Java...
3. 可靠性与安全性:Java语言具有强大的安全机制,保护用户的数据和隐私。 4. 多线程优劣:Java语言支持多线程编程,提高了程序的执行效率。 Java语言的市场占有率不断增加,成为开发应用程序的热门选择。Java语言...
本文档主要介绍 Java 实验报告模板,涵盖 Java 编程环境的配置、Java 程序的编写、编译、运行等过程、Java 语言的基本语法和运行原理、集成开发环境的使用方法等多个方面的知识点。 1. Java 运行环境的配置 Java ...
了解Java的运行机制,能够更好的帮你理解Java语言
1.1.3 程序.................................................................................................................3 1.1.4 程序设计 ...........................................................
Java 语言简介、JDK 安装和配置、第一个程序 HelloWorld 编译运行 Java 语言简介 Java是一种面向对象的程序设计语言,由Sun公司开发,主要是基于安全性和高效考虑。Java 不仅是一种语言,也是一种技术。它的原意...
1 Java运行环境 通过在不同环境编译运行一个Java编程环境,认识Java程序结构。 2 Java语言基本语法 编写程序,练习使用Java控制结构,实现循环嵌套与选择嵌套等复杂结构。 3 对象和类 编写程序实现类和对象的操作...
Java语言程序设计(第二版)第06章 包、接口和异常 本章主要介绍Java中包、接口和异常处理的使用方法。包是Java提供的一种区别类名空间的机制,是类的组织方式,一个包对应一个文件夹,包中还可以有包,称为包等级...
java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...
《Java语言程序设计》是计算机专业的主要选修课 实验一 Java开发环境。实验二 Java基本语法。实验三 类与对象的设计。实验四 类的继承性与多态性。实验五 接口与包。实验六 异常处理。实验七 图形用户界面设计。实验...
java的垃圾回收将在程序运行过程中自动进行,无需程序员负责回收无用内存。 3.java环境变量配置: 在我的电脑>属性>高级>环境变量里的 path 中加入C:\Program Files\Java\jdk1.6.0\bin的路径(注:放在所有路径的最...
2. Java中的文件输入/输出:Java中的文件输入/输出是Java编程中的一个重要概念。Java提供了多种文件输入/输出方式,例如文件流和缓冲流。 Java网络编程 1. Java中的Socket编程:Java中的Socket编程是Java网络编程...
Java 是一种面向对象的编程语言,具有跨平台、分布式计算、多线程等特点。本资源提供了 Java 程序设计的试题和答案,涵盖了 Java 的基础知识点,包括包、类型、继承、异常、数组、语句、类和对象等方面。 1. 在 ...
A.Java是一个纯面向对象的语言 B.Java语言中有指针、结构和类型定义的概念 C.Java语言是与平台无关的,可以在不同的操作系统下运行 D.Java语言具有自动无用内存回收机制 正确答案:B 您的答案: 本题解析: 暂无解析...
3. Java为解释型语言,编译器把Java代码编译成平台无关的中间代码,然后在JVM上解释运行,具有很好的可移植性。 4. Java提供了很多内置类库。如对多线程支持,对网络通信支持,最重要的一点是提供了垃圾回收器。 5. ...
JArgs 是一个 Java 语言用来处理应用程序的命令行参数的类库。 高性能内存消息和事件驱动库 Chronicle Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-...
java运行机制、java标识符 java标识符 1.在java语言中,对各种变量,方法和类等要素命名时所使用的字符序列就是标识符。 有些标识符是jdk定义好的(关键字。 如:public) 2.java中标识符由26个英文字符大小...
Java的设计目标是提供一种易学易用、功能强大的编程语言,使开发人员能够快速开发可靠的应用程序。 Java的跨平台特性是其最显著的特点之一。Java程序可以在任何计算机、操作系统和支持Java的硬件设备上运行。这意味...