什么叫java的一次编译,到处运行?

转载 2018年04月14日 23:58:05

一、对AVA的迷茫

 

以前只是一味的学习VB.NETc#。现在轮到学习java了。迷惑了?书上说:JAVA是一种跨平台语言,最大的优势就是它实现了,一次编译,到处运行的机制。这是什么?跟平台无关?我以前做的VB.NETc#程序也没有考虑过平台呀?

学过编译原理的同学或许都知道“语言处理程序”,其实就是编译器。java的“一次编译,到处运行”就跟这个编译器有关。

在具体说之前,我们先要理清楚几个概念,以及它们之间的关系。

 

1、编写阶段——程序设计语言

VB.NETc#java等都是程序设计语言,这个不用多说。

 

2、编译阶段——程序处理语言 

程序处理语言包含编译器,解释器。它的作用就是把程序设计语言翻译成目标语言。

以上两者的关系就是“语言”和“翻译者”的关系。在使用语言时,我们只能说,使用这种语言去书写一段程序。编译器则是能够将某种语言的源程序进行翻译,然后生成目标程序。

不同的设计语言有不同的编译器。我们通常会说,某个编译器支持了什么语言,正如一个翻译者只懂翻译英语,法语,但是不会日语,所以翻译不了日语一样,这个编译器只识别能识别得语言并翻译这种语言。

 

3、运行,调试阶段——集成开发环境(IDE

在程序的运行阶段则是在一个特定的平台上,由这个平台来执行编译生成的程序。编译器的作用就是沟通源程序和程序的运行平台。源程序相对于一个运行平台来说是不可识别的,但当编译器将源程序编译成为这个平台所能够识别的目标语言以后,程序就可以在这个平台上运行了。Java虚拟机是一个平台,DOS 和 Windows 也是平台。 

看来以上三个概念,就明了了,为什么我们编写程序的时候,我们甚至可以只用一个简单的记事本就可以搞定,但是要运行的时候,就需要在“vs”或者“vb”等IDE中进行了。 

那么我们进入正题,JAVA的特殊在哪?


二、一次编译,到处运行 

上面三个概念中已经指出了程序从源代码到运行的三个必经阶段:编码——编译——运行,调试。

所有的高级语言都需要进过这三个阶段。

本身JAVA语言的最大特点是面向对象,跟今天的主题无关,不做介绍。JAVA的特殊特殊在哪里?——在编译阶段。 


1一次编译是宏观的一次编译。


我们来看一下JAVA的编译过程:

    


分解过程:

第一步:Java源代码——.CLASS文件字节码,是java的第一次编译。生成的这个.class文件就是可以到处运行的文件。


第二步:Java字节码——到目标机器代码;执行是由JVM执行引擎来完成,JAVA的第二次编译。


2、到处运行的隐含条件——这里的“到处”的前提是“装有JVM”。 


看完编译过程在这里说“到处运行”就毫不费力了。因为第二次编译就是在JVM中执行的,也就是在任何一个装有“JVM”的操作系统中完成的。JAVA提供了各种不同平台上的虚拟机制,所以可以实现“到处”。

    


注意:java并不是编译机制,而是解释机制。 


看过了JAVA的两次编译,不要以为JAVA是编译机制,在java中有第一次编译,还有第二次解释来适应不同平台;根据不同的平台进行解释执行。在JVM中的第二次编译过程中(从字节码向机器码转换过程中)真正采用的是“解释”机制。即翻译一句,执行一句,不产生整个的机器代码程序。翻译过程如果不出现错误,就一直进行到完毕,否则将在错误处停止执行。

同一个程序,如果是解释执行的,那么它的运行速度通常比编译为可执行的机器代码的运行速度慢一些。但是,对Java来说,二者的差别不太大

以下是查到的解释:Java的字节码经过仔细设计,很容易便能使用JIT 即时编译方式 编译技术将字节码直接转化成高性能的本地机器码,Sun 公司在 Java 2发行版中提供了这样一个字节码编译器——JIT(Just InTime),它是Java虚拟机的一部分。Java运行系统在提供JIT的同时仍具有平台独立性,因而“高效且跨平台”对Java来说不再矛盾。如果把 Java的程序比做“汉语”的话,字节码就相当于“世界语”,世界语不和具体的“国家”关,只要这个“国家”提供了“翻译”,就可以再快速地把世界语翻译成本地语言。 


三、总结


1JAVA有这么的强大的特点,不是仅仅指的是“狭义”的JAVA程序设计语言,而是整个JAVA体制,从编译器开始发生改革。所以平时我们所说的JAVA特点是一种广义上的JAVA。开始,迷惑的我,是不清楚这些IDE,这些编译器,这些开发环境(jdk,运行环境(jre)都被融合在一起,放在了一个继承环境中(IDE)。这本是一个很好的开发,运行,调试的一条龙服务,可是缺让我想当然的把程序设计语言,编译器,等这些单独的工具给模糊了。只是一味的再使用,却不知道,这些东西的底层确实这般联系。


2、这篇文章中的编译知识,可以更好的理解,也是得益于软考中学习的“编译原理”。不得不说,知识环环相扣。

为什么说java是“一次编译到处运行?”

因为是“编译”啊!不是编写。
  • ilovedu01
  • ilovedu01
  • 2017-01-08 12:32:31
  • 796

JAVA的一次编译,到处运行,你知道多少?

一、对AVA的迷茫 以前只是一味的学习VB,.NET ,c#。现在轮到学习java 了。迷惑了?书上说:JAVA是一种跨平台语言,最大的优势就是它实现了,一次编译,到处运行的机制。这是什么?跟平台无关...
  • wangyongxia921
  • wangyongxia921
  • 2014-06-02 17:58:14
  • 14061

java的所谓一次编译,到处运行

java的所谓一次编译,到处运行,也是对于同一个版本的jre而言的,比如你用1.5版本编译出来的,在1.4版本的就不一定能运行了(jre包括jvm以及运行时的类库)。但是,就同一个版本的jre而言,j...
  • luojinping
  • luojinping
  • 2011-10-13 17:40:36
  • 4676

Java程序为何“编译一次,到处运行”

一、内部类          内部类的定义:大部分时候,我们把类定义成一个独立的程序单元。在某些情况下,我们把一个类放在另一个类的内部定义,这个定义在其他类内部的类被称为内部类,包含内部类的类被称为...
  • Lilibaobei1314
  • Lilibaobei1314
  • 2014-06-26 11:46:27
  • 2350

Java一处编译到处运行的简单原理

Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时...
  • liufang1a2b
  • liufang1a2b
  • 2015-08-04 17:34:25
  • 1754

“一次编译,到处运行”原理

原理  首先,Java源文件按照JVM规范编译成Java字节码(class文件);其次,在不同的操作系统上安装对应的JVM行解释,转换为对应平台的机器码,最终得到执行,如下图所示:...
  • yangguosb
  • yangguosb
  • 2017-12-22 10:56:16
  • 123

java的一次编译到处运行

        简单地说Java的跨平台性就是指,编译后的Java程序可直接在不同的平台上运行而不用重新编译,这一特性使得Java随着Web应用的普及而迅速普及起来。而Java的跨平台性是如何实现的呢...
  • houjie410782
  • houjie410782
  • 2010-12-13 21:44:00
  • 341

java为什么可以实现跨平台(即实现一次编译,到处执行,此处的平台主要指不同的操作系统),而C/C++却不行?

对于计算机而言,只认识一种语言,就是由0,1代码组成的机器语言,所以我们使用C/C++编写的程序计算机是看不懂的,因此必须将C/C++高级语言翻译成由0,1代码组成的机器语言,担任翻译工作的就是编译程...
  • gpf1320253667
  • gpf1320253667
  • 2015-03-15 08:29:39
  • 1196

[Java]转知乎,一处编译,到处运行?

转知乎……原帖已找不到,不过可以去知乎搜下。当时记下来的,现在看看感觉蛮不错。 一、 ——————————————————1st———————————————————— 这句话说出来是有背景...
  • htx931005
  • htx931005
  • 2015-02-07 22:39:03
  • 1407

java的一次编译多次执行机制

JVM是一个java虚拟机,所谓的java虚拟机就是和普通的虚拟机一样,拥有自己的CPU,RAM之类的。我们所使用的操作系统是Windows的操作系统,Windows操作系统支持的可执行文件是EXE文...
  • zeko075
  • zeko075
  • 2013-02-02 16:29:02
  • 902
收藏助手
不良信息举报
您举报文章:什么叫java的一次编译,到处运行?
举报原因:
原因补充:

(最多只允许输入30个字)