類,對象和接口_第1頁
類,對象和接口_第2頁
類,對象和接口_第3頁
類,對象和接口_第4頁
類,對象和接口_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、類、對象和接口類、對象和接口l 編程語言的幾個發(fā)展階段編程語言的幾個發(fā)展階段l 類類l 對象對象l static static 關(guān)鍵字關(guān)鍵字l this this 關(guān)鍵字關(guān)鍵字l 包包l 訪問權(quán)限訪問權(quán)限l 類的繼承類的繼承l(wèi) 對象的上轉(zhuǎn)型對象對象的上轉(zhuǎn)型對象l 多態(tài)性多態(tài)性l abstract abstract 類和類和abstractabstract方法方法l supersuper關(guān)鍵字關(guān)鍵字l 接口接口l 內(nèi)部類內(nèi)部類l 匿名類匿名類l 異常類異常類l ClassClass類類l 基本類型的類包裝基本類型的類包裝l 反編譯和文檔生成器反編譯和文檔生成器l jarjar文件文件 編程語言的

2、幾個發(fā)展階段編程語言的幾個發(fā)展階段 機器語言機器語言 計算機處理信息的早期語言是所謂的機器語言,這種語言中的指令都是由0,1組成的序列,稱這樣的序列為一條機器指令。這些指令的執(zhí)行由計算機的線路來保證。習慣上稱機器語言和匯編語言(用符號來代替二進制指令)為低級語言。 過程語言過程語言 用過程設(shè)計語言把代碼組成叫做過程或函數(shù)的塊。每個塊的目標是完成某個任務(wù),不需要再去考慮機器指令的細節(jié)。例如,一個C的源程序就是由若干個書寫形式互相獨立的函數(shù)組成。習慣上稱過程語言是高級語言。無論哪種高級語言編寫的源文件,必須轉(zhuǎn)換成為機器指令,計算機才能夠執(zhí)行,執(zhí)行方式可分為編譯方式和解釋方式。 面向?qū)ο缶幊堂嫦驅(qū)ο?/p>

3、編程 字節(jié)碼字節(jié)碼什么是面向?qū)ο??什么是面向?qū)ο螅?面向?qū)ο蟪绦颍嫦驅(qū)ο蟪绦颍∣OP Object-Oriented Programming)OOP Object-Oriented Programming) 在程序設(shè)計中,將所有事物都作為對象來處理。在程序設(shè)計中,將所有事物都作為對象來處理。OOP的基本思想是把人們對現(xiàn)實世界的認識過程應(yīng)用到程序設(shè)計中?,F(xiàn)實世界的物體就是對象,它的基本思想是把人們對現(xiàn)實世界的認識過程應(yīng)用到程序設(shè)計中?,F(xiàn)實世界的物體就是對象,它有兩個基本特點:物體的內(nèi)部構(gòu)成和物體的行為。有兩個基本特點:物體的內(nèi)部構(gòu)成和物體的行為。OOP與現(xiàn)實對象兩個基本特點相對應(yīng)的是數(shù)據(jù)和與現(xiàn)

4、實對象兩個基本特點相對應(yīng)的是數(shù)據(jù)和方法:數(shù)據(jù)表示對象的構(gòu)成,方法表示對象的行為。方法:數(shù)據(jù)表示對象的構(gòu)成,方法表示對象的行為。對象對象是表示現(xiàn)實世界中某個具體的事物類類是對對象的抽象描述。 類(類(CLASSCLASS) 如如:classclass ManMan對象進行抽象為類對象進行抽象為類對類進行實例化對類進行實例化面向?qū)ο蟮幕舅枷朊嫦驅(qū)ο蟮幕舅枷雰?yōu)點:優(yōu)點:符合人們?nèi)粘W匀坏乃季S習慣(因為它是從現(xiàn)實世界中客觀存在的事物(即對象)出發(fā)來構(gòu)造軟件系統(tǒng),并且在系統(tǒng)構(gòu)造中盡可能運用人類的自然思維方式)。降低、分解問題的難度和復(fù)雜性,提高整個求解過程的可控制性、可監(jiān)視性、可擴充性和可維護性使用

5、對象、類、繼承、封裝、消息等基本概念來進行程序設(shè)計。使用對象、類、繼承、封裝、消息等基本概念來進行程序設(shè)計。class Car int color_number; int door_number; int speed; void brake() void speedUp() ; void slowDown() 計算機中的對象的原型現(xiàn)實生活中的對象面向?qū)ο蟮奶攸c面向?qū)ο蟮奶攸c1.封裝性封裝性 面向?qū)ο笫褂妙惙庋b數(shù)據(jù)(屬性)和方法(行為)。面向?qū)ο笫褂妙惙庋b數(shù)據(jù)(屬性)和方法(行為)。 封裝使對象能夠向其他對象隱藏它們的實現(xiàn)封裝使對象能夠向其他對象隱藏它們的實現(xiàn)該原則稱為該原則稱為信息隱藏信息隱藏

6、。盡管對象通過良好定義。盡管對象通過良好定義的接口互相通信(正如駕駛員的接口包括方向盤、油門踏板、剎車踏板和變速器等),但是對的接口互相通信(正如駕駛員的接口包括方向盤、油門踏板、剎車踏板和變速器等),但是對象不知道其他對象是如何實現(xiàn)的象不知道其他對象是如何實現(xiàn)的正如駕駛員不知道如何實現(xiàn)轉(zhuǎn)向、發(fā)動機、剎車和變速器正如駕駛員不知道如何實現(xiàn)轉(zhuǎn)向、發(fā)動機、剎車和變速器等機械裝置。通常,實現(xiàn)細節(jié)隱藏在對象內(nèi)部。等機械裝置。通常,實現(xiàn)細節(jié)隱藏在對象內(nèi)部。 在面向過程的編程語言中,編程一般在面向過程的編程語言中,編程一般面向操作面向操作。然而,。然而,Java編程是編程是面向?qū)ο竺嫦驅(qū)ο蟮摹T诿嫦虻?。在?/p>

7、向過程的編程語言中,編程單位是過程的編程語言中,編程單位是函數(shù)函數(shù)。而在。而在Java中,編程單位是中,編程單位是類類。最終。最終實例化實例化(即創(chuàng)(即創(chuàng)建)這些類而得到對象,屬性和行為作為建)這些類而得到對象,屬性和行為作為字段和方法字段和方法封裝在類的封裝在類的“邊界邊界”內(nèi)。內(nèi)。2.繼承繼承 子類和父類3.多態(tài)多態(tài) 操作名稱的多態(tài)和繼承的多態(tài)面向?qū)ο蟮脑O(shè)計思想面向?qū)ο蟮脑O(shè)計思想分析問題時,不再分解其每一個過程。而是分析問題時,不再分解其每一個過程。而是l首先要考慮的是該問題域中涉及到哪些類(對象)首先要考慮的是該問題域中涉及到哪些類(對象)l這些類(對象)各有哪些屬性和方法這些類(對象)

8、各有哪些屬性和方法l這些類(對象)之間的關(guān)系如何這些類(對象)之間的關(guān)系如何對于面向過程的程序員,他們的精力集中于編寫函數(shù)。首先對操作進行分組,將執(zhí)行某個任務(wù)對于面向過程的程序員,他們的精力集中于編寫函數(shù)。首先對操作進行分組,將執(zhí)行某個任務(wù)的操作編寫為一個函數(shù),然后對函數(shù)進行分組以構(gòu)成一個程序。在面向過程的程序中,數(shù)據(jù)用的操作編寫為一個函數(shù),然后對函數(shù)進行分組以構(gòu)成一個程序。在面向過程的程序中,數(shù)據(jù)用來支持函數(shù)所執(zhí)行的動作。在描述新應(yīng)用程序需求的系統(tǒng)需求文檔中,來支持函數(shù)所執(zhí)行的動作。在描述新應(yīng)用程序需求的系統(tǒng)需求文檔中,動詞動詞幫助面向過程的程幫助面向過程的程序員確定為了實現(xiàn)系統(tǒng)而互相合作的

9、函數(shù)集序員確定為了實現(xiàn)系統(tǒng)而互相合作的函數(shù)集。JavaJava程序員的主要精力集中在創(chuàng)建自己的引用類型,該引用類型稱為類。每個類都包含一些域程序員的主要精力集中在創(chuàng)建自己的引用類型,該引用類型稱為類。每個類都包含一些域(變量或稱數(shù)據(jù)成員)及操作這些域的方法來作為類的成員。系統(tǒng)需求文檔中的(變量或稱數(shù)據(jù)成員)及操作這些域的方法來作為類的成員。系統(tǒng)需求文檔中的名詞名詞幫助幫助JavaJava程序員確定最初的一組類,它們用這些類開始設(shè)計過程。程序員使用這些類來實例化對象,這程序員確定最初的一組類,它們用這些類開始設(shè)計過程。程序員使用這些類來實例化對象,這些對象將一起工作以實現(xiàn)系統(tǒng)些對象將一起工作以實

10、現(xiàn)系統(tǒng)。什么是類?什么是類? 類是組成Java程序的基本要素。類封裝了一類對象的狀態(tài)和方法。類是用來定義對象的模板,定義一種對象所能擁有的數(shù)據(jù)和能完成的操作,對象是類的實例對象是類的實例。類是對對象的抽象描述 ,一個類中定義的方法可以被該類的對象調(diào)用,對象方法的每一次調(diào)用被稱作發(fā)送一個消息給對象。對象間是相互獨立的,只有接收消息的對象才會對該消息起作用。( (信息隱藏)信息隱藏)程序中的對象是類的一個實例,是一個軟件單元,它由一組結(jié)構(gòu)化的數(shù)據(jù)和在其上的一組操作構(gòu)成。類的實現(xiàn)包括兩部分:類聲明類聲明和類體類體。類定義類定義class People “class People”叫做類聲明;“Peo

11、ple” 是類名。類名的每個單詞首字母要大寫,類定義的一般格式類定義的一般格式class class 用戶自定義的類名用戶自定義的類名 數(shù)據(jù)成員數(shù)據(jù)成員 成員方法成員方法 類體要用花括號 括起來。類體包括成員變量的說明、方法的定義與實現(xiàn)兩個部分,變量的說明,用來刻畫屬性;方法的定義,用來刻畫功能。class class 梯形梯形 float float 上底上底, ,下底下底, ,高高,laderArea; /,laderArea; /變量定義部分變量定義部分 float float 計算面積計算面積() /() /方法定義方法定義 laderArea=( laderArea=(上底上底+ +

12、下底下底) )* *高高/2.0f;/2.0f; return laderArea; return laderArea; void void 修改高修改高(float h) /(float h) /方法定義方法定義 高高=h;=h; 方法定義方法定義float area()() “float area()”叫做方法聲明;“area” 是方法名,首字符小寫,第二個單詞首字母大寫。float定義方法的返回類型。當一個方法不需要返回數(shù)據(jù)時,方法類型是void。()中為方法聲明,可以定義用逗號隔開的方法參數(shù)。方法體包括局部變量的定義和合法的java語句。變量的說明,用來刻畫屬性;方法的定義,用來刻畫功

13、能。class class 梯形梯形 float float 上底上底, ,下底下底, ,高高,laderArea; /,laderArea; /變量定義部分變量定義部分 float float 計算面積計算面積() /() /方法定義方法定義 laderArea=( laderArea=(上底上底+ +下底下底) )* *高高/2.0f;/2.0f; return laderArea; return laderArea; void void 修改高修改高(float h) /(float h) /方法定義方法定義 高高=h;=h; 成員變量和局部變量成員變量和局部變量 類體中變量聲明部分所聲

14、明的變量被稱為類的成員變量。在方法體中聲明的變量和方法的參數(shù)被稱為局部變量。 成員變量在整個類內(nèi)都有效,局部變量只在定義它的方法內(nèi)有效。 成員變量有默認值,局部變量沒有默認值,在使用局部變量時,必須保證局部變量有具體的值。 對于成員變量的操作只能放在方法中。方法可以對成員變量和該方法體中聲明的局部變量進行操作。在聲明成員變量時可以同時賦予初值,但是不可以在類體中有單獨的賦值語句。 如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,即這個成員變量在這個方法內(nèi)暫時失效。 如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏。這時如果想在該方法內(nèi)使用成員變量,必須使用關(guān)鍵字this。 c

15、lass 三角形 float sideA,sideB,sideC,lengthSum; void setSide(float sideA,float sideB,float sideC) this.sideA=sideA; this.sideB=sideB; this.sideC=sideC; 方法定義方法定義方法內(nèi)定義的局部變量從它定義的位置之后開始有效,方法參數(shù)在整個方法內(nèi)有效。如果局部變量的定義是在一個復(fù)合語句中,那么該局部變量的有效范圍是該復(fù)合語句,即僅在該復(fù)合語句中有效,如果局部變量的定義是在一個循環(huán)語句中,那么該局部變量的有效范圍是該循環(huán)語句,即僅在該循環(huán)語句中有效 .float

16、area()() “float area()”叫做方法聲明;“area” 是方法名,首字符小寫,第二個單詞首字母大寫。float定義方法的返回類型。當一個方法不需要返回數(shù)據(jù)時,方法類型是void。()中為方法聲明,可以定義用逗號隔開的方法參數(shù)。方法體包括局部變量的定義和合法的java語句。變量的說明,用來刻畫屬性;方法的定義,用來刻畫功能。方法重載方法重載一個類中可以有多個方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同。class Area float getArea(float r) return 3.14f*r*r; double getArea

17、(float x,int y) return x*y; float getArea(int x,float y) return x*y; double getArea(float x,float y,float z) return (x*x+y*y+z*z)*2.0; 創(chuàng)建對象創(chuàng)建對象 類是創(chuàng)建對象的模板。 當使用一個類創(chuàng)建了一個對象時,我們也說我們給出了這個類的一個實例。第一步 聲明對象格式:格式: 類的名字類的名字 對象名字對象名字; ; 如:如: People zhangping;People zhangping;第二步 為聲明的對象分配內(nèi)存使用newnew運算符和類的構(gòu)造方法類的構(gòu)造方

18、法為聲明的對象分配內(nèi)存,如果類中沒有構(gòu)造方法,系統(tǒng)會調(diào)用默認的構(gòu)造方法(默認的構(gòu)造方法是無參數(shù)的)。如:如:zhangping=new People();zhangping=new People();構(gòu)造方法構(gòu)造方法構(gòu)造方法是一種特殊方法,當程序用類創(chuàng)建對象時需使用它的構(gòu)造方法構(gòu)造方法的名字必須與它所在的類的名字完全相同,而且沒有類型,允許一個類中編寫若干個構(gòu)造方法,既構(gòu)造方法可以重載。如果類中沒有編寫構(gòu)造方法,系統(tǒng)會默認類中只有一個構(gòu)造方法,默認構(gòu)造方法沒有參數(shù),且方法體中沒有語句。如果類中定義了一個或多個構(gòu)造方法,系統(tǒng)不提供默認構(gòu)造方法。class 梯形 float 上底,下底,高; 梯形

19、() 上底=60; 下底=100; 高=20; 梯形(float x,int y,float h) 上底=x; 下底=y; 高=h; class 梯形 float 上底,下底,高; 梯形() 梯形 dengbiandengbian=new 梯形()梯形 dengbiandengbian=new 梯形()梯形 putongPutong=new 梯形(60,100,20)作作 業(yè)業(yè)2022年1月26日星期三 完成一篇小論文。要求:1.題目:關(guān)于面向?qū)ο笪宜赖囊磺?.在A4稿紙上完成并上交3.字數(shù)不少于三千5創(chuàng)建對象創(chuàng)建對象 類是創(chuàng)建對象的模板。 當使用一個類創(chuàng)建了一個對象時,我們也說我們給出了

20、這個類的一個實例。第一步 聲明對象格式:格式: 類的名字類的名字 對象名字對象名字; ; 如:如: People zhangPing;People zhangPing;第二步 為聲明的對象分配內(nèi)存使用newnew運算符和類的構(gòu)造方法類的構(gòu)造方法為聲明的對象分配內(nèi)存,如果類中沒有構(gòu)造方法,系統(tǒng)會調(diào)用默認的構(gòu)造方法(默認的構(gòu)造方法是無參數(shù)的)。如:如:zhangPing=new People();zhangPing=new People();class XiyoujiRenwu float height,weight; String head, ear,hand,foot, mouth; void

21、 speak(String s) System.out.println(s); class A public static void main(String args) XiyoujiRenwu zhubajie; /聲明對象聲明對象 zhubajie=new XiyoujiRenwu(); /為對象分配內(nèi)存,為對象分配內(nèi)存, /使用使用new 運算符和默認的構(gòu)造方法運算符和默認的構(gòu)造方法對象的內(nèi)存模型對象的內(nèi)存模型 當系統(tǒng)見到:當系統(tǒng)見到: zhubajie=new XiyoujiRenwu(); 會做兩件事:會做兩件事: 為height,weight,head,ear,mouth,hand

22、,foot各個變量分配內(nèi)存,即XiyoujiRenwu類的成員變量被分配內(nèi)存空間,然后執(zhí)行構(gòu)造方法中的語句。 new運算符在為變量height,weight,head,ear,mouth,hand,foot分配內(nèi)存后,將返回一個引用引用給對象變量zhubajie。一個類創(chuàng)建多個不同對象時每個對象分配的空間都不同。改變一個對象的狀態(tài)不會影響其他對象。使用Point類分別創(chuàng)建了兩個對象p1,p2:Point p1 = new Point (5,15);Point p2 = new Point(8,18); p1=p2 XiyoujiRenwu sunwukong=new XiouJiRenwu()

23、sunwukongsunwukong0 xabbb0 xabbb 當用類創(chuàng)建一個對象時,類中的成員變量被分配內(nèi)存空間,這些內(nèi)存空間稱做該對象的實體,而對象中存放著引用,以確保實體由該對象操作使用。沒有實體的對象稱作空對象,空對象不能使用,即不能讓一個空對象去調(diào)用方法產(chǎn)生行為(NullPointerExcepiont)。一個類可以創(chuàng)建多個不同的對象,這些對象將被分配不同的內(nèi)存空間。一個類創(chuàng)建的兩個對象,如果具有相同的引用,那么就具有完全相同的實體。 如果成員變量在聲明時沒有指定初值,所使用的構(gòu)造方法也沒有對成員變量進行初始化操作,成員變量使用自己的默認初值。使用對象使用對象 通過使用運算符“.”

24、,對象可以實現(xiàn)對自己的變量訪問和方法的調(diào)用。 當對象調(diào)用方法時,方法中出現(xiàn)的成員變量就是指該對象的成員變量。 對象不僅可以操作自己的變量改變狀態(tài),而且還擁有了使用創(chuàng)建它的那個類中的方法的能力,對象通過使用這些方法可以產(chǎn)生一定的行為。 Java的“垃圾收集”機制周期的檢測某個實體是否已不再被任何對象所擁有,如果發(fā)現(xiàn)這樣的實體,釋放實體占有的內(nèi)存。對象對象. .變量變量對象對象. .方法方法參數(shù)傳值參數(shù)傳值在在JavaJava中,方法的所有參數(shù)都是中,方法的所有參數(shù)都是“傳值傳值”的。的。也就是說當方法被調(diào)用時,如果方法有參數(shù),參數(shù)必須要實例化,即參數(shù)變量必須有具體的值。方法中參數(shù)變量的值是調(diào)用者

25、指定的值的拷貝。 例:如果向方法的int型參數(shù)x傳遞一個int值,那么參數(shù)x得到的值是傳遞值的拷貝。方法如果改變參數(shù)的值,不會影響向參數(shù)“傳值”的變量的值。對于基本數(shù)據(jù)類型的參數(shù),向該參數(shù)傳遞的值的級別不可以高于該參數(shù)的級別,例:不可以向int型參數(shù)傳遞一個float值,但可以向double型參數(shù)傳遞一個float值。Java的引用型數(shù)據(jù)包括對象、數(shù)組和接口。當參數(shù)是引用類型時,“傳值”傳遞的是變量的引用而不是變量所引用的實體。如果改變參數(shù)變量所引用的實體,就會導致原變量的實體發(fā)生同樣的變化。而改變參數(shù)的引用不會影響向其傳值的變量的引用。使用Point類分別創(chuàng)建了兩個對象p1,p2:Point

26、 p1 = new Point (5,15);Point p2 = new Point(8,18); p1=p2 參數(shù)傳值參數(shù)傳值P73P73public class Example4_8 public static void main(String args) Circle circle = new Circle(10); /【代碼1】 System.out.println(main方法中circle的引用:+circle); System.out.println(main方法中circle的半徑+circle.getRadius(); Circular circular = new Cir

27、cular(circle,20); /【代碼2】 System.out.println(circular圓錐的bottom的引用:+circular.bottom); System.out.println(圓錐的bottom的半徑:+circular.getBottomRadius(); System.out.println(圓錐的體積:+circular.getVolme(); double r = 8888; System.out.println(圓錐更改底圓bottom的半徑:+r); circular.setBottomRadius(r); /【代碼3】 System.out.prin

28、tln(圓錐的bottom的半徑:+circular.getBottomRadius(); System.out.println(圓錐的體積:+circular.getVolme(); System.out.println(main方法中circle的半徑:+circle.getRadius(); System.out.println(main方法中circle的引用將發(fā)生變化); circle = new Circle(1000); /重新創(chuàng)建circle 【代碼4】 System.out.println(現(xiàn)在main方法中circle的引用:+circle); System.out.pri

29、ntln(main方法中circle的半徑:+circle.getRadius(); System.out.println(但是不影響circular圓錐的bottom的引用); System.out.println(circular圓錐的bottom的引用:+circular.bottom); System.out.println(圓錐的bottom的半徑:+circular.getBottomRadius(); public class Circle double radius; Circle(double r) radius = r; void setRadius(double r) r

30、adius=r; double getRadius() return radius; double getArea() area=3.14*radius*radius; return area; public class Circular Circle bottom; double height; Circular(Circle c,double h) bottom = c; height = h; double getVolme() return bottom.getArea()*height/3.0; double getBottomRadius() return bottom.getRa

31、dius(); public void setBottomRadius(double r) bottom.setRadius(r); 一個例子一個類可以把某個對象作為自己的一個成員變量,如果一個類可以把某個對象作為自己的一個成員變量,如果用這樣的類創(chuàng)建對象,那么該對象中就會有其他對象,用這樣的類創(chuàng)建對象,那么該對象中就會有其他對象,也就是說該類的對象將其他對象作為自己的組成部分。也就是說該類的對象將其他對象作為自己的組成部分。實例變量和類變量實例變量和類變量成員變量可分為實例變量和類變量 在聲明成員變量時,用關(guān)鍵字static給予修飾的稱作類變量,否則稱作實例變量(類變量也稱為static變量

32、,靜態(tài)變量)。注意:1.不同對象的實例變量互不相同2.所有對象共享類變量3.通過類名直接訪問類變量class Dog float x; static int y;實例變量和類變量的區(qū)別實例變量和類變量的區(qū)別一個類通過使用new運算符可以創(chuàng)建多個不同的對象,不同的對象的實例變量將被分配不同的內(nèi)存空間。如果類中的成員變量有類變量,那么所有的對象的這個類變量都分配給相同的一處內(nèi)存,改變其中一個對象的這個類變量會影響其它對象的這個類變量。類變量不僅可以通過某個對象訪問也可以直接通過類名訪問。當Java程序執(zhí)行時,類的字節(jié)碼文件被加載到內(nèi)存。如果該類沒有創(chuàng)建對象,類中的實例變量不會被分配內(nèi)存。而類中的類

33、變量在類加載到內(nèi)存中時,就分配了相應(yīng)的內(nèi)存空間。實例變量僅僅是和相應(yīng)的對象關(guān)聯(lián)的變量,也就是說,不同對象的實例變量互不相同,即分配不同的內(nèi)存空間,改變其中一個對象的實例變量不會影響其它對象的這個實例變量。實例變量可以通過對象訪問,不能使用類名訪問。類方法和實例方法類方法和實例方法 類中的方法也可分為實例方法和類方法. 方法聲明時,方法類型前面不加關(guān)鍵字static的是實例方法、加關(guān)鍵字static的是類方法。 構(gòu)造方法是特殊的方法,不能用static修飾構(gòu)造方法。注意:對成員變量的操作只能放在方法中。實例方法既能對類變量操作也能對實例變量操作。類方法只能對類變量進行操作。1.一個類中的方法可以

34、互相調(diào)用,實例方法可以調(diào)用該類中的其他方法,類方法只能調(diào)用該類的類方法。class Dog float x; float max(float x,float y) static float jerry()實例方法和類方法的區(qū)別實例方法和類方法的區(qū)別只有當類創(chuàng)建對象后,類中的實例方法才分配入口地址,方法的入口地址被所有的對象共享。實例方法可以被類創(chuàng)建的任何對象調(diào)用執(zhí)行。實例方法必須通過對象來調(diào)用。實例方法既可以操作實例變量也可以操作類變量。當所有對象都不存在時,實例方法的入口地址才被取消。類方法在加載到內(nèi)存時,就分配了相應(yīng)的入口地址。 類方法不僅可以被類創(chuàng)建的任何對象調(diào)用執(zhí)行,也可以直接通過類名

35、調(diào)用。類方法不可以操作實例變量類方法的入口地址在程序退出時才被取消。Java規(guī)定:類方法中出現(xiàn)的成員變量必須是被所有對象共享的變量。如果一個方法不需要操作類中的任何實例變量,就可以考慮將這樣如果一個方法不需要操作類中的任何實例變量,就可以考慮將這樣的方法設(shè)計為一個類方法的方法設(shè)計為一個類方法this this 關(guān)鍵字關(guān)鍵字this是Java的一個關(guān)鍵字,表示某個對象。 this可以出現(xiàn)在實例方法和構(gòu)造方法中,但不可以出現(xiàn)在類方法中。 this關(guān)鍵字出現(xiàn)在類的構(gòu)造方法中時,代表使用該構(gòu)造方法所創(chuàng)建的對象。p85 this關(guān)鍵字出現(xiàn)在類的實例方法中時,代表正在調(diào)用該方法的當前對象。當實例成員變量的

36、名字和局部變量的名字相同時,不能省略this。實例成員變量在實例方法中出現(xiàn)時 this.this.成員變量成員變量static成員變量在實例方法中出現(xiàn)時 類名類名. .成員變量成員變量參數(shù)傳值參數(shù)傳值P73P73public class Example4_8 public static void main(String args) Circle circle = new Circle(10); /【代碼1】 System.out.println(main方法中circle的引用:+circle); System.out.println(main方法中circle的半徑+circle.getRa

37、dius(); Circular circular = new Circular(circle,20); /【代碼2】 System.out.println(circular圓錐的bottom的引用:+circular.bottom); System.out.println(圓錐的bottom的半徑:+circular.getBottomRadius(); System.out.println(圓錐的體積:+circular.getVolme(); double r = 8888; System.out.println(圓錐更改底圓bottom的半徑:+r); circular.setBott

38、omRadius(r); /【代碼3】 System.out.println(圓錐的bottom的半徑:+circular.getBottomRadius(); System.out.println(圓錐的體積:+circular.getVolme(); System.out.println(main方法中circle的半徑:+circle.getRadius(); System.out.println(main方法中circle的引用將發(fā)生變化); circle = new Circle(1000); /重新創(chuàng)建circle 【代碼4】 System.out.println(現(xiàn)在main方法

39、中circle的引用:+circle); System.out.println(main方法中circle的半徑:+circle.getRadius(); System.out.println(但是不影響circular圓錐的bottom的引用); System.out.println(circular圓錐的bottom的引用:+circular.bottom); System.out.println(圓錐的bottom的半徑:+circular.getBottomRadius(); public class Circle double radius,area; Circle(double r

40、) radius = r; void setRadius(double r) this . radius=r; double getRadius() return radius; double getArea() area=3.14*radius*radius; return area; public class Circular Circle bottom; double height; Circular(Circle c,double h) bottom = c; height = h; double getVolme() return bottom.getArea()*height/3.

41、0; double getBottomRadius() return bottom.getRadius(); public void setBottomRadius(double r) bottom.setRadius(r); 一個例子包包包是Java語言中有效地管理類的一個機制。通過關(guān)鍵字package聲明包語句。package 語句作為Java源文件的第一條語句,指明該源文件定義的類所在的包。package語句的一般格式為: package 包名;如果源程序中省略了package語句,源文件中你定義命名的類被隱含地認為是無名包的一部分,即源文件中定義命名的類在同一個包中,但該包沒有名字。包

42、名可以是一個合法的標識符,也可以是若干個標識符加“.”分割而成 。如果一個類想使用無名包中的類,只要將這個無名包的類的字節(jié)碼和當前類保存在同一個目錄中即可。P93package tom.jiafei;package tom.jiafei;public class PrimNumber public void getPrimnumber(int n) int sum=0,i,j; for(i=1;i=n;i+) for(j=2;ji/2) System.out.print( +i); public static void main(String args) PrimNumber p=new Pr

43、imNumber(); p.getPrimnumber(20); 一個例子目錄必須包含有 tomjiafei編譯方法一編譯方法一E:YLjavac tomjiafeiPrimNumber.java編譯方法二編譯方法二E:YLtomjiafeijavac PrimNumber.java運行方法運行方法E:YLjava tom.jiafei.PrimNumber import import 語句語句 使用import 語句可以引入不在同一個包中的類不在同一個包中的類。如果想引入一個包中的全部類,可以用*來代替如:如:import java.awt.import java.awt.* *; ; 如果

44、想引入一個包中的某一個類,則寫出全稱即可。如:如:import java.util.Date;import java.util.Date;Java提供了130多個包,一個Java程序中可以有多個import語句,它的位置在package語句和源文件中類的定義之間。系統(tǒng)自動引入java.lang包中的所有類,java.lang是Java的核心庫類。在學習Java語言時,使用已經(jīng)存在的類,避免一切從頭做起,這是面向?qū)ο缶幊痰囊粋€重要方面。import tom.jiafei.*; /引入包引入包tom.jiafei中的類中的類public class Ex414 public static void

45、 main(String args) PrimNumber num=new PrimNumber();/用包用包tom.jiafei中的類創(chuàng)建對象中的類創(chuàng)建對象 num.getPrimnumber(30); 一個例子引入自己的包引入自己的包 方法方法1set classpath=C:Program FilesJavajdk1.7.0_03jrelib rt.jar;.; E:YL可以加載該目錄下無名包類并且目錄下的子目錄可以作為包名使用import tom.jiafei.*; /引入包引入包tom.jiafei中的類中的類public class Ex414 public static voi

46、d main(String args) PrimNumber num=new PrimNumber();/用包用包tom.jiafei中的類創(chuàng)建對象中的類創(chuàng)建對象 num.getPrimnumber(30); 一個例子引入自己的包引入自己的包 方法方法2在系統(tǒng)環(huán)境變量在系統(tǒng)環(huán)境變量classpathclasspath中設(shè)置環(huán)境變量中設(shè)置環(huán)境變量C:Program FilesJavajdk1.7.0_03jrelib rt.jar;.; E:YLimport tom.jiafei.*; /引入包引入包tom.jiafei中的類中的類public class Ex414 public static

47、 void main(String args) PrimNumber num=new PrimNumber();/用包用包tom.jiafei中的類創(chuàng)建對象中的類創(chuàng)建對象 num.getPrimnumber(30); 一個例子引入自己的包引入自己的包 方法方法3在源文件所在的目錄下建立和包對應(yīng)的目錄結(jié)構(gòu)表示可以加載應(yīng)用程序當前目錄的無名包類,表示可以加載應(yīng)用程序當前目錄的無名包類,而且當前目錄下的子孫目錄可以作為包的名而且當前目錄下的子孫目錄可以作為包的名字使用。字使用。import tom.jiafei.Trangle;class Ex413 public static void main(

48、String args) Trangle trangle=new Trangle(12,3,1); trangle.計算面積計算面積(); trangle.修改三邊修改三邊(3,4,5); trangle.計算面積計算面積(); 一個例子將類打包將類打包package tom.jiafei;public class Trangle double sideA,sideB,sideC; boolean boo; public Trangle(double a,double b,double c) sideA=a; sideB=b; sideC=c; if(a+bc&a+cb&c+b

49、a) System.out.println(我是一個三角形我是一個三角形); boo=true; else System.out.println(我不是一個三角形我不是一個三角形); boo=false; public void 計算面積計算面積() if(boo) double p=(sideA+sideB+sideC)/2.0; double area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC) ; System.out.println(面積是面積是:+area); else System.out.println(不是一個三角形不是一個三角形,不能計

50、算面積不能計算面積); public void 修改三邊修改三邊(double a,double b,double c) sideA=a; sideB=b; sideC=c; if(a+bc&a+cb&c+ba) boo=true; else boo=false; 注意類名混淆的問題!p93作作 業(yè)業(yè)2022年1月26日星期三 完成課后作業(yè)習題4的7.8.9.107訪問權(quán)限訪問權(quán)限是指對象是否可以通過“.”運算符操作自己的變量或通過“.”運算符使用類中的方法。 privateprivate、protectedprotected、publicpublic 都是Java的關(guān)鍵字,用

51、來修飾成員變量或方法。 訪問限制修飾符如果一個類或類的成員前沒有任何訪問修飾符時,它們獲得缺省的訪問權(quán)限,被成為友好變量和友好方法。訪問權(quán)限訪問權(quán)限共有共有 publicpublic 一個一個JAVAJAVA程序文件只能定義一個程序文件只能定義一個publicpublic類,而且程序文件類,而且程序文件必須與它同名必須與它同名 只有在使用只有在使用 public public 訪問修飾符時,類的成員才可被同一訪問修飾符時,類的成員才可被同一包或不同包中的所有類訪問包或不同包中的所有類訪問 public public 訪問修飾符可以使類的特性公用于任何類訪問修飾符可以使類的特性公用于任何類pub

52、lic public 修飾的是修飾的是公共類公共類,公共變量公共變量,公共方法公共方法訪問權(quán)限訪問權(quán)限受保護的受保護的 protectedprotectedprotected定義的成員變量或方法具有二重性,一個類在另外一個類中創(chuàng)建一個對象后,如果兩個類在同一包中,該對象能訪問自己的protected變量和protected方法 對于一個類的protected類變量,如果兩個類在同一包中,那么在另外一個類中,也能通過類名來操作這個protected類變量。 類本身、子類或包中的方法可以訪問它們,類本身、子類或包中的方法可以訪問它們, 其它類沒有訪問權(quán)限。其它類沒有訪問權(quán)限。protectedpr

53、otected修飾的是修飾的是受保護的成員變量受保護的成員變量和和受保護的方法受保護的方法訪問權(quán)限訪問權(quán)限私有的私有的 privatedprivated 對于私有變量或方法,只有在本類中創(chuàng)建該類的對象時,這個對象才能訪問自己的私有變量和類中的私有方法private和public的區(qū)別public 聲明的數(shù)據(jù)成員和成員函數(shù)可從類外部的任何地方訪問。 而private 數(shù)據(jù)將被隱藏,在類外不可見,這就實現(xiàn)了數(shù)據(jù)封裝的思想。privatedprivated修飾的是修飾的是私有成員變量私有成員變量和和私有方法私有方法訪問權(quán)限訪問權(quán)限友好的友好的 不用private、public 、protected修

54、飾符的成員變量和方法被稱為友好變量友好變量和友好方法友好方法。 一個類在另外一個類中創(chuàng)建一個對象后,如果兩個類在同一包中,該對象能訪問自己的友好變量和友好方法 對于一個類的友好類變量(靜態(tài)成員變量),如果兩個類在同一包中,那么在另外一個類中,也能通過類名來操作這個友好類變量。ProtectedProtected和friendlyfriendly區(qū)別?publicprotected-friendly-private反編譯和文檔生成器反編譯和文檔生成器例如:例如:javap java.awt.Buttonjavap -private java.awt.Button反編譯器反編譯器:javap.ex

55、e可以將字節(jié)碼反編譯為源碼可以將字節(jié)碼反編譯為源碼查看源碼類中的查看源碼類中的publicpublic方法名字和方法名字和publicpublic成員變量的名字成員變量的名字列出列出ButtonButton中的中的全部全部方法和成方法和成員變量員變量列出列出ButtonButton中的中的publicpublic方方法和成員變量法和成員變量反編譯和文檔生成器反編譯和文檔生成器格式格式1 1 格式格式2 2 文檔生成器 javadoc.exe 生成源文件類結(jié)構(gòu)的html文檔javadoc Ex.javajavadoc -d E:book Ex.javajavadoc -d book Ex.jav

56、a將應(yīng)用程序壓縮為將應(yīng)用程序壓縮為JARJAR文件文件假設(shè)應(yīng)用程序中有兩個類A、B生成一個JAR的文件的步驟如下:用文本編輯器編寫清單文件用文本編輯器編寫清單文件第一步第一步第二步第二步生成生成JARJAR文件文件Manifest-Version: 1.0Class: A BCreated-By:1.7E:testjar cfm T.jar Mym.mf A.class B.class將JAR文件存放在JDK安裝目錄的jrelibextjrelibext文件夾中一個空格!一個空格!第三步第三步保存為*.mf其他程序就可以使用這個JAR文件中的類來創(chuàng)建對象package m.s;public c

57、lass Mo public void fTestOne() System.out.println(I am TestOne); import m.s.*;public class Use public static void main(String arg) Mo a=new Mo(); a.fTestOne(); Mt b=new Mt(); b.fTestTwo(); JarJar文件的生成文件的生成package m.s;public class Mt public void fTestTwo() System.out.println(I am TestTwo); Step1: 保存并

58、編譯Mo和MtStep2: 建立清單文件(A.mf)。注意完整類名。Step3: 在包目錄之上使用jar命令。注意使用完整路徑名稱。Step4: 將jar文件存放至JDK安裝目錄下的擴展目錄中。public class Mo public void fTestOne() System.out.println(I am TestOne); public class Use public static void main(String arg) Mo a=new Mo(); a.fTestOne(); Mt b=new Mt(); b.fTestTwo(); JarJar文件的生成文件的生成pub

59、lic class Mt public void fTestTwo() System.out.println(I am TestTwo); JAR JAR 參數(shù)參數(shù)jar ctxuvfm0M jar-文件文件 manifest-文件文件 -C 目錄目錄 文件名文件名 .參數(shù): -c 創(chuàng)建新的存檔 -t 列出存檔內(nèi)容的列表 -x 展開存檔中的命名的(或所有的文件 -u 更新已存在的存檔 -v 生成詳細輸出到標準輸出上 -f 指定存檔文件名 -m 包含來自標明文件的標明信息 -0 只存儲方式;未用ZIP壓縮格式 -M 不產(chǎn)生所有項的清單(manifest文件 -i 為指定的jar文件產(chǎn)生索引信息

60、-C 改變到指定的目錄,并且包含下列文件:作作 業(yè)業(yè)2022年1月26日星期三 完成課后作業(yè)習題4的7.8.9.107類的繼承類的繼承 繼承是面向?qū)ο蟪绦蛟O(shè)計的又一重要特征。類的繼承就是以原有的類為基礎(chǔ)來創(chuàng)建一個新類,從而達到代碼復(fù)用的目的。Father類:類:surname address Son類:類: sex ageDaughter類:類: sex age父親類,具父親類,具有姓和地址有姓和地址兩個屬性兩個屬性兒子類,繼承了父兒子類,繼承了父類的姓屬類的姓屬性外還包含性別和性外還包含性別和年齡屬性年齡屬性繼承是一種由已有的類創(chuàng)建新類的機制。利用繼承,我們可以先創(chuàng)建一個共有屬性的一般類,根據(jù)該一般類再創(chuàng)建具有特殊屬性的

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論