亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Java語言中對象的理解與應用

        2017-05-23 22:26:29邢如意
        軟件工程 2017年4期
        關鍵詞:面向對象對象

        摘 要:面向對象是當前主流的程序設計方法,是軟件開發(fā)過程中重要的理論支撐。正確理解對象與類的概念,以及正確的使用對象對于學習面向對象編程具有重要作用。文中以面向對象程序設計中“對象”作為主體貫穿全文,分別從對象的理解、Java語言中對象管理、對象如何正確應用三個方面進行闡述。文章內容精煉、源于實戰(zhàn),對于幫助理解和掌握Java面向對象程序設計具有較好的參考價值。

        關鍵詞:Java;對象;面向對象;OOP

        中圖分類號:TP312 文獻標識碼:A

        Abstract:As the current mainstream in programming,the 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 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;oject oriented;Object-Oriented Programming

        1 引言(Introduction)

        面向對象是當前主流編程語言的共同的特征,如Java、C#語言。面向對象涉及到軟件開發(fā)的各個階段,具體包括面向對象分析OOA、面向對象設計OOD、面向對象編程OOP,形成了完整的面向對象的軟件工程理論、方法和工具[1]。

        在學習面向對象編程語言時,首先學習的就是對象的概念,能夠正確的理解對象和使用對象對于之后的面向對象特性學習具有很大幫助。本文從對象與類的理解、對象的原理和對象的使用三個方面循序漸進闡述,較全面的介紹了關于對象概念、對象存儲原理及在編程中正確使用對象的技巧等內容,內容對于理解面向對象思想和學習面向對象編程具有較大幫助。

        2 理解對象與類(Understanding objects and classes)

        掌握面向對象程序設計首先要正確理解面向對象思想,面向對象思想的核心是正確理解“萬物皆對象”這句話。在編程時運用“萬物皆對象”的思想是指:通過使用面向對象的方式,將現(xiàn)實世界中的實體看作為對象,對這些實體的特性進行描述,并分析出實體具有的功能或職責。描述實體特性的過程即為提取對象屬性的過程,分析實體的功能或職責的過程即為提取對象方法的過程,完整描述一個對象即從屬性和方法兩個層面,提取對象屬性和方法的過程即為使用面向對象思想進行分析和抽象的過程。

        在把客觀實體抽象為對象后,還要繼續(xù)分析各對象之間的關系,最后將對象的抽象結果描述出來形成一段文本,此文本即為面向對象思想中的“類class”。從以上過程可以發(fā)現(xiàn),類是對象的屬性、方法、對象之間關系的描述。對象是現(xiàn)實世界中可以描述的實體,是具體的;類是對象的描述,是不具體的,在編程時類體現(xiàn)為一段代碼文本。

        以下以駕駛員和汽車為例闡述類與對象的關系與區(qū)別?,F(xiàn)實世界中汽車與駕駛員皆為生活中常見的實體。當我們看到一輛汽車時會自然聯(lián)想到汽車的品牌、型號等屬性信息,分析其職責(功能)可以得出汽車可以行駛、停止。但汽車不會自己行駛或停止,它需要駕駛員執(zhí)行啟動、掛擋等操作,可以看出汽車與駕駛員二者是存在依賴關系的。分析駕駛員對象可以得出駕駛員具有駕駛證照號碼、性別、年齡等屬性信息,駕駛員具有“駕駛”能力。分析汽車對象可以得出汽車具有品牌、型號、價格等屬性,汽車具有行駛和停止的功能。經過上述分析,可以抽象出汽車類和駕駛員類,以及兩個類間的依賴關系,其類圖如圖1所示。

        經過對汽車與駕駛員兩個對象的分析,繼而再抽象出兩個類可以看出,面向對象思想與人類的思維方式極為相似,對于初學者而言并不難入門,但對于一些較為抽象的場景而言初學者通常會感覺稍有壓力。下面以開發(fā)一款簡單人機猜數字游戲為例繼續(xù)理解對象與類的概念。人機猜數字游戲的規(guī)則為:機器隨機生成一個數值,玩家輸入猜的數字且每一局最多猜三次,若三次都未猜中則本局失敗。游戲根據猜的數字位數分為三個級別,1位數為初級、2位數為中級、3位數為高級。根據游戲規(guī)則的描述可快速分析出本案例至少包括人類玩家對象和機器玩家對象。人類玩家對象具有玩家名稱、當前游戲級別屬性,功能職責為輸入猜的數字。機器玩家對象職責為根據當前人類玩家的級別生成相應位數的隨機數字。根據上述分析可以看到只有人類玩家和機器玩家對象還無法實現(xiàn)游戲功能,因為目前還沒有控制游戲進度的對象和描述游戲級別信息的對象。因此,在進一步分析后抽象出游戲對象和級別對象。游戲對象相當于裁判,可控制游戲的啟動及停止、判斷所猜數字是否正確和設置當前人類玩家的級別。游戲級別對象則用于保存級別的參數信息,包括級別名稱、級別對應數字的位數。綜上所述,本案例最后抽取出游戲類、機器玩家類、人類玩家類、游戲級別類。其中游戲類與機器玩家類、人類玩家類具有關聯(lián)關系,機器玩家類與人類玩家類具有依賴關系,人類玩家類與游戲等級類具有關聯(lián)性,其類圖如圖2所示。

        3 Java對象管理(Java object management)

        Java語言編寫的程序運行在Java虛擬機之上,基于此特點才實現(xiàn)了Java程序的平臺無關性和良好的可移植性[2,3]?;谔摂M機平臺運行的另一個好處是在編寫程序時不再需要考慮C或C++語言中的手動內存管理問題,Java虛擬機會自動進行內存的申請和釋放。在Java虛擬機中,存放對象的區(qū)域是內存占用比例最高的,這個區(qū)域稱為堆heap[4,5]。因此能夠理解對象在堆中的存儲原理對編寫高效的Java程序具有很大幫助。

        學習Java對象管理的主要內容是學習對象的生命周期,即對象的創(chuàng)建、使用和銷毀三個階段。

        3.1 對象創(chuàng)建

        創(chuàng)建一個Java對象需要經過三個過程分別為加載類文件、分配內存、對象初始化[5,6]。

        (1)加載類文件:類是對對象的描述,在使用new關鍵字創(chuàng)建對象時,虛擬機會先檢查對應的類文件是否已經被加載,若未加載則會先加載類文件到虛擬機中。Java語言提供了多種類加載器classloader用于加載類文件(.class文件)到虛擬機中[6,7],分別包括:

        a.啟動加載器:最頂層的類加載器,用于加載核心類庫,如java語言提供的rt.jar等;

        b.擴展類加載器:用于加載Java目錄下ext目錄中的所有類庫文件;

        c.系統(tǒng)類加載器:負責加載應用程序classpath目錄下所有類文件,此目錄下類文件即為開發(fā)者自主編寫的程序文件[8]。

        (2)分配內存:當類文件加載完后,對象在創(chuàng)建時需使用的初始內存大小就確定了。虛擬機在堆空間中劃分出相應大小的存儲空間。當前虛擬機在內存分配方法上采用指針碰撞法或空閑列表法?!爸羔樑鲎病狈僭OJava堆中的內存是絕對規(guī)整的,所有用過的內存都放在一邊,空閑的內存放在另一邊,中間放一個指針作為分界點。當需要分配內存時只需要把指針向空閑內存方向移動對象大小相等的距離即可。如果Java堆中的內存并不規(guī)整,那么虛擬機需要維護一個列表用來記錄哪些內存塊可用。當需要分配內存時從列表中找出一個足夠大的空間劃分給對象實例,這就是“空閑列表”。

        (3)對象初始化:虛擬機在對象內存分配完成后會給對象內部的屬性分配初始值,此初始值如果沒有手動設置則會被設置為數據類型默認初始值(例如int數據類型的初始值為0)。最后調用類的構造方法完成對象初始化操作。

        3.2 對象使用

        當創(chuàng)建好對象后,需要通過引用方式來訪問使用對象,常見的有兩種方式,第一種是句柄,第二種是直接指針。

        (1)句柄

        Java堆中專門劃分一部分內存作為句柄池,Java棧中的引用存儲的是對象的句柄地址,而句柄地址存儲了對象實例數據與數據類型各自的具體地址信息。

        使用句柄的好處就是引用中存儲的是固定的句柄地址,在對象被移動(垃圾收集時移動對象)時只會改變句柄中實例數據指針,而引用不需要更改。

        (2)直接指針

        直接指針就是Java棧中的引用直接存儲對象的內存地址。使用直接指針最大的好處就是訪問速度快,它節(jié)省了一次指針定位的時間開銷。Sun的Hot Spot虛擬機使用的直接指針訪問對象。

        (3)對象銷毀

        對象的銷毀回收由虛擬機負責執(zhí)行,虛擬機判斷一個對象是否可以被回收的算法包括引用計數法和根集算法。引用計數法為虛擬機內部為每個對象保存一個引用數量,當一個對象的引用數量為0時,則虛擬機會在下次垃圾回收時將此對象回收。由于引用計數算法無法解決對象之間引用閉環(huán)問題,因此出現(xiàn)了根集算法。根集算法原理是從GCRoot(如一個靜態(tài)變量)開始遍歷引用關系,最后對于無法被遍歷到的對象則會被回收[9,10]。

        4 對象的正確使用(Proper use of object)

        掌握Java虛擬機內部原理可有效幫助開發(fā)人員編寫出高效的Java程序,但虛擬機內部原理的復雜性導致學習成本較高、入門較難。因此對于初學者而言可以邊學習邊參考一些最佳實踐,從而寫出高質量Java代碼。在編碼時正確使用對象主要包括以下幾點:

        4.1 盡量復用對象,不重復創(chuàng)建

        重復創(chuàng)建對象將導致內存占用增大,浪費內存空間。解決方法是重用已創(chuàng)建的對象和通過代碼方式限制避免創(chuàng)建重復對象。

        (1)使用單例模式。單例模式的作用是確保一個類只能創(chuàng)建出一個對象。實現(xiàn)上主要為:a.顯示聲明私有構造方法,禁止使用者使用new關鍵字創(chuàng)建對象;b.在類中創(chuàng)建一個自身類型的對象,并將其定義為私有的和靜態(tài)的,此變量即為供外部使用的唯一的對象;c.定義一個全局方法,此方法向外部提供唯一的實例變量。

        (2)重用對象。適當使用new關鍵字,在創(chuàng)建完一個對象后,后期考慮不再創(chuàng)建新對象,而是將之前創(chuàng)建對象內部存儲數據更新以供下次使用。例如字符串變量,虛擬機對于字符串單獨設置了常量池進行存儲,因此對于代碼String s=hello”和String s=new String(“hello”)而言,前者的效率更高。

        4.2 及時清空過期對象

        雖然Java虛擬機提供了自動化內存管理,實現(xiàn)了自動垃圾回收,但是為了提高程序運行效率,當在代碼中某對象不再使用時,應手動設置對象值為null,這樣在下次垃圾回收時此對象即可被回收。例如在當編寫數據訪問代碼時,對于Connection對象的釋放即應在使用后立即清除引用,正確寫法如下。

        Connection conn=null; //創(chuàng)建對象,默認值為空

        try{

        conn=DriverManager.getConnection(url,username,pwd); //初始化conn對象

        // ...

        }finally {

        if(null!=conn) {

        try{conn.close();conn=null;}catch(Exception e) {;} //使用后立即清除引用

        }

        }

        5 結論(Conclusion)

        理解面向對象思想的核心是正確理解對象概念,從對象到類,從類再到接口等抽象過程。面向對象思想三大特性包括封裝、繼承和多態(tài),這三大特性在學習和開發(fā)過程中是密不可分的,在分析和設計對象與類時以高內聚、低耦合為原則,以提高代碼的復用性。Java程序在運行時直接關系到性能的是虛擬機內部對象的管理,正確理解對象的生命周期和在代碼中正確使用對象對于編程高效的Java程序具有極大幫助。因此從理解對象的概念、學習對象的正確使用入手,繼而進入面向對象分析、設計和編程領域,在開發(fā)中才能更好更快地提高對于系統(tǒng)的分析和設計能力。

        參考文獻(References)

        [1] Adam Drozdek.Object-Oriented Programming and Representation of Objects[J].Studies in Logic,Grammar and Rhetoric,2015,40(1):293-302.

        [2] Savrun-Yeni,et al.Efficient Hosted Interpreters on the JVM[J].Acm Transactions on Architecture & Code Optimization,2014,11(1):9.

        [3] Maplesden,et al.Performance Analysis for Object-Oriented Software:A Systematic Mapping[J].IEEE Transactions on Software Engineering,2015,41(7):691-710.

        [4] 嚴仲興.Java面向對象程序設計[M].北京:高等教育出版社,

        2005.

        [5] 黃俊爽,等.淺談Java面向對象程序設計[J].科技信息,2010,

        13:463;465.

        [6] 李永遠.JAVA虛擬機相關技術研究與實踐[J].信息通信,2015,

        05:120.

        [7] 馮宇.分析Java平臺的核心——虛擬機[J].網絡安全技術與應用,2015(05):134;138.

        [8] 崔行臣,趙佟.Java動態(tài)類加載機制分析及其應用[J].計算機系統(tǒng)應用,2013(07):187-191.

        [9] 杜天宇,景慎艷.Java虛擬機的系統(tǒng)優(yōu)化研究[J].電腦知識與技術,2016(01):72-73.

        [10] 任嘉光.Java性能優(yōu)化技術綜述[J].信息化建設,2016(06):121.

        作者簡介:

        邢如意(1982-),男,碩士,講師,系統(tǒng)分析師.研究領域:軟件工程,分布式系統(tǒng)設計與開發(fā).

        猜你喜歡
        面向對象對象
        神秘來電
        睿士(2023年2期)2023-03-02 02:01:09
        面向對象的計算機網絡設計軟件系統(tǒng)的開發(fā)
        電子測試(2018年15期)2018-09-26 06:01:34
        攻略對象的心思好難猜
        意林(2018年3期)2018-03-02 15:17:24
        面向對象的數據交換協(xié)議研究與應用
        基于熵的快速掃描法的FNEA初始對象的生成方法
        面向對象Web開發(fā)編程語言的的評估方法
        區(qū)間對象族的可鎮(zhèn)定性分析
        面向對象信息提取中影像分割參數的選擇
        河南科技(2014年10期)2014-02-27 14:09:03
        亚洲人成网站在线播放观看| 国产大陆av一区二区三区| 亚洲av综合色区久久精品| 亚洲悠悠色综合中文字幕| 亚洲av无码一区二区三区乱子伦 | 无码国产一区二区三区四区| 白浆出来无码视频在线| 亚洲一区二区三区国产精品视频| 亚洲国产精品成人av网| 国产尤物av尤物在线观看| 国产在线手机视频| 五月婷婷激情六月开心| 国产熟女盗摄一区二区警花91| 巨茎中出肉欲人妻在线视频| 国产成人午夜精品免费视频| 国产免费看网站v片不遮挡| 黄色中文字幕视频网站| 久久精品国产亚洲av精东| 国产av无码专区亚洲awww| 日本免费一区二区三区在线看| 91青青草手机在线视频| 婷婷四虎东京热无码群交双飞视频 | 亚洲第一av导航av尤物| 欧美日韩区1区2区3区| 日韩精品极品免费在线视频| 亚洲av无码一区二区三区天堂 | 人妻少妇看A偷人无码电影| 日韩极品在线观看视频| 女优一区二区三区在线观看| 国产一卡2卡3卡四卡国色天香| 女人体免费一区二区| 久久久免费精品国产色夜| 亚洲自偷自拍另类第1页| 男女18禁啪啪无遮挡| 亚洲一区二区高清在线| 日韩女同精品av在线观看| 亚洲人成未满十八禁网站| 日韩偷拍一区二区三区视频| 人妻中文久久人妻蜜桃| 99国产精品久久久蜜芽| 国产91网|