前言

在接触Java的时候,经常能听到Java的特点之一就是:“一次编译,到处运行(Write Once, Run Anywhere)”。这种特点对于Java来说,有什么好处呢?Java又是怎么支持这一特性呢?本文简单对这个特点简单介绍一下。

什么是平台无关性?

平台无关性,就是在一种语言在计算机运行时,不受其平台的约束。

换句话说,源码不做任何修改就可以在多个平台上运行。

平台无关性有什么好处?

平台无关性对于一个语言的发展来说,意味着它可以运行在电脑、打印机等多种设备,这也决定了这个语言流行的广度。

而且平台无关性为开发者减少了开发和部署到多种平台的精力和时间成本,开发者为了程序在多种平台运行时尽可能达到高效,需要深入了解语言的特性,进一步推进语言优化,从一定程度上也推进了语言发展的深度。

怎么支持平台无关性?

编程语言分为低级语言和高级语言,机器语言和汇编语言属于低级语言,可以直接用计算机指令编写程序;而C、C++等属于高级语言,用语句编写程序,是不能直接被计算机识别并执行的。真正被计算机执行的是由0和1组成的二进制文件。

所以,想让计算机识别我们编写的高级语言程序,需要将程序翻译成0和1组成的二进制文件。这个翻译的过程称为“编译”,执行这个过程的工具称为“编译器”。

在介绍支持平台无关性的要求之前,我们先来看一个例子。

C语言是编译型语言,没有平台无关的特性。编译型语言的代码在某平台编译后的文件,可以直接在该平台下运行。我们先简单了解一下C语言的编译过程:① 预处理;②编译;③汇编;④链接

C语言在编译过程中,其与平台有关的部分在第二步编译过程,这里的编译是指经过预处理之后的程序转换成特定汇编代码,而编译后生成的汇编代码会因不同的CPU和环境而有所不同

如果在转换成二进制文件前的汇编代码都不能适用于任何平台,何谈平台无关性呢?此外,平台不同,C语言的基本数据类型的值域占位宽度也会不同(如int类型,在16位操作系统中占2个字节,在32位操作中占4个字节,在64位操作系统中占8个字节)。

所以,个人总结,语言实现平台无关性有以下要求:

  • 编译过程中,在编译成机器代码前的代码可在任何平台下都能运行
  • 语言的基本数据类型的值域和行为,不应因平台的改变而有所改变

铺垫了那么多,接下来进入正题啦。

Java为什么要实现平台无关性?

  1. 支持多变的网络环境。现在程序大多在网络环境进行部署,网络将各式各样的计算机和设备连接起来。实现平台无关性,程序能够在不做任何改动的情况下,在网络环境中的任何计算机运行起来。
  2. 支持网络化嵌入式设备。目前工作场所中的各种嵌入式设备,如打印机,往往通过网络连接起来。实现平台无关性,可以简化对这类设备的系统管理。
  3. 减少开发者部署程序的精力和时间成本。

Java怎么实现平台无关性?

从上文我们可以知道,要实现平台无关性得做到几件事:

  • 在汇编器编译成机器代码之前的代码,在各平台上都可以运行
  • 语言的基本数据类型的值域和行为,由语言来定义,不受平台的影响

这里先祭上Java编译过程示意图:

接下来,我们来看看Java实现平台无关性的三大主力军。

Java虚拟机(JVM)

不同的平台下的硬件和操作系统肯定也不一样,而且光是不同的硬件和操作系统的指令就已经不大相同了。所以要想做到平台无关,最重要的是要做到可以根据相应的硬件和操作系统,生成对应的二进制文件。

这一任务,由Java虚拟机完成,不同的操作系统书上需要安装对应的Java虚拟机。

虽说Java语言是平台无关性的,但JVM的确是平台有关的,在此的平台无关性是相对的(对于开发者来说,算是平台无关)

Java能做到跨平台,Java虚拟机功不可没,因为Java虚拟机是Java文件及其编译文件与硬件和操作系统之间的桥梁。

Class文件

JVM不会直接执行Java文件,实际上,JVM不仅被Java语言所使用,还有如Scala、Jython等语言的编译过程也使用JVM。也就是说JVM运行的时候并不依赖于Java语言,能在JVM上运行的文件是Class文件。

各种运行在不同平台上的虚拟机都统一使用字节码(Byte Code)组成的Class文件进行交互,而Class文件是由javac处理Java文件后得到的。

Class文件可以在任何平台上被创建,也可以被任何平台上的JVM装载运行。它的格式有着严格的定义,所以Class文件是构成平台无关性的基石之一。

Java语言规范

Java编程语言也在用它自己的方式支持这Java平台无关性事业的发展:它的基础数据类型的值域和行为是由语言自己定义的,不像C语言的是由平台决定。举个栗子,Java语言中,int类型无论是在16位操作系统、32位操作系统和64位操作系统下,都是占4个字节。

小结

总结一下,Java通过规定Java语言中基本数据类型的取值范围和行为,统一Java文件编译成Class文件,并且最后由Java虚拟机将Class文件转换成对应平台的二进制文件,才实现了平台无关性。

结语

在总结平台无关性的时候特地标注“个人总结”,是因为这里的总结是为下文介绍Java实现平台无关性服务的。如果需要更加深入了解平台无关性,可以参考一下以下资料。

参考资料:

浅谈Java平台无关性

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

C为什么不能跨平台

为什么Java可以跨平台c/c++不可以吗

Java的平台无关性是怎么实现的?相关推荐

  1. java解析ceb文件_什么是Java的平台无关性

    Hello,各位小伙伴是不是对于Java面试很头疼呢? 我以前跟你们一样也是如此,今天我给大家分享一些经验与技巧. 首先回顾一下,上一篇文章,我们说到了对JAVA的理解,那么这一节课开始我们将重点分析 ...

  2. (一)JVM的简单了解--java的平台无关性

    (一)JVM初步介绍: 在了解JVM之前,我们要思考一个小问题, 1.谈谈你对java的理解: 面试过程中,我们会遇到面试官 广度 面向对象 (继承 封装和多态) 平台无关性 GC (不同于C++,j ...

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

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

  4. Java修炼之路——基础篇——平台无关性

    Java如何实现平台无关性? 首先说无论是哪种语言,都需要经过操作系统和CPU来完成程序的运行.平台无关性指的是程序不会因为操作系统和处理器的不同而不能运行或者发生运行错误.而不同的CPU和OS组成的 ...

  5. Java是如何实现平台无关性(跨平台)的?

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

  6. Java如何实现的平台无关性的(面试必看)

    想要查看前面的笔记请翻阅我的CSDN博客,作者码字不易,喜欢的话点赞,加个关注吧,后期还有很多干货等着你! 相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语 ...

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

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

  8. 浅谈Java平台无关性

    为什么Java要支持平台无关性 众所周知,Java是平台无关的语言,那么Java为什么要支持平台无关性,总结一下,有如下几点 支持多变的网络环境.如今是一个互联网的时代,网络将各种各样的计算机和设备连 ...

  9. Java平台无关性——跨平台

    平台无关性,指的是Java可以跨平台编译,不用像如c++这类语言重新编译. Java运行有一个虚拟机,Java运行环境(JRE)中的class loader与平台无关,放到不同系统就有不同虚拟机去运行 ...

最新文章

  1. 厦门大学计算机科学每年的保研率是多少,厦大保研率大曝光,高达30%!研厦党该何去何从?...
  2. DevOps:软件架构师行动指南3.1 概述
  3. R语言对数正态分布分布函数Log Normal Distribution(dlnorm, plnorm, qlnorm rlnorm)实战
  4. php in_array 遍历,in_array大数组查询性能问题
  5. CocoStudio 1.3和1.4.1导入Flash文件注意事项(转载并有修改)
  6. 从数据库到迁移调优,鲲鹏高校行太原站正式启动
  7. mysql的dockerfile_Dockerfile构建MySQL
  8. Sublime Text怎么快速建立一个html5页面模板
  9. python实现杨辉三角形博客园_Python实现杨辉三角
  10. EMNLP2021之AEDA:一种更简单的文本分类数据增强技术
  11. IOS 百度地图集成
  12. 使用solidworks绘制链轮
  13. 在code::block中创建console application
  14. ORACLE 商业收费标准
  15. 魅族7.0系统最简单激活Xposed框架的经验
  16. 外设驱动步骤和K66SDK库与龙邱库TPM模块整合过程
  17. 腾讯大王卡怎么申请的详细方法教程!附软件
  18. Android开发——打包apk遇到The destination folder does not exist or is not writeable
  19. WeWork中国首个创新项目即将落地武汉;中联重科新材料总部将落户湘阴 | 美通企业日报...
  20. PowerPoint 2007 Bible

热门文章

  1. 抖音矩阵号运营工具应该注意的关键事项丨抖音账号矩阵系统源码开发
  2. Something about Software Engineering
  3. 霍金最后一篇论文上线;世界最快的深度算法现身;波士顿机器人跑酷;亚马逊AI招聘重男轻女被骂下架...
  4. cdf表格_高速公路表格一览表
  5. 清华魏少军:人工智能时代中国芯片设计的应对之道
  6. origin 创建公式编辑器失败,请确认已安装编辑器
  7. @PointCut注解
  8. 《跨界杂谈》华为印象(五):高度集权的矩阵式架构
  9. 员工管理书籍推荐,做好员工管理看这些书就够了
  10. android音频裁剪(2)——Wav裁剪