浅谈Java平台无关性

 更新时间:2021年04月22日 14:35:17   作者:箫筱沐羽  
这篇文章主要介绍了浅谈Java平台无关性,对此感兴趣的同学,可以多了解一下

为什么Java要支持平台无关性

众所周知,Java是平台无关的语言,那么Java为什么要支持平台无关性,总结一下,有如下几点

  1. 支持多变的网络环境。如今是一个互联网的时代,网络将各种各样的计算机和设备连接起来,比如网络连接了windows的PC机,UNIX工作站等等。为了保证程序能够不加任何修改运行于网络上的任何计算机,而不管计算机是什么种类,什么平台,这样就极大减轻了系统管理员的工作。尤其是程序是通过网络环境进行部署的。
  2. 支持网络化嵌入式设备。目前工作场所中存在各种各样的嵌入式设备,比如打印机,扫描仪,传真机等。他们往往通过网络连接起来,甚至在家庭网络和汽车内部也存在这样那样的嵌入式设备 。Java的平台无关性可以简化这样的系统管理任务。无论是哪个网络的管理员,它只需关注程序本身即可。此外添加一台新设备,可以立即被其他设备访问到,也可以访问其他设备。这都是平台无关性带来的好处。
  3. 减少开发者部署程序的成本和时间。

对于开发者而言, Java平台无关的能力给予网络一个同构的运行环境,使得分布式系统可以围绕着“网络移动对象”开构建。比如对象序列化,RMI, Jini就是利用平台无关性。把面向对象编程从虚拟机带到了网络上。

Java如何支持平台无关性

Java从四个方面支持了平台无关性

  1. 最主要的是Java平台本身。Java平台扮演Java程序和所在的硬件与操作系统之间的缓冲角色。这样Java程序只需要与Java平台打交道,而不用管具体的操作系统。
  2. Java语言保证了基本数据类型的值域和行为都是由语言自己定义的。而C/C++中,基本数据类是由它的占位宽度决定的,占位宽度由所在平台决定的。不同平台编译同一个C++程序会出现不同的行为。通过保证基本数据类型在所有平台的一致性,Java语言为平台无关性提供强有力的支持。
  3. Java class文件。Java程序最终会被编译成二进制class文件。class文件可以在任何平台创建,也可以被任何平台的Java虚拟机装载运行。它的格式有着严格的定义,是平台无关的。
  4. 可伸缩性。Sun通过改变API的方式得到三个基础API集合,表现为Java平台不同的伸缩性:J2EE,J2SE,J2ME。

影响Java平台无关性的因素

  1. Java平台的部署。运行Java程序之前,必须要部署好Java平台。
  2. Java平台的版本。Sun公司提供了不同的API集合,有标准版,扩展版等等。此外API本身也面临着改动,一些API被认为是过期的,一些API甚至不向下兼容,因此我们需要选择合适的Java平台版本支持程序开发。
  3. 本地方法。当编写一个平台独立的Java程序时候,最重要的原则是:不要直接或间接调用不属于Java API的本地方法。调用Java API以外的本地方法使得程序平台相关。一般而言,本地方法在三种情况适用:使用底层主机平台的特性,而Java API无法访问;为了访问老系统或者使用现有的库,但是这个系统或库不是Java编写的;为了加快程序性能,将时间敏感代码用本地方法实现。因此当必须使用本地方法,而且支持多种平台运行,必须将本地方法移植到所有需要的平台上。因此编写平台独立的Java程序做主要的目的就是完全禁止本地方法,通过Java API和主机交互。
  4. 非标准运行时库。所谓平台无关性,一种解释是你调用的方法是否在任何地方都已经实现。本地方法顾名思义,就是只是在本地实现了,所以无法保证平台无关。而Java API在如windows, Solaris等操作系统上的实现上使用了本地方法访问主机,即保证了平台无关。
  5. 对虚拟机的依赖。虚拟机可以由不同开发商开发,但是必须满足如下两条原则:不要依赖及时终结(finalization)保证程序的正确性,因为特定程序中对象可能在不同的时间被垃圾收集;不要依赖线程的优先级来保证程序的正确性。因为一些虚拟机可以实现优先级高线程优先运行,一些虚拟机不能保证这一点。
  6. 对用户界面依赖,AWT库提供基本的用户界面,这些组件被映射成每个平台上的本地组件,而Swing库为用户提供更高级的组件,但并没有被映射为本地组件。

实现平台无关的7大步骤

  1. 选择程序运行的主机和设备集合(目标宿主机)
  2. 在目标宿主机中选择Java平台版本。
  3. 对于每个目标宿主机,选择程序将要运行的Java平台实现(目标运行时环境)。
  4. 编写程序,调用Java API标准运行库(不调用本地方法,或者专门开发商专门调用本地方法的库)
  5. 编写程序,不依赖于垃圾收集器收集垃圾时间,不依赖线程的优先级
  6. 努力设计用户界面,在所有的目标宿主机都能正常工作
  7. 在所有目标运行时环境和所有目标宿主机进行测试

以上就是浅谈Java平台无关性的详细内容,更多关于浅谈Java平台无关性的资料请关注脚本之家其它相关文章!

相关文章

  • MyBatisPlus报错:Failed to process,please exclude the tableName or statementId问题

    MyBatisPlus报错:Failed to process,please exclud

    这篇文章主要介绍了MyBatisPlus报错:Failed to process,please exclude the tableName or statementId问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • SpringMVC自定义消息转换器的使用其实很简单

    SpringMVC自定义消息转换器的使用其实很简单

    这篇文章主要介绍了SpringMVC自定义消息转换器的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Spring Security  整体架构操作流程

    Spring Security  整体架构操作流程

    这篇文章主要介绍了Spring Security  整体架构操作流程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-07-07
  • java JTree JCheckBox树复选框详解

    java JTree JCheckBox树复选框详解

    这篇文章主要为大家详细介绍了java JTree JCheckBox树复选框的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Java实现堆排序和图解

    Java实现堆排序和图解

    如果将堆理解为二叉树,那么树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字,堆排序的时间复杂度为O(N*logN),这里我们就来详解堆排序算法原理及Java版的代码实现
    2021-07-07
  • java读取cvs文件并导入数据库

    java读取cvs文件并导入数据库

    这篇文章主要为大家详细介绍了java读取cvs文件并导入数据库,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Java多线程中Thread.currentThread()和this的区别详解

    Java多线程中Thread.currentThread()和this的区别详解

    这篇文章主要介绍了Java多线程中Thread.currentThread()和this的区别详解,Thread.currentThread()方法返回的是对当前正在执行的线程对象的引用,this代表的是当前调用它所在函数所属的对象的引用,需要的朋友可以参考下
    2023-08-08
  • 详解mysql插入数据后返回自增ID的七种方法

    详解mysql插入数据后返回自增ID的七种方法

    这篇文章主要介绍了详解mysql插入数据后返回自增ID的七种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 深入理解 CAS 算法原理已经在jdk中的运用

    深入理解 CAS 算法原理已经在jdk中的运用

    这篇文章主要介绍了深入理解 CAS 算法原理已经在jdk中的运用,帮助大家更好的使用Java,感兴趣的朋友可以了解下
    2020-12-12
  • Java使用反射生成JDK代理示例

    Java使用反射生成JDK代理示例

    这篇文章主要介绍了Java使用反射生成JDK代理,结合实例形式分析了java基于反射实现jdk动态代理相关操作技巧,需要的朋友可以参考下
    2019-07-07

最新评论