




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、JAVA程序設(shè)計程序設(shè)計第第5章章 深入理解深入理解JAVA語言語言第5章 深入理解JAVA語言5.1 變量及其傳遞變量及其傳遞n5 .1.1 基本類型變量與引用型變量基本類型變量與引用型變量n基本類型:其值直接存于變量中。基本類型:其值直接存于變量中。n引用型的變量除占據(jù)一定的內(nèi)存空間外,它所引用的對象引用型的變量除占據(jù)一定的內(nèi)存空間外,它所引用的對象實體(由實體(由new 創(chuàng)建)也要占據(jù)一定空間。創(chuàng)建)也要占據(jù)一定空間。n引用型變量保存的實際上是對象在內(nèi)存的地址,也稱為對引用型變量保存的實際上是對象在內(nèi)存的地址,也稱為對象的句柄。象的句柄。nMyDate.class第5章 深入理解JAVA
2、語言引用型變量與對象實體的關(guān)系引用型變量與對象實體的關(guān)系daymonthyearmn第5章 深入理解JAVA語言nMyDate m,n; nn=new MyDate();nn=m;n n.addYear();第5章 深入理解JAVA語言5.1.2 域變量與局部變量域變量與局部變量n從語法角度看從語法角度看n域變量屬于類或接口;域變量屬于類或接口;public,private,static,final 修飾。修飾。n而局部變量是在方法中定義的變量或方法的參變量。而局部變量是在方法中定義的變量或方法的參變量。n都可用都可用Final修飾,而局部變量則不能夠被訪問控制符及修飾,而局部變量則不能夠被訪
3、問控制符及static修修飾。飾。n從存儲角度看從存儲角度看n從變量在內(nèi)存中的存儲方式來看,域變量是對象的一部分,而對從變量在內(nèi)存中的存儲方式來看,域變量是對象的一部分,而對象是存在于堆中的,局部變量是存在于棧中。象是存在于堆中的,局部變量是存在于棧中。n域變量的生命周期與局部變量的生命周期比較。域變量的生命周期與局部變量的生命周期比較。n另外,域變量可以自動賦初值,局部變量則須顯式賦值。局部變另外,域變量可以自動賦初值,局部變量則須顯式賦值。局部變量必須顯示賦值后才能夠使用。量必須顯示賦值后才能夠使用。第5章 深入理解JAVA語言n class Test()n n int a;n void
4、m()n int b;n System.out.println(b);/編譯不能通過需要編譯不能通過需要/初初始化。始化。n n 第5章 深入理解JAVA語言5.1.3 變量的傳遞變量的傳遞n調(diào)用對象方法時,要傳遞參數(shù)。在傳遞參數(shù)時,調(diào)用對象方法時,要傳遞參數(shù)。在傳遞參數(shù)時,Java 是值傳遞,即,在調(diào)用一個方法時,是將是值傳遞,即,在調(diào)用一個方法時,是將表表達式的值達式的值復(fù)制給形式參數(shù)。復(fù)制給形式參數(shù)。n對于引用型變量,傳遞的值是引用值對于引用型變量,傳遞的值是引用值(可以理解為可以理解為內(nèi)存地址內(nèi)存地址)。nTransByValue.java第5章 深入理解JAVA語言nJava中的參數(shù)
5、都是按值傳遞的,但對于引用型變中的參數(shù)都是按值傳遞的,但對于引用型變量,傳遞的值是引用值,所以方法中對數(shù)據(jù)的操量,傳遞的值是引用值,所以方法中對數(shù)據(jù)的操作可以改變對象的屬性。作可以改變對象的屬性。第5章 深入理解JAVA語言npublic class TransByValue n private static int a;n public static void main(String args) n int a=0;n modify(a);n System.out.println(a);n int b=new int1;n modify(b);n System.out.println(b0)
6、; /1 or 5nn public static void modify(int a)n a+;n n public static void modify(int b)n b0+;n b=new int5;n n /:第5章 深入理解JAVA語言5.1.4 變量的返回變量的返回n方法的返回:方法的返回:n返回基本類型。返回基本類型。n返回引用類型。它就可以存取對象實體。返回引用類型。它就可以存取對象實體。n Object getNewObject()nn Object obj=new Object();n return obj;nn調(diào)用時:調(diào)用時:Object p= GetNewObject
7、();第5章 深入理解JAVA語言5.2 多態(tài)和虛方法調(diào)用多態(tài)和虛方法調(diào)用n多態(tài)多態(tài)(Polymorphism)是指一個程序中相同的是指一個程序中相同的名字名字表示不表示不同的同的含含義義的情況。的情況。n覆蓋覆蓋(override) (子類對父類方法)(子類對父類方法)n重載重載(overload) (同一個類中定義多個同名的不同方法)。(同一個類中定義多個同名的不同方法)。n動態(tài)綁定(動態(tài)綁定(dynamic binding) -虛方法調(diào)用虛方法調(diào)用(virtual method invoking) 。n它能夠使對象所編寫的程序,不用做修改就可以適應(yīng)于其所有的它能夠使對象所編寫的程序,不用
8、做修改就可以適應(yīng)于其所有的子類,如在調(diào)用方法時,程序會正確地調(diào)用子對象的方法。子類,如在調(diào)用方法時,程序會正確地調(diào)用子對象的方法。n多態(tài)的特點大大提高了程序的抽象程度和簡潔性,更重要的是,多態(tài)的特點大大提高了程序的抽象程度和簡潔性,更重要的是,它最大限度地降低了類和程序模塊之間的耦合性,提高了類模塊它最大限度地降低了類和程序模塊之間的耦合性,提高了類模塊的封閉性,使得它們不需了解對方的具體細節(jié),就可以很好地共的封閉性,使得它們不需了解對方的具體細節(jié),就可以很好地共同工作。這個優(yōu)點對于程序的設(shè)計、開發(fā)和維護都有很大的好處。同工作。這個優(yōu)點對于程序的設(shè)計、開發(fā)和維護都有很大的好處。 第5章 深入理
9、解JAVA語言5.2.1 上溯造型上溯造型n就是把派生類型當(dāng)作基本類型處理的過程。就是把派生類型當(dāng)作基本類型處理的過程。n doStuff(Shape s)n s.erase();n /n s.draw();n 第5章 深入理解JAVA語言nCircle c=new Circle;nTriangle t= new Triangle();nLine l= new Line();ndoStuff(c);ndoStuff(t);ndoStuff(l);第5章 深入理解JAVA語言5.2.2 虛方法調(diào)用虛方法調(diào)用n所有的非所有的非final方法都會自動地進行綁定!方法都會自動地進行綁定!nTestVi
10、rtualInvoke.javan用虛方法調(diào)用,可以實現(xiàn)運行時的多態(tài)!用虛方法調(diào)用,可以實現(xiàn)運行時的多態(tài)!n在使用上溯造型的情況下,子類對象可以當(dāng)做父類對在使用上溯造型的情況下,子類對象可以當(dāng)做父類對象,對于重載或繼承的方法,象,對于重載或繼承的方法,Java運行時系統(tǒng)根據(jù)調(diào)運行時系統(tǒng)根據(jù)調(diào)用該方法的實例的類型來決定選擇哪個方法調(diào)用。用該方法的實例的類型來決定選擇哪個方法調(diào)用。 第5章 深入理解JAVA語言虛方法調(diào)用虛方法調(diào)用n子類重載了父類方法時,運行時,系統(tǒng)調(diào)用子類子類重載了父類方法時,運行時,系統(tǒng)調(diào)用子類的方法。的方法。n繼承時,則調(diào)用父類的方法。繼承時,則調(diào)用父類的方法。n運行時,根據(jù)
11、實際的類型調(diào)用正確的方法,對面運行時,根據(jù)實際的類型調(diào)用正確的方法,對面向?qū)ο蟮某绦蛟O(shè)計來說,就叫向?qū)ο蟮某绦蛟O(shè)計來說,就叫“多態(tài)型性多態(tài)型性”。n用虛方法調(diào)用,可以實現(xiàn)運行時的多態(tài),它體現(xiàn)了面用虛方法調(diào)用,可以實現(xiàn)運行時的多態(tài),它體現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計中的代碼復(fù)用性。已經(jīng)編譯好的類庫向?qū)ο蟪绦蛟O(shè)計中的代碼復(fù)用性。已經(jīng)編譯好的類庫可以調(diào)用新定義的子類的方法而不必重新編譯,而且可以調(diào)用新定義的子類的方法而不必重新編譯,而且如果增加幾個子類的定義,只需分別用如果增加幾個子類的定義,只需分別用new生成不同生成不同子類的實例,會自動調(diào)用不同子類的相應(yīng)方法。子類的實例,會自動調(diào)用不同子類的相應(yīng)方法。
12、nstatic,private, 和和 final不存在虛方法的調(diào)用問不存在虛方法的調(diào)用問題。題。第5章 深入理解JAVA語言nCircle c=new Circle();nTriangle t=Triangle();nLine l=new Line();n doStiff(c);n doStiff(t);n doStiff(l);第5章 深入理解JAVA語言第5章 深入理解JAVA語言5.2.3 動態(tài)類型確定動態(tài)類型確定n1. 變量變量 instanceof 類型類型 結(jié)果是結(jié)果是boolean 值。值。nInstanceOf1.java第5章 深入理解JAVA語言2. Class類類n對象
13、可以通過對象可以通過getClass()方法來獲得運行時的信息。方法來獲得運行時的信息。ngetClass()是是java.lang.Object的方法,而的方法,而Object是所是所有類的父類。所以任何對象都可以用有類的父類。所以任何對象都可以用getClass()方法。方法。n這種獲得運行時對象的方法也叫反射。這種獲得運行時對象的方法也叫反射。nRunTimeClassInfo.javangetClass()方法得到對象的運行時的類信息,即一個方法得到對象的運行時的類信息,即一個Class類的對類的對象,它的象,它的getFields()及及getMethods()方法能進一步獲得其詳細
14、方法能進一步獲得其詳細信息信息 n注:在注:在JDK1.5以上的版本中,還有元數(shù)據(jù)注記(以上的版本中,還有元數(shù)據(jù)注記(Annotation)來進一步增強反射功能來進一步增強反射功能 第5章 深入理解JAVA語言5.3 對象構(gòu)造與初始化對象構(gòu)造與初始化n5.3.1 調(diào)用本類或父類的構(gòu)造方法調(diào)用本類或父類的構(gòu)造方法nthis調(diào)用本類的其他構(gòu)造方法。調(diào)用本類的其他構(gòu)造方法。nsuper調(diào)用調(diào)用直接直接父類的構(gòu)造方法父類的構(gòu)造方法n如果沒有如果沒有this及及super,則編譯器自動加上,則編譯器自動加上super(),即調(diào)用直接父類不帶參數(shù)的構(gòu)造方法。,即調(diào)用直接父類不帶參數(shù)的構(gòu)造方法。nthis或
15、或super要放在第一條語句要放在第一條語句,且只能夠有一條且只能夠有一條.第5章 深入理解JAVA語言nClass Ann A(int a)nnClass B extends Ann B(String s) /編譯不能夠通過編譯不能夠通過.nn編譯器會自動調(diào)用編譯器會自動調(diào)用B(String s) super(); 出錯出錯.n解決方法解決方法:n在在B的構(gòu)造方法中的構(gòu)造方法中,加入加入super(3);n在在A中加入一個不帶參數(shù)的構(gòu)造方法中加入一個不帶參數(shù)的構(gòu)造方法,A()n去掉去掉A中全部的構(gòu)造方法中全部的構(gòu)造方法,則編譯器會自動加入一個不則編譯器會自動加入一個不帶參數(shù)的構(gòu)造方法帶參數(shù)的
16、構(gòu)造方法,稱為默認的構(gòu)造方法稱為默認的構(gòu)造方法.第5章 深入理解JAVA語言n在構(gòu)造函數(shù)中使用在構(gòu)造函數(shù)中使用this和和super.nConstructCallThisAndSuper.java第5章 深入理解JAVA語言在構(gòu)造方法中調(diào)用this及super或自動加入的super,最終保證了任何一個構(gòu)造方法都要調(diào)用父類的構(gòu)造方法,而父類的構(gòu)造方法又會再調(diào)用其父類的構(gòu)造方法,直到最頂層的Object類。這是符合面向?qū)ο蟮母拍畹模驗楸仨毩钏懈割惖臉?gòu)造方法都得到調(diào)用,否則整個對象的構(gòu)建就可能不正確。 第5章 深入理解JAVA語言5.3.2 構(gòu)造方法的執(zhí)行過程構(gòu)造方法的執(zhí)行過程n對于一個復(fù)雜的對
17、象,構(gòu)造方法的執(zhí)行過程遵照以下步驟:對于一個復(fù)雜的對象,構(gòu)造方法的執(zhí)行過程遵照以下步驟:n調(diào)用本類或父類的構(gòu)造方法,直至最深一層派生類。調(diào)用本類或父類的構(gòu)造方法,直至最深一層派生類。n按照聲明順序執(zhí)行域的初始化賦值。按照聲明順序執(zhí)行域的初始化賦值。n執(zhí)行構(gòu)造函數(shù)中的各語句。執(zhí)行構(gòu)造函數(shù)中的各語句。nConstructSequence.javan構(gòu)建器的調(diào)用順序非常重要。先父類構(gòu)造,再本類成員賦構(gòu)建器的調(diào)用順序非常重要。先父類構(gòu)造,再本類成員賦值,最后執(zhí)行構(gòu)造方法中的語句。值,最后執(zhí)行構(gòu)造方法中的語句。第5章 深入理解JAVA語言第5章 深入理解JAVA語言5.3.3構(gòu)造方法內(nèi)部調(diào)用的方法的構(gòu)造
18、方法內(nèi)部調(diào)用的方法的多態(tài)性多態(tài)性n在構(gòu)造子類的一個對象時,子類構(gòu)造方法會調(diào)用父類的構(gòu)在構(gòu)造子類的一個對象時,子類構(gòu)造方法會調(diào)用父類的構(gòu)造方法,而如果父類的構(gòu)造方法中調(diào)用該對象的其他方法,造方法,而如果父類的構(gòu)造方法中調(diào)用該對象的其他方法,如果所調(diào)用的方法又被子類所覆蓋的話,它可能實際上調(diào)如果所調(diào)用的方法又被子類所覆蓋的話,它可能實際上調(diào)用的是子類的方法用的是子類的方法 ,這是由動態(tài)綁定(虛方法調(diào)用)所決,這是由動態(tài)綁定(虛方法調(diào)用)所決定的。從語法上來說這是合理的,但有時會造成事實上的定的。從語法上來說這是合理的,但有時會造成事實上的不合理,所以在構(gòu)造方法中調(diào)用其他方法要小心。不合理,所以在構(gòu)
19、造方法中調(diào)用其他方法要小心。nConstructInvokeMetamorph.java第5章 深入理解JAVA語言第5章 深入理解JAVA語言n在本例中,在構(gòu)造函數(shù)中調(diào)用了一個動態(tài)綁定的在本例中,在構(gòu)造函數(shù)中調(diào)用了一個動態(tài)綁定的方法方法sayHello(),這時,會使用那個方法被覆蓋的這時,會使用那個方法被覆蓋的定義,而這時對象嘗未完全構(gòu)建好,所以定義,而這時對象嘗未完全構(gòu)建好,所以School還沒有賦值。還沒有賦值。n因此,可能的話,在構(gòu)建器中避免調(diào)用任何方法,因此,可能的話,在構(gòu)建器中避免調(diào)用任何方法,用盡可能簡單的方法使對象進入就緒狀態(tài)。用盡可能簡單的方法使對象進入就緒狀態(tài)。n惟一能夠
20、安全調(diào)用的是具有惟一能夠安全調(diào)用的是具有final屬性的方法。屬性的方法。第5章 深入理解JAVA語言5.4 對象清除與垃圾回收對象清除與垃圾回收nnew創(chuàng)建對象。創(chuàng)建對象。n自動清除,清除過程稱為垃圾回收。自動清除,清除過程稱為垃圾回收。第5章 深入理解JAVA語言5.4.1 對象的自動清除對象的自動清除n對象回收是由對象回收是由 Java虛擬機的垃圾回收線程來完成虛擬機的垃圾回收線程來完成的。的。n系統(tǒng)中的任何對象都有一個引用計數(shù)器,當(dāng)其值系統(tǒng)中的任何對象都有一個引用計數(shù)器,當(dāng)其值為為0時,說明該對象可以回收。時,說明該對象可以回收。第5章 深入理解JAVA語言nString method
21、()n String a,b;n a=new String(“hello world”);n b=new String(“game over”);n System.out.println(a+b+”O(jiān)k”);n a=null;n a=b;n return a;n第5章 深入理解JAVA語言5.4.2 System.gc()方法方法n它是它是System類的類的static方法,方法, 它可以要求系統(tǒng)它可以要求系統(tǒng)進行垃圾回收。但它僅僅只有建議權(quán)。進行垃圾回收。但它僅僅只有建議權(quán)。第5章 深入理解JAVA語言5.4.3 finalize()方法方法n關(guān)閉打開的文件、清除一些非內(nèi)存資源等工作需要在
22、對象關(guān)閉打開的文件、清除一些非內(nèi)存資源等工作需要在對象懂得回收時進行,這可以通過覆蓋懂得回收時進行,這可以通過覆蓋Object 的的finalize()方方法來實現(xiàn)。因為系統(tǒng)在回收時會自動調(diào)用對象的法來實現(xiàn)。因為系統(tǒng)在回收時會自動調(diào)用對象的finalize() 方法。方法。n一般來說,子類的一般來說,子類的finalize()方法中應(yīng)該調(diào)用父類的方法中應(yīng)該調(diào)用父類的finalize()方法,以保證父類的清理工作能夠正常進行。方法,以保證父類的清理工作能夠正常進行。n protected void finalize() throws Throwable nTestCleanUp.java第5章
23、深入理解JAVA語言第5章 深入理解JAVA語言n本例中,每個類都有一個方法本例中,每個類都有一個方法cleanup()來負責(zé)來負責(zé)清理工作。先完成本類的有關(guān)工作,然后調(diào)用父清理工作。先完成本類的有關(guān)工作,然后調(diào)用父類的清除方法。類的清除方法。n finally表明表明:無論會發(fā)生什么事情,總是為無論會發(fā)生什么事情,總是為X調(diào)調(diào)用用cleanup().第5章 深入理解JAVA語言5.5 內(nèi)部類與匿名類內(nèi)部類與匿名類n內(nèi)部類是在其他類中的類。內(nèi)部類是在其他類中的類。n匿名類是一種特殊的內(nèi)部類,它沒有類名,在定義類的同時就生成該匿名類是一種特殊的內(nèi)部類,它沒有類名,在定義類的同時就生成該對象的一個
24、實例。對象的一個實例。n1.內(nèi)部類的定義和使用內(nèi)部類的定義和使用n將類的定義置入一個用于封裝它的類內(nèi)部即可。將類的定義置入一個用于封裝它的類內(nèi)部即可。n內(nèi)部類不能夠與外部類同名。內(nèi)部類不能夠與外部類同名。n在封裝它的類的內(nèi)部使用內(nèi)部類,與普通類的使用方式相同,在其他在封裝它的類的內(nèi)部使用內(nèi)部類,與普通類的使用方式相同,在其他地方使用,類名前要冠以外部類的名字。在用地方使用,類名前要冠以外部類的名字。在用new創(chuàng)建內(nèi)部類時,也創(chuàng)建內(nèi)部類時,也要在要在 new前面冠以對象變量。前面冠以對象變量。nInnerUse.java第5章 深入理解JAVA語言第5章 深入理解JAVA語言2. 在內(nèi)部類中使用
25、外部類的成在內(nèi)部類中使用外部類的成員員n內(nèi)部類中可以直接訪問外部類的其他域及方法。內(nèi)部類中可以直接訪問外部類的其他域及方法。即使即使private也行。也行。n如內(nèi)部類中有與外部類同名的域或方法,可以用如內(nèi)部類中有與外部類同名的域或方法,可以用this來訪問外部成員。來訪問外部成員。nTestInnerThis.java第5章 深入理解JAVA語言3.內(nèi)部類的修飾符內(nèi)部類的修飾符n內(nèi)部類與類中的域、方法一樣是外部類的成員,它的前面內(nèi)部類與類中的域、方法一樣是外部類的成員,它的前面也可以有訪問控制符和其他修飾符。內(nèi)部類可用的修飾符也可以有訪問控制符和其他修飾符。內(nèi)部類可用的修飾符比外部類的修飾符
26、更多。(外部類不能夠使用比外部類的修飾符更多。(外部類不能夠使用protected,private,static等修飾,而內(nèi)部類可以。等修飾,而內(nèi)部類可以。n訪問控制符:訪問控制符:public,protected,默認及默認及private。nFinal,abstract。n用用static修飾表明該內(nèi)部類實際是一種外部類。修飾表明該內(nèi)部類實際是一種外部類。第5章 深入理解JAVA語言nStatic 環(huán)境在使用時要遵循以下規(guī)則:環(huán)境在使用時要遵循以下規(guī)則:n1、實例化、實例化static內(nèi)部類時,在內(nèi)部類時,在 new前面不需要用對象變前面不需要用對象變量;量;n2、Static內(nèi)部類中不能訪問其外部類的非內(nèi)部類中不能訪問其外部類的非static的域及方的域及方法,既只能夠訪問法,既只能夠訪問static成員。成員。n3、static方法中不能訪問非方法中不能訪問非static的域及方法,也不能夠的域及方法,也不能夠不帶前綴地不帶前綴地new 一個非一個非static的內(nèi)部類。的內(nèi)部類。第5章 深入理解JAVA語言nTestInne
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年網(wǎng)絡(luò)倫理與社會責(zé)任考試試題及答案
- 2025年設(shè)計類院校藝術(shù)考試模擬卷及答案
- 2025年媒體與傳播管理考試試題及答案
- 智能監(jiān)控技術(shù)在2025年智慧港口建設(shè)中的應(yīng)用實施方案報告
- 特殊快遞安全管理制度
- 特殊物品人員管理制度
- 特殊貨物報備管理制度
- 特種醫(yī)療設(shè)備管理制度
- 狂犬門診工作管理制度
- 玉米大豆套種管理制度
- 模具保養(yǎng)記錄表
- 形象店加盟管理方案
- 1.《鄭人買履》課件PPT
- T∕ZS 0128-2020 既有建筑結(jié)構(gòu)安全智慧監(jiān)測技術(shù)規(guī)程
- 發(fā)電機定子繞組泄漏電流和直流耐壓試驗作業(yè)指導(dǎo)書
- 冀教版小學(xué)美術(shù)六年級下冊教案
- 甘肅省生態(tài)功能區(qū)劃
- DB22∕T 1073-2011 綠色淫羊藿生產(chǎn)技術(shù)規(guī)程
- 教練技術(shù)LP三階段教練手冊
- 國家開放大學(xué)《人文英語3》章節(jié)測試參考答案
- 鉆孔灌注樁超灌混凝土管理辦法
評論
0/150
提交評論