教學(xué)面向?qū)ο蟪绦蛟O(shè)計(jì)標(biāo)準(zhǔn)課件_第1頁(yè)
教學(xué)面向?qū)ο蟪绦蛟O(shè)計(jì)標(biāo)準(zhǔn)課件_第2頁(yè)
教學(xué)面向?qū)ο蟪绦蛟O(shè)計(jì)標(biāo)準(zhǔn)課件_第3頁(yè)
教學(xué)面向?qū)ο蟪绦蛟O(shè)計(jì)標(biāo)準(zhǔn)課件_第4頁(yè)
教學(xué)面向?qū)ο蟪绦蛟O(shè)計(jì)標(biāo)準(zhǔn)課件_第5頁(yè)
已閱讀5頁(yè),還剩343頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

教學(xué)課件面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué)課件面向?qū)ο蟪绦蛟O(shè)計(jì)1(優(yōu)選)第教學(xué)課件面向?qū)ο蟪绦蛟O(shè)計(jì)(優(yōu)選)第教學(xué)課件面向?qū)ο蟪绦蛟O(shè)計(jì)2幾個(gè)概念:程序、程序設(shè)計(jì)語(yǔ)言、程序設(shè)計(jì)方法

程序:是一組有序指令的集合,由某種程序設(shè)計(jì)語(yǔ)言編寫(xiě)而成。程序設(shè)計(jì)語(yǔ)言:是人與計(jì)算機(jī)之間進(jìn)行交流的工具。是由字、詞和語(yǔ)法規(guī)則構(gòu)成的指令系統(tǒng)。幾個(gè)概念:程序、程序設(shè)計(jì)語(yǔ)言、程序設(shè)計(jì)方法程序:是一組有序3程序設(shè)計(jì)語(yǔ)言1.機(jī)器語(yǔ)言:是計(jì)算機(jī)能夠直接執(zhí)行的二進(jìn)制指令代碼,每條指令都用0和1組成的序列串表示,這些指令的集合就是指令系統(tǒng)。如加法運(yùn)算:10110110。2.匯編語(yǔ)言:主要由匯編指令構(gòu)成,這些匯編指令與機(jī)器語(yǔ)言的二進(jìn)制指令一一對(duì)應(yīng)。如加法運(yùn)算:ADD。注意:機(jī)器語(yǔ)言和匯編語(yǔ)言都是面向機(jī)器的程序設(shè)計(jì)語(yǔ)言,它們與計(jì)算機(jī)的硬件緊密相關(guān)。程序設(shè)計(jì)語(yǔ)言1.機(jī)器語(yǔ)言:是計(jì)算機(jī)能夠直接執(zhí)行的二進(jìn)制指令代4程序設(shè)計(jì)語(yǔ)言3.高級(jí)語(yǔ)言:FORTRAN語(yǔ)言和隨后出現(xiàn)的BASIC語(yǔ)言、Pascal語(yǔ)言、COBOL語(yǔ)言以及C語(yǔ)言等等,都被稱(chēng)為高級(jí)語(yǔ)言。程序員在使用高級(jí)語(yǔ)言編寫(xiě)程序時(shí),不需要熟悉計(jì)算機(jī)的指令系統(tǒng),可以將精力集中于解題思路和方法上。如加法運(yùn)算:+。計(jì)算機(jī)不能直接執(zhí)行高級(jí)語(yǔ)言程序,必須先翻譯成為機(jī)器語(yǔ)言程序之后才能執(zhí)行。程序設(shè)計(jì)語(yǔ)言3.高級(jí)語(yǔ)言:5程序設(shè)計(jì)方法程序設(shè)計(jì)方法是獨(dú)立于具體程序設(shè)計(jì)語(yǔ)言的一門(mén)技術(shù)。由于程序設(shè)計(jì)通常離不開(kāi)程序設(shè)計(jì)語(yǔ)言作為工具,所以容易混淆程序設(shè)計(jì)方法與程序設(shè)計(jì)語(yǔ)言的概念。程序設(shè)計(jì)語(yǔ)言的設(shè)計(jì)目的主要是為了支持某種程序設(shè)計(jì)方法。程序設(shè)計(jì)方法程序設(shè)計(jì)方法是獨(dú)立于具體程序設(shè)計(jì)語(yǔ)言的一門(mén)技術(shù)。6程序設(shè)計(jì)方法1.早期的程序設(shè)計(jì)方法:早期的高級(jí)程序設(shè)計(jì)語(yǔ)言有FORTROM、COBOL、BASIC等。這一時(shí)期由于追求程序的高效率,程序員過(guò)份依賴(lài)技巧與天份,不太注重程序的結(jié)構(gòu),一個(gè)典型問(wèn)題是程序中的控制隨意跳轉(zhuǎn),即不加限制地使用goto語(yǔ)句,這樣的程序?qū)﹂喿x者來(lái)說(shuō)是難以理解的,程序員也難以修改程序。程序設(shè)計(jì)方法1.早期的程序設(shè)計(jì)方法:7程序設(shè)計(jì)方法2.結(jié)構(gòu)化的程序設(shè)計(jì)方法:隨著程序規(guī)模與復(fù)雜性的不斷增長(zhǎng),20世紀(jì)60年代誕生了結(jié)構(gòu)化程序設(shè)計(jì)方法。結(jié)構(gòu)化程序設(shè)計(jì)方法的主要技術(shù)是自頂向下、逐步求精,采用單入口/單輸出的控制結(jié)構(gòu)。這一程序設(shè)計(jì)方法的代表語(yǔ)言是Pascal、C等。程序設(shè)計(jì)方法2.結(jié)構(gòu)化的程序設(shè)計(jì)方法:8結(jié)構(gòu)化的程序設(shè)計(jì)方法結(jié)構(gòu)化程序設(shè)計(jì)方法的基本思路是,把一個(gè)復(fù)雜問(wèn)題的求解過(guò)程分階段進(jìn)行,每個(gè)階段處理的問(wèn)題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。具體說(shuō),采取以下方法保證得到結(jié)構(gòu)化的程序:(1)自頂向下;(2)逐步細(xì)化;(3)模塊化設(shè)計(jì);(4)結(jié)構(gòu)化編碼。結(jié)構(gòu)化的程序設(shè)計(jì)把程序的結(jié)構(gòu)規(guī)定為順序、選擇和循環(huán)三種結(jié)構(gòu),限制使用GOTO語(yǔ)句,并采用了自頂向下、逐步求精的分析和設(shè)計(jì)方法,即功能分解法,這種方法將需求空間視為一個(gè)功能模塊,該模塊又進(jìn)行分解,生成多個(gè)小的功能模塊,重復(fù)分解,直至每個(gè)模塊具有明確的功能和適當(dāng)?shù)膹?fù)雜度,而每個(gè)模塊的功能實(shí)現(xiàn)都由上述三種基本結(jié)構(gòu)組成,其目的是為了解決由許多人共同開(kāi)發(fā)大型軟件時(shí),如何高效率地完成高可靠系統(tǒng)的問(wèn)題。結(jié)構(gòu)化的程序設(shè)計(jì)方法結(jié)構(gòu)化程序設(shè)計(jì)方法的基本思路是,把一個(gè)復(fù)9結(jié)構(gòu)化的程序設(shè)計(jì)方法在接受一個(gè)任務(wù)后應(yīng)怎樣著手進(jìn)行呢?有兩種不同的方法:

1.一種是自頂向下,逐步細(xì)化。2.一種是自下而上,逐步積累。

以寫(xiě)文章為

例來(lái)說(shuō)明這個(gè)問(wèn)題:有的人胸有全局,先想好整個(gè)文章分成哪幾個(gè)部分,然后再進(jìn)一步考慮每一部分分成哪幾節(jié),每一節(jié)分成哪

幾段,每一段應(yīng)包含什么內(nèi)容,用這種方法逐步分解,直到作者認(rèn)為可以直接將各小段表達(dá)為文字語(yǔ)句為止。這種方法就叫做

“自頂向下,逐步細(xì)化”。

另有些人寫(xiě)文章時(shí)不擬提綱,如同寫(xiě)信一樣提起筆就寫(xiě),想到哪里就寫(xiě)到哪里,直到他認(rèn)為把想寫(xiě)的內(nèi)容都寫(xiě)出來(lái)了為止。

這種方法叫做“自下而上,逐步積累”。顯然,用第一種方法考慮周全,結(jié)構(gòu)清晰,層次分明,作者容易寫(xiě),讀者容易看。如果發(fā)現(xiàn)某一部分中有一段內(nèi)容不妥,需要修改

只需找出該部分,修改有關(guān)段落即可,與其他部分無(wú)關(guān)。我們提倡用這種方法設(shè)計(jì)程序。這就是用工程的方法設(shè)計(jì)程序。我們應(yīng)當(dāng)掌握自頂向下、逐步細(xì)化的設(shè)計(jì)方法。這種設(shè)計(jì)方法的過(guò)程是將問(wèn)題求解由抽象逐步具體化的過(guò)程。結(jié)構(gòu)化的程序設(shè)計(jì)方法在接受一個(gè)任務(wù)后應(yīng)怎樣著手進(jìn)行呢?有兩種10結(jié)構(gòu)化的程序設(shè)計(jì)方法結(jié)構(gòu)化的程序設(shè)計(jì)把數(shù)據(jù)和對(duì)數(shù)據(jù)的處理過(guò)程分離為相互獨(dú)立的實(shí)體,即程序結(jié)構(gòu)是“數(shù)據(jù)結(jié)構(gòu)+算法”。若要修改某個(gè)數(shù)據(jù)結(jié)構(gòu),就需要改動(dòng)涉及此數(shù)據(jù)結(jié)構(gòu)的所有處理模塊,所以,當(dāng)應(yīng)用程序比較復(fù)雜時(shí),人員出錯(cuò),難以維護(hù)。其次,結(jié)構(gòu)化的程序設(shè)計(jì)方法仍存在與人的思維不協(xié)調(diào)的地方,所以很難自然、準(zhǔn)確地反映真實(shí)世界。因此,用此方法開(kāi)發(fā)出來(lái)的軟件,有時(shí)很難保證其質(zhì)量,甚至需要重新開(kāi)發(fā)結(jié)構(gòu)化的程序設(shè)計(jì)方法結(jié)構(gòu)化的程序設(shè)計(jì)把數(shù)據(jù)和對(duì)數(shù)據(jù)的處理過(guò)程11程序設(shè)計(jì)方法3.面向?qū)ο蟮某绦蛟O(shè)計(jì)方法(ObjectOrientedProgramming,OOP)雖然結(jié)構(gòu)化程序設(shè)計(jì)提高了軟件生產(chǎn)率和軟件質(zhì)量,但隨著程序規(guī)模與復(fù)雜性的增長(zhǎng),程序中的數(shù)據(jù)結(jié)構(gòu)變得與這些數(shù)據(jù)上的操作同樣重要。在大型結(jié)構(gòu)化程序中,一個(gè)數(shù)據(jù)結(jié)構(gòu)可能由許多個(gè)過(guò)程來(lái)處理,修改數(shù)據(jù)結(jié)構(gòu)將影響到所有相關(guān)的過(guò)程。在由幾百個(gè)過(guò)程組成的成千上萬(wàn)行的結(jié)構(gòu)化程序中,這種情況變得相當(dāng)麻煩并且容易產(chǎn)生錯(cuò)誤。60年代末開(kāi)始,國(guó)際上出現(xiàn)了“軟件危機(jī)”,主要表現(xiàn)是:軟件質(zhì)量差、成本及開(kāi)發(fā)進(jìn)度難以控制,維護(hù)工作麻煩,產(chǎn)生這一危機(jī)的根本原因在于結(jié)構(gòu)化方法強(qiáng)烈依賴(lài)系統(tǒng)邏輯模型的完整性描述,難以做到系統(tǒng)的動(dòng)態(tài)變化與擴(kuò)展,系統(tǒng)開(kāi)發(fā)速度慢、周期長(zhǎng)、費(fèi)用高;結(jié)構(gòu)化設(shè)計(jì)方法講究的是自頂而下的“瀑布式”設(shè)計(jì),使數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)僅服從于當(dāng)前功能實(shí)現(xiàn)的要求,為以后的擴(kuò)充和重用設(shè)置了巨大的障礙。程序設(shè)計(jì)方法3.面向?qū)ο蟮某绦蛟O(shè)計(jì)方法(ObjectOri12面向?qū)ο蟮某绦蛟O(shè)計(jì)方法20世紀(jì)80年代興起的面向?qū)ο蟪绦蛟O(shè)計(jì)方法在結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ)上提出了一種新的設(shè)計(jì)思路,最重要的改變是程序圍繞被操作的數(shù)據(jù)來(lái)設(shè)計(jì),而不是圍繞操作本身。面向?qū)ο蟪绦蛟O(shè)計(jì)以類(lèi)作為構(gòu)造程序的基本單位,具有封裝、數(shù)據(jù)抽象、繼承、多態(tài)化等特點(diǎn)。較有影響的采用面向?qū)ο蟪绦蛟O(shè)計(jì)方法的語(yǔ)言有C++、Java等。面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言大致可以分為兩類(lèi),一類(lèi)是純面向?qū)ο笳Z(yǔ)言,例如Java語(yǔ)言;另一類(lèi)是混合型面向?qū)ο笳Z(yǔ)言,它們往往是由結(jié)構(gòu)化語(yǔ)言發(fā)展而來(lái)的,例如C++語(yǔ)言和VisualBasic語(yǔ)言。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法20世紀(jì)80年代興起的面向?qū)ο蟪绦蛟O(shè)計(jì)13面向?qū)ο蟮某绦蛟O(shè)計(jì)方法面向?qū)ο蟪绦蛟O(shè)計(jì)思想是將數(shù)據(jù)以及對(duì)數(shù)據(jù)的操作封裝在一個(gè)獨(dú)立的數(shù)據(jù)結(jié)構(gòu)(對(duì)象)中,這種模式更接近現(xiàn)實(shí)世界,所有的對(duì)象都擁有屬性和行為,對(duì)象之間的聯(lián)系通過(guò)消息來(lái)實(shí)現(xiàn)。面向?qū)ο螅瑢?shí)際上就是以對(duì)象為中心來(lái)分析和解決問(wèn)題。它不再將問(wèn)題分解為過(guò)程,而是將問(wèn)題分解為對(duì)象。例如,設(shè)計(jì)VB應(yīng)用程序時(shí),一個(gè)窗體就是一個(gè)對(duì)象,各種控件也是對(duì)象,程序員可以直接使用這些對(duì)象,程序的設(shè)計(jì)過(guò)程就是設(shè)計(jì)對(duì)象和運(yùn)用對(duì)象的過(guò)程。面向?qū)ο蟮某绦蛟O(shè)計(jì)中程序是“對(duì)象+消息”。面向?qū)ο蟪绦蛟O(shè)計(jì)方法力求符合人們自然的思維習(xí)慣,運(yùn)用類(lèi)和對(duì)象的觀點(diǎn)描述問(wèn)題域,然后用程序設(shè)計(jì)語(yǔ)言對(duì)問(wèn)題進(jìn)行描述和實(shí)現(xiàn)。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法面向?qū)ο蟪绦蛟O(shè)計(jì)思想是將數(shù)據(jù)以及對(duì)數(shù)據(jù)14面向?qū)ο蟮某绦蛟O(shè)計(jì)方法面向?qū)ο蟪绦蛟O(shè)計(jì)是一種新興的程序設(shè)計(jì)方法,或者是一種新的程序設(shè)計(jì)規(guī)范,它使用對(duì)象、類(lèi)、繼承、封裝、消息等基本概念來(lái)進(jìn)行程序的設(shè)計(jì)。面向?qū)ο蟮某绦蛟O(shè)計(jì)是以要解決的問(wèn)題中所涉及的各種對(duì)象為主體,力求程序設(shè)計(jì)符合人們?nèi)粘5乃季S習(xí)慣,降低問(wèn)題的難度和復(fù)雜性,提高編程的效率。使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法來(lái)解決問(wèn)題就是從實(shí)際問(wèn)題中抽象并封裝數(shù)據(jù)和操作的對(duì)象,通過(guò)定義其狀態(tài)和操作其行為來(lái)表述對(duì)象的特征和功能。此外,還可以通過(guò)定義接口來(lái)描述對(duì)象的地位以及與其他對(duì)象的關(guān)系,最終形成一個(gè)廣泛聯(lián)系的可理解、可擴(kuò)充、可維護(hù)及更接近于問(wèn)題本來(lái)面目的動(dòng)態(tài)對(duì)象模型系統(tǒng)。面向?qū)ο蟮某绦蛟O(shè)計(jì)思想是將數(shù)據(jù)以及對(duì)于這些數(shù)據(jù)的操作,封裝在了一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu)中。這種模式更近似于現(xiàn)實(shí)世界,在這里,所有的對(duì)象都同時(shí)擁有屬性以及與這些屬性相關(guān)的行為。對(duì)象之間的聯(lián)系是通過(guò)消息來(lái)實(shí)現(xiàn)的,消息是請(qǐng)求對(duì)象執(zhí)行某一處理或回答某些信息的要求。某個(gè)對(duì)象在執(zhí)行相應(yīng)的處理時(shí),可以通過(guò)傳遞消息請(qǐng)求其他對(duì)象完成某些處理工作或回答某些消息。其他對(duì)象在執(zhí)行所要求的處理活動(dòng)時(shí),同樣可以通過(guò)傳遞消息和另外的對(duì)象聯(lián)系。所以,一個(gè)面向?qū)ο蟪绦虻膱?zhí)行,就是靠對(duì)象間傳遞消息來(lái)完成的。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法面向?qū)ο蟪绦蛟O(shè)計(jì)是一種新興的程序設(shè)計(jì)方15OOP的邏輯過(guò)程面向?qū)ο笤O(shè)計(jì)分析的完整過(guò)程如圖所示:現(xiàn)實(shí)域抽象抽象類(lèi)對(duì)象實(shí)例化映射抽象數(shù)據(jù)類(lèi)物理實(shí)體邏輯實(shí)現(xiàn)概念域計(jì)算機(jī)世界OOP的邏輯過(guò)程面向?qū)ο笤O(shè)計(jì)分析的完整過(guò)程如圖所示:現(xiàn)實(shí)域16已知攝氏溫度C,則華氏溫度F=(C*9/5)+32。height=1.對(duì)象的創(chuàng)建和使用公有的(public):該類(lèi)的成員可以被其他任何所有的類(lèi)訪(fǎng)問(wèn)靜態(tài)成員與實(shí)例成員publicclasstheThisprivateStringcellPhoneCode;//手機(jī)號(hào)碼getInfo());求屬性x和y的商,并返回結(jié)果的方法;這種設(shè)計(jì)方法的過(guò)程是將問(wèn)題求解由抽象逐步具體化的過(guò)程。System.publicstaticvoidmain(String[]args)name和與age是User類(lèi)的私有成員變量,外部類(lèi)不能訪(fǎng)問(wèn)。//把構(gòu)造方法參數(shù)x賦給類(lèi)中的成員變量xpublicEmpInfo(){}//缺省的構(gòu)造方法designation="Manager";//給成員變量賦值friendly修飾符又稱(chēng)為缺省訪(fǎng)問(wèn)控制符。就可以直接修改User類(lèi)中的成員變量。classChinese{面向?qū)ο蟮闹匾卣?/p>

面向?qū)ο缶哂幸韵聨讉€(gè)重要特征:抽象封裝繼承多態(tài)性

33313234已知攝氏溫度C,則華氏溫度F=(C*9/5)+32。面向?qū)ο?7抽象抽象(Abstraction):抽象是面向?qū)ο缶幊痰钠瘘c(diǎn),也是其最本質(zhì)的特征之一。抽象的廣義概念是這樣定義的:從研究對(duì)象中提取與當(dāng)前目標(biāo)主題關(guān)系最密切的主要方面,而忽略掉與目標(biāo)無(wú)關(guān)的那些方面或關(guān)系不大的細(xì)枝末節(jié),從而更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面,更明確地突出主題,這就是抽象。抽象抽象(Abstraction):抽象是面向?qū)ο缶幊痰钠瘘c(diǎn)18抽象示例下圖闡述了如何由自然界眾多的動(dòng)物實(shí)體出發(fā),經(jīng)過(guò)抽象的處理過(guò)程,最終得到動(dòng)物這一概念

抽象示例下圖闡述了如何由自然界眾多的動(dòng)物實(shí)體出發(fā),經(jīng)過(guò)抽象的19封裝封裝(Encapsulation):封裝也可稱(chēng)為信息隱藏(InformationHiding),是通過(guò)對(duì)象的方法來(lái)訪(fǎng)問(wèn)與改變對(duì)象屬性的一種機(jī)制。封裝是面向?qū)ο蟮囊粋€(gè)重要原則,其實(shí)現(xiàn)的核心是將類(lèi)的屬性與相關(guān)的操作捆綁起來(lái),包裝成不可分割的、獨(dú)立的對(duì)象實(shí)體,將內(nèi)部的數(shù)據(jù)與實(shí)現(xiàn)細(xì)節(jié)盡可能隱蔽起來(lái),使外部用戶(hù)不能直接操縱對(duì)象的內(nèi)部信息,只能通過(guò)對(duì)象對(duì)外提供的施加有一定限制的訪(fǎng)問(wèn)接口來(lái)使用對(duì)象封裝封裝(Encapsulation):封裝也可稱(chēng)為信息隱20封裝示例下圖形象地說(shuō)明了一個(gè)類(lèi)的封裝原理。類(lèi)對(duì)數(shù)據(jù)與行為的封裝是借助于不同級(jí)別的訪(fǎng)問(wèn)修飾符來(lái)達(dá)到控制目的的

封裝示例下圖形象地說(shuō)明了一個(gè)類(lèi)的封裝原理。類(lèi)對(duì)數(shù)據(jù)與行為的封21繼承繼承(Inheritance):繼承是指從已有的類(lèi)中可以派生出若干個(gè)新類(lèi),已有類(lèi)稱(chēng)為基類(lèi)或父類(lèi),新類(lèi)稱(chēng)為派生類(lèi)或子類(lèi);子類(lèi)將自動(dòng)地獲得基類(lèi)的屬性與方法,從而不需再重復(fù)定義這些屬性與方法;當(dāng)然子類(lèi)還可以修改父類(lèi)的方法或增加新的方法,從而使自己更適合特殊的需要。類(lèi)之間的繼承關(guān)系是現(xiàn)實(shí)世界中遺傳關(guān)系的直接模擬繼承繼承(Inheritance):繼承是指從已有的類(lèi)中可以22多態(tài)性多態(tài)性(Polymorphism):是指允許不同類(lèi)的對(duì)象對(duì)同一消息作出各自的響應(yīng),即以統(tǒng)一的風(fēng)格處理已存在的數(shù)據(jù)及相關(guān)的操作。多態(tài)性語(yǔ)言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢(shì),較好地解決了應(yīng)用程序中方法同名的問(wèn)題多態(tài)性多態(tài)性(Polymorphism):是指允許不同類(lèi)的對(duì)23

OOP的優(yōu)越性

從面向過(guò)程到面向?qū)ο笫浅绦蛟O(shè)計(jì)技術(shù)的一個(gè)飛躍。人們之所以要采用面向?qū)ο蟮某绦蛟O(shè)計(jì)技術(shù),其目的在于:

1.按照與人類(lèi)習(xí)慣思維方法一致的原則開(kāi)發(fā)系統(tǒng)2.提高代碼的可重用性(或者稱(chēng)為復(fù)用性)3.提升程序的開(kāi)發(fā)與運(yùn)行效率

4.提高程序的可靠性與可維護(hù)性5.提高程序的可擴(kuò)展性6.增強(qiáng)程序的可控制性總之,面向?qū)ο蟮某绦蛟O(shè)計(jì),能夠有效分解、降低問(wèn)題的難度與復(fù)雜性,提高整個(gè)求解過(guò)程的可控制性、可監(jiān)視性和可維護(hù)性,從而獲得較高的開(kāi)發(fā)效率與可靠效果OOP的優(yōu)越性從面向過(guò)程到面向?qū)ο笫浅绦蛟O(shè)計(jì)技術(shù)的24結(jié)構(gòu)化與面向?qū)ο蟪绦蛟O(shè)計(jì)之比較結(jié)構(gòu)化與面向?qū)ο蟪绦蛟O(shè)計(jì)之比較25結(jié)構(gòu)化與面向?qū)ο蟪绦蛟O(shè)計(jì)之比較面向?qū)ο蟪绦蛟O(shè)計(jì)方法與人類(lèi)習(xí)慣的思維方式一致,比如希望完成“豬八戒吃西瓜”這樣一件事情:在結(jié)構(gòu)化的程序里,一切都是函數(shù),函數(shù)最大,因此這件事情會(huì)用如下語(yǔ)句來(lái)表達(dá):吃(豬八戒,西瓜);在面向?qū)ο蟪绦蚶?,一切以?duì)象為中心,對(duì)象最大,因此這件事情會(huì)用如下語(yǔ)句來(lái)表達(dá):豬八戒.吃(西瓜);對(duì)比兩條語(yǔ)句不難發(fā)現(xiàn),面向?qū)ο蟮恼Z(yǔ)句更接近自然語(yǔ)言的語(yǔ)法,主語(yǔ)、謂語(yǔ)、賓語(yǔ)一目了然,十分直觀,程序員更容易理解。結(jié)構(gòu)化與面向?qū)ο蟪绦蛟O(shè)計(jì)之比較面向?qū)ο蟪绦蛟O(shè)計(jì)方法與人類(lèi)習(xí)慣26publicstaticvoidmain(String[]args){信息隱蔽,即盡可能隱蔽類(lèi)的內(nèi)部細(xì)節(jié),對(duì)外形成一個(gè)邊界(或者說(shuō)形成一道屏障),只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系因?yàn)殪o態(tài)方法屬于類(lèi)本身,所以只要聲明了類(lèi),它的靜態(tài)方法就存在,就可以直接使用類(lèi)來(lái)調(diào)用。(2)當(dāng)調(diào)用方法時(shí),系統(tǒng)按照實(shí)參與形參一一對(duì)應(yīng)的關(guān)系將實(shí)參的值或引用傳遞給對(duì)應(yīng)的形參。publicStudent(Stringname){//一個(gè)參數(shù)的構(gòu)造方法Stringname;//成員變量同樣地,任何一個(gè)類(lèi)的對(duì)象去修改它,也都是在對(duì)同一個(gè)內(nèi)存單元進(jìn)行操作。EmpInfoemployee=newEmpInfo();//創(chuàng)建對(duì)象并實(shí)例化系統(tǒng)運(yùn)行時(shí)為每一個(gè)靜態(tài)成員變量只分配一個(gè)存儲(chǔ)單元,使得所有通過(guò)該類(lèi)實(shí)例化的對(duì)象共享同一個(gè)靜態(tài)成員變量的存儲(chǔ)空間。實(shí)例成員則屬于類(lèi)的實(shí)例(即對(duì)象),包括實(shí)例成員變量和實(shí)例成員方法。類(lèi)實(shí)際上是一種復(fù)雜的數(shù)據(jù)類(lèi)型,它是將數(shù)據(jù)和對(duì)數(shù)據(jù)的操作封裝在一起的集合體。Class14.println(str);public變量名;定義一個(gè)由“人”類(lèi)實(shí)例化而來(lái)的具體的“人”對(duì)象,該對(duì)象也就具有了“人”類(lèi)的屬性和行為,比如姓名為張三。friendly:此方法可以由本類(lèi)中的方法和本包中其他類(lèi)中的方法訪(fǎng)問(wèn),為默認(rèn)修飾符。Class27ob2=newClass27(20);三角形、圓形和梯形的類(lèi)封裝:讓學(xué)生學(xué)習(xí)使用類(lèi)來(lái)封裝對(duì)象的屬性和行為。classStudent{publicstaticvoidmain(String[]args){

面向?qū)ο蟪绦蛟O(shè)計(jì)方法

類(lèi)的定義構(gòu)造方法對(duì)象的創(chuàng)建和使用this關(guān)鍵字類(lèi)的封裝性靜態(tài)成員與實(shí)例成員方法調(diào)用與參數(shù)傳遞匿名對(duì)象內(nèi)容提要

publicstaticvoidmain(String27類(lèi)與對(duì)象現(xiàn)實(shí)世界現(xiàn)實(shí)世界中的類(lèi):在現(xiàn)實(shí)世界中把眾多的事物歸納、劃分成一些類(lèi)是人類(lèi)在認(rèn)識(shí)客觀世界時(shí)經(jīng)常采用的思維方法。類(lèi)是具有相同屬性和行為的一組對(duì)象的集合,其內(nèi)部包括屬性和行為兩個(gè)主要部分。例如,如果把“人”看成是一個(gè)抽象的類(lèi),那么人的姓名、性別、年齡等數(shù)據(jù)就是“人”類(lèi)的屬性,而說(shuō)話(huà)、跑步等稱(chēng)為“人”類(lèi)的行為(或者叫方法)。現(xiàn)實(shí)世界中的對(duì)象:對(duì)象是類(lèi)的一個(gè)實(shí)例。例如每一個(gè)具體的人就是“人”類(lèi)中的一個(gè)實(shí)例,即一個(gè)對(duì)象。定義一個(gè)由“人”類(lèi)實(shí)例化而來(lái)的具體的“人”對(duì)象,該對(duì)象也就具有了“人”類(lèi)的屬性和行為,比如姓名為張三。但是不同的“人”對(duì)象的屬性和行為是不盡相同的,例如兩個(gè)人的姓名就是互不相同的??傊?,對(duì)象是類(lèi)具體化的實(shí)例,類(lèi)是同一種類(lèi)型對(duì)象的抽象。類(lèi)與對(duì)象現(xiàn)實(shí)世界28類(lèi)與對(duì)象的關(guān)系可以用計(jì)算機(jī)模型與計(jì)算機(jī)實(shí)體之間的關(guān)系來(lái)更形象地說(shuō)明類(lèi)與對(duì)象之間的關(guān)系:將馮·諾依曼計(jì)算機(jī)模型看作計(jì)算機(jī)類(lèi),則不同品牌的計(jì)算機(jī)實(shí)體就對(duì)應(yīng)為一個(gè)個(gè)的實(shí)例對(duì)象。類(lèi)與對(duì)象的關(guān)系可以用計(jì)算機(jī)模型與計(jì)算機(jī)實(shí)體之間的關(guān)系來(lái)更形象29類(lèi)與對(duì)象的關(guān)系示例計(jì)算機(jī)模型與計(jì)算機(jī)實(shí)體之間的關(guān)系:類(lèi)與對(duì)象的關(guān)系示例計(jì)算機(jī)模型與計(jì)算機(jī)實(shí)體之間的關(guān)系:30類(lèi)與對(duì)象Java中的類(lèi)與對(duì)象Java中的類(lèi):在Java語(yǔ)言中,將數(shù)據(jù)與對(duì)數(shù)據(jù)進(jìn)行的操作合起來(lái)定義為類(lèi)。類(lèi)實(shí)際上是一種復(fù)雜的數(shù)據(jù)類(lèi)型,它是將數(shù)據(jù)和對(duì)數(shù)據(jù)的操作封裝在一起的集合體。類(lèi)是普通數(shù)據(jù)類(lèi)型的擴(kuò)展,類(lèi)不但含有數(shù)據(jù),還包含了對(duì)數(shù)據(jù)進(jìn)行操作的方法。類(lèi)中的數(shù)據(jù)稱(chēng)為類(lèi)的成員變量,類(lèi)中的對(duì)數(shù)據(jù)進(jìn)行的操作稱(chēng)為類(lèi)的成員方法。二者統(tǒng)稱(chēng)為類(lèi)的成員。Java中的對(duì)象:在面向?qū)ο蟮姆椒▽W(xué)中,“對(duì)象”是現(xiàn)實(shí)世界的實(shí)體或概念在計(jì)算機(jī)邏輯中的抽象表示。一個(gè)對(duì)象被稱(chēng)為其類(lèi)的一個(gè)實(shí)例,是該類(lèi)的一次實(shí)例化的結(jié)果。在Java語(yǔ)言中,在Java語(yǔ)言中總是先有類(lèi),然后才能創(chuàng)建對(duì)象。脫離類(lèi)的對(duì)象是無(wú)法創(chuàng)建的,而脫離了對(duì)象的類(lèi)也是毫無(wú)意義的。類(lèi)與對(duì)象是抽象與具體的關(guān)系。對(duì)象是由類(lèi)創(chuàng)建的。對(duì)象的最主要特點(diǎn)是以數(shù)據(jù)為中心,它是一個(gè)集成了數(shù)據(jù)和其上操作的封裝。封裝隱藏了類(lèi)的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),強(qiáng)制類(lèi)的使用者通過(guò)規(guī)定的接口訪(fǎng)問(wèn)對(duì)象,提高了代碼的可維護(hù)性。對(duì)象是具有唯一對(duì)象名和固定對(duì)外接口的一組屬性和操作的集合,用來(lái)模擬組成或影響現(xiàn)實(shí)世界問(wèn)題的一個(gè)或一組因素。類(lèi)與對(duì)象之間的關(guān)系,類(lèi)似于數(shù)據(jù)類(lèi)型與變量之間的關(guān)系;一個(gè)類(lèi)可以生成無(wú)數(shù)個(gè)不同的對(duì)象,每個(gè)對(duì)象屬性值不同,其狀態(tài)也不同。類(lèi)與對(duì)象Java中的類(lèi)與對(duì)象31Java中類(lèi)的定義類(lèi)是組成java程序的基本要素,也是java程序設(shè)計(jì)的重要思想表現(xiàn)。作為程序的基本要素,類(lèi)可以看作定義對(duì)象的模板。當(dāng)編寫(xiě)Java程序時(shí),既可以使用Java系統(tǒng)類(lèi)庫(kù)提供的類(lèi),也可以使用Java開(kāi)發(fā)人員自己編寫(xiě)的類(lèi)。Java類(lèi)的定義格式如下:[<修飾符>]class<類(lèi)名>[extends<父類(lèi)名>][implements<接口名>]//類(lèi)頭{<類(lèi)體>}說(shuō)明:(1)類(lèi)頭定義該類(lèi)的名稱(chēng)、訪(fǎng)問(wèn)權(quán)限、與其他類(lèi)的關(guān)系以及實(shí)現(xiàn)的接口等。(2)類(lèi)體定義該類(lèi)中的成員,包含成員變量和成員方法。成員方法是用來(lái)描述對(duì)成員變量進(jìn)行的操作,不但定義方法,一般還要實(shí)現(xiàn)該方法。Java中類(lèi)的定義類(lèi)是組成java程序的基本要素,也是ja32java類(lèi)的定義類(lèi)頭說(shuō)明:(1)class是定義類(lèi)的關(guān)鍵字,<類(lèi)名>、<父類(lèi)名>、<接口名>都應(yīng)該是合法的Java標(biāo)識(shí)符。習(xí)慣上類(lèi)名的第一個(gè)字母大寫(xiě),但這不是必須的。類(lèi)名最好見(jiàn)名知意,當(dāng)類(lèi)名由幾個(gè)”單詞”復(fù)合而成時(shí),每個(gè)單詞的首寫(xiě)字母使用大寫(xiě),如BeijingTime、AmericanMap、ChongQing,CarNumber等。(2)在類(lèi)的聲明中必須包括關(guān)鍵字class和自定義的類(lèi)名,而方括號(hào)[]中的是可選項(xiàng)。(3)子句extends<父類(lèi)名>顯式地指明當(dāng)前類(lèi)的父類(lèi),子句implements<接口名>則說(shuō)明當(dāng)前類(lèi)要實(shí)現(xiàn)接口。

java類(lèi)的定義類(lèi)頭說(shuō)明:33java類(lèi)的定義修飾符關(guān)鍵字含義限制訪(fǎng)問(wèn)權(quán)限修飾符public聲明類(lèi)是公有的,可以被任何類(lèi)使用或繼承。一個(gè)源程序中最多只能存在一個(gè)公有類(lèi)。只能是主類(lèi)終結(jié)類(lèi)說(shuō)明符final聲明該類(lèi)不能被繼承。abstract與final為互斥的兩個(gè)修飾符,不能同時(shí)出現(xiàn)于一個(gè)類(lèi)的聲明中

抽象類(lèi)說(shuō)明符abstract聲明該類(lèi)不能被實(shí)例化,但可以被繼承。

無(wú)修飾符

可以被同一個(gè)程序包中的其他類(lèi)訪(fǎng)問(wèn)和繼承

(4)修飾符:java類(lèi)的定義修飾符關(guān)鍵字含義限制訪(fǎng)問(wèn)權(quán)限修飾符publi34java類(lèi)的定義類(lèi)是創(chuàng)建對(duì)象的模板,因此它應(yīng)該能夠描述一類(lèi)事物共有的屬性和功能,這個(gè)描述過(guò)程由類(lèi)體實(shí)現(xiàn)。類(lèi)聲明之后的一對(duì)大括號(hào)“{”、“}”以及它們之間的內(nèi)容稱(chēng)做類(lèi)體。類(lèi)體的定義格式如下:{ <成員變量的聲明> <構(gòu)造方法的聲明與實(shí)現(xiàn)> <成員方法的聲明及實(shí)現(xiàn)>}說(shuō)明:(1)類(lèi)體的數(shù)據(jù)聲明為成員變量,針對(duì)數(shù)據(jù)的操作聲明為成員方法,數(shù)據(jù)的操作過(guò)程在成員方法的實(shí)現(xiàn)中體現(xiàn)。(2)構(gòu)造方法主要用于類(lèi)對(duì)象的實(shí)例化,又稱(chēng)構(gòu)造器。(3)類(lèi)體中聲明的成員變量和方法的排列順序可以任意。java類(lèi)的定義類(lèi)是創(chuàng)建對(duì)象的模板,因此它應(yīng)該能夠描述一類(lèi)事35成員變量類(lèi)的成員變量(MemberVariable)是在類(lèi)的內(nèi)部、方法定義的外部所定義的變量,成員變量又稱(chēng)為屬性(Attribute)或數(shù)據(jù)域(DataField),用來(lái)描述類(lèi)的數(shù)據(jù)特征。聲明類(lèi)的成員變量格式如下:[訪(fǎng)問(wèn)權(quán)限修飾符][static][final]數(shù)據(jù)類(lèi)型成員變量名1[,成員變量名2,…]說(shuō)明:(1)訪(fǎng)問(wèn)權(quán)限修飾符的作用是限定成員變量的可訪(fǎng)問(wèn)權(quán)限,主要有:public:公共的,此變量可以在任何地方訪(fǎng)問(wèn)。protected:受保護(hù)的,此變量可以在本包及其子類(lèi)中訪(fǎng)問(wèn)。private:私有的,此變量只可以在本類(lèi)中訪(fǎng)問(wèn)。friendly:此變量只可以在本包中訪(fǎng)問(wèn),這是默認(rèn)的修飾符。(2)static用于聲明類(lèi)成員變量,用于保存與整個(gè)類(lèi)有關(guān)的狀態(tài)數(shù)據(jù)的成員變量稱(chēng)為靜態(tài)成員變量或者類(lèi)成員變量,簡(jiǎn)稱(chēng)為類(lèi)變量,final用于聲明常量。(3)成員變量的數(shù)據(jù)類(lèi)型既可以是基本數(shù)據(jù)類(lèi)型,也可以是引用數(shù)據(jù)類(lèi)型,如數(shù)組或者其他類(lèi)對(duì)象等。成員變量類(lèi)的成員變量(MemberVariable)是在36對(duì)象的創(chuàng)建和使用name+",年齡是:"+user2.(2)初始化對(duì)象中的實(shí)例變量的值,初始值可以是缺省值,或者變量按指定的值初始化;較有影響的采用面向?qū)ο蟪绦蛟O(shè)計(jì)方法的語(yǔ)言有C++、Java等。privateStringcellPhoneCode;//手機(jī)號(hào)碼各種訪(fǎng)問(wèn)權(quán)限的訪(fǎng)問(wèn)級(jí)別a=b;//靜態(tài)變量aJava中的開(kāi)平方:Math.//引用成員變量面向?qū)ο蟮某绦蛟O(shè)計(jì)方法類(lèi)是組成java程序的基本要素,也是java程序設(shè)計(jì)的重要思想表現(xiàn)。第一種做法,按照最原始的方式:也就是說(shuō),不論一個(gè)類(lèi)具有多少個(gè)對(duì)象,靜態(tài)變量只有一個(gè),任何一個(gè)類(lèi)的對(duì)象訪(fǎng)問(wèn)它,取得的都是相同的數(shù)值。publicstaticvoidmain(String[]args){publicvoidsetX(intx){setX(-100);publicclassRectangle{publicstaticvoidmain(String[]args)classUser{靜態(tài)成員方法在不創(chuàng)建對(duì)象的時(shí)候也可以被調(diào)用。成員變量對(duì)象的創(chuàng)建和使用成員變量37成員變量定義示例classPeople{ //類(lèi)頭 intage;//成員變量 Stringname;//成員變量 doubleheight;//成員變量}在該類(lèi)中定義了三個(gè)成員變量,分別是intage、Stringname和doubleheight。三個(gè)成員變量的修飾符都是默認(rèn)的friendly。成員變量定義示例classPeople{ //類(lèi)頭38成員變量定義示例【例】定義一個(gè)學(xué)生類(lèi)Student其屬性包含學(xué)號(hào)、姓名、性別、出生日期、電子郵箱、手機(jī)號(hào)碼、QQ號(hào)碼、通訊地址等。類(lèi)的定義代碼如下:classStudent{publicStringcode;//學(xué)號(hào)publicStringname;//姓名publicbooleansex;//性別privateDatebirthDate;//出生日期privateStringEmail;//電子郵箱privateStringcellPhoneCode;//手機(jī)號(hào)碼privateintQQCode;//QQ號(hào)碼publicStringaddress;//通訊地址……//成員方法定義(略)}成員變量定義示例【例】定義一個(gè)學(xué)生類(lèi)Student其屬性包含39成員變量初始化1.如果定義成員變量時(shí)沒(méi)有指定初值,則系統(tǒng)自動(dòng)指定初值。成員變量初始化1.如果定義成員變量時(shí)沒(méi)有指定初值,則系統(tǒng)自動(dòng)40成員變量初始化2.在定義成員變量時(shí)也可以指定初值。例如:

publicclassPoint{

privateintx=10;

……}注意:publicclassPoint{

privateintx;//錯(cuò)誤,因?yàn)閤=10;是賦值語(yǔ)句,對(duì)成員變量的操作必須放在方法中,不能直接放在類(lèi)中x=10;

……}3.更為常用初始化方法是通過(guò)構(gòu)造方法。例如:publicPoint(intx1,inty1){

x=x1;

y=y1;

}成員變量初始化2.在定義成員變量時(shí)也可以指定初值。例如:41成員方法成員方法(MemberMethod)又稱(chēng)為功能接口(FunctionInterface),簡(jiǎn)稱(chēng)為方法(Method),是類(lèi)與外界的接口,描述了類(lèi)的行為方式,反應(yīng)了對(duì)象的行為特征,特別是對(duì)屬性進(jìn)行操作的特征。成員方法對(duì)成員變量的操作主要體現(xiàn)在以下兩個(gè)方面:改變對(duì)象的屬性,一般記為set方法返回對(duì)象的屬性,一般記為get方法成員方法成員方法(MemberMethod)又稱(chēng)為功能接口42成員方法類(lèi)的行為即對(duì)數(shù)據(jù)的操作由它的成員方法實(shí)現(xiàn)。成員方法是可被調(diào)用執(zhí)行并返回值的、能實(shí)現(xiàn)特定功能的程序段。成員方法聲明格式如下:[訪(fǎng)問(wèn)權(quán)限修飾符][abstract][static][final]返回值類(lèi)型方法名([形式參數(shù)列表])[throws異常類(lèi)]{方法體 }說(shuō)明:(1)成員方法的訪(fǎng)問(wèn)權(quán)限修飾符和成員變量的修飾符一樣有四種情況:public:此方法可以在任何地方訪(fǎng)問(wèn)。private:此方法只可以由本類(lèi)中的方法訪(fǎng)問(wèn)。friendly:此方法可以由本類(lèi)中的方法和本包中其他類(lèi)中的方法訪(fǎng)問(wèn),為默認(rèn)修飾符。protected:此方法可以由本類(lèi)及其子類(lèi)中的方法訪(fǎng)問(wèn)。成員方法類(lèi)的行為即對(duì)數(shù)據(jù)的操作由它的成員方法實(shí)現(xiàn)。成員方法是43成員方法(2)abstract、static和final分別用于指定所聲明的方法為抽象方法、靜態(tài)方法和終結(jié)方法。靜態(tài)方法又稱(chēng)類(lèi)成員方法或類(lèi)方法,一般用于與類(lèi)有關(guān)的數(shù)據(jù)操作,可以使用類(lèi)名直接調(diào)用。(3)成員方法執(zhí)行數(shù)據(jù)操作功能后都會(huì)向調(diào)用者返回?cái)?shù)據(jù)操作的結(jié)果,返回值類(lèi)型就是用于聲明該成員方法返回值結(jié)果的數(shù)據(jù)類(lèi)型,可以是包括基本數(shù)據(jù)類(lèi)型和引用類(lèi)型在內(nèi)任何合法的類(lèi)型。(4)若成員方法不返回任何值,則返回值類(lèi)型用void標(biāo)記,不能缺省。(5)每個(gè)成員方法都有一個(gè)方法名,緊鄰方法名的是用一對(duì)括號(hào)()括起來(lái)的參數(shù)列表,參數(shù)列表也稱(chēng)為形式參數(shù)表,簡(jiǎn)稱(chēng)形參表。成員方法(2)abstract、static和final分別44成員方法(6)形參表主要用于聲明該成員方法在被調(diào)用時(shí)需要調(diào)用者提供的、與數(shù)據(jù)操作相關(guān)的參數(shù)的個(gè)數(shù)與數(shù)據(jù)類(lèi)型。每個(gè)成員方法允許聲明的形參可以有零到多個(gè),每個(gè)形參由形參數(shù)據(jù)類(lèi)型、空格符和形參名組成,多個(gè)形參之間用逗號(hào)分隔,即便成員方法沒(méi)有形參,括號(hào)()也不能缺省。(7)形參的作用域是局部的,只限于聲明它的成員方法之內(nèi)有效。(8)throws用于聲明該成員方法在執(zhí)行過(guò)程中可能會(huì)拋出的異常類(lèi)型。成員方法(6)形參表主要用于聲明該成員方法在被調(diào)用時(shí)需要調(diào)用45成員方法(9)花括號(hào){}所括起來(lái)的就是方法體,方法體可以包含一到多條語(yǔ)句,用以實(shí)現(xiàn)成員方法所負(fù)責(zé)的數(shù)據(jù)操作功能。若成員方法的返回值類(lèi)型不為void,則在方法體中需要使用return語(yǔ)句返回其數(shù)據(jù)操作的結(jié)果,且結(jié)果類(lèi)型必須與方法聲明的返回值類(lèi)型相一致。方法體也可以是一個(gè)分號(hào)“;”(沒(méi)有{}),表示無(wú)方法體,該方法沒(méi)有實(shí)現(xiàn)。當(dāng)且僅當(dāng)方法的修飾符中有abstract或native時(shí),方法才無(wú)方法體。(10)在方法體內(nèi)可以定義局部變量,其作用域只限于聲明它的方法體內(nèi),且聲明中不能使用public等訪(fǎng)問(wèn)修飾符和static關(guān)鍵字,同時(shí)需遵循“先賦值,后使用”的原則,且在同一個(gè)類(lèi)的不同方法中可以聲明同名的局部變量,包括形式參數(shù)在內(nèi)的所有局部變量都不能在方法體外被訪(fǎng)問(wèn)。成員方法(9)花括號(hào){}所括起來(lái)的就是方法體,方法體可以包含46hello();voideat(){//成員方法,空類(lèi)型,無(wú)參數(shù),方法名為eat計(jì)算機(jī)不能直接執(zhí)行高級(jí)語(yǔ)言程序,必須先翻譯成為機(jī)器語(yǔ)言程序之后才能執(zhí)行。對(duì)象運(yùn)行結(jié)束后或生命周期結(jié)束時(shí),將成為垃圾對(duì)象,但并不意味著就立即會(huì)被回收,僅當(dāng)垃圾回收器空閑或內(nèi)存不足時(shí),才會(huì)回收它們。name=name;靜態(tài)成員變量可以通過(guò)類(lèi)名直接訪(fǎng)問(wèn),也可以由對(duì)象變量來(lái)引用。print();//調(diào)用本類(lèi)中的print方法Class15.其次,結(jié)構(gòu)化的程序設(shè)計(jì)方法仍存在與人的思維不協(xié)調(diào)的地方,所以很難自然、準(zhǔn)確地反映真實(shí)世界。靜態(tài)成員與實(shí)例成員public

class

Example

{

void

idea()

{

System.System.Circle類(lèi)具有類(lèi)型為double的半徑、周長(zhǎng)和面積屬性,并具有返回周長(zhǎng)和面積的方法。通過(guò)this可以引用當(dāng)前對(duì)象的成員變量或者調(diào)用當(dāng)前對(duì)象的成員方法。Rectangleob=newRectangle();System.結(jié)構(gòu)化的程序設(shè)計(jì)把程序的結(jié)構(gòu)規(guī)定為順序、選擇和循環(huán)三種結(jié)構(gòu),限制使用GOTO語(yǔ)句,并采用了自頂向下、逐步求精的分析和設(shè)計(jì)方法,即功能分解法,這種方法將需求空間視為一個(gè)功能模塊,該模塊又進(jìn)行分解,生成多個(gè)小的功能模塊,重復(fù)分解,直至每個(gè)模塊具有明確的功能和適當(dāng)?shù)膹?fù)雜度,而每個(gè)模塊的功能實(shí)現(xiàn)都由上述三種基本結(jié)構(gòu)組成,其目的是為了解決由許多人共同開(kāi)發(fā)大型軟件時(shí),如何高效率地完成高可靠系統(tǒng)的問(wèn)題。[訪(fǎng)問(wèn)權(quán)限修飾符][abstract][static][final]返回值類(lèi)型方法名([形式參數(shù)列表])[throws異常類(lèi)]機(jī)器語(yǔ)言:是計(jì)算機(jī)能夠直接執(zhí)行的二進(jìn)制指令代碼,每條指令都用0和1組成的序列串表示,這些指令的集合就是指令系統(tǒng)。面向?qū)ο蟮某绦蛟O(shè)計(jì)中程序是“對(duì)象+消息”。成員方法例如下面的代碼聲明了一個(gè)名為People的類(lèi),其中定義了兩個(gè)成員方法。classPeople{ intage;//成員變量 Stringname;//成員變量 doubleheight;//成員變量 voidlaugh(){//成員方法,空類(lèi)型,無(wú)參數(shù),方法名為laugh System.out.println("哈哈");//方法體}voideat(){//成員方法,空類(lèi)型,無(wú)參數(shù),方法名為eatSystem.out.println("人要吃飯");//方法體}}//類(lèi)體結(jié)束hello();成員方法例如下面的代碼聲明了一個(gè)名為Peop47成員方法如果方法有返回值類(lèi)型,則方法體中必須有return語(yǔ)句.如果想讓方法執(zhí)行后得到值a,即返回值為a,那么在方法中要使用returna語(yǔ)句。return有“返還”之意,它把表達(dá)式的值返回到調(diào)用之處。例如:publicclassClass3{doublef(intx){ return2.5+x;}publicstaticvoidmain(String[]args){Class3aaa=newClass3();doubley=aaa.f(3);System.out.println(y);System.out.println(aaa.f(2)); }}成員方法如果方法有返回值類(lèi)型,則方法體中必須有return語(yǔ)48return語(yǔ)句return語(yǔ)句用在方法中,每一個(gè)方法可以有一個(gè)返回值,也可以沒(méi)有,沒(méi)有即返回returnvoid。當(dāng)程序執(zhí)行到該語(yǔ)句時(shí),終止當(dāng)前方法的執(zhí)行,返回到調(diào)用該方法語(yǔ)句的后面一條語(yǔ)句。return語(yǔ)句可以從一個(gè)方法返回,并把控制權(quán)交給調(diào)用它的語(yǔ)句,return語(yǔ)句通常被放在方法的最后,用于退出當(dāng)前方法并返回一個(gè)值。它的語(yǔ)法格式為:return[表達(dá)式];表達(dá)式是可選參數(shù),表示要返回的值。它的數(shù)據(jù)類(lèi)型必須同方法聲明中的返回值類(lèi)型一致。如果不一致時(shí),表達(dá)式的類(lèi)型強(qiáng)制轉(zhuǎn)換為方法返回值的類(lèi)型。return語(yǔ)句return語(yǔ)句用在方法中,每一個(gè)方法可49return語(yǔ)句例如:編寫(xiě)返回a和b兩數(shù)相加之和的方法可以使用如下代碼:publicintset(inta,intb){returnsum=a+b;}計(jì)算表達(dá)式的值,然后將該值返回到調(diào)用該方法的語(yǔ)句中return語(yǔ)句例如:編寫(xiě)返回a和b兩數(shù)相加之和的方法可以50return語(yǔ)句如果方法沒(méi)有返回值,可以省略return關(guān)鍵字的表達(dá)式,使方法結(jié)束。代碼如下:publicvoidset(inta,intb){sum=a+b;return;//也可以省略return語(yǔ)句,因?yàn)榉椒ǖ慕Y(jié)束標(biāo)記大花括號(hào)也具有該語(yǔ)句的功能,}這種格式一般用于if語(yǔ)句或者switch語(yǔ)句等選擇結(jié)構(gòu)。return語(yǔ)句如果方法沒(méi)有返回值,可以省略return關(guān)鍵51return語(yǔ)句return語(yǔ)句52類(lèi)課堂練習(xí)定義滿(mǎn)足下列條件的Pen類(lèi):Pen類(lèi)擁有的屬性有:筆尖的粗細(xì)、墨水量、墨水顏色、有無(wú)筆帽、長(zhǎng)度及半徑。Pen類(lèi)擁有的方法:畫(huà)圖、寫(xiě)字、更換墨水類(lèi)課堂練習(xí)定義滿(mǎn)足下列條件的Pen類(lèi):53

面向?qū)ο蟪绦蛟O(shè)計(jì)方法

類(lèi)的定義構(gòu)造方法對(duì)象的創(chuàng)建和使用this關(guān)鍵字類(lèi)的封裝性靜態(tài)成員與實(shí)例成員方法調(diào)用與參數(shù)傳遞匿名對(duì)象內(nèi)容提要

面向?qū)ο蟪绦蛟O(shè)計(jì)方法內(nèi)容提要54構(gòu)造方法構(gòu)造方法是類(lèi)用來(lái)創(chuàng)建對(duì)象、初始化類(lèi)的屬性的一種特殊方法,它本身不屬于類(lèi)的成員方法。每當(dāng)由類(lèi)創(chuàng)建對(duì)象時(shí)都要調(diào)用該類(lèi)特定的構(gòu)造方法,在Java中,每個(gè)類(lèi)都至少有一個(gè)構(gòu)造方法。構(gòu)造方法可以確保用戶(hù)正確地構(gòu)造類(lèi)的對(duì)象,同時(shí),構(gòu)造方法也會(huì)對(duì)對(duì)象作初始化工作。構(gòu)造方法的聲明格式如下: [<修飾符>]<類(lèi)名稱(chēng)>([<參數(shù)列表>]) { 初始化的程序代碼塊 }可以使用參數(shù)值作為變量的初值,也可以直接給變量賦具體的數(shù)值。構(gòu)造方法構(gòu)造方法是類(lèi)用來(lái)創(chuàng)建對(duì)象、初始化類(lèi)的屬性的一種特殊方55構(gòu)造方法說(shuō)明:(1)一個(gè)類(lèi)的構(gòu)造方法可以有多個(gè),它們都具有相同的方法名,即類(lèi)名;(2)與類(lèi)的成員方法不同,構(gòu)造方法用于創(chuàng)建類(lèi)的對(duì)象并對(duì)對(duì)象的成員變量進(jìn)行初始化。(3)構(gòu)造方法沒(méi)有返回值類(lèi)型,但是也不能有void關(guān)鍵字,且只能通過(guò)new運(yùn)算符調(diào)用。(4)修飾符一般采用public(或者沒(méi)有),以便于在其他位置根據(jù)需要定義并實(shí)例化該類(lèi)的對(duì)象。修飾符也可以使用private,private類(lèi)型的構(gòu)造方法表明該類(lèi)類(lèi)不能被其他類(lèi)實(shí)例化,通常用于只含有靜態(tài)成員的類(lèi)。(5)當(dāng)一個(gè)類(lèi)沒(méi)有顯式聲明其構(gòu)造方法時(shí),Java編譯器會(huì)自動(dòng)為該類(lèi)生成一個(gè)默認(rèn)的、無(wú)參數(shù)的構(gòu)造方法,且實(shí)例化后對(duì)象的成員變量在沒(méi)有特別賦值的情況下自動(dòng)獲得其所聲明類(lèi)型的默認(rèn)值。構(gòu)造方法說(shuō)明:56這種模式更近似于現(xiàn)實(shí)世界,在這里,所有的對(duì)象都同時(shí)擁有屬性以及與這些屬性相關(guān)的行為。所以,我們?cè)趯?shí)際編程的時(shí)候有時(shí)候需要在一個(gè)構(gòu)造方法中調(diào)用另外一個(gè)構(gòu)造方法,但是,在使用this關(guān)鍵字調(diào)用其他構(gòu)造方法時(shí),this()只能放在構(gòu)造方法的首行,為的是能夠?yàn)轭?lèi)中的屬性初始化,而且至少有一個(gè)構(gòu)造方法是不用this調(diào)用的,否則程序會(huì)出錯(cuò)。類(lèi)的訪(fǎng)問(wèn)權(quán)限有public和缺省兩種。程序設(shè)計(jì)語(yǔ)言的設(shè)計(jì)目的主要是為了支持某種程序設(shè)計(jì)方法。對(duì)象的創(chuàng)建和使用顯然,用第一種方法考慮周全,結(jié)構(gòu)清晰,層次分明,作者容易寫(xiě),讀者容易看。創(chuàng)建一個(gè)對(duì)象后,在程序中就可以引用對(duì)象中的成員變量,調(diào)用對(duì)象的成員方法(即使用對(duì)象),語(yǔ)法格式如下:如果不一致時(shí),表達(dá)式的類(lèi)型強(qiáng)制轉(zhuǎn)換為方法返回值的類(lèi)型。publicStudent(Stringname){//一個(gè)參數(shù)的構(gòu)造方法結(jié)構(gòu)化的程序設(shè)計(jì)方法:如果發(fā)現(xiàn)某一部分中有一段內(nèi)容不妥,需要修改

只需找出該部分,修改有關(guān)段落即可,與其他部分無(wú)關(guān)。classPeople{ //類(lèi)頭同一個(gè)類(lèi)的不同對(duì)象可以互相訪(fǎng)問(wèn)對(duì)方的private實(shí)例變量或者調(diào)用對(duì)方的private實(shí)例方法,這是因?yàn)樵L(fǎng)問(wèn)控制符是在類(lèi)級(jí)別上,而不是對(duì)象級(jí)別上。聲明類(lèi)是公有的,可以被任何類(lèi)使用或繼承?!纠慷x一個(gè)學(xué)生類(lèi)Student其屬性包含學(xué)號(hào)、姓名、性別、出生日期、電子郵箱、手機(jī)號(hào)碼、QQ號(hào)碼、通訊地址等。第一種做法,按照最原始的方式:classStudent{提升程序的開(kāi)發(fā)與運(yùn)行效率如果使用實(shí)例成員變量,那么每個(gè)中國(guó)人的實(shí)例對(duì)象都會(huì)分配一個(gè)country屬性,有多少個(gè)中國(guó)人的實(shí)例對(duì)象,就會(huì)創(chuàng)建多少份country屬性的內(nèi)存空間。例如:張三=newPeople()構(gòu)造方法的分類(lèi)1.不帶參數(shù)的構(gòu)造方法,又分為:缺省的構(gòu)造方法顯式的不帶參數(shù)的構(gòu)造方法2.帶參數(shù)的構(gòu)造方法

這種模式更近似于現(xiàn)實(shí)世界,在這里,所有的對(duì)象都同時(shí)擁有屬性以57構(gòu)造方法(1)缺省的構(gòu)造方法

如果類(lèi)的定義沒(méi)有編寫(xiě)構(gòu)造方法,Java語(yǔ)言會(huì)自動(dòng)為用戶(hù)提供。這個(gè)由Java自動(dòng)提供的構(gòu)造方法就是所謂的缺省構(gòu)造方法。缺省的構(gòu)造方法確保每個(gè)Java類(lèi)都至少有一個(gè)構(gòu)造方法,該方法應(yīng)符合方法的定義。

但如果自定義了構(gòu)造方法,則系統(tǒng)不再提供無(wú)參構(gòu)造方法。如果需要無(wú)參的構(gòu)造方法,則需要顯式定義。例如在下例的類(lèi)EmpInfo中,我們沒(méi)有定義構(gòu)造方法,則Java自動(dòng)提供了一個(gè)缺省的構(gòu)造方法,如下:publicEmpInfo(){}//缺省的構(gòu)造方法構(gòu)造方法(1)缺省的構(gòu)造方法58缺省的構(gòu)造方法EmpInfo.javapublicclassEmpInfo{Stringname;//雇員的姓名Stringdesignation;//雇員的職務(wù)Stringdepartment;//雇員的部門(mén)voidprint(){//成員方法System.out.println(name+"is"+designation+"at"+department);}publicstaticvoidmain(Stringargv[]){EmpInfoemployee=newEmpInfo();//創(chuàng)建對(duì)象并實(shí)例化="RobertJavaman";//給成員變量賦值employee.designation="Manager";//給成員變量賦值employee.department="CoffeeShop";//給成員變量賦值employee.print();//調(diào)用方法print()}}運(yùn)行結(jié)果如下:RobertJavamanisManageratCoffeeShop調(diào)用缺省的構(gòu)造方法缺省的構(gòu)造方法EmpInfo.java調(diào)用缺省的構(gòu)造方法59構(gòu)造方法(2)顯式的不帶參數(shù)的構(gòu)造方法。例如,可以為People類(lèi)增加一個(gè)如下所示的構(gòu)造方法ClassPeople{stringname;intage;floatheight;floatweight;publicPeople()//無(wú)參數(shù){name="沈昕";age=26;height=1.62;weight=55.5;}}構(gòu)造方法(2)顯式的不帶參數(shù)的構(gòu)造方法。例如,可以為Peop60構(gòu)造方法(3)帶參數(shù)的構(gòu)造方法帶有參數(shù)的構(gòu)造方法能夠?qū)崿F(xiàn)這樣的功能:當(dāng)構(gòu)造一個(gè)新對(duì)象時(shí),類(lèi)構(gòu)造方法可以按需要將一些指定的參數(shù)傳遞給對(duì)象的變量。例如,如果希望在創(chuàng)建對(duì)象時(shí),其實(shí)例變量具有不同的初值,可以通過(guò)傳遞參數(shù)并將參數(shù)值賦給實(shí)例變量的方法來(lái)實(shí)現(xiàn)。構(gòu)造方法的參數(shù)要與實(shí)例變量一一對(duì)應(yīng),例如:People類(lèi)的另一種構(gòu)造方法為:帶參數(shù)的構(gòu)造方法構(gòu)造方法(3)帶參數(shù)的構(gòu)造方法61帶參數(shù)的構(gòu)造方法ClassPeople{Stringname;intage;floatheight;floatweight;publicPeople(StringinitName,intinitAge,doubleinitHeight,doubleinitWeight){name=initName;age=initAge;height=initHeight;weight=initWeight;}}帶參數(shù)的構(gòu)造方法ClassPeople{62一個(gè)類(lèi)可以有多個(gè)構(gòu)造方法(構(gòu)造方法的重載)ClassPeople{Stringname;intage;floatheight;floatweight;publicPeople()//無(wú)參數(shù){name="沈昕";age=26;height=1.62;weight=55.5;}publicPeople(StringinitName,intinitAge,doubleinitHeight,doubleinitWeight){name=initName;age=initAge;height=initHeight;weight=initWeight;}}一個(gè)類(lèi)可以有多個(gè)構(gòu)造方法(構(gòu)造方法的重載)ClassPeo63構(gòu)造方法構(gòu)造方法不能像一般的成員方法那樣被直接調(diào)用,它是在構(gòu)造類(lèi)的對(duì)象的時(shí)候被new關(guān)鍵字調(diào)用的。當(dāng)我們構(gòu)造一個(gè)類(lèi)的對(duì)象的時(shí)候,編譯器主要完成以下三件事情:(1)為對(duì)象分配內(nèi)存空間;(2)初始化對(duì)象中的實(shí)例變量的值,初始值可以是缺省值,或者變量按指定的值初始化;(3)調(diào)用對(duì)象的構(gòu)造方法。一個(gè)類(lèi)的構(gòu)造方法可以有多個(gè),它們都具有相同的方法名,即類(lèi)名。編譯器根據(jù)參數(shù)的類(lèi)型來(lái)決定調(diào)用哪個(gè)構(gòu)造方法。這就是構(gòu)造方法的多態(tài)。構(gòu)造方法構(gòu)造方法不能像一般的成員方法那樣被直接調(diào)用,它是在構(gòu)64

面向?qū)ο蟪绦蛟O(shè)計(jì)方法

類(lèi)的定義構(gòu)造方法對(duì)象的創(chuàng)建和使用this關(guān)鍵字類(lèi)的封裝性靜態(tài)成員與實(shí)例成員方法調(diào)用與參數(shù)傳遞匿名對(duì)象內(nèi)容提要

面向?qū)ο蟪绦蛟O(shè)計(jì)方法內(nèi)容提要65Java中的對(duì)象

對(duì)象是類(lèi)的實(shí)例,所以一個(gè)對(duì)象必定屬于一個(gè)已知的類(lèi)。Java語(yǔ)言中,一個(gè)對(duì)象的生命周期經(jīng)歷:對(duì)象的創(chuàng)建、對(duì)象的使用、對(duì)象的銷(xiāo)毀三個(gè)階段。對(duì)象被創(chuàng)建后將獲得包括內(nèi)存在內(nèi)的所需資源;而對(duì)象銷(xiāo)毀后,其所占的資源將被系統(tǒng)自動(dòng)回收。Java語(yǔ)言具有資源回收機(jī)制,能跟蹤存儲(chǔ)單元的使用情況,自動(dòng)回收不再被使用的資源。Java中的對(duì)象對(duì)象是類(lèi)的實(shí)例,所以一個(gè)對(duì)象必定屬于一個(gè)已66對(duì)象的創(chuàng)建

對(duì)象的創(chuàng)建:創(chuàng)建一個(gè)對(duì)象包括兩個(gè)步驟:聲明對(duì)象和為對(duì)象分配內(nèi)存。1)對(duì)象的聲明一般格式為:類(lèi)名對(duì)象名如:People張三這里people是前面定義的一個(gè)類(lèi)的名字,張三是聲明對(duì)象的名字。但此時(shí)對(duì)象“張三”的內(nèi)存中沒(méi)有任何數(shù)據(jù),即“張三”還是一個(gè)空對(duì)象,不能使用。要是用這個(gè)對(duì)象還必須為這個(gè)對(duì)象分配內(nèi)存,也叫做為對(duì)象分配實(shí)體。

對(duì)象的創(chuàng)建對(duì)象的創(chuàng)建:創(chuàng)建一個(gè)對(duì)象包括兩個(gè)步驟:聲明對(duì)象67對(duì)象的創(chuàng)建2)為對(duì)象分配內(nèi)存:為對(duì)象分配內(nèi)存,即使用new運(yùn)算符和類(lèi)的構(gòu)造方法實(shí)例化某個(gè)對(duì)象。如果類(lèi)中沒(méi)有構(gòu)造方法,系統(tǒng)會(huì)自動(dòng)調(diào)用默認(rèn)的構(gòu)造方法(沒(méi)有參數(shù),名字遵循普通構(gòu)造方法的要求:和類(lèi)名相同),格式為:

對(duì)象名=new構(gòu)造方法名([實(shí)參列表]);//實(shí)例化對(duì)象

例如:張三=newPeople()也可以把以上兩個(gè)步驟合在一起,格式為:類(lèi)名對(duì)象名=new構(gòu)造方法名([實(shí)參列表]);

例如:People張三=newPeople()另外,因?yàn)閷?duì)象也是一種變量,因此它可作為數(shù)組元素、類(lèi)的成員、也可以出現(xiàn)在成員方法的參數(shù)表和方法體中。new可以實(shí)例化類(lèi)的多個(gè)不同的對(duì)象,分配不同的內(nèi)存。因此,這些對(duì)象之間的狀態(tài)相互獨(dú)立。對(duì)象的創(chuàng)建2)為對(duì)象分配內(nèi)存:為對(duì)象分配內(nèi)存,即使用new68對(duì)象的使用

創(chuàng)建一個(gè)對(duì)象后,在程序中就可以引用對(duì)象中的成員變量,調(diào)用對(duì)象的成員方法(即使用對(duì)象),語(yǔ)法格式如下: 對(duì)象名.成員變量 對(duì)象名.成員方法([實(shí)參列表])例如:aday.year=2009; aday.setDate(2009,10,28);說(shuō)明:(1)對(duì)象名與成員變量或方法之間使用點(diǎn)運(yùn)算符“.”分隔。(2)方法調(diào)用時(shí)給出的參數(shù)稱(chēng)為實(shí)際參數(shù),簡(jiǎn)稱(chēng)實(shí)參。實(shí)參可以是常量、變量、表達(dá)式或方法的調(diào)用,實(shí)參的個(gè)數(shù)與數(shù)據(jù)類(lèi)型及排列次序一定要與類(lèi)定義中該方法聲明的形參保持一致,且多個(gè)實(shí)參之間用逗號(hào)分隔。對(duì)象的使用創(chuàng)建一個(gè)對(duì)象后,在程序中就可以引用對(duì)象中的成員變69對(duì)象的使用

(2)當(dāng)調(diào)用方法時(shí),系統(tǒng)按照實(shí)參與形參一一對(duì)應(yīng)的關(guān)系將實(shí)參的值或引用傳遞給對(duì)應(yīng)的形參。需要特別注意的是,若實(shí)參為引用類(lèi)型的數(shù)據(jù),其值不能為null。方法后的圓括號(hào)()是必需的,即便該方法沒(méi)有聲明形式參數(shù)也不能缺省。

對(duì)象的使用(2)當(dāng)調(diào)用方法時(shí),系統(tǒng)按照實(shí)參與形參一一對(duì)應(yīng)的70對(duì)象創(chuàng)建和使用:例1classPeople{ intage; Stringname; doubleheight; People(){//構(gòu)造方法 name="張婷"; age=25; height=160.0; } voidlaugh(){//類(lèi)的一個(gè)成員方法 System.out.println("Haaha..."); } publicstaticvoidmain(String[]args){ System.out.println("main方法執(zhí)行"); Peoplep=newPeople(); p.laugh();System.out.println("="+);System.out.println("p.age="+p.age);System.out.println("p.height="+p.height); }}對(duì)象創(chuàng)建和使用:例1classPeople{71對(duì)象創(chuàng)建和使用:例2publicclassClass27{inta;publicClass27(){ a=10;}publicClass27(intq){ a=q;}publicstaticvoidmain(String[]args){Class27ob1=newClass27();Class27ob2=newClass27(20);Class27ob3=newClass27(30);

System.out.println(ob1.a);System.out.println(ob2.a);System.out.println(ob3.a);

}}兩個(gè)構(gòu)造方法對(duì)象創(chuàng)建和使用:例2publicclassClass2772對(duì)象創(chuàng)建和使用:例3classMan{intheight;intage;}publicclassClass1{publicstaticvoidmain(String[]args){Manman1;man1=newMan();man1.height=180;man1.age=20;System.out.println(man1.height);//使用對(duì)象的成員變量System.out.println(man1.age); }}在本源程序中,有兩個(gè)類(lèi),其中包含主方法的類(lèi)為主類(lèi),文件名與主類(lèi)名相同對(duì)象創(chuàng)建和使用:例3classMan{在本源程序中,有兩個(gè)73對(duì)象的銷(xiāo)毀java不需要顯式地銷(xiāo)毀對(duì)象,java有一個(gè)垃圾回收器(garbagecollector,簡(jiǎn)稱(chēng)GC),在程序運(yùn)行時(shí),垃圾回收器會(huì)自動(dòng)創(chuàng)建一個(gè)線(xiàn)程運(yùn)行并監(jiān)控需要清理的對(duì)象并自動(dòng)清理.這也是java比C++安全性和簡(jiǎn)便性更好的原因之一。Java中垃圾回收器自動(dòng)地定期掃描Java對(duì)象的動(dòng)態(tài)內(nèi)存,并將所有的引用對(duì)象加上標(biāo)記,在對(duì)象運(yùn)行結(jié)束后(無(wú)引用變量對(duì)該對(duì)象進(jìn)行關(guān)聯(lián)),清除其標(biāo)記,并將所有無(wú)標(biāo)記的對(duì)象作為垃圾進(jìn)行回收,釋放垃圾對(duì)象所占的內(nèi)存空間。對(duì)象運(yùn)行結(jié)束后或生命周期結(jié)束時(shí),將成為垃圾對(duì)象,但并不意味著就立即會(huì)被回收,僅當(dāng)垃圾回收器空閑或內(nèi)存不足時(shí),才會(huì)回收它們。對(duì)象的銷(xiāo)毀java不需要顯式地銷(xiāo)毀對(duì)象,java有一個(gè)垃圾回74對(duì)象的銷(xiāo)毀垃圾回收器也有自己的缺點(diǎn),就是它不會(huì)實(shí)時(shí)的調(diào)用自己來(lái)回收已經(jīng)過(guò)期的對(duì)象,因?yàn)樗且粋€(gè)優(yōu)先級(jí)很低的進(jìn)程來(lái)控制的,所以只有當(dāng)系統(tǒng)內(nèi)存比較緊張的情況下才會(huì)做銷(xiāo)毀對(duì)象,釋放內(nèi)存的工作,而且它也有個(gè)局限性,就是只會(huì)釋放new出來(lái)的對(duì)象,對(duì)于靜態(tài)的對(duì)象變量或者其他方式創(chuàng)建的對(duì)象它是不做處理的,所以O(shè)bject里有個(gè)finalize方法提供給子類(lèi)來(lái)實(shí)現(xiàn),就是為了能在GC銷(xiāo)毀對(duì)象對(duì)做一些清理型的工作,比如關(guān)閉流之類(lèi)的,我們可以在里面寫(xiě)上對(duì)象銷(xiāo)毀后需要關(guān)聯(lián)的操作。對(duì)象的銷(xiāo)毀垃圾回收器也有自己的缺點(diǎn),就是它不會(huì)實(shí)時(shí)的調(diào)用自己75對(duì)象的創(chuàng)建和使用作業(yè)1.有一個(gè)類(lèi)Class1擁有以下成員變量:inta;doubleb;Stringc;請(qǐng)編寫(xiě)構(gòu)造方法(帶參數(shù))初始化成員變量,創(chuàng)建類(lèi)Class1的對(duì)象ob,輸出對(duì)象ob的三個(gè)成員變量值。2.定義一個(gè)滿(mǎn)足下面要求的矩形類(lèi)Rectangle,Rectangle類(lèi)具有長(zhǎng)度(length)和寬度(width)屬性,并提供計(jì)算矩形面積的方法area()。類(lèi)中需要構(gòu)造方法(帶參數(shù))對(duì)成員變量進(jìn)行初始化,最后定義主類(lèi)TestRectangle,創(chuàng)建Rectangle類(lèi)的對(duì)象,調(diào)用對(duì)象的area()方法輸出矩形面積。對(duì)象的創(chuàng)建和使用作業(yè)1.有一個(gè)類(lèi)Class1擁有以下成員變量76publicPeople()//無(wú)參數(shù)println("方法調(diào)用前數(shù)組a的值:");這不叫靜態(tài)方法調(diào)用非靜態(tài)方法,這調(diào)用的是實(shí)例化方法,就是先new一個(gè)對(duì)象,再用這個(gè)對(duì)象去調(diào)用對(duì)象中的實(shí)例化方法,到哪里這樣調(diào)用都沒(méi)問(wèn)題(只要方法是public的)。println(aaa.這里可能產(chǎn)生一個(gè)問(wèn)題:同一個(gè)類(lèi)中不同方法之間相互調(diào)用時(shí),不就可以直接調(diào)用嗎?這里需要指出,同一個(gè)類(lèi)的一個(gè)方法調(diào)用另外一個(gè)方法時(shí),如果被調(diào)用的方法是實(shí)例方法,則默認(rèn)使用this作為調(diào)用者,如果被調(diào)用的方法是靜態(tài)方法,則默認(rèn)使用類(lèi)作為調(diào)用者。需要調(diào)用某個(gè)靜態(tài)方法時(shí),可以使用其所屬的類(lèi)的名稱(chēng)直接調(diào)用,也可以用類(lèi)的某個(gè)具體的對(duì)象名調(diào)用,其格式為:求屬性x和y最大值,并返回結(jié)果的方法;main方法就是靜態(tài)方法,javacCommandParameter.類(lèi)聲明之后的一對(duì)大括號(hào)“{”、“}”以及它們之間的內(nèi)容稱(chēng)做類(lèi)體。成員方法對(duì)成員變量的操作主要體現(xiàn)在以下兩個(gè)方面:實(shí)例化一個(gè)對(duì)象,調(diào)用對(duì)象的這兩個(gè)方法,輸出結(jié)果。這一程序設(shè)計(jì)方法的代表語(yǔ)言是Pascal、C等。privatedoubleheight;publicclassThisExample4{name=name;如果類(lèi)的定義沒(méi)有編寫(xiě)構(gòu)造方法,Java語(yǔ)言會(huì)自動(dòng)為用戶(hù)提供。setX(-100);Testobject=newTest();publicClass27(){對(duì)象的創(chuàng)建和使用作業(yè)3.創(chuàng)建簡(jiǎn)單的銀行帳戶(hù)類(lèi),包括開(kāi)戶(hù)人、帳號(hào)和存款余額三個(gè)屬性,以及查詢(xún)余額,存款,取款等方法。創(chuàng)建兩個(gè)帳戶(hù)驗(yàn)證類(lèi)的設(shè)計(jì)。4.定義一個(gè)類(lèi),包含兩個(gè)成員方法,一個(gè)為intsum(inta,intb),求兩個(gè)數(shù)的和,另外一個(gè)為intaverage(inta,intb,intc),求三個(gè)數(shù)的平均值。實(shí)例化一個(gè)對(duì)象,調(diào)用對(duì)象的這兩個(gè)方法,輸出結(jié)果。publicPeople()//無(wú)參數(shù)對(duì)象的創(chuàng)建和使用作77對(duì)象的創(chuàng)建和使用作業(yè)5.定義一個(gè)類(lèi),該類(lèi)具有x和y兩個(gè)屬性。定義構(gòu)造方法初始化這兩個(gè)屬性。類(lèi)中還定義以下成員方法:求屬性x和y的和,并返回結(jié)果的方法;求屬性x和y的差,并返回結(jié)果的方法;求屬性x和y的積,并返回結(jié)果的方法;求屬性x和y的商,并返回結(jié)果的方法;求屬性x/y的余數(shù),并返回結(jié)果的方法;求屬性x和y最大值,并返回結(jié)果的方法; 求屬性x和y最小值,并返回結(jié)果的方法;編寫(xiě)主類(lèi),測(cè)試上面定義的類(lèi),使用類(lèi)中定義的各個(gè)方法并將其結(jié)果輸出。

對(duì)象的創(chuàng)建和使用作業(yè)5.定義一個(gè)類(lèi),該類(lèi)具有x和y兩個(gè)屬性78對(duì)象的創(chuàng)建和使用作業(yè)6.定義一個(gè)類(lèi)A,類(lèi)中有一個(gè)private類(lèi)型的整型變量data,一個(gè)private類(lèi)型的字符串對(duì)象str。類(lèi)中有兩個(gè)構(gòu)造方法,一個(gè)不含參數(shù),初始化data和str為其默認(rèn)值;另一個(gè)有兩個(gè)參數(shù),分別用來(lái)初始化data和str。類(lèi)中還定義了三個(gè)方法,方法的原型與功能分別如下:publicvoidadd(intk,Strings)//該方法把data和str的值分別加上k和s;publicvoidclearA()//該方法把data和str的值分別清除為其默認(rèn)值;publicStringtoString()//該方法把data和str的值轉(zhuǎn)變?yōu)橐粋€(gè)字符串返回。returnString.ValueOf(data)編寫(xiě)應(yīng)用程序測(cè)試類(lèi)TestA,使用類(lèi)A中的構(gòu)造方法創(chuàng)建對(duì)象,分別使用三個(gè)方法并將結(jié)果輸出。對(duì)象的創(chuàng)建和使用作業(yè)6.定義一個(gè)類(lèi)A,類(lèi)中有一個(gè)pri79對(duì)象的創(chuàng)建和使用作業(yè)7.三角形、圓形和梯形的類(lèi)封裝:讓學(xué)生學(xué)習(xí)使用類(lèi)來(lái)封裝對(duì)象的屬性和行為。編寫(xiě)一個(gè)java程序,該程序中有3個(gè)類(lèi):Trangle、Lader、Circle,分別用來(lái)刻畫(huà)三角形、梯形和圓形。具體要求如下:Trangle類(lèi)具有類(lèi)型為double的三個(gè)邊以及周長(zhǎng)、面積屬性,并且具有返回周長(zhǎng)、面積以及修改三個(gè)邊的方法,另外Trangle類(lèi)還具有一個(gè)boolean類(lèi)型的屬性,該屬性用來(lái)判斷三個(gè)數(shù)是否能構(gòu)成一個(gè)三角形。Lader類(lèi)具有類(lèi)型為double的上底、下底、高和面積屬性,并具有返回面積的方法。Circle類(lèi)具有類(lèi)型為double的半徑、周長(zhǎng)和面積屬性,并具有返回周長(zhǎng)和面積的方法。創(chuàng)建3個(gè)類(lèi)的對(duì)象,分別求三角形面積和周長(zhǎng),梯形面積以及圓形的面積和周長(zhǎng)。對(duì)象的創(chuàng)建和使用作業(yè)7.三角形、圓形和梯形的類(lèi)封裝:讓學(xué)生80三角形面積公式已知三角形三邊為a,b,c,,p=(a+b+c)/2則三角形面積為:s=Java中的開(kāi)平方:Math.sqrt(p*(p-a)*(p-b)*(p-c))三角形面積公式已知三角形三邊為a,b,c,,p=(a+b+81

面向?qū)ο蟪绦蛟O(shè)計(jì)方法

類(lèi)的定義構(gòu)造方法對(duì)象的創(chuàng)建和使用this關(guān)鍵字類(lèi)的封裝性靜態(tài)成員與實(shí)例成員方法調(diào)用與參數(shù)傳遞匿名對(duì)象內(nèi)容提要

面向?qū)ο蟪绦蛟O(shè)計(jì)方法內(nèi)容提要82this關(guān)鍵字Java語(yǔ)言提供了豐富的類(lèi)(Class)、接口(Interface)以及相應(yīng)的方法(Method)。使用這些類(lèi)或接口,用戶(hù)可以定義自己的類(lèi)或子類(lèi),并以這些類(lèi)為模板創(chuàng)建對(duì)象(Object)。在Java語(yǔ)言中,當(dāng)創(chuàng)建一個(gè)對(duì)象后,Java虛擬機(jī)就會(huì)為其分配一個(gè)指向?qū)ο蟊旧淼闹羔?,這個(gè)指針就是“this”。關(guān)鍵字this與對(duì)象密切相關(guān),在Java程序設(shè)計(jì)中經(jīng)常會(huì)見(jiàn)到this的使用。通過(guò)this可以引用當(dāng)前對(duì)象的成員變量或者調(diào)用當(dāng)前對(duì)象的成員方法。this主要有以下幾種使用方法:this.成員變量this.成員方法([參數(shù)列表])使用this調(diào)用構(gòu)造方法使用this引用當(dāng)前對(duì)象this關(guān)鍵字主要用于類(lèi)的非靜態(tài)成員方法(即實(shí)例方法)與構(gòu)造方法中,而在靜態(tài)方法(即類(lèi)方法)中是不允許使用this關(guān)鍵字的。this關(guān)鍵字Java語(yǔ)言提供了豐富的類(lèi)(Class)、接口83this.成員變量

一個(gè)對(duì)象中的方法一般可以直接訪(fǎng)問(wèn)同一對(duì)象的成員變量。但是,有時(shí)候方法體內(nèi)部定義的局部變量和成員變量名字相同,還有時(shí)方法的入口參數(shù)和對(duì)象的成員變量名字相同,那么就需要將三者區(qū)別清楚。因此,專(zhuān)門(mén)用this來(lái)指明當(dāng)前對(duì)象的成員變量。語(yǔ)法格式為:this.成員變量說(shuō)明:(1)由于this用于表示指向當(dāng)前對(duì)象的引用,所以它不能在類(lèi)成員方法(靜態(tài)方法)中使用,只能出現(xiàn)在實(shí)例成員方法中。(2)在類(lèi)的方法體中,如出現(xiàn)形參或局部變量與成員變量同名的情況,系統(tǒng)默認(rèn)的是形參或局部變量,若需要訪(fǎng)問(wèn)成員變量,則只能使用this來(lái)引用。(3)在沒(méi)有以上同名情況的時(shí)候,對(duì)于當(dāng)前對(duì)象的成員變量和成員方法的訪(fǎng)問(wèn)可以省略this引用。this.成員變量一個(gè)對(duì)象中的方法一般可以直接訪(fǎng)問(wèn)同一84關(guān)鍵字this最常見(jiàn)的應(yīng)用是在類(lèi)的構(gòu)造方法中解決構(gòu)造方法的形式參數(shù)與成員變量同名的問(wèn)題。例如,下面一段程序:publicclassPeople{privateStringname;privateintage;privatechargender;privatedoubleheight;privatedoubletweight;publicPeople(Stringname,intage,chargender,doubleheight,doubleweight){name=name;age=age;gender=gender;height=height;weight=weight;}……}this關(guān)鍵字:構(gòu)造方法的形式參數(shù)與成員變量重名關(guān)鍵字this最常見(jiàn)的應(yīng)用是在類(lèi)的構(gòu)造方法中解決構(gòu)造方法的形85在上面的一段程序中,共有name、age、gender、height和weight5個(gè)實(shí)例變量。在構(gòu)造方法中的5個(gè)參數(shù)的變量名稱(chēng)與實(shí)例成員變量的名稱(chēng)一一對(duì)應(yīng)相同。在參數(shù)名或者局部變量名與實(shí)例成員變量同名的時(shí)候,由于參數(shù)變量和局部變量的優(yōu)先級(jí)高,所以在方法體中參數(shù)名或者局部變量名將隱藏同名的實(shí)例成員變量。這種情況在Java語(yǔ)言中是不被允許的。如果想使實(shí)例變量和方法的參數(shù)或方法本身定義的局部變量同名的話(huà),就需要用一種方法使實(shí)例成員變量與和其同名的方法參數(shù)或局部變量區(qū)分開(kāi)來(lái),這就要使用到this關(guān)鍵字。下面的一段程序改寫(xiě)了上面的程序,使People類(lèi)的構(gòu)造方法可以合法地使用與實(shí)例變量名稱(chēng)相同的參數(shù)。this關(guān)鍵字:構(gòu)造方法的形式參數(shù)與成員變量重名在上面的一段程序中,共有name、age、gender、he86publicclassPeople{privateStringname;privateintage;privatechargender;privatedoubleheight;privatedoubletweight;publicPeople(Stringname,intage,chargender,doubleheight,doubleweight){=name;this.age=age;this.gender=gender;this.height=height;this.weight=weight;}……}其中,使用this調(diào)用的都是實(shí)例變量,例如:,而name是參數(shù)變量。由上面的實(shí)例,我們可以看出,this在方法體中用來(lái)指向調(diào)用當(dāng)前正在執(zhí)行方法的對(duì)象。當(dāng)然我們也可以通過(guò)使用與實(shí)例變量名不同的參數(shù)名或者局域變量名來(lái)避免這個(gè)問(wèn)題。this關(guān)鍵字:構(gòu)造方法的形式參數(shù)與成員變量重名publicclassPeople其中,使用this調(diào)用87publicclassClass27{inta;publicClass27(){

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論