转载自:http://www.cnblogs.com/Y/archive/2011/03/22/JavaVM_Learning_Chapter2_Platform_Independence.html

为什么要平台无关?

废话!当然是方便了,你随手写一个Hello,world!,地球上所有的设备都能显示出来,那多牛B!写hello,world! 你可能觉得没有用,那要是写一句“今年过节不收礼。。。”,钱是不是就开始掉下来了?

Java体系结构对平台(操作系统)无关的支持

这部分是本章中我最觉得有用的,如下:

  1. Java平台提供平台无关性。把脏活累活留给自己,打掉牙往肚里吞,对外始终保持一个样(小样?)。
  2. Java语言提供平台无关性。由于不需要针对特定操作系统,Java语言就只针对Java的平台,所以就不会出现大端小端的问题,不会出现int的占位长度问题等等。
  3. Java的class文件提供平台无关性。就是说,不仅语言提供无关性,把语言扁(编)过以后,还是无关。
  4. 可 伸缩性。如果把windows、linux、unix、mac等等看做是横向的系统,在这些系统上Java可以提供相同的功能。那么大型机、小型机、微型 机、嵌入式设备就是纵向的,Java通过对自身平台的扩展或者缩减来提供不同规模和功能的系统。相当于windows的桌面平台、服务器平台和嵌入式平台 (Windows CE/Mobile)。

其实,一二三点都是基 于Java平台本身无关带来的,就是从源代码->中间文件->实现功能 这三级都通通统一(拗口吧)。这个思想应该值得我们在设计平台时借鉴,在设计一个业务平台时,考虑分层(类似 实现/功能/中间文件/代码)时,尽量提供可扩展和可伸缩的设计,让后期的功能改变都只影响尽量少的模块(这句话我写是写了,但是感觉有些空,就权当是耳 边风吧,反正又不收钱)。

另外,从第四点中,我倒是稍微搞清楚了不同类型Java平台的作用了。J2EE、J2SE、J2ME分别针对企业应用、桌面应用和移动应用。微软有分移动平台和桌面平台,但是好像没有把企业应用单独分出来。

影响平台无关的因素

这一部分的意思主要就是:其实Java也不是真的就能把所有的系统全部都吃进去,由于有如下因素:

  1. Java平台的部署。就是指这个系统中是否支持Java。这个真的是废话了,如果不支持,Java平台的本地实现从天上掉下来?
  2. Java平台的版本。一个是指企业/桌面/移动的不同版本,一个是指平台的版本号变迁。这两个都好理解,前一个是范围的问题,后一个是版本前后兼容的问题。
  3. 本 地方法。想平台无关,就不要用本地方法。但是一定要用怎么办?一个是就不要追求平台无关了,这个做法是最常见的,用于兼容老的、特定的软硬件系统,或者根 本就没有跨平台的需要。另外一个是在所有的系统中都加上本地方法,把本地方法融入到你自己的Java平台中,让它变成YourJava平台的一部分,当然 了,代价就是你要去做原来Sun/Oracle做的事情。
  4. 非标准运行时 库。我真是天才,上面一点中我就想到了把自己的方法变成YourJava平台的一部分,这里马上就提到了很多厂商就提供了自己的库。厂商一般需要先提供标 准的Java运行时库,然后提供扩展的功能,提供N多系统对应的CompanyJava平台版本,越是NB的厂商,其功能就越强大,支持的系统就越广泛 (MS例外)。
  5. 对虚拟机的依赖。finalization和thread prioritization这两个功能可能会因为不同开发商实现的不同导致平台依赖性,所以,不要用这两个特性。这个说法我以前没有接触到,所以理解可能有问题,以后想通了再回来补充一下。
  6. 对 界面的依赖。这个简单,打开一个软件,你一眼就能发现:这个是windows软件,这个是苹果上面的,这个是Java的,这个是Dos的,不同的操作系统 都有自己的典型界面,用户可能习惯于这个界面,所以理论上,Java软件具有统一界面且不与系统相关,刚开始的时候, 谁都看它不顺眼(因为和谁都不一样呗!)这个貌似现在有做法是做成界面本地系统化,让不同系统上的Java调用该系统对应的界面,以达到欺骗用户双眼和蒙 蔽用户心灵的双重功效。
  7. Bug。不懂,谁都有Bug,这个影响什么?
  8. 测试。不测试好所有的系统就无法说全系统平台无关。实际使用中,把能涉及到的系统都测试一下就OK了,不可能做个qq还要求神马也支持。

如何做到平台无关

考虑如下因素:

  1. 选对象-软件要运行在哪些软硬件系统上?
  2. 选平台-Java平台和版本,如写手机软件用J2EE,写QQ for iPad用J2SE的win7版本,做网站用J2ME,这些都是找死的做法,千万不要哦。另外,版本号也是非常重要,对于新老系统的兼容性也需要考虑。
  3. 选运行时-平台规平台,实现归实现,选微软的和IBM的就是不一样的,这个也需要好好考虑,一旦确定后,通常是不好变的,小变可以,大变比较困难。
  4. 只用改用的-只用标准的,本地的、厂商特有的,通通不用!这个有时候比较难,要不然为什么我选那个厂商呢?
  5. 不依赖虚拟机-这个我不熟悉,参看上面“影响平台无关的因素”中的第五点。
  6. 做一个界面-这个我不懂,意思是说,做一个界面,这个界面在所有的系统上都能正常工作,是说不让用特别的控件或实现方式吗?。
  7. 测试-就是所有系统都测试一下,不要只测试一个,就觉得其它的都没有问题了。看吧,Java也不是真的就只在一个操作系统上搞定,就能搞定所有的了,平台无关还是一个相对的概念。

如果你都做到了,也不一定就行,反正最终是以实际结果为准,如果结果也都OK,你就能用一个咖啡的标记表示纯正的麦斯威尔,不对,是Java。

平台无关性的策略

有 一些厂商提供了Java的运行时库,增加了自己的功能,提供了一些独有的工具,你需要作出选择,到底用谁的。我现在的水平和money观念还顾不上这么 多,搞不好一天换3套平台都是有可能的,一般是听有经验的同事或者上网看看别人的评价(可惜不如淘宝的方便和真实),然后作出一个决定就行了。如果错了怎 么办?凉拌!换一个不就得了。

心得

没有想到这么一章我不是很感兴趣的章节还打了这么多字,我是不是很久没有打字了?

说实话,这一章主要是比较系统性的理顺了我之前对Java的宏观理解,包括企业/桌面/移动的分类,Java是需要在不同系统上专门实现的,企业可以基于Java平台的标准,自己提供实现。还是有收获的,不然真不会写这么多!

Java的平台无关性的更多相关文章

  1. 深入Java虚拟机(2)——Java的平台无关性

    一.平台无关性的好处 Java技术在网络环境下非常有用,其中一个关键理由是,用Java创建的可执行二进制程序,能够不加改变地运行于多个平台. 这样的平台无关性随之带来许多的好处.这将极大地减轻系统管理 ...

  2. Java的平台无关性如何体现出来的

    传统的编程中,源代码编译为可执行的代码后,只能针对特定的平台(操作系统),换句话说,针对Windows编写和编译的代码,只能在Windows上运行... java程序则编译为字节码.字节码本身不能运行 ...

  3. Java虚拟机平台无关性

    jruby Java 虚拟机面试题全面解析(干货) - Yano_nankai的博客 - CSDN博客 http://m.blog.csdn.net/Yano_nankai/article/detai ...

  4. 深入Java虚拟机读书笔记第二章平台无关性

    Java的体系结构对平台无关的支持 Java平台 Java的体系结构通过几种途径支持Java程序的平台无关性,其中主要是通过Java平台自己.Java平台扮演一个运行时Java程序与其下的硬件和操作系 ...

  5. Java是如何实现平台无关性的

    相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言可以迅速崛起并风光无限的一个重要原因.那么,到底什么是平台无关 ...

  6. Java 平台无关性的基石

    Java 在刚刚诞生之初就提出过一个非常著名的口号:"一次编写,到处运行", 这句话充分表达了软件开发人员对冲破平台界限的渴望 在竞争激烈的 IT 领域,各种不同的硬件体系结构和不 ...

  7. Java虚拟机的平台无关性与语言无关性

    平台无关性 不同平台的不同java虚拟机,都执行同一种字节码文件,即Class文件 语言无关性 Java虚拟机不止能执行java程序,还有Clojure.Groovy.JRuby.Jython.Sca ...

  8. Java虚拟机与平台无关性

    概述 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. --<深入理解Java虚拟机>(从这里可以看到,字节码是一种文件格式) 我们都知道计算机只 ...

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

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

随机推荐

  1. ActionScript 设置元件色彩属性

        var clr:Color = new Color(mc);     var ct:Object = {ra:100, rb:0, ga:100, gb:0, ba:100, bb:0, aa ...

  2. android ProgressBar 样式讲解

    转载自:eoe社区,可惜没找到源地址... 多式样ProgressBar 普通圆形ProgressBar 该类型进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中. 一 ...

  3. eclipse中servers(服务器)的配置

    eclipse中servers(服务器)的配置 使用eclipse+tomcat时,很多人喜欢安装tomcat插件,以便一键启动tomcat,但我不喜欢给eclipse安装一些非必须的插件,而ecli ...

  4. DOJO 八 event dojo/on

    官网教程:Events with Dojo在元素上绑定events,需要引用包dojo/on,通过on方法来实现. <button id="myButton">Clic ...

  5. GMT and CST

    GMT(Greenwich Mean Time) 代表格林尼治标准时间 而CST却同时可以代表如下 4 个不同的时区: Central Standard Time (USA) UT-6:00    C ...

  6. Debian字符模式下修改显示分辨率

    Debian字符模式下修改显示分辨率 一.准备工具 a) Git apt-get install git 二.获取屏幕修改辅助软件 a) 创建临时文件 mkdir /tmp/screenModify ...

  7. HDU 5033 (单调栈维护凸包) Building

    题意: 一个人在x轴上,他的左右两侧都有高楼,给出楼的横坐标Xi和高度Hi还有人的位置pos,求人所能看到的天空的最大角度. 分析: 将建筑物和人的位置从左到右排序,对于每个位置利用栈求一次人左边建筑 ...

  8. UVA 11419 SAM I AM(最大二分匹配&最小点覆盖:König定理)

    题意:在方格图上打小怪,每次可以清除一整行或一整列的小怪,问最少的步数是多少,又应该在哪些位置操作(对输出顺序没有要求). 分析:最小覆盖问题 这是一种在方格图上建立的模型:令S集表示“行”,T集表示 ...

  9. UVALive 4043 Ants 蚂蚁(二分图最佳完美匹配,KM算法)

    题意: 有n个蚂蚁n棵树,蚂蚁与树要配对,在配对成功的一对之间连一条线段,要求所有线段不能相交.按顺序输出蚂蚁所匹配的树. 思路: 这个题目真是技巧啊,不能用贪心来为每个蚂蚁选择最近的树,这样很可能是 ...

  10. android 自定义组件-带图片的textView

    1. 定义属性 <?xml version="1.0" encoding="utf-8"?> <resources> <decla ...