zoukankan      html  css  js  c++  java
  • Java的平台无关性

    转载自: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平台的标准,自己提供实现。还是有收获的,不然真不会写这么多!

  • 相关阅读:
    Apache 虚拟主机 VirtualHost 配置
    EAX、ECX、EDX、EBX寄存器的作用
    Python中文文档 目录(转载)
    八度
    POJ 3268 Silver Cow Party (最短路)
    POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
    2013金山西山居创意游戏程序挑战赛——复赛(1) HDU 4557 非诚勿扰 HDU 4558 剑侠情缘 HDU 4559 涂色游戏 HDU 4560 我是歌手
    HDU 4549 M斐波那契数列(矩阵快速幂+欧拉定理)
    UVA 11624 Fire! (简单图论基础)
    HDU 3534 Tree (树形DP)
  • 原文地址:https://www.cnblogs.com/roger-yu/p/5827446.html
Copyright © 2011-2022 走看看