版权声明:本文为博主原创文章。未经博主同意不得转载。

https://blog.csdn.net/wangyongxia921/article/details/28117155

 

一、对AVA的迷茫

 

曾经仅仅是一味的学习VB。.NET,c#。

如今轮到学习java了。迷惑了?书上说:JAVA是一种跨平台语言,最大的优势就是它实现了,一次编译,到处执行的机制。

这是什么?跟平台无关?我曾经做的VB,.NET,c#程序也没有考虑过平台呀?

学过编译原理的同学也许都知道“语言处理程序”。事实上就是编译器。

java的“一次编译,到处执行”就跟这个编译器有关。

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

 

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

VB。.NET,c#,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提供了各种不同平台上的虚拟机制。所以能够实现“到处”。

   

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3lvbmd4aWE5MjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />

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

 

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

同一个程序。假设是解释执行的。那么它的执行速度通常比编译为可执行的机器代码的执行速度慢一些。

可是,对Java来说,二者的区别不太大。

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

 

三、总结

1、JAVA有这么的强大的特点,不是仅仅指的是“狭义”的JAVA程序设计语言,而是整个JAVA体制,从编译器開始发生改革。所以平时我们所说的JAVA特点是一种广义上的JAVA。

開始,迷惑的我。是不清楚这些IDE。这些编译器,这些开发环境(jdk),执行环境(jre)都被融合在一起,放在了一个继承环境中(IDE)。

这本是一个非常好的开发,执行,调试的一条龙服务,可是缺让我想当然的把程序设计语言,编译器,等这些单独的工具给模糊了。仅仅是一味的再使用,却不知道。这些东西的底层确实这般联系。

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

博客推荐:http://blog.csdn.net/cutesource/article/details/5904542



JAVA的一次编译,到处执行,你知道多少?的更多相关文章

  1. java在cmd下编译和执行引用jar的类

    java编译和执行引用第三方jarcmd  1.将上面的ojdbc14.jar文件,与调用程序复制到系统D盘的根目录下,切记:因为调用程序在wym.database包下,所以需要将类其所在的包一起拷贝 ...

  2. 【Java编程】Java在dos窗口编译与执行的批处理

    最近在Java编程过程中,常用到dos窗口对程序进行编译与运行.但是不方便之处在于每次都要输入命令进入将要编译的程序的目录(其实也有简单的方法,在文章末尾给出).于是编写了一个配置文件,可以一次修改, ...

  3. 关于JAVA,特点,历史,编译式的语言&解释式的语言,什么是java?JDK?DOS?一次编译到处运行原理。

    1.java语言的特点: 简单的:面向对象的:跨平台(操作系统)的(一次编译,到处运行):高性能的: 2.类名的首字母大写,方法小写: 3.历史: java2(即java),为什么加个2呢?1998年 ...

  4. JVM(二),Java怎样实现一次编译到处运行(平台无关性)

    二.Java怎样实现一次编译到处运行(平台无关性) 1.java平台无关性原理 Java源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,Jav ...

  5. 面试官:Java从编译到执行,发生了什么?

    面试官:今天从基础先问起吧,你是怎么理解Java是一门「跨平台」的语言,也就是「一次编译,到处运行的」? 候选者:很好理解啊,因为我们有JVM. 候选者:Java源代码会被编译为class文件,cla ...

  6. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  7. Java 代码编译和执行的整个过程

    Java 代码编译是由 Java 源码编译器来完成,流程图如下所示: Java 字节码的执行是由 JVM 执行引擎来完成,流程图如下所示: Java 代码编译和执行的整个过程包含了以下三个重要的机制: ...

  8. 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

    一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...

  9. 在windows下使用cmd命令行对java文件进行编译和执行

    windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量 相关配置链接:java基础学习总结—— ...

随机推荐

  1. Sqoop学习笔记_Sqoop的基本使用二(sqoop的import与export)

    Sqoop抽取从mysql抽取到hive sqoop抽取到mysql一样有两种方式一种是用command line的方式,一种是用sqoop opt文件调用的方式.(由于两种sqoop一已经记录了,现 ...

  2. PKUOJ 区间内的真素数

    http://bailian.openjudge.cn/tm2018/A/ #include <iostream> #include <math.h> #include < ...

  3. 阿里云HBase Ganos全新升级,推空间、时空、遥感一体化基础云服务

    1.HBase Ganos是什么 Ganos是阿里云时空PaaS服务的自研核心引擎.Ganos已作为云数据库时空引擎与数据库平台融合,建立了以自研云原生数据库POALRDB为基础,联合NoSQL大数据 ...

  4. E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁 问题解决方法

    使用Ubuntu16.04安装软件执行apt-get update时出现如下错误: E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无 ...

  5. hibernate 一对一注解

    bi如 用户的阅读历史和文章表是单向一对一关系, 阅读历史中通过deviceId外键关联文章表的主键 然后,再从getter setter上进行注解 @OneToOne(cascade = Casca ...

  6. C#icon图标文件转Image

    Icon icon = ICONHelper.GetFileIcon(filePath); MemoryStream mStream = new MemoryStream();//创建内存流 icon ...

  7. 1.开始Springboot 基本配置和helloworld

    1 pom.xml 首先引入两个xml节点 <!--这里面继承了springboot很多相关依赖--> <parent> <groupId>org.springfr ...

  8. django2.x报错No module named 'django.core.urlresolvers'b

    解决方法就是: from django.urls import reverse 最近从django1.9迁移到django2.0中出现一个意外的报错: 这个报错的原因在stack overflow上有 ...

  9. require模块开发(一)

    1.require下载和加载 1.1 下载 工欲善其事必先利其器,先下载require.js下载地址, 然后添加 require.js 到 scripts 目录 1.2 加载 然后加载require ...

  10. GitBook的使用方法

    ---恢复内容开始--- 由于近期工作中使用gitbook编写讲义,现把出现的问题总结下: 1 . gitbook的安装 Gitbook与word等办公软件类似,能够编写文档,Gitbook中编写文档 ...