JAVA的一次编译,到处执行,你知道多少?
版权声明:本文为博主原创文章。未经博主同意不得转载。
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的一次编译,到处执行,你知道多少?的更多相关文章
- java在cmd下编译和执行引用jar的类
java编译和执行引用第三方jarcmd 1.将上面的ojdbc14.jar文件,与调用程序复制到系统D盘的根目录下,切记:因为调用程序在wym.database包下,所以需要将类其所在的包一起拷贝 ...
- 【Java编程】Java在dos窗口编译与执行的批处理
最近在Java编程过程中,常用到dos窗口对程序进行编译与运行.但是不方便之处在于每次都要输入命令进入将要编译的程序的目录(其实也有简单的方法,在文章末尾给出).于是编写了一个配置文件,可以一次修改, ...
- 关于JAVA,特点,历史,编译式的语言&解释式的语言,什么是java?JDK?DOS?一次编译到处运行原理。
1.java语言的特点: 简单的:面向对象的:跨平台(操作系统)的(一次编译,到处运行):高性能的: 2.类名的首字母大写,方法小写: 3.历史: java2(即java),为什么加个2呢?1998年 ...
- JVM(二),Java怎样实现一次编译到处运行(平台无关性)
二.Java怎样实现一次编译到处运行(平台无关性) 1.java平台无关性原理 Java源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,Jav ...
- 面试官:Java从编译到执行,发生了什么?
面试官:今天从基础先问起吧,你是怎么理解Java是一门「跨平台」的语言,也就是「一次编译,到处运行的」? 候选者:很好理解啊,因为我们有JVM. 候选者:Java源代码会被编译为class文件,cla ...
- 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序
如何用javac 和java 编译运行整个Java工程 (转载) http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...
- Java 代码编译和执行的整个过程
Java 代码编译是由 Java 源码编译器来完成,流程图如下所示: Java 字节码的执行是由 JVM 执行引擎来完成,流程图如下所示: Java 代码编译和执行的整个过程包含了以下三个重要的机制: ...
- 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...
- 在windows下使用cmd命令行对java文件进行编译和执行
windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量 相关配置链接:java基础学习总结—— ...
随机推荐
- GetCommandLine CmdLineToArgvW
说明:LPTSTR GetCommandLine(VOID); LPWSTR * CommandLineToArgvW( ...
- Windows API 第14篇 DeleteAndRenameFile
函数定义:BOOL DeleteAndRenameFile( LPCWSTR lpszDestFile, ...
- [转]WPF中的ControlTemplate(控件模板)
WPF中的ControlTemplate(控件模板) ...
- CODE[VS]1372:DNA
Description 为了进一步分析外星生物,专家们决定对 DNA 进行切割.限制性核酸内切酶是基因工程中的重要的工具酶.它会识别一段碱基序列(说白了就是只包含 ATGC 的序列)并且切割开.Eco ...
- 在ubuntu中安装phpstorm
安装参考网址 https://blog.csdn.net/mrgong_/article/details/77200225 注意:不需要安装java相关 激活phpstorm 2018 参考网址:ht ...
- JS中的一些函数式编程术语
组合 Composition 组合某种类型(含函数)的两个元素,进而生成一个该类型的新元素: JavaScript 1 2 3 4 5 6 7 let compose = (f ...
- CentOS 6.5 使用Apache的VirtualHost映射SVN端口
vi /etc/httpd/conf.d/subversion #修改Apache的SVN配置,如果没有配置过则略过 #<Location /svn> # DAV svn # SVNPar ...
- python实现简单的百度翻译
这段时间,一直在学python,想找点东西实现一下,练手,所以我想通过python代码来实现翻译,话不多说,看吧! 以chrome为例 1 打开百度翻译 https://fanyi.baidu.co ...
- HTML入门:Tag学习
即使 <br> 在所有浏览器中的显示都没有问题,使用 <br /> 也是更长远的保障. 标签 描述 <html> 定义 HTML 文档. <body> ...
- Oracle时间日期处理方法
https://www.cnblogs.com/plmm/p/7381496.html 1.用于截取年.月.日.时.分.秒 extract()函数 extract(year from sysdate) ...