给公司做网站怎么弄,专业机械设计公司,wordpress comment_form(),做寻亲网站的理由Java是如何实现平台无关的? ✔️什么是平台无关性✔️平台无关性的实现✔️Java虚拟机✔️字节码✔️Java语言规范 ✔️扩展知识仓✔️平台无关性的好处✔️ 有哪些语言实现了平台无关?✔️Java中基本数据类型的大小都是确定的吗? ✔️什么是平台无关性 平台无关性就是一种语… Java是如何实现平台无关的? ✔️什么是平台无关性✔️平台无关性的实现✔️Java虚拟机✔️字节码✔️Java语言规范 ✔️扩展知识仓✔️平台无关性的好处✔️ 有哪些语言实现了平台无关?✔️Java中基本数据类型的大小都是确定的吗? ✔️什么是平台无关性 平台无关性就是一种语言在计算机上的运行不受平台的约束一次编译到处执行 (Write Once ,RunAnywhere)。 也就是说用Java创建的可执行二进制程序能够不加改变的运行于多个平台。 ✔️平台无关性的实现 对于Java的平台无关性的支持就像对安全性和网络移动性的支持一样是分布在整个Java体系结构中的。其中扮演着重要的角色的有Java语言规范、Class文件、Java虚拟机 (JVM) 等。 在计算机世界中计算机只认识0和1所以真正被计算机执行的其实是由0和1组成的二进制文件。 但是我们日常开发使用的C、C、Java、Python等都属于高级语言而非二进制语言。所以想要让计算机认识我们写出来的Java代码那就需要把他”翻译”成由0和1组成的二进制文件。这个过程就叫做编译。负责这一过程的处理的工具叫做编译器。 在Java平台中想要把Java文件编译成二进制文件需要经过两步编译前端编译和后端编译 前端编译主要指与源语言有关但与目标机无关的部分。Java中我们所熟知的javac的编译就是前端编译。除了这种以外我们使用的很多IDE如eclipse,idea等都内置了前端编译器。主要功能就是把 .java代码转换成.class代码。 这里提到的.class代码其实就是Class文件。 后端编译主要是将中间代码再翻译成机器语言。Java中这一步骤就是Java虚拟机来执行的。 所以我们说的Java的平台无关性实现主要作用于以上阶段。如下图所示 我从后往前介绍Java虚拟机、Class文件、Java语言规范 ✔️Java虚拟机 所谓平台无关性就是说要能够做到可以在多个平台上都能无缝对接。但是对于不同的平台硬件和操作系统肯定都是不一样的。 对于不同的硬件和操作系统最主要的区别就是指令不同。比如同样执行atbA操作系统对应的二进制指令可能是10001000而B操作系统对应的指令可能是11101110。那么想要做到跨平台最重要的就是可以根据对应的硬件和操作系统生成对应的二进制指令。 而这一工作主要由我们的Java虚拟机完成。虽然Java语言是平台无关的但是JVM却是平台有关的不同的操作系统上面要安装对应的JVM。 上图是Oracle官网下载JDK的指引不同的操作系统需要下载对应的Java虚拟机。 有了Java虚拟机想要执行ab操作A操作系统上面的虚拟机就会把指令翻译成10001000B操作系统上面的虚拟机就会把指今翻译成11101110。 PS : 图中的Class文件中内容为mock内容 ✔️字节码 各种不同的平台的虚拟机都使用统一的程序存储格式———字节码(ByteCode) 是构成平台无关性的另一个基石。 Java虚拟机只与由字节码组成的Class文件进行交互。 我们说Java语言可以Write Once,Run Anywhere。这里的Write其实指的就是生成Class文件的过程。 因为Java Class文件可以在任何平台创建也可以被任何平台的Java虚拟机装载并执行所以才有了Java的平台无关性。 ✔️Java语言规范 已经有了统一的Class文件以及可以在不同平台上将Class文件翻译成对应的二进制文件的Java虚拟机Java就可以彻底实现跨平合了吗? 其实并不是的Java语言在跨平台方面也是做了一些努力的这些努力被定义在Java语言规范中。 比如Java中基本数据类型的值域和行为都是由其自己定义的。而C/C中基本数据类型是由它的占位宽度决定的占位宽度则是由所在平台决定的。所以在不同的平台中对于同一个C程序的编译结果会出现不同的行为。 举一人简单的例子对于int类型在Java中int占4个字节这是固定的但是在C中却不是固定的了。在16位计算机上int类型的长度可能为两字节;在32位计算机上可能为4字节当64位计算机流行起来后int类型的长度可能会达到8字节。(这里说的都是可哦!) 通过保证基本数据类型在所有平台的一致性Java语言为平台无关性提供强了强有力的支持。 ✔️扩展知识仓 ✔️平台无关性的好处 作为一门平台无关性语言无论是在自身发展还是对开发者的友好度上都是很突出的。 因为其平台无关性所以ava程序可以运行在各种各样的设备上尤其是一些嵌入式设备如打印机、扫描仪、传真机等。随着5G时代的来临也会有更多的终端接入网络相信平台无关性的Java也能做出一些贡献 同时Java通过SwingFX可以对客户端进行编写开发者可以通过Java编写一次就可以运行到IOS或者WindowsLinux等OS中也减轻了开发者的开发负担 对于Java开发者来说Java减少了开发和部署到多个平台的成本和时间。真正的做到一次编译到处运行。 ✔️ 有哪些语言实现了平台无关? 1 . 所有基于JVM的语言都实现了平台无关如Groovy、Scala、Jthon等 2 . 其他的有VM的语言也同样实现了亚台无关如C# 脚本语言: JavaScriptPythonPhp ✔️Java中基本数据类型的大小都是确定的吗? 非也非也boolean类型的大小在不同的情况下是不确定的依据JVM规范第2版: Although the Java virtual machine defines a boolean type, it only provides very limited support for it. There are no Java virtual machine instructions solely dedicated to operations on boolean values. instead, expressions in the Java programming lanquage that operate on boolean values are compiled to use values of the Java virtual machine int data type. The Java virtual machine does directly support boolean arrays. lts newarrayinstruction enablescreation of boolean arrays. Arrays of type boolean are accessed and modified using the byte arrayinstructions baload and bastore.2 The Java virtual machine encodes boolean array components using 1 to represent true and 0torepresent false. Where Java programming language boolean values are mapped by compilers tovalues of Java virtual machine type int, the compilers must use the same encoding. 1 The first edition of The JavaTM Virtual Machine Specification did not consider boolean to be a Javavirtual machine type. However, boolean values do have limited support in the Java virtual machine.This second edition clarifies the issue by treating boolean as a type. 2 ln Sun’s JDK releases 1.0 and 1.1, and the Java 2 SDK, Standard Edition, v1.2, boolean arrays in theJava programming language are encoded as Java virtual machine byte arrays, using 8 bits perboolean element. 简单看下来如果是单个的布尔类型长度为32bit如果是布尔数组则每个布尔值的长度为8bit.