Java的平台无关性
转载自:http://www.cnblogs.com/Y/archive/2011/03/22/JavaVM_Learning_Chapter2_Platform_Independence.html
为什么要平台无关?
废话!当然是方便了,你随手写一个Hello,world!,地球上所有的设备都能显示出来,那多牛B!写hello,world! 你可能觉得没有用,那要是写一句“今年过节不收礼。。。”,钱是不是就开始掉下来了?
Java体系结构对平台(操作系统)无关的支持
这部分是本章中我最觉得有用的,如下:
- Java平台提供平台无关性。把脏活累活留给自己,打掉牙往肚里吞,对外始终保持一个样(小样?)。
- Java语言提供平台无关性。由于不需要针对特定操作系统,Java语言就只针对Java的平台,所以就不会出现大端小端的问题,不会出现int的占位长度问题等等。
- Java的class文件提供平台无关性。就是说,不仅语言提供无关性,把语言扁(编)过以后,还是无关。
- 可 伸缩性。如果把windows、linux、unix、mac等等看做是横向的系统,在这些系统上Java可以提供相同的功能。那么大型机、小型机、微型 机、嵌入式设备就是纵向的,Java通过对自身平台的扩展或者缩减来提供不同规模和功能的系统。相当于windows的桌面平台、服务器平台和嵌入式平台 (Windows CE/Mobile)。
其实,一二三点都是基 于Java平台本身无关带来的,就是从源代码->中间文件->实现功能 这三级都通通统一(拗口吧)。这个思想应该值得我们在设计平台时借鉴,在设计一个业务平台时,考虑分层(类似 实现/功能/中间文件/代码)时,尽量提供可扩展和可伸缩的设计,让后期的功能改变都只影响尽量少的模块(这句话我写是写了,但是感觉有些空,就权当是耳 边风吧,反正又不收钱)。
另外,从第四点中,我倒是稍微搞清楚了不同类型Java平台的作用了。J2EE、J2SE、J2ME分别针对企业应用、桌面应用和移动应用。微软有分移动平台和桌面平台,但是好像没有把企业应用单独分出来。
影响平台无关的因素
这一部分的意思主要就是:其实Java也不是真的就能把所有的系统全部都吃进去,由于有如下因素:
- Java平台的部署。就是指这个系统中是否支持Java。这个真的是废话了,如果不支持,Java平台的本地实现从天上掉下来?
- Java平台的版本。一个是指企业/桌面/移动的不同版本,一个是指平台的版本号变迁。这两个都好理解,前一个是范围的问题,后一个是版本前后兼容的问题。
- 本 地方法。想平台无关,就不要用本地方法。但是一定要用怎么办?一个是就不要追求平台无关了,这个做法是最常见的,用于兼容老的、特定的软硬件系统,或者根 本就没有跨平台的需要。另外一个是在所有的系统中都加上本地方法,把本地方法融入到你自己的Java平台中,让它变成YourJava平台的一部分,当然 了,代价就是你要去做原来Sun/Oracle做的事情。
- 非标准运行时 库。我真是天才,上面一点中我就想到了把自己的方法变成YourJava平台的一部分,这里马上就提到了很多厂商就提供了自己的库。厂商一般需要先提供标 准的Java运行时库,然后提供扩展的功能,提供N多系统对应的CompanyJava平台版本,越是NB的厂商,其功能就越强大,支持的系统就越广泛 (MS例外)。
- 对虚拟机的依赖。finalization和thread prioritization这两个功能可能会因为不同开发商实现的不同导致平台依赖性,所以,不要用这两个特性。这个说法我以前没有接触到,所以理解可能有问题,以后想通了再回来补充一下。
- 对 界面的依赖。这个简单,打开一个软件,你一眼就能发现:这个是windows软件,这个是苹果上面的,这个是Java的,这个是Dos的,不同的操作系统 都有自己的典型界面,用户可能习惯于这个界面,所以理论上,Java软件具有统一界面且不与系统相关,刚开始的时候, 谁都看它不顺眼(因为和谁都不一样呗!)这个貌似现在有做法是做成界面本地系统化,让不同系统上的Java调用该系统对应的界面,以达到欺骗用户双眼和蒙 蔽用户心灵的双重功效。
- Bug。不懂,谁都有Bug,这个影响什么?
- 测试。不测试好所有的系统就无法说全系统平台无关。实际使用中,把能涉及到的系统都测试一下就OK了,不可能做个qq还要求神马也支持。
如何做到平台无关
考虑如下因素:
- 选对象-软件要运行在哪些软硬件系统上?
- 选平台-Java平台和版本,如写手机软件用J2EE,写QQ for iPad用J2SE的win7版本,做网站用J2ME,这些都是找死的做法,千万不要哦。另外,版本号也是非常重要,对于新老系统的兼容性也需要考虑。
- 选运行时-平台规平台,实现归实现,选微软的和IBM的就是不一样的,这个也需要好好考虑,一旦确定后,通常是不好变的,小变可以,大变比较困难。
- 只用改用的-只用标准的,本地的、厂商特有的,通通不用!这个有时候比较难,要不然为什么我选那个厂商呢?
- 不依赖虚拟机-这个我不熟悉,参看上面“影响平台无关的因素”中的第五点。
- 做一个界面-这个我不懂,意思是说,做一个界面,这个界面在所有的系统上都能正常工作,是说不让用特别的控件或实现方式吗?。
- 测试-就是所有系统都测试一下,不要只测试一个,就觉得其它的都没有问题了。看吧,Java也不是真的就只在一个操作系统上搞定,就能搞定所有的了,平台无关还是一个相对的概念。
如果你都做到了,也不一定就行,反正最终是以实际结果为准,如果结果也都OK,你就能用一个咖啡的标记表示纯正的麦斯威尔,不对,是Java。
平台无关性的策略
有 一些厂商提供了Java的运行时库,增加了自己的功能,提供了一些独有的工具,你需要作出选择,到底用谁的。我现在的水平和money观念还顾不上这么 多,搞不好一天换3套平台都是有可能的,一般是听有经验的同事或者上网看看别人的评价(可惜不如淘宝的方便和真实),然后作出一个决定就行了。如果错了怎 么办?凉拌!换一个不就得了。
心得
没有想到这么一章我不是很感兴趣的章节还打了这么多字,我是不是很久没有打字了?
说实话,这一章主要是比较系统性的理顺了我之前对Java的宏观理解,包括企业/桌面/移动的分类,Java是需要在不同系统上专门实现的,企业可以基于Java平台的标准,自己提供实现。还是有收获的,不然真不会写这么多!
Java的平台无关性的更多相关文章
- 深入Java虚拟机(2)——Java的平台无关性
一.平台无关性的好处 Java技术在网络环境下非常有用,其中一个关键理由是,用Java创建的可执行二进制程序,能够不加改变地运行于多个平台. 这样的平台无关性随之带来许多的好处.这将极大地减轻系统管理 ...
- Java的平台无关性如何体现出来的
传统的编程中,源代码编译为可执行的代码后,只能针对特定的平台(操作系统),换句话说,针对Windows编写和编译的代码,只能在Windows上运行... java程序则编译为字节码.字节码本身不能运行 ...
- Java虚拟机平台无关性
jruby Java 虚拟机面试题全面解析(干货) - Yano_nankai的博客 - CSDN博客 http://m.blog.csdn.net/Yano_nankai/article/detai ...
- 深入Java虚拟机读书笔记第二章平台无关性
Java的体系结构对平台无关的支持 Java平台 Java的体系结构通过几种途径支持Java程序的平台无关性,其中主要是通过Java平台自己.Java平台扮演一个运行时Java程序与其下的硬件和操作系 ...
- Java是如何实现平台无关性的
相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言可以迅速崛起并风光无限的一个重要原因.那么,到底什么是平台无关 ...
- Java 平台无关性的基石
Java 在刚刚诞生之初就提出过一个非常著名的口号:"一次编写,到处运行", 这句话充分表达了软件开发人员对冲破平台界限的渴望 在竞争激烈的 IT 领域,各种不同的硬件体系结构和不 ...
- Java虚拟机的平台无关性与语言无关性
平台无关性 不同平台的不同java虚拟机,都执行同一种字节码文件,即Class文件 语言无关性 Java虚拟机不止能执行java程序,还有Clojure.Groovy.JRuby.Jython.Sca ...
- Java虚拟机与平台无关性
概述 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. --<深入理解Java虚拟机>(从这里可以看到,字节码是一种文件格式) 我们都知道计算机只 ...
- JVM(二),Java怎样实现一次编译到处运行(平台无关性)
二.Java怎样实现一次编译到处运行(平台无关性) 1.java平台无关性原理 Java源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,Jav ...
随机推荐
- Mac 版 QQ 可直接访问 iPhone 的相册 ?!
在QQ的聊天窗口中,点击 发送图片 的按钮,会有两个选择项,其中一个就是 从iPhone相册中选取 ,如图 点击 从iPhone相册中选取 后,iPhone上的QQ会收到一条消息 “请选择要上传的照 ...
- 《自己动手写操作系统》pmtest2笔记
;DispReturn模拟一个回车的显示,(让下一个要显示的字符在下一行的开头处显示),其中edi始终指向要显示的下一个字符的位置.; ------------------------------ ...
- 【笨嘴拙舌WINDOWS】GDI绘制区域
在默认情况下,Gdi绘画操作的使用白纸(窗口的客户区)黑字(Pen的颜色)!前面我们已经讲过如何改笔,现在来学习改变白纸(GDI的绘制区域) 正常的纸为一个矩形形状!有时候小孩不小心撕掉纸的一角,不小 ...
- 总结swift 1.2适配swift2.0遇到的改变
swift1.2适配swift2.0 以下列举的是我在项目中遇到的需要修改的,基本常见的问题就没有罗列了. 1.find函数变成了为indexOf 2.sort变成了sortInPlace 3.sor ...
- BZOJ 1003 物流运输
最短路+dp. #include<iostream> #include<cstdio> #include<cstring> #include<algorith ...
- HDU 1023 Train Problem II (卡特兰数,经典)
题意: 给出一个数字n,假设火车从1~n的顺序分别进站,求有多少种出站序列. 思路: 卡特兰数的经典例子.n<101,用递推式解决.需要使用到大数.n=100时大概有200位以下. #inclu ...
- scala学习笔记(1):基本语法与容器
1 var 可变,val 不可变 var (a,b) = (10,20) 分别对a,b赋值 a=10, b=20 var a,b = (10,20)则 是a=(10,20) b=(10,20) 2 L ...
- 部署HBase远程访问的问题集合(Eclipse)
实现远程访问HBase,可以通过Eclipse开发工具方便进行代码调试. 为了方便jar包各种版本的管理,才用maven进行代码构建 首先,下载并安装maven以及M2Eclipse插件 其次,配置m ...
- 数据结构——Java实现单向链表
结点类: /** * @author zhengbinMac * 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系. */ p ...
- android中的所谓观察者模式
生活中我们常认定某些人很有才,但什么是有才呢?明朝的王守仁曾这样解释:才,是所谓天理,应用到物上,便成了才.凡事凡物,只要掌握了所谓科学的方法,并能灵活运用,那么你也可以成为一个有才的人. 观察者模式 ...