版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、計劃類別 項(xiàng)目編號 項(xiàng)目技術(shù)報告課題名稱 項(xiàng)目主持人 承擔(dān)單位 題目:Java語言中對象的理解與應(yīng)用面向?qū)ο笫钱?dāng)前主流的程序設(shè)計方法,是軟件開發(fā)過程中重要的理論支撐。正確理解對象與類的概念,以及正確的使用對象對于學(xué)習(xí)面向?qū)ο缶幊叹哂兄匾饔谩N闹幸悦嫦驅(qū)ο蟪绦蛟O(shè)計中“對象”作為主體貫穿全文,分別從對象的理解、Java語言中對象管理、對象如何正確應(yīng)用三個方面進(jìn)行闡述。文章內(nèi)容精煉、源于實(shí)戰(zhàn),對于幫助理解和掌握J(rèn)ava面向?qū)ο蟪绦蛟O(shè)計具有較好的參考價值。關(guān)鍵詞:Java;對象;面向?qū)ο?;OOPAbstract:As the current mainstream in programming,the
2、 object-oriented method is important theoretical support in the process of software development.It is important to thoroughly understand the concepts of objects and classes,and properly apply objects in programming.Focusing on the object in the object-oriented programming,the paper elaborates on the
3、 understanding of the object,the object management in the Java programming language,and how to apply the object correctly.With the efficient language and practical experience,the paper is of good reference to the understanding and application of Java object-oriented programming.Keywords:java;object;
4、oject oriented;Object-Oriented Programming1 引言(Introduction)面向?qū)ο笫钱?dāng)前主流編程語言的共同的特征,如Java、C#語言。面向?qū)ο笊婕暗杰浖_發(fā)的各個階段,具體包括面向?qū)ο蠓治鯫OA、面向?qū)ο笤O(shè)計OOD、面向?qū)ο缶幊蘋OP,形成了完整的面向?qū)ο蟮能浖こ汤碚?、方法和工?。在學(xué)習(xí)面向?qū)ο缶幊陶Z言時,首先學(xué)習(xí)的就是對象的概念,能夠正確的理解對象和使用對象對于之后的面向?qū)ο筇匦詫W(xué)習(xí)具有很大幫助。本文從對象與類的理解、對象的原理和對象的使用三個方面循序漸進(jìn)闡述,較全面的介紹了關(guān)于對象概念、對象存儲原理及在編程中正確使用對象的技巧等內(nèi)容,內(nèi)容
5、對于理解面向?qū)ο笏枷牒蛯W(xué)習(xí)面向?qū)ο缶幊叹哂休^大幫助。2 理解對象與類(Understanding objects and classes)掌握面向?qū)ο蟪绦蛟O(shè)計首先要正確理解面向?qū)ο笏枷?,面向?qū)ο笏枷氲暮诵氖钦_理解“萬物皆對象”這句話。在編程時運(yùn)用“萬物皆對象”的思想是指:通過使用面向?qū)ο蟮姆绞剑瑢F(xiàn)實(shí)世界中的實(shí)體看作為對象,對這些實(shí)體的特性進(jìn)行描述,并分析出實(shí)體具有的功能或職責(zé)。描述實(shí)體特性的過程即為提取對象屬性的過程,分析實(shí)體的功能或職責(zé)的過程即為提取對象方法的過程,完整描述一個對象即從屬性和方法兩個層面,提取對象屬性和方法的過程即為使用面向?qū)ο笏枷脒M(jìn)行分析和抽象的過程。在把客觀實(shí)體抽象為
6、對象后,還要繼續(xù)分析各對象之間的關(guān)系,最后將對象的抽象結(jié)果描述出來形成一段文本,此文本即為面向?qū)ο笏枷胫械摹邦恈lass”。從以上過程可以發(fā)現(xiàn),類是對象的屬性、方法、對象之間關(guān)系的描述。對象是現(xiàn)實(shí)世界中可以描述的實(shí)體,是具體的;類是對象的描述,是不具體的,在編程時類體現(xiàn)為一段代碼文本。以下以駕駛員和汽車為例闡述類與對象的關(guān)系與區(qū)別?,F(xiàn)實(shí)世界中汽車與駕駛員皆為生活中常見的實(shí)體。當(dāng)我們看到一輛汽車時會自然聯(lián)想到汽車的品牌、型號等屬性信息,分析其職責(zé)(功能)可以得出汽車可以行駛、停止。但汽車不會自己行駛或停止,它需要駕駛員執(zhí)行啟動、掛擋等操作,可以看出汽車與駕駛員二者是存在依賴關(guān)系的。分析駕駛員對象
7、可以得出駕駛員具有駕駛證照號碼、性別、年齡等屬性信息,駕駛員具有“駕駛”能力。分析汽車對象可以得出汽車具有品牌、型號、價格等屬性,汽車具有行駛和停止的功能。經(jīng)過上述分析,可以抽象出汽車類和駕駛員類,以及兩個類間的依賴關(guān)系,其類圖如圖1所示。經(jīng)過對汽車與駕駛員兩個對象的分析,繼而再抽象出兩個類可以看出,面向?qū)ο笏枷肱c人類的思維方式極為相似,對于初學(xué)者而言并不難入門,但對于一些較為抽象的場景而言初學(xué)者通常會感覺稍有壓力。下面以開發(fā)一款簡單人機(jī)猜數(shù)字游戲?yàn)槔^續(xù)理解對象與類的概念。人機(jī)猜數(shù)字游戲的規(guī)則為:機(jī)器隨機(jī)生成一個數(shù)值,玩家輸入猜的數(shù)字且每一局最多猜三次,若三次都未猜中則本局失敗。游戲根據(jù)猜的
8、數(shù)字位數(shù)分為三個級別,1位數(shù)為初級、2位數(shù)為中級、3位數(shù)為高級。根據(jù)游戲規(guī)則的描述可快速分析出本案例至少包括人類玩家對象和機(jī)器玩家對象。人類玩家對象具有玩家名稱、當(dāng)前游戲級別屬性,功能職責(zé)為輸入猜的數(shù)字。機(jī)器玩家對象職責(zé)為根據(jù)當(dāng)前人類玩家的級別生成相應(yīng)位數(shù)的隨機(jī)數(shù)字。根據(jù)上述分析可以看到只有人類玩家和機(jī)器玩家對象還無法實(shí)現(xiàn)游戲功能,因?yàn)槟壳斑€沒有控制游戲進(jìn)度的對象和描述游戲級別信息的對象。因此,在進(jìn)一步分析后抽象出游戲?qū)ο蠛图墑e對象。游戲?qū)ο笙喈?dāng)于裁判,可控制游戲的啟動及停止、判斷所猜數(shù)字是否正確和設(shè)置當(dāng)前人類玩家的級別。游戲級別對象則用于保存級別的參數(shù)信息,包括級別名稱、級別對應(yīng)數(shù)字的位數(shù)。
9、綜上所述,本案例最后抽取出游戲類、機(jī)器玩家類、人類玩家類、游戲級別類。其中游戲類與機(jī)器玩家類、人類玩家類具有關(guān)聯(lián)關(guān)系,機(jī)器玩家類與人類玩家類具有依賴關(guān)系,人類玩家類與游戲等級類具有關(guān)聯(lián)性,其類圖如圖2所示。 3 Java對象管理(Java object management)Java語言編寫的程序運(yùn)行在Java虛擬機(jī)之上,基于此特點(diǎn)才實(shí)現(xiàn)了Java程序的平臺無關(guān)性和良好的可移植性2,3?;谔摂M機(jī)平臺運(yùn)行的另一個好處是在編寫程序時不再需要考慮C或C+語言中的手動內(nèi)存管理問題,Java虛擬機(jī)會自動進(jìn)行內(nèi)存的申請和釋放。在Java虛擬機(jī)中,存放對象的區(qū)域是內(nèi)存占用比例最高的,這個區(qū)域稱為堆heap
10、4,5。因此能夠理解對象在堆中的存儲原理對編寫高效的Java程序具有很大幫助。學(xué)習(xí)Java對象管理的主要內(nèi)容是學(xué)習(xí)對象的生命周期,即對象的創(chuàng)建、使用和銷毀三個階段。3.1 對象創(chuàng)建創(chuàng)建一個Java對象需要經(jīng)過三個過程分別為加載類文件、分配內(nèi)存、對象初始化5,6。(1)加載類文件:類是對對象的描述,在使用new關(guān)鍵字創(chuàng)建對象時,虛擬機(jī)會先檢查對應(yīng)的類文件是否已經(jīng)被加載,若未加載則會先加載類文件到虛擬機(jī)中。Java語言提供了多種類加載器classloader用于加載類文件(.class文件)到虛擬機(jī)中6,7,分別包括:a.啟動加載器:最頂層的類加載器,用于加載核心類庫,如java語言提供的rt.j
11、ar等;b.擴(kuò)展類加載器:用于加載Java目錄下ext目錄中的所有類庫文件;c.系統(tǒng)類加載器:負(fù)責(zé)加載應(yīng)用程序classpath目錄下所有類文件,此目錄下類文件即為開發(fā)者自主編寫的程序文件8。(2)分配內(nèi)存:當(dāng)類文件加載完后,對象在創(chuàng)建時需使用的初始內(nèi)存大小就確定了。虛擬機(jī)在堆空間中劃分出相應(yīng)大小的存儲空間。當(dāng)前虛擬機(jī)在內(nèi)存分配方法上采用指針碰撞法或空閑列表法?!爸羔樑鲎病狈僭O(shè)Java堆中的內(nèi)存是絕對規(guī)整的,所有用過的內(nèi)存都放在一邊,空閑的內(nèi)存放在另一邊,中間放一個指針作為分界點(diǎn)。當(dāng)需要分配內(nèi)存時只需要把指針向空閑內(nèi)存方向移動對象大小相等的距離即可。如果Java堆中的內(nèi)存并不規(guī)整,那么虛擬機(jī)
12、需要維護(hù)一個列表用來記錄哪些內(nèi)存塊可用。當(dāng)需要分配內(nèi)存時從列表中找出一個足夠大的空間劃分給對象實(shí)例,這就是“空閑列表”。(3)對象初始化:虛擬機(jī)在對象內(nèi)存分配完成后會給對象內(nèi)部的屬性分配初始值,此初始值如果沒有手動設(shè)置則會被設(shè)置為數(shù)據(jù)類型默認(rèn)初始值(例如int數(shù)據(jù)類型的初始值為0)。最后調(diào)用類的構(gòu)造方法完成對象初始化操作。3.2 對象使用當(dāng)創(chuàng)建好對象后,需要通過引用方式來訪問使用對象,常見的有兩種方式,第一種是句柄,第二種是直接指針。(1)句柄Java堆中專門劃分一部分內(nèi)存作為句柄池,Java棧中的引用存儲的是對象的句柄地址,而句柄地址存儲了對象實(shí)例數(shù)據(jù)與數(shù)據(jù)類型各自的具體地址信息。使用句柄的
13、好處就是引用中存儲的是固定的句柄地址,在對象被移動(垃圾收集時移動對象)時只會改變句柄中實(shí)例數(shù)據(jù)指針,而引用不需要更改。(2)直接指針直接指針就是Java棧中的引用直接存儲對象的內(nèi)存地址。使用直接指針最大的好處就是訪問速度快,它節(jié)省了一次指針定位的時間開銷。Sun的Hot Spot虛擬機(jī)使用的直接指針訪問對象。(3)對象銷毀對象的銷毀回收由虛擬機(jī)負(fù)責(zé)執(zhí)行,虛擬機(jī)判斷一個對象是否可以被回收的算法包括引用計數(shù)法和根集算法。引用計數(shù)法為虛擬機(jī)內(nèi)部為每個對象保存一個引用數(shù)量,當(dāng)一個對象的引用數(shù)量為0時,則虛擬機(jī)會在下次垃圾回收時將此對象回收。由于引用計數(shù)算法無法解決對象之間引用閉環(huán)問題,因此出現(xiàn)了根集
14、算法。根集算法原理是從GCRoot(如一個靜態(tài)變量)開始遍歷引用關(guān)系,最后對于無法被遍歷到的對象則會被回收9,10。4 對象的正確使用(Proper use of object)掌握J(rèn)ava虛擬機(jī)內(nèi)部原理可有效幫助開發(fā)人員編寫出高效的Java程序,但虛擬機(jī)內(nèi)部原理的復(fù)雜性導(dǎo)致學(xué)習(xí)成本較高、入門較難。因此對于初學(xué)者而言可以邊學(xué)習(xí)邊參考一些最佳實(shí)踐,從而寫出高質(zhì)量Java代碼。在編碼時正確使用對象主要包括以下幾點(diǎn):4.1 盡量復(fù)用對象,不重復(fù)創(chuàng)建重復(fù)創(chuàng)建對象將導(dǎo)致內(nèi)存占用增大,浪費(fèi)內(nèi)存空間。解決方法是重用已創(chuàng)建的對象和通過代碼方式限制避免創(chuàng)建重復(fù)對象。(1)使用單例模式。單例模式的作用是確保一個類
15、只能創(chuàng)建出一個對象。實(shí)現(xiàn)上主要為:a.顯示聲明私有構(gòu)造方法,禁止使用者使用new關(guān)鍵字創(chuàng)建對象;b.在類中創(chuàng)建一個自身類型的對象,并將其定義為私有的和靜態(tài)的,此變量即為供外部使用的唯一的對象;c.定義一個全局方法,此方法向外部提供唯一的實(shí)例變量。(2)重用對象。適當(dāng)使用new關(guān)鍵字,在創(chuàng)建完一個對象后,后期考慮不再創(chuàng)建新對象,而是將之前創(chuàng)建對象內(nèi)部存儲數(shù)據(jù)更新以供下次使用。例如字符串變量,虛擬機(jī)對于字符串單獨(dú)設(shè)置了常量池進(jìn)行存儲,因此對于代碼String s=hello”和String s=new String(“hello”)而言,前者的效率更高。4.2 及時清空過期對象雖然Java虛擬機(jī)提
16、供了自動化內(nèi)存管理,實(shí)現(xiàn)了自動垃圾回收,但是為了提高程序運(yùn)行效率,當(dāng)在代碼中某對象不再使用時,應(yīng)手動設(shè)置對象值為null,這樣在下次垃圾回收時此對象即可被回收。例如在當(dāng)編寫數(shù)據(jù)訪問代碼時,對于Connection對象的釋放即應(yīng)在使用后立即清除引用,正確寫法如下。Connection conn=null; /創(chuàng)建對象,默認(rèn)值為空tryconn=DriverManager.getConnection(url,username,pwd); /初始化conn對象 / .finally if(null!=conn) tryconn.close();conn=null;catch(Exception e)
17、 ; /使用后立即清除引用5 結(jié)論(Conclusion)理解面向?qū)ο笏枷氲暮诵氖钦_理解對象概念,從對象到類,從類再到接口等抽象過程。面向?qū)ο笏枷肴筇匦园ǚ庋b、繼承和多態(tài),這三大特性在學(xué)習(xí)和開發(fā)過程中是密不可分的,在分析和設(shè)計對象與類時以高內(nèi)聚、低耦合為原則,以提高代碼的復(fù)用性。Java程序在運(yùn)行時直接關(guān)系到性能的是虛擬機(jī)內(nèi)部對象的管理,正確理解對象的生命周期和在代碼中正確使用對象對于編程高效的Java程序具有極大幫助。因此從理解對象的概念、學(xué)習(xí)對象的正確使用入手,繼而進(jìn)入面向?qū)ο蠓治觥⒃O(shè)計和編程領(lǐng)域,在開發(fā)中才能更好更快地提高對于系統(tǒng)的分析和設(shè)計能力。參考文獻(xiàn)(References)1
18、 Adam Drozdek.Object-Oriented Programming and Representation of ObjectsJ.Studies in Logic,Grammar and Rhetoric,2015,40(1):293-302.2 Savrun-Yeni,et al.Efficient Hosted Interpreters on the JVMJ.Acm Transactions on Architecture & Code Optimization,2014,11(1):9.3 Maplesden,et al.Performance Analysis for Object-Oriented Software:A Systematic MappingJ.IEEE Transactions on Software Engineering,2015,41(7):691-710.4 嚴(yán)仲興.Java面向?qū)ο蟪绦蛟O(shè)計M.北
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度租賃房屋押金管理及退還合同2篇
- 2025年度房產(chǎn)評估居間服務(wù)合同范本
- 個性化2024合作辦學(xué)合同書標(biāo)準(zhǔn)格式范本版B版
- 2025年水電站股份轉(zhuǎn)讓與電力系統(tǒng)優(yōu)化設(shè)計合同3篇
- 2025年度旅游服務(wù)合同履約保證書4篇
- 二零二五年度玻璃幕墻玻璃環(huán)保性能改進(jìn)合同3篇
- 2025年度零擔(dān)運(yùn)輸貨物包裝標(biāo)準(zhǔn)合同4篇
- 2025年度綠色生態(tài)社區(qū)綠化養(yǎng)護(hù)項(xiàng)目合同范本3篇
- 二零二五年度窗簾布產(chǎn)品售后服務(wù)與客戶滿意度提升合同3篇
- 2025年環(huán)保設(shè)備銷售業(yè)績提成合同范本3篇
- 暨南大學(xué)珠海校區(qū)財務(wù)辦招考財務(wù)工作人員易考易錯模擬試題(共500題)試卷后附參考答案
- 羊水少治療護(hù)理查房
- 中華人民共和國保守國家秘密法實(shí)施條例培訓(xùn)課件
- 管道坡口技術(shù)培訓(xùn)
- OQC培訓(xùn)資料教學(xué)課件
- 2024年8月CCAA國家注冊審核員OHSMS職業(yè)健康安全管理體系基礎(chǔ)知識考試題目含解析
- 體育賽事組織與實(shí)施操作手冊
- 2024年浙江省公務(wù)員考試結(jié)構(gòu)化面試真題試題試卷答案解析
- 2023年航空公司招聘:機(jī)場安檢員基礎(chǔ)知識試題(附答案)
- 皮膚儲存新技術(shù)及臨床應(yīng)用
- 《現(xiàn)在完成時》語法復(fù)習(xí)課件(共44張-)
評論
0/150
提交評論