籍慧文
山西農業(yè)大學信息學院
JAVA虛擬機中面向對象性實現(xiàn)原理
籍慧文
山西農業(yè)大學信息學院
通過對JAVA虛擬機原理的剖析闡述面向對象原理中的關鍵特性如封裝、繼承、多態(tài)在JAVA虛擬機中的實現(xiàn)方式。
JAVA虛擬機;面向對象;類;對象;封裝;繼承;多態(tài)
在過去的二十幾年間JAVA編程語言在眾多面向對象程序設計語言中脫穎而出其跨平臺特性功不可沒。而跨平臺特性的基礎則是字節(jié)碼技術和JAVA虛擬機技術,其中JAVA虛擬機解除了JAVA程序與底層硬件、操作系統(tǒng)間的耦合關系,為JAVA編程語言的“一次編譯到處運行”提供了運行的環(huán)境基礎。本文將著重闡述面向對象原理中的類、對象、封裝、繼承、多態(tài)等概念、特性在JAVA虛擬機內部的實現(xiàn)方式及原理。
面向對象原理以對象為基礎將屬性和操作封裝在一起并抽象出統(tǒng)一的新數(shù)據類型——類。面向對象相對面向過程從更接近人類思維方式的角度通過模擬客觀世界間實物相互作用的方式,以其封裝性、繼承性、多態(tài)性三大特性達到簡化問題,提高代碼重用性,降低維護成本的目標。
JAVA虛擬機是一個規(guī)范來定義的抽象的計算環(huán)境,每個Java程序都運行于某個具體的JAVA虛擬機實現(xiàn)的實例[2]。Java虛擬機有多種方式,既可以是運行在操作系統(tǒng)上的軟件也可以是軟硬件的組合。
JAVA虛擬機內包含兩種運行機制,一是類裝載子系統(tǒng)它負責將類加載到虛擬機當中,另一個是運行引擎它負責執(zhí)行已裝載的類中的指令。
JAVA虛擬機通常由五個組成部分組成,它們是方法區(qū)、堆、JAVA棧、程序計數(shù)器、本地方法棧。
3.1 類的結構
類是對一組對象公有的屬性和行為的抽象。為了能夠更清晰地處理問題抽象通常被分為多個層次。子類可以從父類處繼承父類的屬性和方法,屬性和方法可以分為靜態(tài)域、靜態(tài)方法和對象域、對象方法。靜態(tài)域和靜態(tài)方法展現(xiàn)了一種全局性,它是所有對象共享的資源。JAVA程序編譯完成后會生成class文件,這些class文件在被虛擬機處理時首先需要經過類加載機制。
3.2 類的生命周期
類的生命周期從類加載開始一直持續(xù)到類從虛擬機中被卸載為止。當類被加載后還需要經過鏈接、初始化等若干步驟。類的初始化由JAVA虛擬機完成,初始化結束以后程序就可以對該類進行實例化獲得對象,而當程序不再需要引用該類時,虛擬機就可以卸載這個類。這里需要注意一點,只有使用用戶定義的類裝載器裝載的類才可以被卸載。
3.3 繼承性的實現(xiàn)
在JAVA編程語言中為了強化類的單一職責取消了C++等語言中使用的多繼承機制。在面向對象的語言中一個類一旦繼承了其他類,就擁有了后者的屬性和方法,在JAVA中編譯生成的class文件中會保存一個父類標識來記錄繼承信息。JAVA虛擬機在加載類時會檢查被加載類是否有父類,如果存在父類則將父類一并加載,并對父類遞歸執(zhí)行這一加載機制直至Object類也被加載為止。
3.4 多態(tài)性的實現(xiàn)
多態(tài)性允許將子類類型的引用向上映射賦值給父類類型的引用。多態(tài)表現(xiàn)在子類方法實現(xiàn)對父類方法實現(xiàn)的覆蓋效果,在需要使用覆蓋時只需要在子類中定義與父類中方法具有相同方法名、返回值類型、參數(shù)列表的方法即可。被覆蓋的方法將會在子類中擁有不同于父類方法的實現(xiàn),當子類對象被調用時JAVA虛擬機則會依據鏈接模型調用子類中的新實現(xiàn)。在JAVA虛擬機的鏈接模型中,定位一個屬性或者方法的順序是先在本類的屬性和方法中查找,如果查找成功則從本類獲得需要的屬性或方法,否則向父類遞歸延伸查找。在這一機制的作用下JAVA虛擬機便具備了支持多態(tài)性的能力。
4.1 對象的結構
對象是類的一次實例化的成果物,它是面向對象系統(tǒng)的基本組成單元。除了基本類型外在JAVA編程語言中其他的成員都是對象,數(shù)組也是一種對象。在JAVA編程語言中對象是動態(tài)創(chuàng)建的,創(chuàng)建過程可分為以下三步,首先JAVA虛擬機使用new指令來為新對象分配內存空間,JAVA虛擬機會在對象堆中分配內存空間會被用來封裝對象的屬性,之后JAVA虛擬機按初始值對屬性進行初始化,最后待對象被創(chuàng)建后完畢時JAVA虛擬機會返回一個指向該對象的引用,使用這一引用便可以操縱對象的屬性和方法。
4.2 對象間互操作
在JAVA虛擬中調用包括三個要素:方法名、參數(shù)列表、返回類型。JAVA虛擬機中的幀被用于處理調用關系。幀由操作數(shù)棧、局部變量數(shù)組、管理數(shù)據三個部分組成,JAVA方法的每一次調用都創(chuàng)建一個新的幀,新創(chuàng)建的幀被壓入幀棧中,當方法執(zhí)行完畢后幀棧彈出當前幀并且將返回值傳給前一個幀的操作數(shù)棧中,如此就完成了方法的調用。
4.3 對象的生命周期
對象的生命周期從創(chuàng)建開始經過使用最終被回收。JAVA語言的一大特色就是自動回收機制,回收通常分為找出待回收對象和釋放內存空間兩個階段?;厥毡O(jiān)測通常會建立一個根對象集合,并且以此為出發(fā)點檢查對象是否被這些根對象引用如果根對象不再引用這些對象這些對象即可被回收。回收機制通??梢苑譃閮却娌蛔銜r會收和立即回收兩種。
本文通過對JAVA虛擬機中面向對象性實現(xiàn)原理的剖析全面地展示了面向對象三大特性在虛擬機內部的運行機制,對于虛擬機內部實現(xiàn)原理的了解一方面可以使我們對面向對象原理有更深入的認識,另外也的使得我們可以更好地使用JAVA編程語言進行編程和學習。
[1]The JavaTMVirtual Machine Specification.Sun Microsystems
[2]張廣敏,盤細平,涂杰.Java虛擬機的面向對象性.計算機應用與軟件,2006(03)
[3]笪斌,蘇建元.Java實現(xiàn)面向對象的繼承性、封裝性和多態(tài)性.智能計算機與應用,2005(6):18-19
[4]張凱.Java虛擬機中類裝載器的實現(xiàn).王立冬,計算機應用,2002,22(11):107-109
[5]李永遠.JAVA虛擬機相關技術研究與實踐.信息通信,2015(5)
籍慧文(1994-),男,山西太谷人,山西農業(yè)大學信息學院,學生。