国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

JAVA虛擬機(jī)中面向?qū)ο笮詫?shí)現(xiàn)原理

2017-01-27 11:12籍慧文
科學(xué)中國人 2017年9期
關(guān)鍵詞:編程語言面向?qū)ο?/a>調(diào)用

籍慧文

山西農(nóng)業(yè)大學(xué)信息學(xué)院

JAVA虛擬機(jī)中面向?qū)ο笮詫?shí)現(xiàn)原理

籍慧文

山西農(nóng)業(yè)大學(xué)信息學(xué)院

通過對JAVA虛擬機(jī)原理的剖析闡述面向?qū)ο笤碇械年P(guān)鍵特性如封裝、繼承、多態(tài)在JAVA虛擬機(jī)中的實(shí)現(xiàn)方式。

JAVA虛擬機(jī);面向?qū)ο螅活悾粚ο?;封裝;繼承;多態(tài)

引言

在過去的二十幾年間JAVA編程語言在眾多面向?qū)ο蟪绦蛟O(shè)計語言中脫穎而出其跨平臺特性功不可沒。而跨平臺特性的基礎(chǔ)則是字節(jié)碼技術(shù)和JAVA虛擬機(jī)技術(shù),其中JAVA虛擬機(jī)解除了JAVA程序與底層硬件、操作系統(tǒng)間的耦合關(guān)系,為JAVA編程語言的“一次編譯到處運(yùn)行”提供了運(yùn)行的環(huán)境基礎(chǔ)。本文將著重闡述面向?qū)ο笤碇械念?、對象、封裝、繼承、多態(tài)等概念、特性在JAVA虛擬機(jī)內(nèi)部的實(shí)現(xiàn)方式及原理。

1、面向?qū)ο笤?/h2>

面向?qū)ο笤硪詫ο鬄榛A(chǔ)將屬性和操作封裝在一起并抽象出統(tǒng)一的新數(shù)據(jù)類型——類。面向?qū)ο笙鄬γ嫦蜻^程從更接近人類思維方式的角度通過模擬客觀世界間實(shí)物相互作用的方式,以其封裝性、繼承性、多態(tài)性三大特性達(dá)到簡化問題,提高代碼重用性,降低維護(hù)成本的目標(biāo)。

2、JAVA虛擬機(jī)

JAVA虛擬機(jī)是一個規(guī)范來定義的抽象的計算環(huán)境,每個Java程序都運(yùn)行于某個具體的JAVA虛擬機(jī)實(shí)現(xiàn)的實(shí)例[2]。Java虛擬機(jī)有多種方式,既可以是運(yùn)行在操作系統(tǒng)上的軟件也可以是軟硬件的組合。

JAVA虛擬機(jī)內(nèi)包含兩種運(yùn)行機(jī)制,一是類裝載子系統(tǒng)它負(fù)責(zé)將類加載到虛擬機(jī)當(dāng)中,另一個是運(yùn)行引擎它負(fù)責(zé)執(zhí)行已裝載的類中的指令。

JAVA虛擬機(jī)通常由五個組成部分組成,它們是方法區(qū)、堆、JAVA棧、程序計數(shù)器、本地方法棧。

3、類在JAVA虛擬機(jī)中的實(shí)現(xiàn)

3.1 類的結(jié)構(gòu)

類是對一組對象公有的屬性和行為的抽象。為了能夠更清晰地處理問題抽象通常被分為多個層次。子類可以從父類處繼承父類的屬性和方法,屬性和方法可以分為靜態(tài)域、靜態(tài)方法和對象域、對象方法。靜態(tài)域和靜態(tài)方法展現(xiàn)了一種全局性,它是所有對象共享的資源。JAVA程序編譯完成后會生成class文件,這些class文件在被虛擬機(jī)處理時首先需要經(jīng)過類加載機(jī)制。

3.2 類的生命周期

類的生命周期從類加載開始一直持續(xù)到類從虛擬機(jī)中被卸載為止。當(dāng)類被加載后還需要經(jīng)過鏈接、初始化等若干步驟。類的初始化由JAVA虛擬機(jī)完成,初始化結(jié)束以后程序就可以對該類進(jìn)行實(shí)例化獲得對象,而當(dāng)程序不再需要引用該類時,虛擬機(jī)就可以卸載這個類。這里需要注意一點(diǎn),只有使用用戶定義的類裝載器裝載的類才可以被卸載。

3.3 繼承性的實(shí)現(xiàn)

在JAVA編程語言中為了強(qiáng)化類的單一職責(zé)取消了C++等語言中使用的多繼承機(jī)制。在面向?qū)ο蟮恼Z言中一個類一旦繼承了其他類,就擁有了后者的屬性和方法,在JAVA中編譯生成的class文件中會保存一個父類標(biāo)識來記錄繼承信息。JAVA虛擬機(jī)在加載類時會檢查被加載類是否有父類,如果存在父類則將父類一并加載,并對父類遞歸執(zhí)行這一加載機(jī)制直至Object類也被加載為止。

3.4 多態(tài)性的實(shí)現(xiàn)

多態(tài)性允許將子類類型的引用向上映射賦值給父類類型的引用。多態(tài)表現(xiàn)在子類方法實(shí)現(xiàn)對父類方法實(shí)現(xiàn)的覆蓋效果,在需要使用覆蓋時只需要在子類中定義與父類中方法具有相同方法名、返回值類型、參數(shù)列表的方法即可。被覆蓋的方法將會在子類中擁有不同于父類方法的實(shí)現(xiàn),當(dāng)子類對象被調(diào)用時JAVA虛擬機(jī)則會依據(jù)鏈接模型調(diào)用子類中的新實(shí)現(xiàn)。在JAVA虛擬機(jī)的鏈接模型中,定位一個屬性或者方法的順序是先在本類的屬性和方法中查找,如果查找成功則從本類獲得需要的屬性或方法,否則向父類遞歸延伸查找。在這一機(jī)制的作用下JAVA虛擬機(jī)便具備了支持多態(tài)性的能力。

4、對象的實(shí)現(xiàn)

4.1 對象的結(jié)構(gòu)

對象是類的一次實(shí)例化的成果物,它是面向?qū)ο笙到y(tǒng)的基本組成單元。除了基本類型外在JAVA編程語言中其他的成員都是對象,數(shù)組也是一種對象。在JAVA編程語言中對象是動態(tài)創(chuàng)建的,創(chuàng)建過程可分為以下三步,首先JAVA虛擬機(jī)使用new指令來為新對象分配內(nèi)存空間,JAVA虛擬機(jī)會在對象堆中分配內(nèi)存空間會被用來封裝對象的屬性,之后JAVA虛擬機(jī)按初始值對屬性進(jìn)行初始化,最后待對象被創(chuàng)建后完畢時JAVA虛擬機(jī)會返回一個指向該對象的引用,使用這一引用便可以操縱對象的屬性和方法。

4.2 對象間互操作

在JAVA虛擬中調(diào)用包括三個要素:方法名、參數(shù)列表、返回類型。JAVA虛擬機(jī)中的幀被用于處理調(diào)用關(guān)系。幀由操作數(shù)棧、局部變量數(shù)組、管理數(shù)據(jù)三個部分組成,JAVA方法的每一次調(diào)用都創(chuàng)建一個新的幀,新創(chuàng)建的幀被壓入幀棧中,當(dāng)方法執(zhí)行完畢后幀棧彈出當(dāng)前幀并且將返回值傳給前一個幀的操作數(shù)棧中,如此就完成了方法的調(diào)用。

4.3 對象的生命周期

對象的生命周期從創(chuàng)建開始經(jīng)過使用最終被回收。JAVA語言的一大特色就是自動回收機(jī)制,回收通常分為找出待回收對象和釋放內(nèi)存空間兩個階段?;厥毡O(jiān)測通常會建立一個根對象集合,并且以此為出發(fā)點(diǎn)檢查對象是否被這些根對象引用如果根對象不再引用這些對象這些對象即可被回收。回收機(jī)制通??梢苑譃閮?nèi)存不足時會收和立即回收兩種。

5、總結(jié)

本文通過對JAVA虛擬機(jī)中面向?qū)ο笮詫?shí)現(xiàn)原理的剖析全面地展示了面向?qū)ο笕筇匦栽谔摂M機(jī)內(nèi)部的運(yùn)行機(jī)制,對于虛擬機(jī)內(nèi)部實(shí)現(xiàn)原理的了解一方面可以使我們對面向?qū)ο笤碛懈钊氲恼J(rèn)識,另外也的使得我們可以更好地使用JAVA編程語言進(jìn)行編程和學(xué)習(xí)。

[1]The JavaTMVirtual Machine Specification.Sun Microsystems

[2]張廣敏,盤細(xì)平,涂杰.Java虛擬機(jī)的面向?qū)ο笮?計算機(jī)應(yīng)用與軟件,2006(03)

[3]笪斌,蘇建元.Java實(shí)現(xiàn)面向?qū)ο蟮睦^承性、封裝性和多態(tài)性.智能計算機(jī)與應(yīng)用,2005(6):18-19

[4]張凱.Java虛擬機(jī)中類裝載器的實(shí)現(xiàn).王立冬,計算機(jī)應(yīng)用,2002,22(11):107-109

[5]李永遠(yuǎn).JAVA虛擬機(jī)相關(guān)技術(shù)研究與實(shí)踐.信息通信,2015(5)

籍慧文(1994-),男,山西太谷人,山西農(nóng)業(yè)大學(xué)信息學(xué)院,學(xué)生。

猜你喜歡
編程語言面向?qū)ο?/a>調(diào)用
GEE平臺下利用物候特征進(jìn)行面向?qū)ο蟮乃痉N植分布提取
農(nóng)業(yè)工程學(xué)報(2022年10期)2022-08-22
基于JavaScript編程語言之 閉包技術(shù)在焦點(diǎn)輪播上的應(yīng)用
基于計算機(jī)應(yīng)用軟件開發(fā)的Java編程語言研究
面向?qū)ο蠓椒ㄔ谒罾銹LC編程中應(yīng)用分析
系統(tǒng)虛擬化環(huán)境下客戶機(jī)系統(tǒng)調(diào)用信息捕獲與分析①
計算機(jī)應(yīng)用軟件開發(fā)中編程語言的選取
基于屬性數(shù)據(jù)的系統(tǒng)調(diào)用過濾方法
從面向過程到面向?qū)ο笏季S方式的教學(xué)引導(dǎo)
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信