![第5章 java類(lèi)的定義_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/4812af48-874a-4731-9a1a-640832374138/4812af48-874a-4731-9a1a-6408323741381.gif)
![第5章 java類(lèi)的定義_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/4812af48-874a-4731-9a1a-640832374138/4812af48-874a-4731-9a1a-6408323741382.gif)
![第5章 java類(lèi)的定義_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/4812af48-874a-4731-9a1a-640832374138/4812af48-874a-4731-9a1a-6408323741383.gif)
![第5章 java類(lèi)的定義_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/4812af48-874a-4731-9a1a-640832374138/4812af48-874a-4731-9a1a-6408323741384.gif)
![第5章 java類(lèi)的定義_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/4812af48-874a-4731-9a1a-640832374138/4812af48-874a-4731-9a1a-6408323741385.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JAVA1第第5章章 類(lèi)的定義類(lèi)的定義什么是類(lèi)什么是類(lèi)5.1定義類(lèi)定義類(lèi)5.2方法的定義方法的定義5.3 構(gòu)造函數(shù)構(gòu)造函數(shù)5.4類(lèi)的定義和使用類(lèi)的定義和使用5.5 方法重載方法重載5.6對(duì)象的使用對(duì)象的使用5.7遞歸遞歸5.8理解包理解包5.9控制對(duì)類(lèi)成員的訪問(wèn)控制對(duì)類(lèi)成員的訪問(wèn)5.10 嵌套類(lèi)嵌套類(lèi)5.11finalize( )finalize( )方法方法5.12本地方法本地方法5.13教學(xué)重點(diǎn)教學(xué)重點(diǎn)v了解面向?qū)ο笏枷?,掌握?duì)象和類(lèi)的基本概念、了解面向?qū)ο笏枷?,掌握?duì)象和類(lèi)的基本概念、明確明確JavaJava中的類(lèi)的定義方法、構(gòu)造方法、方法重中的類(lèi)的定義方法、構(gòu)造方法、方法重載和載和th
2、isthis的使用。的使用。 v掌握對(duì)象的使用方法,明確封裝的作用與方法。掌握對(duì)象的使用方法,明確封裝的作用與方法。 v了解繼承的基本概念,明確方法重寫(xiě)的作用,要了解繼承的基本概念,明確方法重寫(xiě)的作用,要注意與重載的區(qū)別,掌握注意與重載的區(qū)別,掌握supersuper關(guān)鍵字的使用、繼關(guān)鍵字的使用、繼承中的構(gòu)造方法調(diào)用;了解承中的構(gòu)造方法調(diào)用;了解FinalizerFinalizer。 v掌握多態(tài)性的基本概念、明確多態(tài)實(shí)現(xiàn)的條件,掌握多態(tài)性的基本概念、明確多態(tài)實(shí)現(xiàn)的條件,熟練掌握多態(tài)性的代碼實(shí)現(xiàn)熟練掌握多態(tài)性的代碼實(shí)現(xiàn) v類(lèi)的定義:類(lèi)的定義: 類(lèi)是一類(lèi)對(duì)象的抽象或原形,它定義了該類(lèi)對(duì)象類(lèi)是一類(lèi)對(duì)
3、象的抽象或原形,它定義了該類(lèi)對(duì)象的共同的的共同的和和。 用戶可以使用類(lèi)的定義來(lái)生成該類(lèi)的對(duì)象,生成用戶可以使用類(lèi)的定義來(lái)生成該類(lèi)的對(duì)象,生成的對(duì)象將可以使用該類(lèi)的所以組件。的對(duì)象將可以使用該類(lèi)的所以組件。v類(lèi)中包含兩種內(nèi)容:類(lèi)中包含兩種內(nèi)容:(1)成員成員(field)域:是存儲(chǔ)數(shù)據(jù)項(xiàng)的變量。成員域也域:是存儲(chǔ)數(shù)據(jù)項(xiàng)的變量。成員域也稱稱。(2)方法方法(method):定義了用戶可以進(jìn)行的操作,:定義了用戶可以進(jìn)行的操作,也決定了利用類(lèi)的對(duì)象可以做的事情。也決定了利用類(lèi)的對(duì)象可以做的事情。v例例1. 定義了一個(gè)名為定義了一個(gè)名為SimplePoint 的類(lèi)的類(lèi)public class Simp
4、lePoint public int x = 0; /x為成員變量為成員變量 public int y = 0; /y為成員變量為成員變量 當(dāng)創(chuàng)建一個(gè)新的對(duì)象時(shí)(對(duì)該類(lèi)實(shí)例化),當(dāng)創(chuàng)建一個(gè)新的對(duì)象時(shí)(對(duì)該類(lèi)實(shí)例化), 就會(huì)就會(huì)為該對(duì)象及其成員分配空間,同時(shí)對(duì)成員變量進(jìn)行為該對(duì)象及其成員分配空間,同時(shí)對(duì)成員變量進(jìn)行初始化。初始化。v例例2 2 定義一個(gè)名為定義一個(gè)名為SimpleRectangleSimpleRectangle類(lèi)類(lèi)public class SimpleRectanglepublic class SimpleRectangle public intpublic int width
5、= 0; width = 0;public intpublic int height = 0; height = 0;public SimplePoint origin = new SimplePoint(); 例例3 public class Point public int x = 0; public int y = 0; / a constructor! public Point(int x, int y) this.x = x; this.y = y; new Point(44, 78)new Point(44, 78) 在聲明時(shí)使用關(guān)鍵字在聲明時(shí)使用關(guān)鍵字static。 只與類(lèi)有關(guān),
6、被該類(lèi)的所有對(duì)象共享。只與類(lèi)有關(guān),被該類(lèi)的所有對(duì)象共享。 未創(chuàng)建該類(lèi)的對(duì)象時(shí),這些變量仍然存在。未創(chuàng)建該類(lèi)的對(duì)象時(shí),這些變量仍然存在。 該類(lèi)型變量與類(lèi)的每個(gè)實(shí)例有關(guān)。該類(lèi)型變量與類(lèi)的每個(gè)實(shí)例有關(guān)。 該類(lèi)的每個(gè)實(shí)例都有他自己的變量的副本和賦值。該類(lèi)的每個(gè)實(shí)例都有他自己的變量的副本和賦值。類(lèi)類(lèi)Sphere的定義的定義public class Sphere /class variablestatic double PI=3.14;/instance variabledouble xCenter;double yCenter;double zCenter;double radius;3.14Spher
7、e.PI由所有對(duì)象共享由所有對(duì)象共享globexCenteryCenterzCenterradiusballxCenteryCenterzCenterradius提供了使用類(lèi)定義中指定的變量進(jìn)行的操提供了使用類(lèi)定義中指定的變量進(jìn)行的操作。作。只可以在特只可以在特定的對(duì)象中執(zhí)行。定的對(duì)象中執(zhí)行。使用使用static進(jìn)行聲進(jìn)行聲明,即使該類(lèi)沒(méi)有對(duì)象存在也可以執(zhí)行。明,即使該類(lèi)沒(méi)有對(duì)象存在也可以執(zhí)行。v注意:類(lèi)方法不能引用實(shí)例變量。注意:類(lèi)方法不能引用實(shí)例變量。v訪問(wèn)靜態(tài)成員或靜態(tài)方法:訪問(wèn)靜態(tài)成員或靜態(tài)方法:v例如:例如: double rootPi = Math.sqrt ( Math. PI
8、);v實(shí)例變量和實(shí)例方法只能通過(guò)實(shí)例變量和實(shí)例方法只能通過(guò)來(lái)調(diào)用,來(lái)調(diào)用,因?yàn)樵诙x中已經(jīng)和一個(gè)特定的對(duì)象相關(guān)。因?yàn)樵诙x中已經(jīng)和一個(gè)特定的對(duì)象相關(guān)。v例如:若有對(duì)象例如:若有對(duì)象ball存在,則:存在,則: double ballVolume = ball.volume();class 類(lèi)名類(lèi)名類(lèi)的詳細(xì)定義;類(lèi)的詳細(xì)定義; v 例如: class Sphere static final double PI=3.14; static int count=0; double radius; double xCenter; double yCenter; double zCenter; 是一個(gè)自包
9、含的代碼塊是一個(gè)自包含的代碼塊 有自己的名稱及可以重復(fù)使用的屬性有自己的名稱及可以重復(fù)使用的屬性 可以根據(jù)需要在程序多個(gè)不同的地方被執(zhí)行可以根據(jù)需要在程序多個(gè)不同的地方被執(zhí)行 可以使用其名字來(lái)調(diào)用方法可以使用其名字來(lái)調(diào)用方法 方法可以指定返回值的類(lèi)型,若沒(méi)有返回值,則方法可以指定返回值的類(lèi)型,若沒(méi)有返回值,則應(yīng)聲明方法的返回對(duì)象類(lèi)型為應(yīng)聲明方法的返回對(duì)象類(lèi)型為voidv 方法的基本結(jié)構(gòu)如下:方法的基本結(jié)構(gòu)如下:return_type methodName(arg1,arg2,argn)statement;v 方法的方法的出現(xiàn)在方法名后的大括號(hào)中,指定了在出現(xiàn)在方法名后的大括號(hào)中,指定了在方法調(diào)
10、用時(shí)需要向其傳遞的信息。方法調(diào)用時(shí)需要向其傳遞的信息。v 當(dāng)用戶調(diào)用方法時(shí)提供給形參的值稱為當(dāng)用戶調(diào)用方法時(shí)提供給形參的值稱為。v有返回值:有返回值:return return_value;v無(wú)返回值:無(wú)返回值:return 或或 不寫(xiě)不寫(xiě)v注意:如果方法有返回值,則返回值的類(lèi)型要與聲注意:如果方法有返回值,則返回值的類(lèi)型要與聲明方法時(shí)定義的返回值類(lèi)型保持一致。明方法時(shí)定義的返回值類(lèi)型保持一致。 定義了當(dāng)調(diào)用該方法時(shí)傳遞給該方法的類(lèi)型定義了當(dāng)調(diào)用該方法時(shí)傳遞給該方法的類(lèi)型及其值,包括參數(shù)類(lèi)型和參數(shù)名,并出現(xiàn)在方法定及其值,包括參數(shù)類(lèi)型和參數(shù)名,并出現(xiàn)在方法定義的形參列表中。義的形參列表中。定義
11、了執(zhí)行方法時(shí)傳遞給形參的值,而且實(shí)定義了執(zhí)行方法時(shí)傳遞給形參的值,而且實(shí)參的值通過(guò)執(zhí)行該方法時(shí)的形參名來(lái)引用。參的值通過(guò)執(zhí)行該方法時(shí)的形參名來(lái)引用。 (1)實(shí)參值的類(lèi)型一定要和定義方法時(shí)對(duì)應(yīng)的形)實(shí)參值的類(lèi)型一定要和定義方法時(shí)對(duì)應(yīng)的形參類(lèi)型保持一致。參類(lèi)型保持一致。 (2)對(duì)于非類(lèi)對(duì)象的數(shù)據(jù),實(shí)參到形參的數(shù)據(jù)采)對(duì)于非類(lèi)對(duì)象的數(shù)據(jù),實(shí)參到形參的數(shù)據(jù)采用用的方法。的方法。 示例程序示例程序: VariableDemovfinal形參形參 意義:如果將方法中的形參聲明為意義:如果將方法中的形參聲明為final,可以防,可以防止再調(diào)用該方法時(shí),實(shí)參的值被修改。止再調(diào)用該方法時(shí),實(shí)參的值被修改。 說(shuō)明
12、:說(shuō)明:final形參對(duì)于形參對(duì)于的方式?jīng)]有意義,而的方式?jīng)]有意義,而對(duì)于對(duì)于的形參有意義,這樣做可以防止的形參有意義,這樣做可以防止對(duì)實(shí)參對(duì)象的誤操作。對(duì)實(shí)參對(duì)象的誤操作。 在定義的方法前面加關(guān)鍵字在定義的方法前面加關(guān)鍵字static。v例:例:class Sphereint getCount() return count; v 實(shí)例方法可以訪問(wèn)類(lèi)的任何數(shù)據(jù)成員,直接使用即可。實(shí)例方法可以訪問(wèn)類(lèi)的任何數(shù)據(jù)成員,直接使用即可。class Spherestatic final double PI=3.14;static int count=0;double radius;double xCent
13、er;double yCenter;double zCenter; static int getCount() return count; double volume() return 4.0/3.0*PI*radius*radius*radius; v每個(gè)實(shí)例方法都有一個(gè)名為每個(gè)實(shí)例方法都有一個(gè)名為this的變量,它引用調(diào)的變量,它引用調(diào)用該方法的當(dāng)前對(duì)象,即當(dāng)一個(gè)方法引用類(lèi)的一個(gè)用該方法的當(dāng)前對(duì)象,即當(dāng)一個(gè)方法引用類(lèi)的一個(gè)實(shí)例變量時(shí),由編譯器默認(rèn)使用。實(shí)例變量時(shí),由編譯器默認(rèn)使用。v例如,類(lèi)中有實(shí)例變量例如,類(lèi)中有實(shí)例變量value、a、b,則如下兩條,則如下兩條語(yǔ)句等價(jià)。語(yǔ)句等價(jià)。 va
14、lue = a+b; this.value = this.a+this.b; vthis是是Java的一個(gè)關(guān)鍵字,表示某個(gè)對(duì)象。的一個(gè)關(guān)鍵字,表示某個(gè)對(duì)象。 vthis可以出現(xiàn)在實(shí)例方法和構(gòu)造方法中,但不可以可以出現(xiàn)在實(shí)例方法和構(gòu)造方法中,但不可以出現(xiàn)在類(lèi)方法中。出現(xiàn)在類(lèi)方法中。 vthis關(guān)鍵字出現(xiàn)在類(lèi)的構(gòu)造方法中時(shí),代表使用該關(guān)鍵字出現(xiàn)在類(lèi)的構(gòu)造方法中時(shí),代表使用該構(gòu)造方法所創(chuàng)建的對(duì)象。構(gòu)造方法所創(chuàng)建的對(duì)象。 vthis關(guān)鍵字出現(xiàn)在類(lèi)的實(shí)例方法中時(shí),代表正在調(diào)關(guān)鍵字出現(xiàn)在類(lèi)的實(shí)例方法中時(shí),代表正在調(diào)用該方法的當(dāng)前對(duì)象。用該方法的當(dāng)前對(duì)象。 class Sphere static final
15、 double PI = 3.14; / 初始化靜態(tài)成員初始化靜態(tài)成員 double radius = 5.0; /初始化非靜態(tài)成員初始化非靜態(tài)成員 double xCenter = 10.0; /初始化非靜態(tài)成員初始化非靜態(tài)成員 指位于括號(hào)中的一個(gè)代碼塊,它在類(lèi)的指位于括號(hào)中的一個(gè)代碼塊,它在類(lèi)的對(duì)象生成之前執(zhí)行對(duì)象生成之前執(zhí)行1、靜態(tài)初始化塊:使用、靜態(tài)初始化塊:使用static定義的代碼塊,當(dāng)類(lèi)定義的代碼塊,當(dāng)類(lèi)裝載到系統(tǒng)時(shí)將執(zhí)行一次。靜態(tài)初始化塊只能初裝載到系統(tǒng)時(shí)將執(zhí)行一次。靜態(tài)初始化塊只能初始化類(lèi)的靜態(tài)數(shù)據(jù)成員。始化類(lèi)的靜態(tài)數(shù)據(jù)成員。2、非靜態(tài)初始化塊:對(duì)每個(gè)要生成的對(duì)象執(zhí)行一、非靜
16、態(tài)初始化塊:對(duì)每個(gè)要生成的對(duì)象執(zhí)行一次,可以初始化類(lèi)的實(shí)例變量。次,可以初始化類(lèi)的實(shí)例變量。 函數(shù)名與類(lèi)名相同函數(shù)名與類(lèi)名相同,且不指定返回對(duì)象,且不指定返回對(duì)象類(lèi)型,可以有參數(shù),也可以無(wú)參數(shù),一個(gè)類(lèi)中可以類(lèi)型,可以有參數(shù),也可以無(wú)參數(shù),一個(gè)類(lèi)中可以有多個(gè)構(gòu)造函數(shù)。有多個(gè)構(gòu)造函數(shù)。在對(duì)象實(shí)例化時(shí),系統(tǒng)首先調(diào)用構(gòu)在對(duì)象實(shí)例化時(shí),系統(tǒng)首先調(diào)用構(gòu)造函數(shù),對(duì)生成的對(duì)象的實(shí)例變量進(jìn)行初始化,其造函數(shù),對(duì)生成的對(duì)象的實(shí)例變量進(jìn)行初始化,其由系統(tǒng)默認(rèn)調(diào)用。由系統(tǒng)默認(rèn)調(diào)用。如果類(lèi)中沒(méi)有顯示聲明構(gòu)造函數(shù),則系統(tǒng)會(huì)如果類(lèi)中沒(méi)有顯示聲明構(gòu)造函數(shù),則系統(tǒng)會(huì)提供一個(gè)默認(rèn)的構(gòu)造函數(shù),其無(wú)參,并且不做任何提供一個(gè)默認(rèn)的構(gòu)造
17、函數(shù),其無(wú)參,并且不做任何工作。工作。 例如:例如:class Sphere double radius, xCenter, yCenter, zCenter; Sphere(double theRadius, double x, double y, double z) radius = theRadius; xCenter = x; yCenter = y; zCenter = z; v如果沒(méi)有為類(lèi)定義任何構(gòu)造函數(shù),編譯器將自動(dòng)提如果沒(méi)有為類(lèi)定義任何構(gòu)造函數(shù),編譯器將自動(dòng)提供一個(gè)默認(rèn)構(gòu)造函數(shù),但其沒(méi)有任何參數(shù),也沒(méi)有供一個(gè)默認(rèn)構(gòu)造函數(shù),但其沒(méi)有任何參數(shù),也沒(méi)有任何語(yǔ)句,僅提供一個(gè)生成對(duì)象的入
18、口。任何語(yǔ)句,僅提供一個(gè)生成對(duì)象的入口。v注意注意: 如果類(lèi)中已有構(gòu)造函數(shù),則系統(tǒng)將不再提供如果類(lèi)中已有構(gòu)造函數(shù),則系統(tǒng)將不再提供默認(rèn)構(gòu)造函數(shù),如果此時(shí)需要一個(gè)無(wú)參構(gòu)造函數(shù),默認(rèn)構(gòu)造函數(shù),如果此時(shí)需要一個(gè)無(wú)參構(gòu)造函數(shù),則需要顯示定義一個(gè)。則需要顯示定義一個(gè)。 Sphere ball;v生成類(lèi)對(duì)象生成類(lèi)對(duì)象 ball = new Sphere(10.0, 1.0, 1.0, 1.0); 把對(duì)象當(dāng)作實(shí)參傳遞給一個(gè)方法的時(shí)候,把對(duì)象當(dāng)作實(shí)參傳遞給一個(gè)方法的時(shí)候,采用引用傳遞的機(jī)制。即實(shí)參和形參引用的是同一個(gè)對(duì)象,采用引用傳遞的機(jī)制。即實(shí)參和形參引用的是同一個(gè)對(duì)象,沒(méi)有對(duì)實(shí)際對(duì)象進(jìn)行復(fù)制。沒(méi)有對(duì)實(shí)際對(duì)
19、象進(jìn)行復(fù)制。 對(duì)象的生存期由引用它的變量決定,即對(duì)象對(duì)象的生存期由引用它的變量決定,即對(duì)象將在引用它的變量的作用域之外消失。將在引用它的變量的作用域之外消失。v 處理消失對(duì)象的過(guò)程稱為處理消失對(duì)象的過(guò)程稱為。v 程序見(jiàn):程序見(jiàn):CreateSpheres.java 和和 Sphere.java注意:將兩個(gè)源程序放在一個(gè)目錄下,在注意:將兩個(gè)源程序放在一個(gè)目錄下,在JDKJDK編譯器下,只需編譯包含編譯器下,只需編譯包含main()main()定義的文件,定義的文件,就可以編譯該程序涉及到的所有源文件。就可以編譯該程序涉及到的所有源文件。在一個(gè)類(lèi)中,用同樣的名字定義的多在一個(gè)類(lèi)中,用同樣的名字定
20、義的多個(gè)方法。個(gè)方法。各重載函數(shù)的形參列表必須不相同。各重載函數(shù)的形參列表必須不相同。v注意注意: 函數(shù)返回值不能作為判斷重載的條件。函數(shù)返回值不能作為判斷重載的條件。方法的方法的統(tǒng)稱為統(tǒng)稱為簽名。簽名。v類(lèi)中的每個(gè)方法的簽名都必須唯一,編譯器將以類(lèi)中的每個(gè)方法的簽名都必須唯一,編譯器將以此判斷該調(diào)用那一個(gè)函數(shù)。此判斷該調(diào)用那一個(gè)函數(shù)。v 如果希望通過(guò)不同的初始化數(shù)據(jù)產(chǎn)生產(chǎn)生類(lèi)的對(duì)象,如果希望通過(guò)不同的初始化數(shù)據(jù)產(chǎn)生產(chǎn)生類(lèi)的對(duì)象,則可以采用重載構(gòu)造函數(shù)的方法。例如:則可以采用重載構(gòu)造函數(shù)的方法。例如:Sphere(double x, double y, double z) xCenter =
21、x; yCenter = y; zCenter = z; radius = 1.0; +count;Sphere() xCenter = 0; yCenter = 0; zCenter = 0; radius = 1.0; +count;v在一個(gè)構(gòu)造函數(shù)中調(diào)用構(gòu)造函數(shù)在一個(gè)構(gòu)造函數(shù)中調(diào)用構(gòu)造函數(shù): 類(lèi)的構(gòu)造函數(shù)類(lèi)的構(gòu)造函數(shù)可以在其可以在其可執(zhí)行語(yǔ)句中調(diào)用該類(lèi)的另一個(gè)可執(zhí)行語(yǔ)句中調(diào)用該類(lèi)的另一個(gè)構(gòu)造函數(shù),可以省去大量的重復(fù)代碼。構(gòu)造函數(shù),可以省去大量的重復(fù)代碼??梢允褂每梢允褂胻his作為名稱,在其后面作為名稱,在其后面的括號(hào)中根據(jù)需要列出適當(dāng)?shù)膮?shù)。的括號(hào)中根據(jù)需要列出適當(dāng)?shù)膮?shù)。Sphere
22、() radius = 1.0; +count;Sphere(double x, double y, double z) this(); / 注意在第一句調(diào)用注意在第一句調(diào)用 xCenter = x; yCenter = y; zCenter = z; Sphere ball = new Sphere(10.0, 10,0, 0.0); Sphere newBall = ball;v則則newBall將引用與將引用與ball相同的對(duì)象,而沒(méi)有生相同的對(duì)象,而沒(méi)有生成新對(duì)象,在修改這個(gè)對(duì)象時(shí),成新對(duì)象,在修改這個(gè)對(duì)象時(shí),ball和和newBall都發(fā)生變化。都發(fā)生變化。v可以采用復(fù)制構(gòu)造函數(shù)的方
23、法,將原對(duì)象作為參可以采用復(fù)制構(gòu)造函數(shù)的方法,將原對(duì)象作為參數(shù),通過(guò)復(fù)制對(duì)象中的實(shí)例變量,來(lái)生成新的對(duì)數(shù),通過(guò)復(fù)制對(duì)象中的實(shí)例變量,來(lái)生成新的對(duì)象。象。例如:例如:Sphere(final Sphere oldSphere) radius = oldSphere.radius; xCenter= oldSphere.xCenter; yCenter = oldSphere.yCenter; zCenter = oldSphere.zCenter; +count; Sphere ball = new Sphere(10.0, 10,0, 0.0);Sphere newBall = new Sph
24、ere(ball);v本例作為上機(jī)練習(xí)題,又學(xué)生自己調(diào)試本例作為上機(jī)練習(xí)題,又學(xué)生自己調(diào)試v遞歸:一個(gè)方法調(diào)用自己的過(guò)程被稱為遞歸。遞歸:一個(gè)方法調(diào)用自己的過(guò)程被稱為遞歸。v遞歸分類(lèi):遞歸分類(lèi): 直接遞歸直接遞歸 間接遞歸間接遞歸v例題:編寫(xiě)一個(gè)方法計(jì)算一個(gè)變量的整數(shù)冪。例題:編寫(xiě)一個(gè)方法計(jì)算一個(gè)變量的整數(shù)冪。v程序見(jiàn):程序見(jiàn):PowerCalc.javav本例作為上機(jī)練習(xí)題,又學(xué)生自己調(diào)試本例作為上機(jī)練習(xí)題,又學(xué)生自己調(diào)試import java.util.Scanner;public class Digui static long fac(int n) if(n=1) return 1; e
25、lse return n*fac(n-1); public static void main(String args) int k; long f; Scanner sc=new Scanner(System.in); System.out.println(請(qǐng)輸入請(qǐng)輸入K的值的值:); k=sc.nextInt(); f=fac(k); System.out.println(f=+f); 遞歸級(jí)別 執(zhí)行操作 0 fac(5) 1 fac(4) 2 fac(3) 3 fac(2) 4 fac(1) 4 返回1 fac(1) 3 返回2 fac(2) 2 返回6 fac(3) 1 返回24 fac
26、(4) 0 返回120 fac(5)v為了便于管理大型軟件系統(tǒng)中數(shù)目眾多的類(lèi),解決為了便于管理大型軟件系統(tǒng)中數(shù)目眾多的類(lèi),解決類(lèi)命名沖突的問(wèn)題,類(lèi)命名沖突的問(wèn)題,Java引入了包(引入了包(package)。)。javalangSystemioString是有唯一命名的類(lèi)的集合是有唯一命名的類(lèi)的集合,應(yīng)著文件系統(tǒng)應(yīng)著文件系統(tǒng)的目錄層次結(jié)構(gòu)的目錄層次結(jié)構(gòu)v 包的作用:在一個(gè)包中使用的類(lèi)名不會(huì)影響到另一個(gè)包中或包的作用:在一個(gè)包中使用的類(lèi)名不會(huì)影響到另一個(gè)包中或編寫(xiě)的程序中可能出現(xiàn)的類(lèi)名。編寫(xiě)的程序中可能出現(xiàn)的類(lèi)名。v 例如:在默認(rèn)包中的例如:在默認(rèn)包中的java.lang中使用的類(lèi)中使用的類(lèi)St
27、ring,全名,全名是是java.lang.Stringv package語(yǔ)句必須是文件中的第一條語(yǔ)句。也就是說(shuō),在語(yǔ)句必須是文件中的第一條語(yǔ)句。也就是說(shuō),在package語(yǔ)句之前,除了空白和注釋之外不能有任何語(yǔ)句。語(yǔ)句之前,除了空白和注釋之外不能有任何語(yǔ)句。v 如果不加如果不加package語(yǔ)句,則指定為缺省包或無(wú)名包。語(yǔ)句,則指定為缺省包或無(wú)名包。v 在在package語(yǔ)句中,用語(yǔ)句中,用“.”來(lái)指明包(目錄)的層次。來(lái)指明包(目錄)的層次。v 為在包為在包Geometry中包含類(lèi)中包含類(lèi)Sphere,文件,文件Sphere.java中應(yīng)包含如下內(nèi)容:中應(yīng)包含如下內(nèi)容: package G
28、eometry; / 包語(yǔ)句,需放在第一行包語(yǔ)句,需放在第一行 public class Sphere v 其它類(lèi)若想包含在其它類(lèi)若想包含在Geometry中,也必須在類(lèi)定義的開(kāi)始中,也必須在類(lèi)定義的開(kāi)始處包含同一條語(yǔ)句,并且所有的類(lèi)文件都存儲(chǔ)在與包名相同處包含同一條語(yǔ)句,并且所有的類(lèi)文件都存儲(chǔ)在與包名相同的目錄下。的目錄下。v 注意:若包中的類(lèi)想被包外訪問(wèn),則類(lèi)和類(lèi)中的函數(shù)都應(yīng)定注意:若包中的類(lèi)想被包外訪問(wèn),則類(lèi)和類(lèi)中的函數(shù)都應(yīng)定義為義為public。一個(gè)包中可以有多個(gè)分類(lèi),例如已經(jīng)開(kāi)發(fā)了多一個(gè)包中可以有多個(gè)分類(lèi),例如已經(jīng)開(kāi)發(fā)了多組處理幾何問(wèn)題的類(lèi):組處理幾何問(wèn)題的類(lèi):(1)對(duì)文件:)對(duì)文件
29、:v 處理處理2D圖形的文件加入:圖形的文件加入:package Geometry.Shapes2D;v 處理處理3D圖形的文件加入:圖形的文件加入:package Geometry.Shapes3D;(2)對(duì)目錄:)對(duì)目錄:v 處理處理2D圖形的文件存放在:圖形的文件存放在:GeometryShapes2d目錄目錄下下v 處理處理3D圖形的文件存放在:圖形的文件存放在:GeometryShapes3d目錄目錄下下 javac classpath “c:temp” filename.java是指包含該包目錄的上一級(jí)目錄的路徑,注意不包含是指包含該包目錄的上一級(jí)目錄的路徑,注意不包含該包目錄名本
30、身。該包目錄名本身。v 例如,包的源文件存儲(chǔ)在例如,包的源文件存儲(chǔ)在C:tempGeometry下,則包路下,則包路徑為:徑為:C:temp。 方法一:設(shè)置環(huán)境變量方法一:設(shè)置環(huán)境變量CLASSPATH 方法二:使用方法二:使用-classpath來(lái)指明包的位置來(lái)指明包的位置 例如:例如: 擴(kuò)展包是擴(kuò)展包是.java文件,存放在文件,存放在JDK的的ext目錄下,在此目錄下目錄下,在此目錄下的的.jar文件,將自動(dòng)成為可訪問(wèn)的文件,不需要設(shè)置文件,將自動(dòng)成為可訪問(wèn)的文件,不需要設(shè)置CLASSPATH環(huán)境變量或環(huán)境變量或-classpath選項(xiàng)。選項(xiàng)。 命令格式:命令格式: 此命令將生成此命令將
31、生成Geometry.jar,并在其中加入位于,并在其中加入位于Geometry目錄下的所有的目錄下的所有的.class文件,為使這個(gè)包對(duì)任何程序都可用,文件,為使這個(gè)包對(duì)任何程序都可用,可將其復(fù)制到可將其復(fù)制到JDK的的ext目錄下。目錄下。把一個(gè)包中的所有或任何類(lèi)加把一個(gè)包中的所有或任何類(lèi)加入到程序代碼中,入到程序代碼中,v例如引入整個(gè)包:例如引入整個(gè)包: v例如引入包中的某個(gè)類(lèi)例如引入包中的某個(gè)類(lèi):v如前例,包如前例,包Geometry.Shapes3D中的類(lèi)中的類(lèi)Sphere的全名是的全名是Geometry.Shapes3D.Sphere,這樣可以很,這樣可以很好的避免了類(lèi)的重名問(wèn)題。
32、好的避免了類(lèi)的重名問(wèn)題。v 如果不使用導(dǎo)入語(yǔ)句,仍然可以使用某個(gè)類(lèi),例如果不使用導(dǎo)入語(yǔ)句,仍然可以使用某個(gè)類(lèi),例如:如: Geometry.Shapes3D.Sphere ball = Geometry.Shapes3D.Sphere(10.0, 1.0, 1.0, 1.0);v計(jì)算圓面積公式計(jì)算圓面積公式:*r*r;v 這里的這里的Math.PI即為一靜態(tài)成員,可以通過(guò)從類(lèi)即為一靜態(tài)成員,可以通過(guò)從類(lèi)Math中導(dǎo)入中導(dǎo)入PI成員名來(lái)刪除成員名來(lái)刪除PI前綴前綴Math,例如:,例如: import static java.lang.Math.PI;v也可采用也可采用 import stati
33、c java.lang.Math.* 來(lái)來(lái)導(dǎo)入該類(lèi)的所有靜態(tài)成員,此時(shí)即可直接使用導(dǎo)入該類(lèi)的所有靜態(tài)成員,此時(shí)即可直接使用sqrt(),random()等方法,但這樣也增加了名字等方法,但這樣也增加了名字沖突的概率。沖突的概率。 一個(gè)類(lèi)的方法和變量根據(jù)其設(shè)定的訪問(wèn)屬性,如一個(gè)類(lèi)的方法和變量根據(jù)其設(shè)定的訪問(wèn)屬性,如果屬于同一個(gè)包,或其聲明為果屬于同一個(gè)包,或其聲明為public,則可以被,則可以被其它類(lèi)訪問(wèn)。其它類(lèi)訪問(wèn)。屬性屬性允許的訪問(wèn)允許的訪問(wèn)default(無(wú)訪問(wèn)屬性)(無(wú)訪問(wèn)屬性)來(lái)自同一包中任何類(lèi)的方法訪問(wèn)來(lái)自同一包中任何類(lèi)的方法訪問(wèn)public來(lái)自任何類(lèi)的方法的訪問(wèn)來(lái)自任何類(lèi)的方法的
34、訪問(wèn)private只允許來(lái)自該類(lèi)內(nèi)部的方法訪問(wèn)只允許來(lái)自該類(lèi)內(nèi)部的方法訪問(wèn)protected來(lái)自同一包中任何類(lèi)以及該類(lèi)的來(lái)自同一包中任何類(lèi)以及該類(lèi)的任何地方的任何子類(lèi)的方法訪問(wèn)任何地方的任何子類(lèi)的方法訪問(wèn)u指定類(lèi)成員的訪問(wèn)屬性,必須在聲明語(yǔ)句的開(kāi)指定類(lèi)成員的訪問(wèn)屬性,必須在聲明語(yǔ)句的開(kāi)始部分加上相應(yīng)的關(guān)鍵字。例如:始部分加上相應(yīng)的關(guān)鍵字。例如:public class Point public Point(double xVal, double yVal)x=xVal; y=yVal; public double getX() return x; /訪問(wèn)器方法訪問(wèn)器方法 public doub
35、le setX(double inputX) x=inputX; /增變方法增變方法 private double x, y;u一般,一個(gè)一般,一個(gè)public類(lèi)的變量應(yīng)該聲明為類(lèi)的變量應(yīng)該聲明為private,并將其外部調(diào)用的方法聲明為并將其外部調(diào)用的方法聲明為public。u注意:注意:1、如果類(lèi)中一些成員被設(shè)置成、如果類(lèi)中一些成員被設(shè)置成final,其又被類(lèi),其又被類(lèi)外使用,可將其聲明為外使用,可將其聲明為public。2、若成員僅供該類(lèi)內(nèi)部使用,應(yīng)指定為、若成員僅供該類(lèi)內(nèi)部使用,應(yīng)指定為private。3、若某些成員只是一種使用函數(shù)和標(biāo)準(zhǔn)數(shù)值的、若某些成員只是一種使用函數(shù)和標(biāo)準(zhǔn)數(shù)值的容
36、器,可將其指定為容器,可將其指定為public。例如。例如Math中的函數(shù)。中的函數(shù)。在一個(gè)類(lèi)中定義另外一個(gè)類(lèi),這個(gè)類(lèi)就叫做嵌套在一個(gè)類(lèi)中定義另外一個(gè)類(lèi),這個(gè)類(lèi)就叫做嵌套類(lèi)或內(nèi)部類(lèi)或內(nèi)置類(lèi)類(lèi)或內(nèi)部類(lèi)或內(nèi)置類(lèi)。u內(nèi)部類(lèi)可以將邏輯上相關(guān)的一組類(lèi)組織起來(lái),并由外部類(lèi)內(nèi)部類(lèi)可以將邏輯上相關(guān)的一組類(lèi)組織起來(lái),并由外部類(lèi)(outer class)來(lái)控制內(nèi)部類(lèi)的可見(jiàn)性。來(lái)控制內(nèi)部類(lèi)的可見(jiàn)性。u當(dāng)建立一個(gè)當(dāng)建立一個(gè)inner class時(shí),其對(duì)象就擁有了與外部類(lèi)對(duì)象時(shí),其對(duì)象就擁有了與外部類(lèi)對(duì)象之間的一種關(guān)系,這是通過(guò)一個(gè)特殊的之間的一種關(guān)系,這是通過(guò)一個(gè)特殊的this reference形成形成的,的,使得
37、內(nèi)部類(lèi)對(duì)象可以隨意的訪問(wèn)外部類(lèi)中所有的成員。使得內(nèi)部類(lèi)對(duì)象可以隨意的訪問(wèn)外部類(lèi)中所有的成員。包含嵌套類(lèi),但本身不是嵌套類(lèi)的類(lèi)。包含嵌套類(lèi),但本身不是嵌套類(lèi)的類(lèi)。public class Outside public class Inside class Outer private int index = 100; void print() Inner i = new Inner(); i.print(); class Inner void print() System.out.println(index); class Test public static void main(String a
38、rgs) Outer o = new Outer(); o.print(); public class Outer private String myString = outer; private String outerString =outer outer!; void test() System.out.print(test ); System.out.println(myString); new Inner().testInner(); private void test2() System.out.print(test2 ); System.out.println(myString)
39、; class Inner private String myString = inner; private void testInner() System.out.print(testInner ); System.out.println(myString); System.out.println(outerString); test2(); othisimaino.printi.printthis棧內(nèi)存棧內(nèi)存堆內(nèi)存堆內(nèi)存OuterOuter類(lèi)對(duì)象類(lèi)對(duì)象InnerInner類(lèi)對(duì)象類(lèi)對(duì)象Outer.thisOuter.thisu將嵌套類(lèi)聲明為將嵌套類(lèi)聲明為static就可以生成獨(dú)立于外部類(lèi)對(duì)就
40、可以生成獨(dú)立于外部類(lèi)對(duì)象的嵌套類(lèi)對(duì)象,而不用考慮是否已經(jīng)生成了外部對(duì)象的嵌套類(lèi)對(duì)象,而不用考慮是否已經(jīng)生成了外部對(duì)象。象。注意:注意:1、靜態(tài)嵌套類(lèi)可以有靜態(tài)成員,而非靜態(tài)嵌套類(lèi)則、靜態(tài)嵌套類(lèi)可以有靜態(tài)成員,而非靜態(tài)嵌套類(lèi)則不能有靜態(tài)成員。不能有靜態(tài)成員。2、靜態(tài)嵌套類(lèi)的成員可以訪問(wèn)頂層類(lèi)的靜態(tài)成員。、靜態(tài)嵌套類(lèi)的成員可以訪問(wèn)頂層類(lèi)的靜態(tài)成員。3、非靜態(tài)嵌套類(lèi)可以訪問(wèn)任何頂層類(lèi)的成員,并且、非靜態(tài)嵌套類(lèi)可以訪問(wèn)任何頂層類(lèi)的成員,并且可以訪問(wèn)相同頂層類(lèi)下的靜態(tài)嵌套類(lèi)的靜態(tài)成員??梢栽L問(wèn)相同頂層類(lèi)下的靜態(tài)嵌套類(lèi)的靜態(tài)成員。u在方法中定義的內(nèi)部類(lèi),如果要訪問(wèn)方法中定義的在方法中定義的內(nèi)部類(lèi),如果要訪
41、問(wèn)方法中定義的本地變量或方法的參數(shù),則變量必須被聲明本地變量或方法的參數(shù),則變量必須被聲明final。u內(nèi)部類(lèi)可以聲明為內(nèi)部類(lèi)可以聲明為private或或protected;還可以聲;還可以聲明為明為abstract或或final。u內(nèi)部類(lèi)可以聲明為內(nèi)部類(lèi)可以聲明為static的,但此時(shí)就不能再使用的,但此時(shí)就不能再使用外部類(lèi)的非外部類(lèi)的非static的成員變量和非的成員變量和非static的成員方法;的成員方法;u非非static的內(nèi)部類(lèi)中的成員不能聲明為的內(nèi)部類(lèi)中的成員不能聲明為static的,只的,只有在頂層類(lèi)或有在頂層類(lèi)或static的內(nèi)部類(lèi)中才可聲明的內(nèi)部類(lèi)中才可聲明static成員。成員。u我們?yōu)槭裁词褂脙?nèi)部類(lèi)我們?yōu)槭裁词褂脙?nèi)部類(lèi)1、在內(nèi)部類(lèi)(、在內(nèi)部類(lèi)(inner class)中,可以隨意的訪問(wèn)外)中,可以隨意的訪問(wèn)外部類(lèi)的成員,這可以讓我們更好地組織管理我們的代部類(lèi)的成員,這可以讓我們更好地組織管理我們的代碼,增強(qiáng)代碼的可讀性
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 保安公司托管合同范例
- 冷鏈藥品購(gòu)銷(xiāo)合同范例
- 制造勞動(dòng)合同范例
- 別克新車(chē)購(gòu)車(chē)合同范例
- 國(guó)家拆遷合同范例
- 農(nóng)村玉米購(gòu)銷(xiāo)合同范本
- 委托代理收購(gòu)合同范例
- 原材料外購(gòu)合同范例
- 合作土地托管合同范例
- 冷庫(kù)蔬菜收購(gòu)合同范例
- 品管圈活動(dòng)提高氧氣霧化吸入注意事項(xiàng)知曉率
- 格力GMV多聯(lián)機(jī)安裝及維修手冊(cè)
- 農(nóng)產(chǎn)品質(zhì)量安全控制課件
- 尿失禁健康講座(SUI)
- 南網(wǎng)5S管理、四步法、八步驟
- 幼兒園中班健康:《小河馬的大口罩》 課件
- 管道工程污水管網(wǎng)監(jiān)理規(guī)劃(共44)
- 洪屏抽水蓄能電站達(dá)標(biāo)投產(chǎn)策劃方案
- 危貨運(yùn)輸車(chē)輛日常維護(hù)檢查及記錄表
- 公司生產(chǎn)報(bào)廢單
- 心身疾病優(yōu)秀課件
評(píng)論
0/150
提交評(píng)論