什么是平台无关性

平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行。

也就是说,用Java创建的可以执行二进制程序,能够不加改变的运行于多个平台,Java减少了开发和部署的多个平台的成本和时间。

平台无关性的实现

其中扮演者重要的角色有Java语言规范、Class文件、Java虚拟机(JVN)等。

在计算机世界中,计算机只认识0和1.所以,真正被执行的其实是由0和1组成的二进制文件。

日常开发使用的C、C++、Java、python 都属于是高级语言,而非二进制语言,所以,想让计算机认识我们写出来的Java代码,那就需要

把他翻译成由0和1组成的二进制文件。这个过程就叫编译。负责这一个过程的处理的工具叫做编译器。

想把Java文件,编译成二进制文件文件,需要经过两步编译,前端编译和后端编译。

前端编译主要是指与源语言有关但与目标机无关的部分。Java中,我们知道的 javac 的编译就是前端编译。除了这种以外,我们使用的很多IDE如eclipse,idea等,都是内置了前端编译器,

主要功能就是.java文件转换为.class文件。

后端编译主要是将中间代码再翻译成机器语言。Java中,这一步骤就是后端编译(jvm来执行)。

Java虚拟机

之所以跨平台是由jvm来完成的,jvm会根据不用的操作系统和硬件设备,提供不同jvm。对于不同的操作系统jvm对应的质指令是不同的class文件。

比如同样执行a+b,A操作系统对应的二进制指令可能是10001000,而B操作系统对应的指令可能是11101110。那么,想要做到跨平台,最重要的就是可以根据对应的硬件和操作系统生成对应的二进制指令。

有了Java虚拟机,想要执行a+b操作,A操作系统上面的虚拟机就会把指令翻译成10001000,B操作系统上面的虚拟机就会把指令翻译成11101110。

所以,Java之所以可以做到跨平台,是因为Java虚拟机充当了桥梁。他扮演了运行时Java程序与其下的硬件和操作系统之间的缓冲角色。

class字节码

各种不同的平台的虚拟机都使用统一的程序存储格式——字节码(ByteCode)是构成平台无关性的另一个基石。Java虚拟机只与由字节码组成的Class文件进行交互。 我们说Java语言可以Write Once ,Run Anywhere。这里的Write其实指的就是生成Class文件的过程。 因为Java Class文件可以在任何平台创建,也可以被任何平台的Java虚拟机装载并执行,所以才有了Java的平台无关性。class 是16进制的文件流,最终会被jvm转成二进制的机械码。

Java语言规范

已经有了统一的Class文件,以及可以在不同平台上将Class文件翻译成对应的二进制文件的Java虚拟机,Java就可以彻底实现跨平台了吗? 其实并不是的,Java语言在跨平台方面也是做了一些努力的,这些努力被定义在Java语言规范中。 比如,Java中基本数据类型的值域和行为都是由其自己定义的。而C/C++中,基本数据类型是由它的占位宽度决定的,占位宽度则是由所在平台决定的。所以,在不同的平台中,对于同一个C++程序的编译结果会出现不同的行为。 举一个简单的例子,对于int类型,在Java中,int占4个字节,这是固定的。 但是在C++中却不是固定的了。在16位计算机上,int类型的长度可能为两字节;在32位计算机上,可能为4字节;当64位计算机流行起来后,int类型的长度可能会达到8字节。根据规范格式,才能够被jvm编译以及解释运行。

总结

对于Java的平台无关性的支持是分布在整个Java体系结构中的。

其中扮演着重要角色的有Java语言规范、Class文件、Java虚拟机等。

Java语言规范

通过规定Java语言中基本数据类型的取值范围和行为

Class文件

所有Java文件要编译成统一的Class文件

Java虚拟机

通过Java虚拟机将Class文件转成对应平台的二进制文件等 Java的平台无关性是建立在Java虚拟机的平台有关性基础之上的,是因为Java虚拟机屏蔽了底层操作系统和硬件的差异。

java跨平台_Java如何实现跨平台相关推荐

  1. Java的最大优势还是跨平台么?

    之前码农界有码农说Java的最大优势是跨平台,真的是这样么?其实当时网络没这么火爆的时候,确实是这样的,但现在这已然不是了. 跨平台还是Java的最大优势么? 有跨平台需求的仅仅是客户端应用,而不是服 ...

  2. 【视频】Java从x86到Arm跨平台,实战一下!

    关于Java,全世界最流行的莫过于这样一句话:"一次编译,到处运行." 那么事实真的是这样吗?学编程,最重要的还是实践,本次视频由B站红人寒食君为你解读java在鲲鹏上的新玩法!一 ...

  3. 千百万Java开发者的福音:跨平台Cocos2d-Java游戏引擎诞生

    传送门 CocosEditor官网:http://cocoseditor.com/ 引擎工具下载及配置:Cocos2d-Java游戏引擎和相关开发工具的安装配置 前言 跨平台Cocos2d-Java游 ...

  4. 用exe4j和inno setup将JAVA的项目打包为跨平台安装包

    用exe4j和inno setup将JAVA的项目打包为跨平台安装包 1.将eclipse中的相关文件导出为jar文件 2.将jar文件和jre文件用exe4j打包为可执行exe文件 3.将exe文件 ...

  5. java有点_JAVA 有点儿冷

    简单的一些不怎么用的java知识总结. 1.Double类型 java浮点数分3类,正无穷大(Double.POSITIVE_INFINITY),负无穷大(Double.NEGATIVE_INFINI ...

  6. java 台球_Java入门和一个台球小项目

    今天是入门学习Java的第二天,从今天起就算是正式地接触到了java语言编写的内容,以下是对于今天学习内容的一个梳理. 1. Java的核心优势是跨平台/可移植性. 其他特性:安全性,面向对象,简单性 ...

  7. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  8. 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)

    黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...

  9. java 语言是跨平台的吗_java语言的跨平台特点是由什么保证的?有什么用吗?

    作为最火的编程语言之一,Java与其他语言的最大区别就在于它的跨平台性,这种特性使得Java在任何平台上都可以运行,问题来了,那你们知道Java它的跨平台性到底是由什么保证的呢?下面跟我一起来了解一下 ...

  10. Java语言的跨平台性或Java语言为什么说可以跨平台运行

    什么叫跨平台性? 一个编译好的.class文件可以在多个系统下运行,这种特性称为跨平台.  Java的运行机制 实现Java程序跨平台运行的核心是JVM虚拟机,不同的环境下安装不同版本的JVM,那么同 ...

最新文章

  1. 为rm添加一个回收站|将linux下的rm命令改造成mv到指定的目录下
  2. Serverless 初体验:快速开发与部署一个Hello World(Java版)
  3. sql server2008中左连接,右连接,等值连接的区别
  4. 毕向东Java基础教程(适合初学者入门的Java基础视频)
  5. 《动手学深度学习》PyTorch版本
  6. 黄聪:wordpress源码解析-目录结构-文件调用关系(转)
  7. Android系统自带AEC/AGC/NC的demo
  8. 程序员常见面试逻辑智力题(笔试题)附参考答案
  9. java EasyUI导出当前页和导出模板
  10. eclipse快捷键(alt+/)不起作用的解决办法
  11. LocalDateTime设定某一时间值,转Date
  12. 中国银行实习笔试面试经验
  13. Jenkins-构建项目
  14. CF869 E. The Untended Antiquity 二位树状数组+hash
  15. HMI-51-【多媒体】搞地图 1
  16. Springboot 使用JPA Repository 注入失败问题
  17. 你必须懂!也可以懂的@Transactional原理!
  18. 在linux下使用debugfs恢复rm删除的文件
  19. 关于安卓一键分享的,急求帮助!
  20. 微信怎么建群?三种方法,总有一种适合你!

热门文章

  1. (CVPR2019)图像语义分割(22) FickleNet-使用随机推理的用于弱监督和半监督的图像语义分割
  2. 一个人学习3D视觉太痛苦了怎么办?
  3. Python之类的构造(面向对象)
  4. C++含有无符号类型的表达式的计算
  5. [VC]socket含义
  6. spring与jpa整合 简化persistence.xml配置文件 使用属性文件 数据源dbcp访问数据库...
  7. delphi 标题栏相关操作
  8. kmean法和dbscan法的直观比较
  9. 【图像处理】【去模糊】代码资源汇总
  10. NLTK在python中文字所表达的情感预测