欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 實(shí)現(xiàn)跨平臺(tái)的操作方式

 更新時(shí)間:2020年09月03日 15:22:30   作者:陸佳驊的博客  
這篇文章主要介紹了Java 實(shí)現(xiàn)跨平臺(tái)的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

什么是平臺(tái)無(wú)關(guān)性

平臺(tái)無(wú)關(guān)性就是一種語(yǔ)言在計(jì)算機(jī)上的運(yùn)行不受平臺(tái)的約束,一次編譯,到處執(zhí)行。

也就是說(shuō),用Java創(chuàng)建的可以執(zhí)行二進(jìn)制程序,能夠不加改變的運(yùn)行于多個(gè)平臺(tái),Java減少了開發(fā)和部署的多個(gè)平臺(tái)的成本和時(shí)間。

平臺(tái)無(wú)關(guān)性的實(shí)現(xiàn)

其中扮演者重要的角色有Java語(yǔ)言規(guī)范、Class文件、Java虛擬機(jī)(JVN)等。

在計(jì)算機(jī)世界中,計(jì)算機(jī)只認(rèn)識(shí)0和1.所以,真正被執(zhí)行的其實(shí)是由0和1組成的二進(jìn)制文件。

日常開發(fā)使用的C、C++、Java、python 都屬于是高級(jí)語(yǔ)言,而非二進(jìn)制語(yǔ)言,所以,想讓計(jì)算機(jī)認(rèn)識(shí)我們寫出來(lái)的Java代碼,那就需要

把他翻譯成由0和1組成的二進(jìn)制文件。這個(gè)過(guò)程就叫編譯。負(fù)責(zé)這一個(gè)過(guò)程的處理的工具叫做編譯器。

想把Java文件,編譯成二進(jìn)制文件文件,需要經(jīng)過(guò)兩步編譯,前端編譯和后端編譯。

前端編譯主要是指與源語(yǔ)言有關(guān)但與目標(biāo)機(jī)無(wú)關(guān)的部分。Java中,我們知道的 javac 的編譯就是前端編譯。除了這種以外,我們使用的很多IDE如eclipse,idea等,都是內(nèi)置了前端編譯器,

主要功能就是.java文件轉(zhuǎn)換為.class文件。

后端編譯主要是將中間代碼再翻譯成機(jī)器語(yǔ)言。Java中,這一步驟就是后端編譯(jvm來(lái)執(zhí)行)。

Java虛擬機(jī)

之所以跨平臺(tái)是由jvm來(lái)完成的,jvm會(huì)根據(jù)不用的操作系統(tǒng)和硬件設(shè)備,提供不同jvm。對(duì)于不同的操作系統(tǒng)jvm對(duì)應(yīng)的質(zhì)指令是不同的class文件。

比如同樣執(zhí)行a+b,A操作系統(tǒng)對(duì)應(yīng)的二進(jìn)制指令可能是10001000,而B操作系統(tǒng)對(duì)應(yīng)的指令可能是11101110。那么,想要做到跨平臺(tái),最重要的就是可以根據(jù)對(duì)應(yīng)的硬件和操作系統(tǒng)生成對(duì)應(yīng)的二進(jìn)制指令。

有了Java虛擬機(jī),想要執(zhí)行a+b操作,A操作系統(tǒng)上面的虛擬機(jī)就會(huì)把指令翻譯成10001000,B操作系統(tǒng)上面的虛擬機(jī)就會(huì)把指令翻譯成11101110。

所以,Java之所以可以做到跨平臺(tái),是因?yàn)镴ava虛擬機(jī)充當(dāng)了橋梁。他扮演了運(yùn)行時(shí)Java程序與其下的硬件和操作系統(tǒng)之間的緩沖角色。

class字節(jié)碼

各種不同的平臺(tái)的虛擬機(jī)都使用統(tǒng)一的程序存儲(chǔ)格式——字節(jié)碼(ByteCode)是構(gòu)成平臺(tái)無(wú)關(guān)性的另一個(gè)基石。Java虛擬機(jī)只與由字節(jié)碼組成的Class文件進(jìn)行交互。 我們說(shuō)Java語(yǔ)言可以Write Once ,Run Anywhere。這里的Write其實(shí)指的就是生成Class文件的過(guò)程。 因?yàn)镴ava Class文件可以在任何平臺(tái)創(chuàng)建,也可以被任何平臺(tái)的Java虛擬機(jī)裝載并執(zhí)行,所以才有了Java的平臺(tái)無(wú)關(guān)性。class 是16進(jìn)制的文件流,最終會(huì)被jvm轉(zhuǎn)成二進(jìn)制的機(jī)械碼。

Java語(yǔ)言規(guī)范

已經(jīng)有了統(tǒng)一的Class文件,以及可以在不同平臺(tái)上將Class文件翻譯成對(duì)應(yīng)的二進(jìn)制文件的Java虛擬機(jī),Java就可以徹底實(shí)現(xiàn)跨平臺(tái)了嗎? 其實(shí)并不是的,Java語(yǔ)言在跨平臺(tái)方面也是做了一些努力的,這些努力被定義在Java語(yǔ)言規(guī)范中。 比如,Java中基本數(shù)據(jù)類型的值域和行為都是由其自己定義的。而C/C++中,基本數(shù)據(jù)類型是由它的占位寬度決定的,占位寬度則是由所在平臺(tái)決定的。所以,在不同的平臺(tái)中,對(duì)于同一個(gè)C++程序的編譯結(jié)果會(huì)出現(xiàn)不同的行為。 舉一個(gè)簡(jiǎn)單的例子,對(duì)于int類型,在Java中,int占4個(gè)字節(jié),這是固定的。 但是在C++中卻不是固定的了。在16位計(jì)算機(jī)上,int類型的長(zhǎng)度可能為兩字節(jié);在32位計(jì)算機(jī)上,可能為4字節(jié);當(dāng)64位計(jì)算機(jī)流行起來(lái)后,int類型的長(zhǎng)度可能會(huì)達(dá)到8字節(jié)。根據(jù)規(guī)范格式,才能夠被jvm編譯以及解釋運(yùn)行。

總結(jié)

對(duì)于Java的平臺(tái)無(wú)關(guān)性的支持是分布在整個(gè)Java體系結(jié)構(gòu)中的。

其中扮演著重要角色的有Java語(yǔ)言規(guī)范、Class文件、Java虛擬機(jī)等。

Java語(yǔ)言規(guī)范

通過(guò)規(guī)定Java語(yǔ)言中基本數(shù)據(jù)類型的取值范圍和行為

Class文件

所有Java文件要編譯成統(tǒng)一的Class文件

Java虛擬機(jī)

通過(guò)Java虛擬機(jī)將Class文件轉(zhuǎn)成對(duì)應(yīng)平臺(tái)的二進(jìn)制文件等 Java的平臺(tái)無(wú)關(guān)性是建立在Java虛擬機(jī)的平臺(tái)有關(guān)性基礎(chǔ)之上的,是因?yàn)镴ava虛擬機(jī)屏蔽了底層操作系統(tǒng)和硬件的差異。

以上這篇Java 實(shí)現(xiàn)跨平臺(tái)的操作方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA最新版2020.1的maven工程本地依賴倉(cāng)庫(kù)無(wú)法使用問(wèn)題(已解決)

    IDEA最新版2020.1的maven工程本地依賴倉(cāng)庫(kù)無(wú)法使用問(wèn)題(已解決)

    這篇文章主要介紹了IDEA最新版2020.1的maven工程本地依賴倉(cāng)庫(kù)無(wú)法使用問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • java讀取文件和寫入文件的方式(簡(jiǎn)單實(shí)例)

    java讀取文件和寫入文件的方式(簡(jiǎn)單實(shí)例)

    下面小編就為大家?guī)?lái)一篇java讀取文件和寫入文件的方式(簡(jiǎn)單實(shí)例)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • Java中final作用于變量、參數(shù)、方法及類該如何處理

    Java中final作用于變量、參數(shù)、方法及類該如何處理

    Java中的final關(guān)鍵字非常重要,它可以應(yīng)用于類、方法以及變量,下面這篇文章主要給大家介紹了關(guān)于Java中final作用于變量、參數(shù)、方法及類該如何處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12
  • Spring Cloud Gateway去掉url前綴

    Spring Cloud Gateway去掉url前綴

    這篇文章主要介紹了Spring Cloud Gateway去掉url前綴的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中時(shí)間戳的獲取和轉(zhuǎn)換的示例分析

    Java中時(shí)間戳的獲取和轉(zhuǎn)換的示例分析

    這篇文章主要介紹了Java中時(shí)間戳的獲取和轉(zhuǎn)換的示例分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java語(yǔ)法基礎(chǔ)之for語(yǔ)句練習(xí)

    Java語(yǔ)法基礎(chǔ)之for語(yǔ)句練習(xí)

    以下是對(duì)Java語(yǔ)法基礎(chǔ)中的for語(yǔ)句進(jìn)行了詳細(xì)介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-07-07
  • Maven生成及安裝jar包到本地倉(cāng)庫(kù)的方法

    Maven生成及安裝jar包到本地倉(cāng)庫(kù)的方法

    這篇文章主要介紹了Maven生成及安裝jar包到本地倉(cāng)庫(kù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • JDBC查詢Map轉(zhuǎn)對(duì)象實(shí)現(xiàn)過(guò)程詳解

    JDBC查詢Map轉(zhuǎn)對(duì)象實(shí)現(xiàn)過(guò)程詳解

    這篇文章主要介紹了JDBC查詢Map轉(zhuǎn)對(duì)象實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java 父類子類有同名方法時(shí)如何調(diào)用的實(shí)現(xiàn)

    java 父類子類有同名方法時(shí)如何調(diào)用的實(shí)現(xiàn)

    這篇文章主要介紹了java 父類子類有同名方法時(shí)如何調(diào)用的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • springboot3.x版本集成log4j遇到Logging?system?failed?to?initialize?using?configuration?from‘classpath:log4問(wèn)題

    springboot3.x版本集成log4j遇到Logging?system?failed?to?initial

    使用Springboot?3.x集成Log4j時(shí)可能會(huì)遇到版本沖突的問(wèn)題,這通常可以通過(guò)檢查Maven依賴樹來(lái)識(shí)別,一旦發(fā)現(xiàn)沖突,將Log4j的版本統(tǒng)一更新到最新的兼容版本,例如2.21.1,即可解決問(wèn)題,此方法有效解決了日志打印錯(cuò)誤,是處理類似問(wèn)題的一個(gè)實(shí)用參考
    2024-09-09

最新評(píng)論