Java 实现跨平台的操作方式

什么是平台无关性

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

也就是说,用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 实现跨平台的操作方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 谈谈你可能并不了解的java枚举

    前言 枚举在java里也算个老生长谈的内容了,每当遇到一组需要类举的数据时我们都会自然而然地使用枚举类型: public enum Color { RED, GREEN, BLUE, YELLOW; public static void main(String[] args) { Color red = Color.RED; Color redAnother = Color.RED; Color blue = Color.BLUE; System.out.println(red.equals(r

  • java中spi使用详解

    一.简介 java中spi(service provider interface)是jdk内置的一种服务发现机制,可以基于配置,在运行时加载指定服务.java中提供了很多服务提供接口,如jdbc.jndi等. 1.什么是SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件. SPI的作用就是为这些被扩展的API寻找服务实现. 2.SPI和API的使用场景 API (Application Pr

  • Java四舍五入时保留指定小数位数的五种方式

    方式一: double f = 3.1516; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 输出结果f1为 3.15: 源码解读: public BigDecimal setScale(int newScale, int roundingMode) //int newScale 为小数点后保留的位数, int roundingMode 为变

  • Java Testcontainers库实现测试功能

    1.Testcontainers介绍: Testcontainers是一个Java库,它支持JUnit测试,提供公共数据库.SeleniumWeb浏览器或任何可以在Docker容器中运行的轻量级.一次性实例. 测试容器使以下类型的测试更加容易: 数据访问层集成测试: 使用MySQL,PostgreSQL或Oracle数据库的容器化实例测试您的数据访问层代码,但无需在开发人员的计算机上进行复杂的设置,并且测试将始终从已知的数据库状态开始,避免"垃圾"数据的干扰.也可以使用任何其他可以容器

  • 浅谈java中的声明常量为什么要用static修饰

    今天定义一个类常量,想着也只有这个类可以用到,就没用static关键字修饰.结果sonar代码检查提示: Rename this field "PERSON_TYPE_USER" to match the regular expression '^[a-z][a-zA-Z0-9]*$'. 我一想我这是正确的命名规范啊,于是百度一搜这提示,发现前面加个static关键字修饰就可以了. 那么问题来了,我就当前类要使用,不需要设置成全局常量也可以,用static修饰常量有什么好处? 好处就是

  • Java实现五子棋的基础方法

    本文实例为大家分享了Java实现五子棋的具体代码,供大家参考,具体内容如下 任务概述: 五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏.通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜. 任务过程: 1.绘制棋盘 2.提示黑方(用 1 表示)和白方(用 2 表示)分别下棋(X,Y 轴位置)并重新绘制棋盘 3.每当一方下棋后判断是否获胜 重点讲解: 1.关于胜利的判断: 根据用户所下棋子的位置对其周围进行检测,分为以下情况: 横向:当前下棋位

  • Java 实现跨平台的操作方式

    什么是平台无关性 平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行. 也就是说,用Java创建的可以执行二进制程序,能够不加改变的运行于多个平台,Java减少了开发和部署的多个平台的成本和时间. 平台无关性的实现 其中扮演者重要的角色有Java语言规范.Class文件.Java虚拟机(JVN)等. 在计算机世界中,计算机只认识0和1.所以,真正被执行的其实是由0和1组成的二进制文件. 日常开发使用的C.C++.Java.python 都属于是高级语言,而非二进制语言,所以

  • 详解Java如何跨平台获取MAC地址

    使用 NetworkInterface 类 首先介绍如何通过Java的NetworkInterface类的API来获取本机MAC地址的方法,首先展示代码: /** * 获取 mac 地址工具类 v1 版 * * @date 2021/5/13 * @author zjw */ public class MacUtil { public static void main(String[] args) { getMac().forEach(System.out::println); } /** *

  • 如何理解Java的跨平台特性操作

    Java的跨平台特性 1.java的跨平台是指 java在运行时是凌驾于os之上,是在jvm中运行的,跟os没有直接联系. 2.java跨平台主要是由java的编译方式决定的 因为java是通过jvm先编译再执行,它编译的.class文件是底层的实现不是针对操作系统的,所以什么操作系统并不影响java代码的执行. 3.要运行Java程序 必须要安装JDK(Java Development kit),不同的系统需要有不同的JDK.因为JDK内部有JVM(虚拟机),通过虚拟机,可以将我们的原文件转化

  • Java跨平台原理与虚拟机相关简介

    Java跨平台原理(字节码文件.虚拟机) C/C++语言都直接编译成针对特定平台机器码.如果要跨平台,需要使用相应的编译器重新编译. Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行.解释是通过Java虚拟机来执行的. 字节码文件不面向任何具体平台,只面向虚拟机. Java虚拟机是可运行Java字节码文件的虚拟计算机.不同平台的虚拟机是不同的,但它们都提供了相同的接口. Java语言具有一次编译,到处运行的特点.就是说编译后的.cla

  • 基于Java的打包jar、war、ear包的作用与区别详解

    以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希望的结果.除jar以外对于J2EE来说还有war和ear.区别见下表: JAR WAR EAR 英文 Java Archive file Web Archive file Enterprise Archive file 包含内容 class.properties文件,是文件封装的最小单元:包含Java类的普通库.资源(resources).辅助文件(auxi

  • 全面了解Java中Native关键字的作用

    初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: public native int hashCode(); 为什么有个native呢?这是我所要学习的地方.所以下面想要总结下native. 一.认识 native 即 JNI,Java Native Interface 凡是一种语言,都希望是纯.比如解决某一个方案都喜欢就单单这个语言来写即可.Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Ja

  • 最有价值的50道java面试题 适用于准入职Java程序员

    下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最新版本,去掉了EJB 2.x等无用内容,补充了数据结构和算法相关的题目.经典面试编程题.大型网站技术架构.操作系统.数据库.软件测试.设计模式.UML等内容,同时还对很多知识点进行了深入的剖析,例如hashCode方法的设计.垃圾收集的堆和代.Java新的并发编程.NIO.2等,相信对准备入职的Ja

  • JAVA JNI原理详细介绍及简单实例代码

    JAVA JNI原理 JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C.C++)的动态库进行交互,给其它语言发挥优势的机会. 有了JAVA标准平台的支持,使JNI模式更加易于实现和使用.在此总结了下面这个知识图: 实例: 环境说明:ubuntu 10.4.2 LTS系统 程序清单1:src/com/magc/jni/HelloWorld.java /** * */ package com.magc.jni;

  • Java学习的捷径

    1.jdk就是j2se,jdk1.1.8版本以后改成为j2se 下载地址:http://java.sun.com/j2se/downloads.html 2.jre是java运行时环境(jdk1.3版本以后都包含jre)不用单独下载 3.设置环境变量 安装了jdk以后,要配置环境变量 我的电脑->属性->高级->环境变量 添加以下环境变量(假定你的java安装在c:\jdk1.3) java_home=c:\jdk1.3 classpath=.;c:\jdk1.3\lib\dt.jar;

  • Java基础知识之Java语言概述

    Java语言是SUN(Stanford University Network,斯坦福大学网络公司)公司1995年推出的一门高级编程语言,起初主要应用在小型消费电子产品上,后来随着互联网的兴起,Java语言迅速崛起(Java applet 可以在浏览器中运行),成为大型互联网项目的首选语言. 2009年04月20日,美国甲骨文公司74亿美元收购Sun,取得java的版权. Java 是面向对象的语言,没有面向对象编程经验的读者需要花费不少时间来了解面向对象的概念.语法和编程思想,有不能理解的地方请

随机推荐