第3章 面向?qū)ο螅ㄉ希第1頁
第3章 面向?qū)ο螅ㄉ希第2頁
第3章 面向?qū)ο螅ㄉ希第3頁
第3章 面向?qū)ο螅ㄉ希第4頁
第3章 面向?qū)ο螅ㄉ希第5頁
已閱讀5頁,還剩96頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章面向?qū)ο螅ㄉ希禞ava基礎(chǔ)案例教程》(第3版)學(xué)習(xí)目標(biāo)/Target了解面向?qū)ο蟮南嚓P(guān)概念,能夠簡述面向?qū)ο?、對象和類的概念以及它們之間的關(guān)系熟悉面向?qū)ο蟮奶匦?,能夠簡述面向?qū)ο蟮娜筇匦哉莆諏ο蟮囊脗鬟f,能夠簡述對象引用傳遞的概念和機(jī)制了解為什么要封裝,能夠簡述封裝的概念和沒有進(jìn)行封裝可能出現(xiàn)的問題學(xué)習(xí)目標(biāo)/Target掌握訪問控制,能夠簡述4種訪問修飾符的訪問權(quán)限掌握封裝的實(shí)現(xiàn),能夠正確設(shè)置屬性的訪問權(quán)限,并能使用getter方法和setter方法為屬性提供公共訪問接口掌握類的定義,能夠自定義Java類掌握對象的創(chuàng)建與使用,能夠創(chuàng)建對象、訪問對象的屬性和方法學(xué)習(xí)目標(biāo)/Target掌握構(gòu)造方法的使用,能夠定義構(gòu)造方法,并簡述構(gòu)造方法重載的機(jī)制掌握static關(guān)鍵字的應(yīng)用,能夠簡述static關(guān)鍵字的作用,并能夠定義和使用靜態(tài)變量、靜態(tài)方法和靜態(tài)代碼塊掌握this關(guān)鍵字的應(yīng)用,能夠簡述this關(guān)鍵字的作用,并能使用this關(guān)鍵字訪問成員變量、成員方法和構(gòu)造方法章節(jié)概述/

Summary在軟件開發(fā)領(lǐng)域中,面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-OrientedProgramming,OOP)一直占據(jù)著重要的地位,Java被廣泛認(rèn)可為一種完全意義上的面向?qū)ο缶幊陶Z言。因此,了解面向?qū)ο蟮木幊趟枷雽τ趯W(xué)習(xí)Java開發(fā)至關(guān)重要。本章將對面向?qū)ο蟮南嚓P(guān)知識(shí)進(jìn)行講解。目錄/Contents0102面向?qū)ο蟾攀鲱惻c對象0304封裝構(gòu)造方法05static關(guān)鍵字面向?qū)ο蟾攀?.13.1面向?qū)ο蟾攀龀R姷某绦蛟O(shè)計(jì)模型分為面向過程和面向?qū)ο髢煞N,面向過程關(guān)注的是解決問題的步驟和流程,將問題拆解為一系列的函數(shù)或模塊進(jìn)行處理,強(qiáng)調(diào)編程的邏輯流程和函數(shù)的調(diào)用。面向?qū)ο髣t是把構(gòu)成問題的事物按照一定規(guī)則劃分為多個(gè)獨(dú)立的對象,通過對象之間的交互和協(xié)作來解決問題。相比于面向過程,面向?qū)ο蠼档土舜a的耦合性、使程序易于維護(hù)和重用。了解面向?qū)ο蟮南嚓P(guān)概念,能夠簡述面向?qū)ο?、對象和類的概念以及它們之間的關(guān)系3.1.1面向?qū)ο笙嚓P(guān)概念

先定一個(gè)小目標(biāo)!3.1.1面向?qū)ο笙嚓P(guān)概念213面向?qū)ο髮F(xiàn)實(shí)世界中的事物抽象為對象,每個(gè)對象都有自己的特征和行為,通過不同對象之間的交互來完成復(fù)雜任務(wù)。提供了更高模塊化能力和可維護(hù)性。面向?qū)ο蟮乃枷雽ο笫蔷唧w而實(shí)際的,具有特征和行為的實(shí)體,世間萬物皆可為對象。對象通過封裝將特征和行為捆綁在一起,并對外隱藏實(shí)現(xiàn)細(xì)節(jié)。對象類是描述對象的特征和行為的模板,它可以看作是對象的抽象。對象是類的具體化。類為對象的特征和行為提供了統(tǒng)一的定義和結(jié)構(gòu),使他們可以按相同方式進(jìn)行交互。類熟悉面向?qū)ο蟮奶匦裕軌蚝喪雒嫦驅(qū)ο蟮娜筇匦?.1.2面向?qū)ο蟮奶匦?/p>

先定一個(gè)小目標(biāo)!3.1.2面向?qū)ο蟮奶匦栽谲浖O(shè)計(jì)過程中,隨著需求的不斷變化和程序復(fù)雜度的不斷提高,面向?qū)ο鬄榱四芨行У亟M織和管理代碼,引入了三大關(guān)鍵特性—封裝、繼承和多態(tài)。3.1.2面向?qū)ο蟮奶匦?.封裝封裝是指將對象的特征和行為封裝起來,形成一個(gè)獨(dú)立的對象,并向用戶暴露操作對象的方法,而不要求用戶知道對象內(nèi)部的具體實(shí)現(xiàn)。這種方式避免了外部對對象直接進(jìn)行修改,從而提高了程序的安全性和可維護(hù)性。例如,將一輛汽車看作一個(gè)對象。司機(jī)在開車時(shí)只需要知道如何啟動(dòng)、加速、剎車等,不需要了解汽車的內(nèi)部是如何實(shí)現(xiàn)這些功能的。這樣可以防止司機(jī)隨意調(diào)整汽車內(nèi)部的零件,從而保證了汽車的安全性。3.1.2面向?qū)ο蟮奶匦?.繼承繼承是描述類之間關(guān)系的一個(gè)重要概念,它允許一個(gè)類不需要寫任何屬性和方法就可以擁有另一個(gè)類的屬性和方法,這種類關(guān)系中,前者稱為子類,后者稱為父類。子類除了可以直接使用繼承自父類的屬性和方法,還可以添加自己的特有屬性和方法,或者重寫父類的方法來實(shí)現(xiàn)自己的功能。例如,如果有一個(gè)交通工具類作為父類,可以派生出“汽車”類和“輪船”類等作為子類。這意味著汽車和輪船都是交通工具,它們繼承了交通工具類的共同特征和行為,同時(shí)還擁有自己特有的特征和行為。3.1.2面向?qū)ο蟮奶匦?.多態(tài)多態(tài)是指同一操作作用于不同的對象,可以產(chǎn)生不同的行為。多態(tài)主要基于繼承和重寫實(shí)現(xiàn),當(dāng)父類擁有的屬性和方法被多個(gè)子類繼承后,子類根據(jù)自身的情況對繼承自父類的方法進(jìn)行重寫,可以表現(xiàn)出不同的行為。例如,同為人類的理發(fā)師和演員,當(dāng)需要執(zhí)行cut操作時(shí),理發(fā)師的行為是剪發(fā),演員的行為是停止表演等。不同的對象,所表現(xiàn)的行為是不一樣的。多態(tài)的特性提高了代碼的靈活性和可替換性,使得編程人員可以更加方便地進(jìn)行代碼的優(yōu)化和擴(kuò)展。類與對象3.23.2類與對象通過3.1節(jié)的學(xué)習(xí),我們已經(jīng)初步了解了面向?qū)ο缶幊痰暮诵母拍睢惻c對象,它們在Java程序中扮演著至關(guān)重要的角色。本節(jié)將詳細(xì)講解Java中的類與對象。3.2.1類的定義掌握類的定義,能夠自定義Java類

先定一個(gè)小目標(biāo)!3.2.1類的定義類的成員主要包括成員變量和成員方法。通常將成員變量稱為屬性,用于描述類的特性。成員方法用于描述類的行為。在類中可以根據(jù)實(shí)際需求定義任意數(shù)量(包括0個(gè))的成員變量和成員方法。定義類的格式:[修飾符]class類名{//成員變量[修飾符]數(shù)據(jù)類型變量名;//成員方法[修飾符]返回類型方法名([參數(shù)列表]){}}3.2.1類的定義案例演示下面根據(jù)定義類的語法格式定義一個(gè)學(xué)生類。Student.java源代碼3.2.2對象的創(chuàng)建與使用掌握對象的創(chuàng)建與使用,能夠創(chuàng)建對象、訪問對象的屬性和方法

先定一個(gè)小目標(biāo)!3.2.2對象的創(chuàng)建與使用在Java中,創(chuàng)建類的對象就是實(shí)例化該類的過程,通過對象可以訪問并調(diào)用類的成員變量和成員方法,從而完成特定的任務(wù)。創(chuàng)建對象的過程主要包括兩個(gè)步驟:聲明對象和實(shí)例化對象。3.2.2對象的創(chuàng)建與使用(1)聲明對象聲明對象是指通過類的名稱和合適的變量名稱來定義對象的類型和名稱。聲明對象的語法格式:類名對象名;對象名使用符合Java標(biāo)識(shí)符的命名規(guī)范的名稱定義即可,一般使用對象代表的實(shí)際含義命名3.2.2對象的創(chuàng)建與使用(2)實(shí)例化對象對象名=new類名();

對象的引用是指對象所在內(nèi)存空間的地址值。實(shí)例化對象的語法格式如下:實(shí)例化對象是指使用關(guān)鍵字new來創(chuàng)建一個(gè)對象,并為對象分配內(nèi)存空間,最后將對象的引用賦值給之前聲明的對象名。3.2.2對象的創(chuàng)建與使用Studentstudent=newStudent();除了分開聲明對象和進(jìn)行實(shí)例化的方式,還可以在聲明對象的同時(shí)對其進(jìn)行實(shí)例化。例如:創(chuàng)建Student.java文件中的Student對象。原理解析:Studentstudent表示在棧內(nèi)存中創(chuàng)建了一個(gè)Student對象,名稱為student。newStudent()會(huì)在堆內(nèi)存中創(chuàng)建一個(gè)對象,該對象中包含多個(gè)屬性,如果沒有手動(dòng)為這些屬性賦初始值,系統(tǒng)會(huì)為其分配默認(rèn)值,同時(shí)為Student分配一個(gè)地址值。接著把地址值賦給變量student,通過student記錄的地址值可以找到該對象。3.2.2對象的創(chuàng)建與使用Student對象在內(nèi)存中的存儲(chǔ)形式。3.2.2對象的創(chuàng)建與使用訪問對象的屬性和方法。對象名.屬性//訪問屬性對象名.方法名(參數(shù)列表)//訪問成員方法手動(dòng)為對象的屬性賦值。對象名.屬性=屬性值;3.2.2對象的創(chuàng)建與使用案例演示為了更好地理解對象的創(chuàng)建與使用,下面通過一個(gè)案例創(chuàng)建文件Student.java中的Student類的對象,并為對象的屬性賦值,然后調(diào)用對象的方法。Example01.java源代碼3.2.2對象的創(chuàng)建與使用運(yùn)行結(jié)果如下圖所示。3.2.3對象的引用傳遞掌握對象的引用傳遞,能夠簡述對象引用傳遞的概念和機(jī)制

先定一個(gè)小目標(biāo)!3.2.3對象的引用傳遞在前面關(guān)于方法的學(xué)習(xí)中,傳入的參數(shù)都是基本數(shù)據(jù)類型,它實(shí)際上傳遞的是參數(shù)的副本或者參數(shù)的值,因此在方法內(nèi)部修改參數(shù)的值,并不會(huì)影響到原始的值,這種傳遞方式被稱為值傳遞。3.2.3對象的引用傳遞而類是引用數(shù)據(jù)類型,也就是說類的實(shí)例對象在內(nèi)存中的存儲(chǔ)空間可以被多個(gè)棧內(nèi)存引用。在方法調(diào)用中,當(dāng)把一個(gè)對象作為參數(shù)傳遞給方法時(shí),實(shí)際上傳遞的是對象的引用,也就是對象的內(nèi)存地址值,這種傳遞方式被稱為對象的引用傳遞。當(dāng)在方法內(nèi)部對引用對象進(jìn)行修改時(shí),原始對象也會(huì)受到影響,因?yàn)樗鼈冎赶蛲粋€(gè)內(nèi)存地址。3.2.3對象的引用傳遞為了更好地理解對象的引用傳遞,下面通過一個(gè)給員工加薪的案例演示值傳遞和對象的引用傳遞的區(qū)別。引用傳遞值傳遞案例演示Example02.java源代碼3.2.3對象的引用傳遞案例的運(yùn)行結(jié)果如下圖所示。案例演示封裝3.33.3封裝封裝是面向?qū)ο蟮娜筇匦灾唬潜Wo(hù)數(shù)據(jù)并提供安全操作的關(guān)鍵,深刻理解封裝的思想是構(gòu)建高質(zhì)量Java程序的基礎(chǔ),本節(jié)將詳細(xì)講解Java面向?qū)ο?.3.1為什么要封裝了解為什么要封裝,能夠簡述封裝的概念和沒有進(jìn)行封裝可能出現(xiàn)的問題

先定一個(gè)小目標(biāo)!3.3.1為什么要封裝封裝是指隱藏對象的屬性和內(nèi)部操作的實(shí)現(xiàn)細(xì)節(jié),只對外公開接口,以控制對程序中屬性的讀取和修改的訪問級(jí)別。這種通過接口訪問數(shù)據(jù)的方式,可以在不破壞數(shù)據(jù)完整性的情況下對其進(jìn)行修改。3.3.1為什么要封裝下面通過一個(gè)修改銀行賬戶余額的案例,來演示類在沒有進(jìn)行封裝的情況下直接修改屬性的值會(huì)帶來的問題。Example03.java源代碼案例演示3.3.1為什么要封裝案例運(yùn)行結(jié)果如下圖所示。案例演示3.3.1為什么要封裝分析Example03.java文件中的類沒有進(jìn)行封裝存在的問題。案例演示缺乏訪問控制導(dǎo)致安全風(fēng)險(xiǎn)。account對象的屬性沒有顯式地添加任何訪問控制權(quán)限,此時(shí)Java會(huì)默認(rèn)為屬性設(shè)置為default訪問權(quán)限,表示該屬性可以被同一個(gè)包內(nèi)其他類訪問,而包外的任何類都不能訪問。這種情況下,外部可以直接訪問和修改account對象的屬性。缺乏驗(yàn)證邏輯。balance屬性允許外部直接修改賬戶余額,這樣設(shè)計(jì)使得外部可以任意篡改賬戶余額,而不經(jīng)過合適的驗(yàn)證和控制。3.3.1為什么要封裝解決方法:案例演示對成員變量的訪問做出限制,不允許外界隨意訪問,只提供公共方法控制外部對屬性的訪問。在方法中引入驗(yàn)證和控制邏輯確保賬戶余額的數(shù)值符合要求。3.3.2訪問控制掌握訪問控制,能夠簡述四種訪問修飾符的訪問權(quán)限

先定一個(gè)小目標(biāo)!3.3.2訪問控制在Java中,訪問控制是一種通過訪問修飾符來控制類、方法、變量和構(gòu)造函數(shù)的可見性的機(jī)制。Java中的訪問修飾符有四種,分別是public、protected、default、private。3.3.2訪問控制public公共訪問修飾符,具有最大的訪問權(quán)限。用public修飾的類、方法和變量,包內(nèi)和包外的任何類均可以訪問。protectedprivate受保護(hù)訪問修飾符。用protected修飾的類、方法和變量,包內(nèi)的任何類以及包外繼承了該類的子類可以訪問。默認(rèn)訪問修飾符。默認(rèn)訪問權(quán)限的類、方法和變量,可以被包內(nèi)的其他類訪問,而包外的任何類都不能對其訪問。私有訪問修飾符。用private修飾的類、方法和變量,只有本類可以訪問,而包內(nèi)包外的其他類均不能對其訪問。default3.3.2訪問控制四種訪問修飾符的訪問范圍。訪問修飾符同一類中同一包中子類中不同包不同類public√√√√protected√√√–default√√––private√–––3.3.3封裝的實(shí)現(xiàn)掌握封裝的實(shí)現(xiàn),能夠正確設(shè)置屬性的訪問權(quán)限,并能使用getter方法和setter方法為屬性提供公共訪問接口

先定一個(gè)小目標(biāo)!3.3.3封裝的實(shí)現(xiàn)類的封裝是指將對象的狀態(tài)信息隱藏在對象內(nèi)部,不允許外部程序直接訪問對象的內(nèi)部信息,而是通過該類提供的指定方法實(shí)現(xiàn)對內(nèi)部信息的操作和訪問。實(shí)現(xiàn)類的封裝需要進(jìn)行以下幾個(gè)操作。(1)成員變量私有化。將類的成員變量聲明為私有,即使用private修飾,以限制外部類中對成員的直接訪問。3.3.3封裝的實(shí)現(xiàn)(2)提供公共訪問方法。為私有成員變量提供公共的訪問方法,通常包括獲取成員變量值的getter方法和設(shè)置成員變量值的setter方法。getter方法和setter方法定義格式://getter方法public返回類型get變量名(){return變量名;}//setter方法publicvoidset變量名(參數(shù)類型參數(shù)名){this.變量名=參數(shù)名;}3.3.3封裝的實(shí)現(xiàn)案例演示修改文件Example03,使用private修飾符修飾accountNumber屬性和balance屬性,并為其提供公共訪問方法setter和getter,以此實(shí)現(xiàn)類的封裝。Example04.java源代碼3.3.3封裝的實(shí)現(xiàn)案例演示案例的運(yùn)行結(jié)果如下圖所示。3.3.3封裝的實(shí)現(xiàn)多學(xué)一招:實(shí)體JavaBean在面向?qū)ο缶幊讨校?jīng)常需要定義一種用來表示實(shí)體對象的Java類,這種類被稱為實(shí)體JavaBean,它是數(shù)據(jù)封裝的一個(gè)體現(xiàn)。實(shí)體JavaBean的主要目的是用來封裝和操作數(shù)據(jù),通常與數(shù)據(jù)庫中的表或者其他數(shù)據(jù)源中的記錄相對應(yīng)。3.3.3封裝的實(shí)現(xiàn)實(shí)體JavaBean的特點(diǎn)。類中的成員變量都為私有,并且要對外提供相應(yīng)的getter方法和setter方法。類中必須有一個(gè)公共的無參構(gòu)造方法。類中可以提供帶有參數(shù)的構(gòu)造方法,便于創(chuàng)建對象初始化屬性值。根據(jù)具體需求,類中可以添加其他方法,例如,重寫toString()方法等。在實(shí)際開發(fā)中,實(shí)體JavaBean僅僅用來封裝數(shù)據(jù),只提供對數(shù)據(jù)進(jìn)行存和取的方法,而對數(shù)據(jù)的其他處理操作交給其他類來完成,以實(shí)現(xiàn)數(shù)據(jù)和數(shù)據(jù)業(yè)務(wù)處理的分離。多學(xué)一招:實(shí)體JavaBean【案例3-1】打印購物小票當(dāng)顧客在超市購物結(jié)賬時(shí),收銀員會(huì)提供一張購物小票,上面會(huì)列出顧客購買的商品數(shù)量、單價(jià)、小計(jì)和總計(jì)等購物信息,以供顧客核對。本案例要求編寫一個(gè)模擬打印購物小票的程序,收銀員輸入顧客購買商品的種類數(shù)后,依次輸入商品名稱、單價(jià)和數(shù)量。輸入完成后打印購物小票,包括商品的名稱、單價(jià)、數(shù)量、小計(jì)和總計(jì),小計(jì)是指某種商品一共所花金額。案例描述【案例3-1】打印購物小票案例效果構(gòu)造方法3.43.4構(gòu)造方法在Java中,每個(gè)類都有一種特殊的方法,用于創(chuàng)建和初始化對象,這種方法被稱為構(gòu)造方法,也叫構(gòu)造器。下面將對Java中的構(gòu)造方法及相關(guān)知識(shí)進(jìn)行講解。3.4.1定義構(gòu)造方法掌握定義構(gòu)造方法,能夠在類中定義構(gòu)造方法

先定一個(gè)小目標(biāo)!3.4.1定義構(gòu)造方法構(gòu)造方法的作用:在實(shí)例化對象時(shí),為對象的屬性賦值。構(gòu)造方法的定義格式:[訪問修飾符]構(gòu)造方法名([參數(shù)列表]){//構(gòu)造方法體}3.4.1定義構(gòu)造方法定義構(gòu)造方法時(shí)的注意事項(xiàng):訪問修飾符:訪問修飾符可以為Java中四種訪問修飾符的任意一個(gè)。返回值類型:構(gòu)造方法沒有返回值類型,并且不設(shè)置void。構(gòu)造方法名:構(gòu)造方法的方法名必須與類名相同。參數(shù)列表:可選項(xiàng),參數(shù)列表指定了構(gòu)造方法接收的參數(shù)類型和參數(shù)名稱。它可以包含0個(gè)或任意整數(shù)個(gè)參數(shù)。當(dāng)參數(shù)列表為空時(shí),稱之為無參構(gòu)造方法;當(dāng)參數(shù)列表包含一個(gè)或多個(gè)參數(shù)時(shí),稱之為有參構(gòu)造方法。有參構(gòu)造方法可以在創(chuàng)建對象的同時(shí)初始化對象的屬性。3.4.1定義構(gòu)造方法下面通過一個(gè)案例演示Java中構(gòu)造方法的使用。案例演示Example05.java源代碼3.4.1定義構(gòu)造方法案例的運(yùn)行結(jié)果如下圖所示。案例演示3.4.2構(gòu)造方法的重載掌握構(gòu)造方法的重載,能夠編寫重載的構(gòu)造方法

先定一個(gè)小目標(biāo)!3.4.2構(gòu)造方法的重載重載的構(gòu)造方法具有相同的名稱但參數(shù)列表不同。通過重載構(gòu)造方法,可以實(shí)現(xiàn)在創(chuàng)建對象時(shí)使用不同的參數(shù)進(jìn)行初始化。下面通過一個(gè)創(chuàng)建不同角色的案例演示構(gòu)造方法的重載。Example06.java源代碼3.4.2構(gòu)造方法的重載案例的運(yùn)行結(jié)果如下圖所示。3.4.3this關(guān)鍵字掌握this關(guān)鍵字的應(yīng)用,能夠簡述this關(guān)鍵字的作用,并能使用this關(guān)鍵字訪問成員變量、成員方法和構(gòu)造方法

先定一個(gè)小目標(biāo)!3.4.3this關(guān)鍵字在前面的學(xué)習(xí)中多次使用到了this關(guān)鍵字。例如,使用在setter方法中設(shè)置屬性值時(shí)就用到了this關(guān)鍵字。this關(guān)鍵字代表當(dāng)前對象的引用,可以用來訪問當(dāng)前對象的成員變量、成員方法和構(gòu)造方法。下面詳細(xì)介紹this關(guān)鍵字在以上三種場景中的使用3.4.3this關(guān)鍵字1.this關(guān)鍵字訪問成員變量this關(guān)鍵字訪問成員變量的作用:如果方法中存在與成員變量同名的局部變量,在方法中引用變量時(shí),局部變量的作用域會(huì)覆蓋成員變量,導(dǎo)致無法直接訪問成員變量。this關(guān)鍵字可以用于明確指定訪問的是成員變量,而不是局部變量。this關(guān)鍵字訪問成員變量的格式:this.成員變量;3.4.3this關(guān)鍵字案例演示下面通過一個(gè)案例演示this關(guān)鍵字訪問成員變量的使用。Example07.java源代碼3.4.3this關(guān)鍵字案例演示案例的運(yùn)行結(jié)果如下圖所示。3.4.3this關(guān)鍵字2.this關(guān)鍵字調(diào)用成員方法this關(guān)鍵字訪問成員方法的作用:使用this關(guān)鍵字可以在類的成員方法中調(diào)用其他成員方法,以完成一些特定的功能。下面通過一個(gè)打印書籍信息的案例演示this關(guān)鍵字調(diào)用成員方法。Example08.java源代碼3.4.3this關(guān)鍵字2.this關(guān)鍵字調(diào)用成員方法案例的運(yùn)行結(jié)果如下圖所示。3.4.3this關(guān)鍵字3.this關(guān)鍵字調(diào)用構(gòu)造方法this關(guān)鍵字調(diào)用構(gòu)造方法的作用:當(dāng)一個(gè)類中有多個(gè)構(gòu)造方法時(shí),可以在一個(gè)構(gòu)造方法中使用this關(guān)鍵字調(diào)用類中的另一個(gè)構(gòu)造方法,從而避免代碼重復(fù)。下面通過一個(gè)案例演示this關(guān)鍵字調(diào)用構(gòu)造方法。Example09.java源代碼3.4.3this關(guān)鍵字3.this關(guān)鍵字調(diào)用構(gòu)造方法案例的運(yùn)行結(jié)果如下圖所示。3.4.3this關(guān)鍵字3.this關(guān)鍵字調(diào)用構(gòu)造方法this關(guān)鍵字調(diào)用構(gòu)造方法的注意事項(xiàng)。(1)語法格式:使用this關(guān)鍵字調(diào)用構(gòu)造方法的語法格式為“this(參數(shù))”,不能寫成“this.類名(參數(shù))”。(2)調(diào)用位置。使用this關(guān)鍵字只能在構(gòu)造方法中調(diào)用其他構(gòu)造方法,而不能在其他成員方法中通過this關(guān)鍵字調(diào)用構(gòu)造方法。(3)this()語句的出現(xiàn)位置。在構(gòu)造方法中,this()語句必須放在第一行,且只能出現(xiàn)一次。3.4.3this關(guān)鍵字3.this關(guān)鍵字調(diào)用構(gòu)造方法this關(guān)鍵字調(diào)用構(gòu)造方法的注意事項(xiàng)。(4)互相調(diào)用。不能在一個(gè)類的兩個(gè)構(gòu)造方法中使用this關(guān)鍵字互相調(diào)用。例如右邊程序的寫法是錯(cuò)誤的。classStudent{Stringname;Stringage;publicStudent(){

this("張三",18);System.out.println("實(shí)例化了一個(gè)新的Student對象");}publicStudent(Stringname,intage){this();//調(diào)用無參構(gòu)造方法=name;this.age=age;}}【案例3-2】打怪小游戲案例描述本案例要求以一個(gè)英雄和怪獸之間的交戰(zhàn)為業(yè)務(wù)背景,實(shí)現(xiàn)一個(gè)打怪小游戲的程序。具體規(guī)則如下。交戰(zhàn)雙方為英雄和怪獸,英雄初始血量為500,英雄每次攻擊傷害在0~100范圍內(nèi)。怪獸的初始血量為300,怪獸每次攻擊在0~150范圍內(nèi),攻擊方的傷害即為被攻擊方的掉血量。游戲?yàn)榛睾现频墓裟J?,游戲開始時(shí)怪獸先攻擊英雄,英雄反擊,怪獸再攻擊,直到怪獸被消滅或者英雄陣亡(即他們的血量小于0或者等于0)為止。英雄和怪獸的屬性只有血量。每次攻擊完成之后,需要在控制臺(tái)打印本次攻擊結(jié)果。例如“英雄攻擊怪獸,怪獸掉血70,剩余血量230”,顯示的剩余血量為被攻擊的一方。交戰(zhàn)結(jié)束后,控制臺(tái)打印本次交戰(zhàn)結(jié)果。例如“怪獸被消滅,英雄獲勝”?!景咐?-2】打怪小游戲案例效果static關(guān)鍵字3.53.5static關(guān)鍵字在Java中,static關(guān)鍵字的含義是“靜態(tài)”,它可以修飾類的成員和代碼塊,被static修飾的成員被稱為靜態(tài)成員,靜態(tài)成員屬于類本身而不屬于類的實(shí)例,無論創(chuàng)建多少個(gè)類的實(shí)例,靜態(tài)成員都只有一份,可以被類的所有實(shí)例共享。靜態(tài)成員在程序啟動(dòng)時(shí)加載并存在于內(nèi)存中,在整個(gè)程序的運(yùn)行期間存在。被static修飾的代碼塊被稱為靜態(tài)代碼塊,它在類的初始化時(shí)執(zhí)行,且只會(huì)執(zhí)行一次。3.5.1靜態(tài)變量掌握靜態(tài)變量的使用,能夠簡述什么是靜態(tài)變量,并在程序中應(yīng)用靜態(tài)變量

先定一個(gè)小目標(biāo)!3.5.1靜態(tài)變量在Java類中,被static關(guān)鍵字修飾的成員變量稱為靜態(tài)變量,也叫類變量。由于靜態(tài)變量屬于類本身,因此可以直接通過類名來訪問,而無須創(chuàng)建對象實(shí)例。訪問靜態(tài)變量的語法格式:類名.靜態(tài)變量3.5.1靜態(tài)變量下面通過一個(gè)統(tǒng)計(jì)用戶創(chuàng)建數(shù)量的案例演示靜態(tài)變量的使用。案例演示Example10.java源代碼3.5.1靜態(tài)變量案例的運(yùn)行結(jié)果如下圖所示。案例演示3.5.1靜態(tài)變量使用靜態(tài)變量時(shí)的注意事項(xiàng)。雖然語法上允許通過“對象.靜態(tài)變量”的方式來訪問靜態(tài)變量,但出于代碼的清晰性和規(guī)范性考慮,不建議這樣做。如果想在其他類中直接使用類名調(diào)用類的靜態(tài)變量,該變量不能使用private或protected修飾符修飾。static關(guān)鍵字只能修飾類的成員變量而不能修飾局部變量,否則編譯器會(huì)報(bào)錯(cuò)。例如,以下代碼是錯(cuò)誤的。publicclassStudent{publicvoidstudy(){staticintnum=10;//這行代碼是錯(cuò)誤的}}3.5.2靜態(tài)方法

先定一個(gè)小目標(biāo)!掌握靜態(tài)方法,能夠說出靜態(tài)方法的特點(diǎn),并在程序中使用靜態(tài)方法3.5.2靜態(tài)方法在Java類中,被static關(guān)鍵字修飾的方法稱為靜態(tài)方法,也叫類方法。同樣屬于類本身,可以直接通過類名來訪問。調(diào)用靜態(tài)方法的語法格式:類名.方法名(參數(shù)列表)3.5.2靜態(tài)方法下面通過一個(gè)汽車工廠生產(chǎn)汽車的案例演示靜態(tài)方法的使用。案例演示Example11.java源代碼3.5.2靜態(tài)方法案例的運(yùn)行結(jié)果如下圖所示。案例演示3.5.2靜態(tài)方法使用靜態(tài)方法時(shí)的注意事項(xiàng)。靜態(tài)方法中只能訪問靜態(tài)成員,而不能訪問實(shí)例成員;實(shí)例方法中既可以訪問靜態(tài)成員,也可以訪問實(shí)例成員。靜態(tài)方法中不能使用this關(guān)鍵字和super關(guān)鍵字,super關(guān)鍵字會(huì)在后續(xù)章節(jié)中講解。靜態(tài)方法不能被重寫,但可以被繼承。3.5.3

溫馨提示

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

最新文檔

評論

0/150

提交評論