




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、IBMjava培訓(xùn)內(nèi)部資料面向?qū)ο笤O(shè)計思想函數(shù)子程序的概念與作用。函數(shù)子程序的概念與作用。定義一個函數(shù)的格式定義一個函數(shù)的格式 編寫打印三個矩形的程序用流水帳的方式與用函數(shù)的方式進行比照分析。編寫打印三個矩形的程序用流水帳的方式與用函數(shù)的方式進行比照分析。返回值類型返回值類型 函數(shù)名參數(shù)類型函數(shù)名參數(shù)類型 形式參數(shù)形式參數(shù)1,參數(shù)類型,參數(shù)類型 形式參數(shù)形式參數(shù)2,. return 返回值;返回值;其中:其中:形式參數(shù):在方法被調(diào)用時用于接收外部傳入的數(shù)據(jù)的變量。形式參數(shù):在方法被調(diào)用時用于接收外部傳入的數(shù)據(jù)的變量。參數(shù)類型:就是該形式參數(shù)的數(shù)據(jù)類型。參數(shù)類型:就是該形式參數(shù)的數(shù)據(jù)類型。返回值
2、:方法在執(zhí)行完畢后返還給調(diào)用它的程序的數(shù)據(jù)。返回值:方法在執(zhí)行完畢后返還給調(diào)用它的程序的數(shù)據(jù)。返回值類型:函數(shù)要返回的結(jié)果的數(shù)據(jù)類型。返回值類型:函數(shù)要返回的結(jié)果的數(shù)據(jù)類型。實參:調(diào)用函數(shù)時實際傳給函數(shù)形式參數(shù)的數(shù)據(jù)。實參:調(diào)用函數(shù)時實際傳給函數(shù)形式參數(shù)的數(shù)據(jù)。如何理解函數(shù)返回值類型為如何理解函數(shù)返回值類型為void的情況的情況 函數(shù)方法2022-4-252函數(shù)調(diào)用的格式函數(shù)調(diào)用的格式在函數(shù)中使用在函數(shù)中使用return提前返回提前返回函數(shù)調(diào)用的過程分析函數(shù)調(diào)用的過程分析函數(shù)的調(diào)用2022-4-253函數(shù)的重載就是在同一個類中允許同時存在一個以上的同名函數(shù),只要它們的參數(shù)個數(shù)或類型不同即可。函
3、數(shù)的重載就是在同一個類中允許同時存在一個以上的同名函數(shù),只要它們的參數(shù)個數(shù)或類型不同即可。 如:如:public class Testpublic static void main(String args)int isum;double fsum;isum=add(3,5);isum=add(3,5,6);fsum=add(3.2,6.5); public static int add(int x,int y) reutrn x+y;public static int add(int x,int y,int z)return x+y+z;public static double add(dou
4、ble x,double y) return x+y;函數(shù)的重載2022-4-254Practice 1編寫一個類編寫一個類ETPTest2_1,使他具有一個方法為:,使他具有一個方法為:public int getArea(int i, int j)并返回并返回i * j的值。的值。再從外部調(diào)用這個方法再從外部調(diào)用這個方法傳入相應(yīng),并打印出結(jié)果值傳入相應(yīng),并打印出結(jié)果值2022-4-255Practice 2求下面代碼輸出結(jié)果求下面代碼輸出結(jié)果public class ETPTest2_2 private void change(int x) x = 3;System.out.println
5、(x);public static void main(String args) int x = 5;ETPTest2_2 test2_2 = new ETPTest2_2();test2_2.change(x);System.out.println(x);2022-4-256Practice 3求下面代碼輸入結(jié)果求下面代碼輸入結(jié)果public class Main public void change(Obj obj) obj.x = 3;public static void main(String args) Main main = new Main(); Obj obj = new Ob
6、j(); System.out.println(obj.x); main.change(obj); System.out.println(obj.x);class Obj int x = 5;2022-4-257Practice 4private float getVar()return x; 以下哪些可以重載上面這條語句以下哪些可以重載上面這條語句A.float getVar() B.public float getVar()C.public double getVar() D.protected float getVar() E.public float getVar(float f)20
7、22-4-258函數(shù)的參數(shù)傳遞根本數(shù)據(jù)類型的參數(shù)傳遞 2022-4-259函數(shù)的參數(shù)傳遞引用數(shù)據(jù)類型的參數(shù)傳遞2022-4-2510static靜態(tài)變量 當我們編寫一個類時,其實就是在描述其對象的屬性和行為,而并沒有產(chǎn)生實質(zhì)上的對當我們編寫一個類時,其實就是在描述其對象的屬性和行為,而并沒有產(chǎn)生實質(zhì)上的對象,只有通過象,只有通過new關(guān)鍵字才會產(chǎn)生出對象,這時系統(tǒng)才會分配內(nèi)存空間給對象,關(guān)鍵字才會產(chǎn)生出對象,這時系統(tǒng)才會分配內(nèi)存空間給對象,其方法才可以供外部調(diào)用。我們有時候希望無論是否產(chǎn)生了對象或無論產(chǎn)生其方法才可以供外部調(diào)用。我們有時候希望無論是否產(chǎn)生了對象或無論產(chǎn)生了多少對象的情況下,某些
8、特定的數(shù)據(jù)在內(nèi)存空間里只有一份,例如所有的了多少對象的情況下,某些特定的數(shù)據(jù)在內(nèi)存空間里只有一份,例如所有的中國人都有個國家名稱,每一個中國人都共享這個國家名稱,不必在每一個中國人都有個國家名稱,每一個中國人都共享這個國家名稱,不必在每一個中國人的實例對象中都單獨分配一個用于代表國家名稱的變量。中國人的實例對象中都單獨分配一個用于代表國家名稱的變量。編寫使用靜態(tài)變量統(tǒng)計一個類產(chǎn)生的實例對象的個數(shù)的程序編寫使用靜態(tài)變量統(tǒng)計一個類產(chǎn)生的實例對象的個數(shù)的程序2022-4-2511static靜態(tài)方法在靜態(tài)方法里只能直接調(diào)用同類中其它的靜態(tài)成員包括變量和方法,而不能直接訪在靜態(tài)方法里只能直接調(diào)用同類中
9、其它的靜態(tài)成員包括變量和方法,而不能直接訪問類中的非靜態(tài)成員。這是因為,對于非靜態(tài)的方法和變量,需要先創(chuàng)立類的實例對象問類中的非靜態(tài)成員。這是因為,對于非靜態(tài)的方法和變量,需要先創(chuàng)立類的實例對象后才可使用,而靜態(tài)方法在使用前不用創(chuàng)立任何對象。后才可使用,而靜態(tài)方法在使用前不用創(chuàng)立任何對象。 靜態(tài)方法不能以任何方式引用靜態(tài)方法不能以任何方式引用this和和super關(guān)鍵字。與上面的道理一樣,因為關(guān)鍵字。與上面的道理一樣,因為靜態(tài)方法在使用前不用創(chuàng)立任何實例對象,當靜態(tài)方法被調(diào)用時,靜態(tài)方法在使用前不用創(chuàng)立任何實例對象,當靜態(tài)方法被調(diào)用時,this所引用所引用的對象根本就沒有產(chǎn)生。的對象根本就沒有
10、產(chǎn)生。 main() 方法是靜態(tài)的,因此方法是靜態(tài)的,因此JVM在執(zhí)行在執(zhí)行main方法時不創(chuàng)立方法時不創(chuàng)立main方法所方法所在的類的實例對象,因而在在的類的實例對象,因而在main()方法中,我們不能直接訪問該類中的非方法中,我們不能直接訪問該類中的非靜態(tài)成員,必須創(chuàng)立該類的一個實例對象后,才能通過這個對象去訪問靜態(tài)成員,必須創(chuàng)立該類的一個實例對象后,才能通過這個對象去訪問類中的非靜態(tài)成員,這種情況,我們在以后的例子中會屢次碰到。類中的非靜態(tài)成員,這種情況,我們在以后的例子中會屢次碰到。2022-4-2512靜態(tài)代碼塊 一個類中可以使用不包含在任何方法體中的靜態(tài)代碼塊一個類中可以使用不包含
11、在任何方法體中的靜態(tài)代碼塊(static block ),當類被載入時,靜態(tài)代碼塊被執(zhí)行,且只被執(zhí)行一次,當類被載入時,靜態(tài)代碼塊被執(zhí)行,且只被執(zhí)行一次,靜態(tài)塊經(jīng)常用來進行類屬性的初始化。靜態(tài)塊經(jīng)常用來進行類屬性的初始化。 類中的靜態(tài)代碼塊被自動執(zhí)行,盡管我們產(chǎn)生了類的多個實例類中的靜態(tài)代碼塊被自動執(zhí)行,盡管我們產(chǎn)生了類的多個實例對象,但其中的靜態(tài)代碼塊只被執(zhí)行了一次。當一個程序中用對象,但其中的靜態(tài)代碼塊只被執(zhí)行了一次。當一個程序中用到了其他的類,類是在第一次被使用的時候才被裝載,而不是到了其他的類,類是在第一次被使用的時候才被裝載,而不是在程序啟動時就裝載程序中所有可能要用到的類。在程序啟
12、動時就裝載程序中所有可能要用到的類。 2022-4-2513Practice 5下面這個類聲明了靜態(tài)變量,并且使用了靜態(tài)代碼塊初始化變量下面這個類聲明了靜態(tài)變量,并且使用了靜態(tài)代碼塊初始化變量public class StaticClass private static int i;static i = 3;public static void main(String args) System.out.print(StaticClass.i);請創(chuàng)立一個類請創(chuàng)立一個類, 使用靜態(tài)代碼塊初始化并打印出來看是否生效使用靜態(tài)代碼塊初始化并打印出來看是否生效2022-4-2514下一章節(jié)對象和類對象和
13、類2022-4-2515JAVA中類的聲明類說明語法:類說明語法: 類修飾符 class 類名 extends 超類名 implements 接口名 成員變量定義;方法定義;類體2022-4-2516JAVA中類的聲明續(xù)類修飾符類修飾符Modifier:public:允許其他類沒有限制訪問本類,一個源文:允許其他類沒有限制訪問本類,一個源文件僅可以有一個件僅可以有一個public類類abstract:沒有實例的抽象概念類:沒有實例的抽象概念類final:不能再被擴展,不包含子類的類;易于平安性的:不能再被擴展,不包含子類的類;易于平安性的實現(xiàn),或用于創(chuàng)立固定功能的類實現(xiàn),或用于創(chuàng)立固定功能的類
14、缺?。嚎杀划斍鞍械钠渌愒L問缺省:可被當前包中的其他類訪問父類繼承聲明:父類繼承聲明:extends 父類名父類名實現(xiàn)接口實現(xiàn)接口(interface):implements 接口名接口名2022-4-2517JAVA中類的聲明續(xù)例:例:public abstract class shapeclass rectangle extends shapefinal class roundrect extends rectangle.? final可以與可以與abstract一起使用嗎?一起使用嗎?2022-4-2518類的成員變量的聲明聲明成員變量聲明成員變量member的語法的語法修飾符修飾符
15、數(shù)據(jù)類型數(shù)據(jù)類型 變量名;變量名;引用:對象名引用:對象名.變量變量修飾符修飾符訪問控制符訪問控制符public:可被所有其他類引用:可被所有其他類引用private:僅可被該類自身引用和修改,不能被其他任:僅可被該類自身引用和修改,不能被其他任何類包括子類引用何類包括子類引用 2022-4-2519成員變量的聲明續(xù) protected:該類自身、子類、同一包中的其他類 缺?。罕景械念?static:類成員變量,對所有的實例一致,引用是前綴可使用類名或?qū)ο竺?final:數(shù)值不變常量,定義同時應(yīng)對其進行初始化2022-4-2520成員變量的聲明續(xù)例:例: class shapeprivate
16、 int x;private int y;static final float MaxArea=100.0f;. 2022-4-2521方法的聲明定義對類內(nèi)成員變量數(shù)據(jù)的操作定義對類內(nèi)成員變量數(shù)據(jù)的操作方法的聲明語法:方法的聲明語法:修飾符修飾符 返回類型返回類型 方法名參數(shù)列表方法名參數(shù)列表 throws 例外名例外名 方法體;方法體;誰可以調(diào)用方法、接受哪些參數(shù)、如何返回信息誰可以調(diào)用方法、接受哪些參數(shù)、如何返回信息2022-4-2522方法的聲明續(xù)修飾符修飾符(Modifier:訪問控制符:訪問控制符:public、private、protectedstatic:靜態(tài)方法,又稱類方法:靜
17、態(tài)方法,又稱類方法使用類名或?qū)ο竺鳛榍熬Y,建議使用類名使用類名或?qū)ο竺鳛榍熬Y,建議使用類名在方法體中只能使用在方法體中只能使用static變量和變量和static方法方法abstract:只有接口沒有語句,要在子類中通過重新定義:只有接口沒有語句,要在子類中通過重新定義override來實現(xiàn)來實現(xiàn)final:不能被重新定義:不能被重新定義override2022-4-2523方法的聲明續(xù)返回類型:返回類型:void、return參數(shù)列表:值傳遞參數(shù)列表:值傳遞throws:通告本方法中會產(chǎn)生的例外異常類型,提醒調(diào)用者要對相應(yīng)通告本方法中會產(chǎn)生的例外異常類型,提醒調(diào)用者要對相應(yīng)的可能例外進行
18、處理。當執(zhí)行此方法并發(fā)生了例外時,程序會轉(zhuǎn)的可能例外進行處理。當執(zhí)行此方法并發(fā)生了例外時,程序會轉(zhuǎn)入調(diào)用者編制的例外處理程序段。入調(diào)用者編制的例外處理程序段。2022-4-2524方法的聲明續(xù)例:例: class shapeprivate int x;static float MaxArea=100.0f; public void setx(int newx)x=newx;public static void setMA(float newMA)MaxArea=newMA;public final getx( )return x 2022-4-2525下一章節(jié)對象對象2022-4-2526對象
19、的產(chǎn)生Person p1 = new Person();執(zhí)行完后的內(nèi)存狀態(tài)執(zhí)行完后的內(nèi)存狀態(tài)2022-4-2527對象的產(chǎn)生當一個對象被創(chuàng)立時,會對其中各種類型的成員變量自動進行初始化當一個對象被創(chuàng)立時,會對其中各種類型的成員變量自動進行初始化賦值。除了根本數(shù)據(jù)類型之外的都是變量類型都是引用類型,如上賦值。除了根本數(shù)據(jù)類型之外的都是變量類型都是引用類型,如上面的面的Person及前面講過的數(shù)組。及前面講過的數(shù)組。 2022-4-2528對象的使用創(chuàng)立新的對象之后創(chuàng)立新的對象之后,我們就可以使用我們就可以使用“ 對象名對象名.對象成員對象成員 的格式,來訪問對象的成員包括的格式,來訪問對象的成員
20、包括屬性和方法屬性和方法 class TestPersonpublic static void main(String args) Person p1 = new Person();Person p2 =new Person();p1.age = -30;p1.shout();p2.shout();程序運行的內(nèi)存布局如以下圖程序運行的內(nèi)存布局如以下圖 2022-4-2529對象的生命周期 與根本類型的與根本類型的生命周期一樣生命周期一樣2022-4-2530對象的比較 “=運算符與運算符與equals()方法的區(qū)別方法的區(qū)別怎樣比較兩個數(shù)組對象的內(nèi)容是否相等怎樣比較兩個數(shù)組對象的內(nèi)容是否相等
21、2022-4-2531Practice 6比較兩個數(shù)組是否相等比較兩個數(shù)組是否相等1. 聲明兩個數(shù)組,并使他們各個元素相同聲明兩個數(shù)組,并使他們各個元素相同2. 調(diào)用調(diào)用Arrays.equals(a1, a2)方法方法3. 打印出結(jié)果值打印出結(jié)果值2022-4-2532實現(xiàn)類的封裝性 如果外面的程序可以隨意修改一個類的成員變量,會造成不可預(yù)如果外面的程序可以隨意修改一個類的成員變量,會造成不可預(yù)料的程序錯誤,就象一個人的身高,不能被外部隨意修改,只能料的程序錯誤,就象一個人的身高,不能被外部隨意修改,只能通過各種攝取營養(yǎng)的方法去修改這個屬性。通過各種攝取營養(yǎng)的方法去修改這個屬性。 在定義一個
22、類的成員包括變量和方法時,使用在定義一個類的成員包括變量和方法時,使用private關(guān)鍵字說明這個關(guān)鍵字說明這個成員的訪問權(quán)限,這個成員成了類的私有成員,只能被這個類的其他成員成員的訪問權(quán)限,這個成員成了類的私有成員,只能被這個類的其他成員方法調(diào)用,而不能被其他的類中的方法所調(diào)用。方法調(diào)用,而不能被其他的類中的方法所調(diào)用。 2022-4-2533實現(xiàn)類的封裝性 為了實現(xiàn)良好的封裝性,我們通常將類的成員變量聲明為為了實現(xiàn)良好的封裝性,我們通常將類的成員變量聲明為private,再通過再通過public的方法來對這個變量進行訪問。對一個變量的操作,的方法來對這個變量進行訪問。對一個變量的操作,一般
23、都有讀取和賦值操作,我們分別定義兩個方法來實現(xiàn)這兩種操一般都有讀取和賦值操作,我們分別定義兩個方法來實現(xiàn)這兩種操作,一個是作,一個是getXxx()Xxx表示要訪問的成員變量的名字,用來讀表示要訪問的成員變量的名字,用來讀取這個成員變量操作,另外一個是取這個成員變量操作,另外一個是setXxx()用來對這個成員變量賦用來對這個成員變量賦值。值。一個類通常就是一個小的模塊,我們應(yīng)該讓模塊僅僅公開必須要讓外界知一個類通常就是一個小的模塊,我們應(yīng)該讓模塊僅僅公開必須要讓外界知道的內(nèi)容,而隱藏其它一切內(nèi)容。我們在進行程序的詳細設(shè)計時,應(yīng)盡量道的內(nèi)容,而隱藏其它一切內(nèi)容。我們在進行程序的詳細設(shè)計時,應(yīng)盡
24、量防止一個模塊直接修改或操作另一個模塊的數(shù)據(jù),模塊設(shè)計追求強內(nèi)聚防止一個模塊直接修改或操作另一個模塊的數(shù)據(jù),模塊設(shè)計追求強內(nèi)聚許多功能盡量在類的內(nèi)部獨立完成,不讓外面干預(yù),弱耦合提供給許多功能盡量在類的內(nèi)部獨立完成,不讓外面干預(yù),弱耦合提供給外部盡量少的方法調(diào)用。用總統(tǒng)指揮一支軍隊的例子來說明這種效果。外部盡量少的方法調(diào)用。用總統(tǒng)指揮一支軍隊的例子來說明這種效果。 2022-4-2534類的封裝所帶來的優(yōu)點 隱藏類的實現(xiàn)細節(jié);隱藏類的實現(xiàn)細節(jié);讓使用者只能通過事先定制好的方法來訪問數(shù)據(jù),可以方便地讓使用者只能通過事先定制好的方法來訪問數(shù)據(jù),可以方便地參加控制邏輯,限制對屬性的不合理操作;參加控
25、制邏輯,限制對屬性的不合理操作;便于修改,增強代碼的可維護性;便于修改,增強代碼的可維護性;2022-4-2535下一章節(jié)構(gòu)造函數(shù)構(gòu)造函數(shù)2022-4-2536構(gòu)造函數(shù)的定義與作用 構(gòu)造方法的特征構(gòu)造方法的特征它具有與類相同的名稱;它具有與類相同的名稱;它不含返回值;它不含返回值;它不能在方法中用它不能在方法中用return語句返回一個值語句返回一個值注意:在構(gòu)造方法里不含返回值的概念是不同于注意:在構(gòu)造方法里不含返回值的概念是不同于“void的,在定義構(gòu)的,在定義構(gòu)造方法時加了造方法時加了“void,結(jié)果這個方法就不再被自動調(diào)用了。,結(jié)果這個方法就不再被自動調(diào)用了。構(gòu)造方法的作用:當一個類的
26、實例對象剛產(chǎn)生時,這個類的構(gòu)造方法就構(gòu)造方法的作用:當一個類的實例對象剛產(chǎn)生時,這個類的構(gòu)造方法就會被自動調(diào)用,我們可以在這個方法中參加要完成初始化工作的代碼。會被自動調(diào)用,我們可以在這個方法中參加要完成初始化工作的代碼。這就好似我們規(guī)定每個這就好似我們規(guī)定每個“人一出生就必須先洗澡,我們就可以在人一出生就必須先洗澡,我們就可以在“人人的構(gòu)造方法中參加完成的構(gòu)造方法中參加完成“洗澡的程序代碼,于是每個洗澡的程序代碼,于是每個“人一出生人一出生就會自動完成就會自動完成“洗澡,程序就不必再在每個人剛出生時一個一個地告洗澡,程序就不必再在每個人剛出生時一個一個地告訴他們要訴他們要“洗澡了。洗澡了。
27、2022-4-2537構(gòu)造方法的重載 和一般的方法重載一樣,重載的構(gòu)造方法具有不同個數(shù)或不同類和一般的方法重載一樣,重載的構(gòu)造方法具有不同個數(shù)或不同類型的參數(shù),編譯器就可以根據(jù)這一點判斷出用型的參數(shù),編譯器就可以根據(jù)這一點判斷出用new 關(guān)鍵字產(chǎn)生對關(guān)鍵字產(chǎn)生對象時,該調(diào)用哪個構(gòu)造方法了。產(chǎn)生對象的格式是:象時,該調(diào)用哪個構(gòu)造方法了。產(chǎn)生對象的格式是:new 類名類名(參參數(shù)列表數(shù)列表) ;重載構(gòu)造方法可以完成不同初始化的操作,重載構(gòu)造方法可以完成不同初始化的操作, 如:如:p3=new Person(“Tom,18);語句,會做這樣幾件事:創(chuàng)立指定類的新語句,會做這樣幾件事:創(chuàng)立指定類的新實
28、例對象,在堆內(nèi)存中為實例對象分配內(nèi)存空間,并調(diào)用指定類實例對象,在堆內(nèi)存中為實例對象分配內(nèi)存空間,并調(diào)用指定類的構(gòu)造方法,最后將實例對象的首地址賦值給引用變量的構(gòu)造方法,最后將實例對象的首地址賦值給引用變量p3。 2022-4-2538構(gòu)造方法的一些細節(jié) 在在java每個類里都至少有一個構(gòu)造方法,如果程序員沒有在一個類里每個類里都至少有一個構(gòu)造方法,如果程序員沒有在一個類里定義構(gòu)造方法,系統(tǒng)會自動為這個類產(chǎn)生一個默認的構(gòu)造方法,這個定義構(gòu)造方法,系統(tǒng)會自動為這個類產(chǎn)生一個默認的構(gòu)造方法,這個默認構(gòu)造方法沒有參數(shù),在其方法體中也沒有任何代碼,即什么也不默認構(gòu)造方法沒有參數(shù),在其方法體中也沒有任何
29、代碼,即什么也不做。做。 由于系統(tǒng)提供的默認構(gòu)造方法往往不能滿足編程者的需求,我由于系統(tǒng)提供的默認構(gòu)造方法往往不能滿足編程者的需求,我們可以自己定義類的構(gòu)造方法,來滿足我們的需要,一旦編程們可以自己定義類的構(gòu)造方法,來滿足我們的需要,一旦編程者為該類定義了構(gòu)造方法,系統(tǒng)就不再提供默認的構(gòu)造方法了。者為該類定義了構(gòu)造方法,系統(tǒng)就不再提供默認的構(gòu)造方法了。 聲明構(gòu)造方法,如無特殊需要,應(yīng)使用聲明構(gòu)造方法,如無特殊需要,應(yīng)使用public關(guān)鍵字,在我們前關(guān)鍵字,在我們前面例子中,可以使用面例子中,可以使用private訪問修飾符嗎?訪問修飾符嗎? 2022-4-2539this是什么? 如果如果fu
30、nc2方法被調(diào)用方法被調(diào)用 ,一定是事先已經(jīng)有了一個存在的對象,一定是事先已經(jīng)有了一個存在的對象,func2被作為那個對象的方法被使用。被作為那個對象的方法被使用。 在在func2內(nèi)部能引用別的對象內(nèi)部能引用別的對象 ,同樣也能引用,同樣也能引用func2所屬的那個對所屬的那個對象。象。在在func2中,自己所屬的那個對象的引用名稱是什么呢?中,自己所屬的那個對象的引用名稱是什么呢? this關(guān)鍵關(guān)鍵字在字在java程序里的作用和它的詞義很接近,它在函數(shù)內(nèi)部就是這程序里的作用和它的詞義很接近,它在函數(shù)內(nèi)部就是這個函數(shù)所屬的對象的引用變量。個函數(shù)所屬的對象的引用變量。 2022-4-2540th
31、is引用句柄的存放位置每個成員方法內(nèi)部,都有一個每個成員方法內(nèi)部,都有一個this引用變量,指向調(diào)用這引用變量,指向調(diào)用這個方法的對象,類中的成員方法與個方法的對象,類中的成員方法與this之間的關(guān)系如圖之間的關(guān)系如圖2022-4-2541this引用句柄的應(yīng)用一個類中的成員方法可以直接調(diào)用同類中的其他成員,其實我們在一個方法內(nèi)部一個類中的成員方法可以直接調(diào)用同類中的其他成員,其實我們在一個方法內(nèi)部使用使用“this.其他成員的引用方式和直接使用其他成員的引用方式和直接使用“其他成員的效果是一樣的,那其他成員的效果是一樣的,那this還有多大的作用呢?在有些情況下,我們還是非得用還有多大的作用
32、呢?在有些情況下,我們還是非得用this關(guān)鍵字不可的關(guān)鍵字不可的 :讓類的成員變量名和對其進行賦值的成員方法的形參變量同名是必要的,這樣的讓類的成員變量名和對其進行賦值的成員方法的形參變量同名是必要的,這樣的代碼誰看了都能明白這兩個變量是彼此相關(guān)的,老手看到函數(shù)的定義,就能揣摩代碼誰看了都能明白這兩個變量是彼此相關(guān)的,老手看到函數(shù)的定義,就能揣摩出函數(shù)中的代碼,大大節(jié)省了別人和自己日后閱讀程序的時間。出函數(shù)中的代碼,大大節(jié)省了別人和自己日后閱讀程序的時間。 假設(shè)我們有一個容器類和一個部件類,在容器類的某個方法中要創(chuàng)立部件類的實例對象,而部假設(shè)我們有一個容器類和一個部件類,在容器類的某個方法中要
33、創(chuàng)立部件類的實例對象,而部件類的構(gòu)造方法要接收一個代表其所在容器的參數(shù)。件類的構(gòu)造方法要接收一個代表其所在容器的參數(shù)。構(gòu)造方法是在產(chǎn)生對象時被構(gòu)造方法是在產(chǎn)生對象時被java系統(tǒng)自動調(diào)用的,我們不能在程序中象調(diào)用其他系統(tǒng)自動調(diào)用的,我們不能在程序中象調(diào)用其他方法一樣去調(diào)用構(gòu)造方法。但我們可以在一個構(gòu)造方法里調(diào)用其他重載的構(gòu)造方方法一樣去調(diào)用構(gòu)造方法。但我們可以在一個構(gòu)造方法里調(diào)用其他重載的構(gòu)造方法,不是用構(gòu)造方法名,而是用法,不是用構(gòu)造方法名,而是用this(參數(shù)列表參數(shù)列表)的形式,根據(jù)其中的參數(shù)列表,的形式,根據(jù)其中的參數(shù)列表,選擇相應(yīng)的構(gòu)造方法。選擇相應(yīng)的構(gòu)造方法。 2022-4-254
34、2Practice 7創(chuàng)立一個類創(chuàng)立一個類Cla給出三個成員變量給出三個成員變量int a, b, c使用兩個構(gòu)造函數(shù)使用兩個構(gòu)造函數(shù)public Cla() public Cla(int a, int b, int c)使用使用this句柄在構(gòu)造函數(shù)中給變量賦值句柄在構(gòu)造函數(shù)中給變量賦值在主函數(shù)中分別使用兩個構(gòu)造函數(shù)創(chuàng)立兩個對象在主函數(shù)中分別使用兩個構(gòu)造函數(shù)創(chuàng)立兩個對象2022-4-2543下一章節(jié)繼承繼承2022-4-2544面向?qū)ο蟮母拍钭宇愖宇愂亲鳛榱硪粋€類的擴充或修正而定義的一個類。子類是作為另一個類的擴充或修正而定義的一個類。bicycle(super class)Mountain
35、 bikesRacing bikesTandem bikessub class2022-4-2545面向?qū)ο蟮母拍罾^承繼承使得子類可以利用父繼承使得子類可以利用父類中定義的方法和變量,類中定義的方法和變量,就像它們屬于子類本身一就像它們屬于子類本身一樣。樣。class Employee protected String name; public void showInfo() System.out.println(name); class Manager extends Employee private String department; public void showInfo() Sys
36、tem.out.println(name); System.out.println(“Manager of + department); 2022-4-2546繼承繼承性是面向?qū)ο蟪绦蛟O(shè)計語言的一個根本特征,通過繼承可以繼承性是面向?qū)ο蟪绦蛟O(shè)計語言的一個根本特征,通過繼承可以實現(xiàn)代碼的復(fù)用。繼承而得到的類為子類,被繼承的類為父類,實現(xiàn)代碼的復(fù)用。繼承而得到的類為子類,被繼承的類為父類,父類包括所有直接或間接被繼承的類。父類包括所有直接或間接被繼承的類。Java中不支持多重繼承。中不支持多重繼承。通過在類的聲明中參加通過在類的聲明中參加extends子句來創(chuàng)立一個類的子類:子句來創(chuàng)立一個類的子類
37、:class SubClass extends SuperClass 如果省略如果省略extends子句,那么該類為子句,那么該類為Object的子類。的子類。子類可以繼承父類中訪問權(quán)限設(shè)定為子類可以繼承父類中訪問權(quán)限設(shè)定為public、protected和和default的成員變量和方法,但是不能繼承訪問權(quán)限為的成員變量和方法,但是不能繼承訪問權(quán)限為private的的成員變量和方法。成員變量和方法。2022-4-2547繼承的例子2022-4-2548調(diào)用父類構(gòu)造函數(shù)super(x,);調(diào)用父類構(gòu)造函數(shù)時應(yīng)遵循的原那么:只能在子類中調(diào)用父類的構(gòu)造函數(shù).調(diào)用父類構(gòu)造函數(shù)時,必須使用super(
38、)不要在父類構(gòu)造函數(shù)前放任何子類構(gòu)造函數(shù)代碼。如果子類中沒有調(diào)用父類構(gòu)造,會默認調(diào)用無參數(shù)的super()2022-4-2549類方法的覆蓋方法覆蓋即指在子類中重新實現(xiàn)父類中已有的方法。方法覆蓋即指在子類中重新實現(xiàn)父類中已有的方法。Java運行時系統(tǒng)根據(jù)調(diào)用該方法的實例的類型來決定調(diào)用哪個實運行時系統(tǒng)根據(jù)調(diào)用該方法的實例的類型來決定調(diào)用哪個實現(xiàn)?,F(xiàn)。方法覆蓋時應(yīng)遵循的原那么:方法覆蓋時應(yīng)遵循的原那么:覆蓋后的方法不能比被覆蓋的方法有更嚴格的訪問前提條件。覆蓋后的方法不能比被覆蓋的方法有更嚴格的訪問前提條件。2022-4-2550面向?qū)ο蟮母拍罡采w覆蓋使得在子類中可以重覆蓋使得在子類中可以重新定
39、義父類中已有的方法,新定義父類中已有的方法,從而是子類具有自己的行從而是子類具有自己的行為。為。class Employee protected String name; public void showInfo() System.out.println(name); class Manager extends Employee private String department; public void showInfo() System.out.println(name); System.out.println(“Manager of + department); 2022-4-2551P
40、ractice 8有一個父類有一個父類Car,內(nèi)有屬性:,內(nèi)有屬性:int maxSpeed方法:方法:void stop();有兩個子類有兩個子類BMW, QQ繼承父類繼承父類請調(diào)用父類構(gòu)造方法,初始化賦值請調(diào)用父類構(gòu)造方法,初始化賦值maxSpeed請重寫請重寫stop()方法,要求方法,要求BMW當當maxSpeed = 300; 打印語句打印語句“停車停車QQ當當maxSpeed = 120; 打印語句打印語句“停車停車2022-4-25523. 接口“對實現(xiàn)我的類對實現(xiàn)我的類,看起來都應(yīng)該是我的樣子看起來都應(yīng)該是我的樣子接口規(guī)定了一個類的根本形式接口規(guī)定了一個類的根本形式:自變量自變量,方法名方法名,返回類型返回類型.但但不規(guī)定方法的主體不規(guī)定方法的主體.接口的數(shù)據(jù)類型接口的數(shù)據(jù)類型:都默認為都默認為static,final只是一種形式只是一種形式,不涉及細節(jié)不涉及細節(jié)2022-4-25533. 接口定義的形式public interface interfaceName extends SuperInterfaceList/常量定義和方法定義接口接口interface作為特殊形式的抽象類,和類作為特殊形式的抽象類,和
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- HSE知識綜合測驗習(xí)題帶答案
- 2025年超低頻傳感器標定系統(tǒng)項目合作計劃書
- 餐飲美學(xué)基礎(chǔ) 課件 4.1食養(yǎng)文化自然美的認知
- 抓住機會:2024年CPMM學(xué)習(xí)新方法及試題及答案
- 信貸風險防控課件
- Jetson-Nano-and-Jetson-Xavier-NX-Camera-Design-Guide-v1.1原版完整文件
- 《回彈法檢測混凝土抗壓強度技術(shù)規(guī)程》
- 短期生態(tài)影響與長期后果試題及答案
- 2024國際物流師的考生心得分享與試題及答案
- 聚焦重點:2024年CPMM試題及答案
- 公路施工現(xiàn)場管理人員(施工員)職業(yè)標準(征求意見稿)
- 第十三屆全國交通運輸行業(yè)城市軌道交通列車司機(職工組)職業(yè)技能大賽技術(shù)方案
- DB 5110T 68-2024 冬小麥新品種內(nèi)麥416種子繁育技術(shù)規(guī)程
- 備戰(zhàn)2025年高考二輪復(fù)習(xí) 英語 閱讀理解 文體分類練4 說明文之研究報告書評類(含解析)
- 《25 黃帝的傳說》公開課一等獎創(chuàng)新教學(xué)設(shè)計及反思
- 脊柱關(guān)節(jié)外科個案護理
- 半導(dǎo)體芯片產(chǎn)品供應(yīng)鏈分析
- 挑戰(zhàn)杯調(diào)研報告正文
- 《天潤乳業(yè)公司償債能力存在的問題及對策9000字》
- 2025年高考數(shù)學(xué)復(fù)習(xí)解答題提優(yōu)思路(新高考專用)專題08數(shù)列求和(奇偶項討論求和)練習(xí)(學(xué)生版+解析)
- 國開(河北)2024年秋《現(xiàn)代產(chǎn)權(quán)法律制度專題》形考作業(yè)1-4答案
評論
0/150
提交評論