Java跨平台原理

1 ,什么是平台
Java 是可以跨平台的编程语言,那我们首先得知道什么是平台,我们把 CPU 处理器与操作系统的整体叫平台。
CPU 大家都知道,如果计算机是人 , CPU 就是人的大脑,它既负责思维运算,又负责身体各部件的命令控制。 CPU 的种类很多,除去我们熟知的 Intel AMD 外,还有比如上面说到的 SUN Sparc, 比如 IBM PowerPC 等等,这些各个公司生产的 CPU 使用或相同或不同的指令集。 指令集就是 cpu 中用来计算和控制计算机系统的一套指令的集合。指令集又分为精简指令集(RISC)与复杂指令集(CISC),每种 cpu 都有其特定的指令集。开发程序,首先要知道该程序在什么CPU上运行,也就是要知道 CPU 所使用的指令集
下面说操作系统, 操作系统是充当用户和计算机之间交互的界面软件,不同的操作系统支持不同的 CPU ,严格意义上说是不同的操作系统支持不同 CPU 的指令集。例如    windows liunx 都支持 Intel AMD 的复杂指令集,但并不支持 PowerPC 所使用的精简指令集,而早期的 MAC 电脑使用的是 PowerPC 处理器,所以也就无法在 MAC 下直接安装 windows, 直到 05 MAC 改用了 Intel CPU, 才使在 MAC 下安装 windows 成为可能。但问题来了,原来的 MAC  操作系统也只支持 PowerPC, Intel 上也不能安装,怎么办?所以苹果公司也得重写自己的 MAC 操作系统以支持这种变化。最后总结下,我们要知道,不同的操作系统支持不同的 CPU 指令集,现在的 windows,liunx,mac, solaris都支持Intel与AMD的CPU指令集。
有了上面的铺垫,旺旺老师就要告诉大家,如果您要开发程序,首先应该确定:1,CPU类型,也就是指令集类型;2,操作系统;我们把这种软硬件的结合叫平台。也可以说“平台= CPU+OS”。又因为现在主流的操作系统都支持主流的CPU,所以有时也把操作系统称为平台。
知道什么是平台,我们看Java跨平台原理。

2 Java 跨平台原理
首先看一张与C语言有关的图: 
如果您有过 C 的开发经历,这张图看起来将非常轻松。我们知道,只要是用标准 C 开发的程序,使用不同的编译器编译后的可执行文件是可以在对应平台运行的,比如 windows 可以使用 VC 编译,那编译后的 exe 文件就可以在 windows 下运行; liunx 下可以使用 GCC 编译,生成的可执行文件就可以在 Liunx 上运行。
到这里请大家思考一个问题:“ VC 编译的 exe 能在 Liunx 上运行吗?”
答案肯定是否定的。使用特定编译器编译的程序只能在对应的平台运行,这里也可以说编译器是与平台相关的,编译后的文件也是与平台相关的。我们说的语言跨平台是编译后的文件跨平台,而不是源程序跨平台,如果是源程序,任何一门语言都是跨平台的语言了。这个如果您不明白,看下面一个案例:
比如火星真的有外星人(并且毋庸置疑,火星是韩国人的,火星文也一定是韩国人发明的),就像我们观察蚂蚁一样,火星人默默的观察着我们,有一天,当人类做的什么事情让火星人实在是看不下去了(比如旺旺老师的书出版了你不买,哈哈,呕吐中,没关系,吐啊吐啊就吐习惯了),所以决定来地球教育我们,但有一个问题,火星人只会说火星文,地球人理解不了,怎么办啊?找翻译呗(也许非主流可以帮忙,玩笑)!由中文翻译把火星文翻译为中文,英文翻译把火星文翻译为英文等等等等,但这样问题来了,中文翻译翻译的东西只有中国人能听懂,美国人法国人根本不明白,英文翻译翻译的文章中国人也不明白,也就是语言不能跨平台。

     那上例中,火星文就是 C 语言,各个国家是平台,中文翻译英文翻译就是对应平台的编译器,编译后的文章就是可执行文件。虽然源文章火星文是与平台无关的,但翻译器是与特定国家相关的,翻译后的文章也是与特定国家相关的。
接下来思考另一个问题“怎么让火星文跨平台呢?”
火星人想到了地球上有世界语,于是首先把自己的文章翻译为世界语;世界语各国人当然看不懂,没关系,火星人又给每个国家配备了一个世界语到本地语的翻译,这样火星文只要翻译一次(翻译为世界语),就可以到各个国家运行了。还要记住,这个过程火星人要提供两个组件,第一是火星文到世界语的翻译,第二是世界语到对应本地语言的翻译。如下图:
有了上面案例的积累,我们也知道了语言跨平台原理:“ 不能编译成机器语言,因为那样就与平台相关了 编译为中间语言 ,再由解释器二次编译,解释执行。”如下是 Java 跨平台原理表示图:
上图中的 .java 就是源程序,类似于 c 语言的 .c, 生成的中间码是 .class, 这个既是我们上文中说的中间语,各个平台解释器就是各种国家翻译。
接下来我们再比较下两种方式的差异:第一, C 语言是编译执行的 编译器与平台相关 编译生成的可执行文件与平台相关 ;第二, Java 是解释执行的,编译为中间码的编译器与平台无关,编译生成的中间码也与平台无关(一次编译,到处运行),中间码再由解释器解释执行,解释器是与平台相关的,也就是不同的平台需要不同的解释器.

这里再说下语言根据执行方式的不同分类:第一是编译执行,如上文中说到的 C ,它把源程序由特定平台的编译器一次性编译为平台相关的机器码 , 它的优点是执行速度快,缺点是无法跨平台;第二是解释执行,如 HTML,JavaScript ,它使用特定的解释器,把代码一行行解释为机器码,类似于同声翻译,它的优点是可以跨平台,缺点是执行速度慢,暴露源程序;第三种是从 Java 开始引入的“中间码 + 虚拟机”的方式,它既整合了编译语言与解释语言的优点,同时如虚拟机又可以解决如垃圾回收,安全性检查等这些传统语言头疼的问题,所以其后微软的 .NET 平台也使用的这种方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值