如何理解Java跨平台?

一、从Java看高级程序语言

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

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

  1. 编写阶段-程序设计语言

    VB,.NET,c#,java等都是程序设计语言

  2. 编译阶段-程序处理语言

    程序处理语言包含编译器、解释器。它的作用就是把程序语言翻译为目标语言。以上两者的关系就是“语言”和“翻译者”的关系。在使用语言时,我们只能说使用语言去书写一段程序。而编译器则是能够将某种语言的源程序进行翻译,然后生成目标程序。

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

  3. 运行、调试阶段-集成开发环境

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

看到以上三个概念,就明白为什么编程的时候只需要一个简单的记事本就可以,但是运行的时候就需要VS、VB等IDE中进行。

二、从高级语言看Java跨平台特性

从上面可以看出,程序从源代码到程序需要经历3个阶段:编写-编译-运行。所有的高级程序设计语言都需要经过这3个阶段。

本身Java本身最大的特性是面向对象,与今天的主题无关,不作介绍。Java的特殊性在于它的编译阶段。

  1. 一次编译时宏观的一次编译。

    Java编译过程

    分解过程:

    第一步:Java源码 -- .class文件字节码是Java第一编译。生成的class文件就是可以到处运行的文件。

    Java编译过程

    第二步:Java字节码 -- 目标机器代码。执行由JVM来完成,Java的第二次编译。

  2. 到处运行隐含条件--“到处”的前提是“装有JVM”

    第二次编译时在JVM中执行的,也就是任何一个装有JVM的操作系统中完成的。Java提供了各种不同平台上的虚拟机制,所以可以实现“到处”。

  3. Java并不是编译机制,而是解释机制

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

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

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

转载于:https://my.oschina.net/zhangyujian/blog/2054509

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值