第3講類與對(duì)象_第1頁
第3講類與對(duì)象_第2頁
第3講類與對(duì)象_第3頁
第3講類與對(duì)象_第4頁
第3講類與對(duì)象_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Java程序設(shè)計(jì)(SP3002)講述人:林若欽軟件工程系第3講 類與對(duì)象qOOP簡述q類與對(duì)象的關(guān)系q類的組成q對(duì)象的創(chuàng)建與使用q對(duì)象重構(gòu)qthis關(guān)鍵字q靜態(tài)關(guān)鍵字staticq對(duì)象的進(jìn)一步討論q包Java程序設(shè)計(jì)(SP3002)21.面向?qū)ο缶幊膛c面向過程編程的比較面向?qū)ο缶幊膛c面向過程編程的比較面向過程:面向過程:強(qiáng)調(diào)處理問題的過程。開始順序,階段結(jié)束面向?qū)ο螅好嫦驅(qū)ο螅豪脤?duì)象間的消息傳遞來驅(qū)動(dòng)程序的執(zhí)行。對(duì)象0對(duì)象1對(duì)象2對(duì)象3對(duì)象5對(duì)象4優(yōu)點(diǎn):真實(shí)表現(xiàn)客觀世界,對(duì)象間的關(guān)系清晰,對(duì)象間的消息處理高效。不足之處:代碼難修和復(fù)用,無法真實(shí)描繪客觀世界。Java程序設(shè)計(jì)(SP3002)3

2、2. 類與對(duì)象的關(guān)系類與對(duì)象類與對(duì)象是面向?qū)ο蟪绦蛟O(shè)計(jì)中核心的概念,下面舉例是面向?qū)ο蟪绦蛟O(shè)計(jì)中核心的概念,下面舉例說明:說明:8:00:008:00:0010:30:0010:30:0019:00:0019:00:00 時(shí)間類:時(shí)間類:TimeTime成員變量:時(shí)、分、秒,成員變量:時(shí)、分、秒,表示屬性。表示屬性。成員方法:設(shè)置時(shí)間、成員方法:設(shè)置時(shí)間、輸出時(shí)間等,所實(shí)現(xiàn)的功能輸出時(shí)間等,所實(shí)現(xiàn)的功能右邊的各時(shí)點(diǎn)表示的是某一具體時(shí)間,而左邊的時(shí)間類Time表示的則是對(duì)時(shí)間的一般描述。Java程序設(shè)計(jì)(SP3002)4由上可知,類與對(duì)象之間的關(guān)系如下:l 類是對(duì)象的抽象類是對(duì)象的抽象(代表了同

3、一批對(duì)象的共性與特征);l 對(duì)象是類的具體實(shí)例對(duì)象是類的具體實(shí)例(不同對(duì)象之間還存在著差異);l 同一個(gè)類可以定義多個(gè)對(duì)象同一個(gè)類可以定義多個(gè)對(duì)象(一對(duì)多關(guān)系)。汽車Java程序設(shè)計(jì)(SP3002)5類的組成類的概念類的概念類:是一種抽象的數(shù)據(jù)類型,是一類事物經(jīng)過抽象,所共有屬性的集合,它是Java程序的基本組成要素,類是用來定義對(duì)象的模板。包括兩方面內(nèi)容:n成員變量:描述對(duì)象的屬性、狀態(tài)n成員方法:描述對(duì)象的行為、功能例如:現(xiàn)實(shí)世界中的實(shí)體學(xué)生數(shù)據(jù)描述:姓名、學(xué)號(hào) 、性別、出生年月、專業(yè)、籍貫等;行為描述:設(shè)置、修改相關(guān)屬性值,輸出學(xué)生信息等。Java程序設(shè)計(jì)(SP3002)6類的聲明類的聲

4、明修飾符 class class 類名類名 extendsextends 父類名 implementsimplements 接口名/ 類體開始成員變量的聲明;/ 描述屬性成員方法的聲明;/ 描述功能/ 類體結(jié)束說明:說明:nclass是聲明類的關(guān)鍵字,不能省略;n類名要“見名知意”,多為英文單詞的連寫,如:Student、StudentTest等,一般不使用A、B、C等名字;n類名首字母要大寫,后面各單詞的首字母也要大寫。Java程序設(shè)計(jì)(SP3002)7/聲明時(shí)間類聲明時(shí)間類class Timeprivate int hour;/小時(shí)數(shù)小時(shí)數(shù): 0-23private int minute;

5、/分鐘數(shù)分鐘數(shù): 0-59private int second;/秒鐘數(shù)秒鐘數(shù): 0-59public Time()/構(gòu)造方法構(gòu)造方法,又稱構(gòu)造器又稱構(gòu)造器hour=0;minute=0;second=0;public void setTime(int hh, int mm, int ss)/設(shè)置時(shí)間的方法設(shè)置時(shí)間的方法,又稱設(shè)置器又稱設(shè)置器hour=(hh=0 & hh=0 & hh=0 & ss=0 & hh=0 & hh=0 & ss=0 & hh=0 & hh=0 & ss=59)? ss: 0);public String toString()/輸出時(shí)間輸出時(shí)間return (hou

6、r+:+minute+:+second);Java程序設(shè)計(jì)(SP3002)13構(gòu)造方法n構(gòu)造方法(Constructor,又稱構(gòu)造函數(shù)、構(gòu)造器),它是類聲明中的一個(gè)特殊方法,其作用是對(duì)創(chuàng)建的新對(duì)象進(jìn)行初始化工作。n要求:Java程序設(shè)計(jì)(SP3002)14構(gòu)造方法(續(xù))n格式:修飾符類名(參數(shù),參數(shù),參數(shù)n) 屬性參數(shù); 屬性2參數(shù)2; 屬性n參數(shù)n;注意:若無參數(shù),通常給屬性賦常量Java程序設(shè)計(jì)(SP3002)15例如:例如:Time類的構(gòu)造器類的構(gòu)造器public Time()/構(gòu)造方法構(gòu)造方法,又稱構(gòu)造器又稱構(gòu)造器hour=0;minute=0;second=0;3.4.2 封裝n概念

7、:把數(shù)據(jù)和行為結(jié)合在一個(gè)塊中,對(duì)于對(duì)象的使用者隱藏了數(shù)據(jù)的實(shí)現(xiàn)過程,對(duì)象的使用者只能通過特定的方法訪問對(duì)象的成員變量。即相當(dāng)于一個(gè)“黑箱”,只要知道對(duì)象的輸出數(shù)據(jù)和輸入數(shù)據(jù),而不必關(guān)心數(shù)據(jù)的內(nèi)部具體實(shí)現(xiàn)流程。Java程序設(shè)計(jì)(SP3002)16電視機(jī)的電視機(jī)的按鍵按鍵電視機(jī)采用電視機(jī)采用“外殼外殼”進(jìn)行進(jìn)行封裝,使得元器件不會(huì)暴封裝,使得元器件不會(huì)暴露在大眾的視野之中,用露在大眾的視野之中,用戶只能通過有關(guān)的按鍵或戶只能通過有關(guān)的按鍵或遙控器來控制電視機(jī)。遙控器來控制電視機(jī)。 Java通過將成員變量聲明為private權(quán)限,再提供一個(gè)或多個(gè)public權(quán)限的方法來實(shí)現(xiàn)對(duì)該屬性的操作,以實(shí)現(xiàn)以下

8、目的:n隱藏一個(gè)類的實(shí)現(xiàn)細(xì)節(jié);n使用者只能通過事先定制好的方法來訪問數(shù)據(jù),可以方便地加入控制邏輯,限制對(duì)屬性的不合理操作;n便于修改,增強(qiáng)代碼的可維護(hù)性。Java程序設(shè)計(jì)(SP3002)17訪問器n是以get開頭的方法,只是查看對(duì)象的狀態(tài),并沒有改變對(duì)象的任何狀態(tài);n特點(diǎn):n方法聲明部分有返回值類型;n該方法不帶參數(shù);n方法體內(nèi)有返回語句。設(shè)置器n是以set開頭的方法,是修改對(duì)象某種狀態(tài)的方法;n特點(diǎn):n方法返回類型為void,也即說不返回類型;n該方法至少帶有一個(gè)參數(shù);n方法體內(nèi)肯定有賦值語句。Java程序設(shè)計(jì)(SP3002)18用用UML(統(tǒng)一建模語言的簡稱統(tǒng)一建模語言的簡稱)圖表示類圖表

9、示類Time - hour : int- minute : int- second : int+ Time()+ setTime(int hh, int mm, int ss): void+ toString() : String類名類名成員變量成員變量成員方法成員方法+ +:publicpublic型型- -:privateprivate型型# #:protectedprotected型型Java程序設(shè)計(jì)(SP3002)19實(shí)例:class Student private String strName = ;/學(xué)生姓名學(xué)生姓名private String strNumber = ;/學(xué)號(hào)學(xué)號(hào)

10、private String strSex = ;/性別性別private String strBirthday = ;/出生年月出生年月private String strSpeciality = ;/專業(yè)專業(yè)private String strAddress = ;/地址地址public Student(String name, String number)strName = name;strNumber = number;public String getStudentName() return strName;Java程序設(shè)計(jì)(SP3002)20public void setStude

11、ntSex(String sex)strSex = sex;public String getStudentSex()return strSex;public String getStudentBirthday()return strBirthday;public void setStudentBirthday(String birthday)strBirthday = birthday;public String getStudentSpeciality()return strSpeciality;public void setStudentSpeciality(String special

12、ity)strSpeciality = speciality;Java程序設(shè)計(jì)(SP3002)21public String getStudentAddress()return strAddress;public void setStudentAddress(String address)strAddress = address;public String toString()String information = 學(xué)生姓名學(xué)生姓名= + strName + , 學(xué)號(hào)學(xué)號(hào)= + strNumber; if( !strSex.equals() )information += , 性別性別= +

13、 strSex;if( !strBirthday.equals()information += , 出生年月出生年月= + strBirthday;if( !strSpeciality.equals() )information += , 專業(yè)專業(yè)= + strSpeciality;if( !strAddress.equals() )information += , 籍貫籍貫= + strAddress;return information;Java程序設(shè)計(jì)(SP3002)22對(duì)象的創(chuàng)建與使用對(duì)象的創(chuàng)建與使用對(duì)象有兩個(gè)層次的概念:n 現(xiàn)實(shí)生活中對(duì)象指的是客觀世界的實(shí)體;n 程序中對(duì)象就是一組變

14、量和相關(guān)方法的集合,其中變量表明對(duì)象的狀態(tài),方法表明對(duì)象所具有的行為。變量變量方法方法對(duì)象的三個(gè)主要特征:對(duì)象的行為、對(duì)象的狀態(tài)、對(duì)象對(duì)象的三個(gè)主要特征:對(duì)象的行為、對(duì)象的狀態(tài)、對(duì)象的標(biāo)識(shí)符。的標(biāo)識(shí)符。Java程序設(shè)計(jì)(SP3002)23對(duì)象句柄對(duì)象句柄n概念:操縱對(duì)象的標(biāo)識(shí)符,它是指向一個(gè)對(duì)象的句柄。這是操縱對(duì)象類型變量的唯一方式。n注意:對(duì)象句柄是一個(gè)變量名,它分配在棧中。而對(duì)象是通過new關(guān)鍵字創(chuàng)建的,在堆中分配存儲(chǔ)空間。由此可見,對(duì)象句柄不同于對(duì)象。兩者之間的聯(lián)系是把對(duì)象的首地址賦給對(duì)象句柄,從而實(shí)現(xiàn)對(duì)象句柄對(duì)對(duì)象的控制。Java程序設(shè)計(jì)(SP3002)24對(duì)象句柄對(duì)象句柄(續(xù)續(xù))n例

15、如:Time t1; / 只是聲明了一個(gè)對(duì)象句柄,但它不指向任何對(duì)象。而 Time t2=new Time( ) ; /創(chuàng)建了一個(gè)對(duì)象,并由對(duì)象句柄t2來操縱它。對(duì)象的創(chuàng)建對(duì)象的創(chuàng)建n格式:類名類名 對(duì)象句柄 = new 類名類名( 參數(shù)表);或類名類名 對(duì)象句柄;對(duì)象句柄 = new 類名類名( 參數(shù)表);Java程序設(shè)計(jì)(SP3002)25對(duì)象的創(chuàng)建對(duì)象的創(chuàng)建(續(xù)續(xù))程序開始執(zhí)行時(shí)內(nèi)存狀態(tài)程序開始執(zhí)行時(shí)內(nèi)存狀態(tài)棧內(nèi)存棧內(nèi)存堆內(nèi)存堆內(nèi)存mainmainJava程序設(shè)計(jì)(SP3002)26對(duì)象的創(chuàng)建對(duì)象的創(chuàng)建(續(xù)續(xù))n例如: Time t1=new Time( ) ; /自動(dòng)調(diào)用構(gòu)造方法mai

16、n棧內(nèi)存堆內(nèi)存內(nèi)存狀態(tài)354752t1000Java程序設(shè)計(jì)(SP3002)27對(duì)象的使用對(duì)象的使用n格式:對(duì)象名對(duì)象名. 成員變量成員變量對(duì)象名對(duì)象名.成員方法成員方法( 參數(shù)表參數(shù)表)不過,要注意是否擁有這樣的訪問權(quán)限/TimeTest類類public class TimeTest public static void main(String args)Time t1=new Time();System.out.println(時(shí)間時(shí)間: +t1.toString();t1.setTime(19,0,0);System.out.println(時(shí)間時(shí)間: +t1.toString();Ja

17、va程序設(shè)計(jì)(SP3002)28練習(xí)nWrite a program to input the length and width of a rectangle and calculate and print the perimeter and area of the rectangleJava程序設(shè)計(jì)(SP3002)29Java程序設(shè)計(jì)(SP3002)30方法重載方法重載含義:是指多個(gè)方法有相同的名字,但這些方法在參數(shù)上(包括參數(shù)類型、參數(shù)個(gè)數(shù)及參數(shù)次序方面)存在著差異。/方法重載的例子方法重載的例子class OverLoadpublic void display(int a, int b)

18、/兩個(gè)參數(shù)兩個(gè)參數(shù),均為均為int型型System.out.println(a);System.out.println(b);public void display(int a, char c)/兩個(gè)參數(shù)兩個(gè)參數(shù),一個(gè)為一個(gè)為int型型,另一個(gè)為另一個(gè)為char型型System.out.println(a);System.out.println(c);Java程序設(shè)計(jì)(SP3002)31public void display(char c, int a)/兩個(gè)參數(shù)兩個(gè)參數(shù),一個(gè)為一個(gè)為char型型,另一個(gè)為另一個(gè)為int型型System.out.println(c);System.out.pr

19、intln(a);public void display(int a, int b, char c)/三個(gè)參數(shù)三個(gè)參數(shù),兩個(gè)為兩個(gè)為int型型,第三個(gè)為第三個(gè)為char型型System.out.println(a);System.out.println(b);System.out.println(c);public class OverLoadTest public static void main(String args)OverLoad ol=new OverLoad();ol.display(2007,5);ol.display(2007, x);ol.display(x, 2007);

20、ol.display(2007,5,x);程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:200720075 520072007x xx x20072007200720075 5x xJava程序設(shè)計(jì)(SP3002)32Java中把方法名和參數(shù)類型( 不包含返回值)稱為型構(gòu),上例中的方法型構(gòu)有4種,即:display(int, int)、display(int, char)、display(char, int)、display(int, int, char)調(diào)用時(shí),Java編譯器會(huì)根據(jù)方法的實(shí)參,自動(dòng)找到與這種型構(gòu)匹配的方法來執(zhí)行。構(gòu)造方法重載構(gòu)造方法重載一個(gè)類可以擁有多個(gè)構(gòu)造方法,從而可以根據(jù)需要以不同的方式來

21、初始化對(duì)象。例如:學(xué)生類中可以有3個(gè)不同的構(gòu)造方法:Student( )、Student(String name)、Student(String name, String number)類似這樣的構(gòu)造方法重載在類似這樣的構(gòu)造方法重載在Java 的類庫中是很常見的。的類庫中是很常見的。Java程序設(shè)計(jì)(SP3002)33默認(rèn)構(gòu)造方法默認(rèn)構(gòu)造方法(即無參數(shù)的構(gòu)造方法)請注意以下兩點(diǎn):n在一個(gè)類中,如果沒有構(gòu)造方法,系統(tǒng)將會(huì)自動(dòng)提供一個(gè)空的構(gòu)造方法,以構(gòu)造類的對(duì)象。例如:系統(tǒng)會(huì)自動(dòng)提供一個(gè)系統(tǒng)會(huì)自動(dòng)提供一個(gè)默認(rèn)構(gòu)造方法默認(rèn)構(gòu)造方法: :public Garden()public Garden() J

22、ava程序設(shè)計(jì)(SP3002)34n一個(gè)類中,如果已經(jīng)有了構(gòu)造器,系統(tǒng)就不再提供一個(gè)空的構(gòu)造方法。例如:系統(tǒng)不會(huì)提供默認(rèn)構(gòu)造方法系統(tǒng)不會(huì)提供默認(rèn)構(gòu)造方法: :public Student()public Student() 假若需要,則應(yīng)顯式聲明假若需要,則應(yīng)顯式聲明Java程序設(shè)計(jì)(SP3002)35this關(guān)鍵字this關(guān)鍵字表示是“當(dāng)前對(duì)象”,當(dāng)出現(xiàn)在類的實(shí)例方法中,代表使用該方法的對(duì)象;出現(xiàn)在類的構(gòu)造方法中,代表使用該構(gòu)造方法創(chuàng)建的對(duì)象。事實(shí)上,當(dāng)成員變量出現(xiàn)在方法中,默認(rèn)的格式是:this.this.成員變量成員變量。class Hiint a;void setA(int b)a=b

23、;int getA( )return a;等同于class Hiint a;void setA(int b)this.a=b;int getA( )return this.a;Java程序設(shè)計(jì)(SP3002)36在下列三種情況下,必須使用this關(guān)鍵字:n方法的形式參數(shù)與類的成員變量同名;class PersonString name;int age;public Person(String name, int age)=name;this.age=age;n一個(gè)類中的構(gòu)造器調(diào)用同一個(gè)類中的另一個(gè)構(gòu)造器;調(diào)用的方法: this(參數(shù)列表) /構(gòu)造器的第一條語句Java程序設(shè)計(jì)

24、(SP3002)37class PersonString name;int age;public Person(String name)=name;public Person(String name, int age)this(name);/構(gòu)造器的第一條語句this.age=age;n假設(shè)有一個(gè)容器類和一個(gè)組件類,在容器類的某個(gè)方法中要?jiǎng)?chuàng)建組件類的實(shí)例對(duì)象,而組件類的構(gòu)造方法要接收一個(gè)代表其所在容器的參數(shù)(這種模型在事件處理中很常見)。Java程序設(shè)計(jì)(SP3002)38class Container/容器類容器類Component comp;public void add

25、Component()comp=new Component(this) ;/將this作為對(duì)象引用傳遞class Component/組件類組件類Container mycontainer;public Componet(Container c)mycontainer=c ;Java程序設(shè)計(jì)(SP3002)393. 靜態(tài)關(guān)鍵字static 前面,我們介紹了對(duì)象的成員變量和成員方法內(nèi)容,它們都與對(duì)象密切相關(guān):不同的對(duì)象各自為成員變量分配內(nèi)存空間,只有第一個(gè)對(duì)象創(chuàng)建后才為各成員方法分配入口地址,以后創(chuàng)建的對(duì)象就共享這一入口地址。class PersonString name;/實(shí)例變量int ag

26、e;/實(shí)例變量public void setAge(int age)/實(shí)例方法this.age=age;public int getAge()/實(shí)例方法return age;int count; /int count; /統(tǒng)計(jì)人數(shù)統(tǒng)計(jì)人數(shù)不屬于某一不屬于某一對(duì)象私有對(duì)象私有Java程序設(shè)計(jì)(SP3002)40靜態(tài)成員 在成員變量、成員方法的前面加上static關(guān)鍵字,表明該變量、該方法是屬于類的,故稱為類變量或類方法。若無static修飾,則是實(shí)例變量或?qū)嵗?方法。staticstatic 成員變量; /靜態(tài)變量staticstatic 成員方法; /靜態(tài)方法說明:說明:n靜態(tài)成員屬于類所有,

27、不屬于某一具體對(duì)象私有;n靜態(tài)成員隨類加載時(shí)被靜態(tài)地分配內(nèi)存空間、方法的入口地址,通常通過 類名類名.靜態(tài)成員靜態(tài)成員 方式訪問。Java程序設(shè)計(jì)(SP3002)413.2 靜態(tài)變量(類變量) 創(chuàng)建一個(gè)類的多個(gè)對(duì)象時(shí),每個(gè)對(duì)象不會(huì)為靜態(tài)變量各自分配空間,而是多個(gè)對(duì)象共享一個(gè)靜態(tài)變量所占有的內(nèi)存空間,因此,類的任何一個(gè)具體對(duì)象的訪問靜態(tài)變量取得都是相同的值;任何一個(gè)對(duì)象去修改靜態(tài)變量時(shí),都是對(duì)同一內(nèi)存單元進(jìn)行操作。class PersonString name;int age;static int count; /靜態(tài)變量靜態(tài)變量public Person(String name, int ag

28、e)=name;this.age=age;count+; 對(duì)象對(duì)象1 1非類變量非類變量 對(duì)象對(duì)象3 3 非類變量非類變量 對(duì)象對(duì)象4 4 非類變量非類變量靜態(tài)變量靜態(tài)變量 對(duì)象對(duì)象2 2 非類變量非類變量Java程序設(shè)計(jì)(SP3002)42StudentTest2.javaclass Student private static int nextNumber=1; /靜態(tài)變量public void setStudentNumber()number=nextNumber;nextNumber+;類變量所占的內(nèi)存空間是在程序退出時(shí)才釋放類變量所占的內(nèi)存空間是在程序退出時(shí)才釋放;

29、加上加上final關(guān)鍵字后的靜態(tài)變量就成了靜態(tài)常量,如關(guān)鍵字后的靜態(tài)變量就成了靜態(tài)常量,如System.out。類變量的訪問方式類變量的訪問方式: n類內(nèi):直接訪問n類外:類名.靜態(tài)變量 (前提條件:public權(quán)限)Java程序設(shè)計(jì)(SP3002)43靜態(tài)方法(即類方法)n 調(diào)用格式:n 1 類名.類方法名(實(shí)參列表); /推薦使用 n2 對(duì)象名.類方法名(實(shí)參列表) ;靜態(tài)方法主要是操作類變量,在使用時(shí)要注意以下幾點(diǎn):n而靜態(tài)方法只能訪問該類的類成員變量和類方法,不能直接訪而靜態(tài)方法只能訪問該類的類成員變量和類方法,不能直接訪問實(shí)例的成員變量和方法;問實(shí)例的成員變量和方法;n同一個(gè)類的實(shí)例

30、方法和靜態(tài)方法,可以訪問該類的靜態(tài)變量和同一個(gè)類的實(shí)例方法和靜態(tài)方法,可以訪問該類的靜態(tài)變量和靜態(tài)方法。靜態(tài)方法。Java程序設(shè)計(jì)(SP3002)44不正確的引用class StaticError String mystring=“hello”; public static void main(String args) System.out.println(mystring); 編譯時(shí)錯(cuò)誤信息:編譯時(shí)錯(cuò)誤信息:無法從靜態(tài)上下文中引用非靜態(tài)無法從靜態(tài)上下文中引用非靜態(tài) 變量變量 mystring System.out.println(mystring); 問題:出錯(cuò)的原因是什么?問題:出錯(cuò)的原因

31、是什么?Java程序設(shè)計(jì)(SP3002)45兩種解決的辦法/1.將變量改成將變量改成靜態(tài)靜態(tài)變量變量class NoStaticError static String mystring=“hello”; public static void main(String args) System.out.println(mystring); /2.先創(chuàng)建一個(gè)類的實(shí)例對(duì)象先創(chuàng)建一個(gè)類的實(shí)例對(duì)象class NoStaticError String mystring=“hello”; public static void main(String args) NoStaticError noError =

32、new NoStaticError(); System.out.println(noError.mystring); Java程序設(shè)計(jì)(SP3002)46main() 方法n是一個(gè)靜態(tài)方法,一個(gè)類最多只能有一個(gè)main();nmain()的執(zhí)行是在類加載之后進(jìn)行,此時(shí)不存在任何對(duì)象。只有在執(zhí)行main()之后,才創(chuàng)建所需要的對(duì)象;n每一個(gè)類都可以有一個(gè)main(),這是對(duì)類進(jìn)行單元測試的一個(gè)很方便的技巧。在在Java中,有些類的對(duì)象不是用中,有些類的對(duì)象不是用new關(guān)鍵字生成,而是通過調(diào)用一關(guān)鍵字生成,而是通過調(diào)用一些類的靜態(tài)方法來生成,這稱為工廠方法。例如:些類的靜態(tài)方法來生成,這稱為工廠方

33、法。例如:Calendar calendar=Calendar.getInstance();Java程序設(shè)計(jì)(SP3002)47static塊的使用nstatic塊會(huì)在類被加載的時(shí)候執(zhí)行且僅會(huì)被執(zhí)行一次僅會(huì)被執(zhí)行一次,一般用來初始化靜態(tài)變量和調(diào)用靜態(tài)方法。class Person String name; public Person(String name) =name; /靜態(tài)塊靜態(tài)塊 static System.out.println(static語句塊執(zhí)行語句塊執(zhí)行); public class test public static void main(String a

34、rgs) Person p1=new Person(張三張三 ); Person p2=new Person(李四李四 ); Person p3=new Person(王五王五 ); 不管構(gòu)建多少次不管構(gòu)建多少次Person類的對(duì)象實(shí)類的對(duì)象實(shí)例,例,static都會(huì)被都會(huì)被執(zhí)行且只執(zhí)行一次。執(zhí)行且只執(zhí)行一次。所以會(huì)輸出一次所以會(huì)輸出一次“static語句塊被執(zhí)語句塊被執(zhí)行行”Java程序設(shè)計(jì)(SP3002)48static塊的使用n如果當(dāng)一個(gè)類中有多個(gè)static的時(shí)候,按照static的定義順序,從前往后從前往后執(zhí)行,而且先執(zhí)行完static語句塊的內(nèi)容,才會(huì)執(zhí)行調(diào)用語句。public c

35、lass test static System.out.println(1); static System.out.println(2); public static void main(String args) System.out.println(5); static System.out.println(3); static System.out.println(4); 程序的運(yùn)行結(jié)果為:程序的運(yùn)行結(jié)果為:輸出輸出1,2,3,4,5Java程序設(shè)計(jì)(SP3002)49靜態(tài)引入(JDK.以后)nJDK1.5 以后新增加一種靜態(tài)導(dǎo)入語法,用來導(dǎo)入指定類的某個(gè)靜態(tài)屬性值或全部靜態(tài)屬性值。靜態(tài)導(dǎo)

36、入語句使用 import static 語句,分別用于導(dǎo)入指定類的單個(gè)靜態(tài)屬性和全部靜態(tài)屬性。import static java.lang.System.*;import static java.lang.Math.*;public classStaticImportpublic static void main(String args)/ out 是是 java.lang.System 類的靜態(tài)屬性,代表標(biāo)準(zhǔn)輸出類的靜態(tài)屬性,代表標(biāo)準(zhǔn)輸出/ PI 是是 java.lang.Math 類的靜態(tài)屬性,表示類的靜態(tài)屬性,表示 常量常量out.println(PI); Java程序設(shè)計(jì)(SP300

37、2)50對(duì)象的進(jìn)一步討論對(duì)象的進(jìn)一步討論對(duì)象賦值對(duì)象賦值Date now; /定義對(duì)象句柄棧內(nèi)存棧內(nèi)存堆內(nèi)存堆內(nèi)存now.getTime(); /錯(cuò)誤,未指向?qū)ο髇ow=new Date(); /正確,創(chuàng)建一介記錄系統(tǒng)當(dāng)前時(shí)間的對(duì)象,并由now對(duì)象句柄來操縱Date then=new Date(); /創(chuàng)建另一個(gè)對(duì)象,它們時(shí)間值不同now=then; /now和then同時(shí)指向第二個(gè)創(chuàng)建的對(duì)象,而第一個(gè)對(duì)象沒有了對(duì)象句柄,成為垃圾。now日期對(duì)象日期對(duì)象1 1then日期對(duì)象日期對(duì)象2 2成為垃圾,成為垃圾,將由垃圾收將由垃圾收集器回收集器回收J(rèn)ava程序設(shè)計(jì)(SP3002)51匿名對(duì)象匿名對(duì)

38、象n不定義對(duì)象句柄,直接用創(chuàng)建的對(duì)象調(diào)用方法,例如:new Date( ).getTime( )。n匿名對(duì)象執(zhí)行完方法成為垃圾。n適用場合:n對(duì)一個(gè)對(duì)象,只需要調(diào)用一次方法;n將匿名對(duì)象作為實(shí)參傳遞給一個(gè)方法調(diào)用。Java程序設(shè)計(jì)(SP3002)52包(package)問題的提出問題的提出Java作為一種面向?qū)ο蟮木幊陶Z言提供了十分豐富的類庫,用戶也可以根據(jù)實(shí)際情況編寫自己的類,如何存放、管理這些類就是我們面臨的一個(gè)問題。Java是采用“包”的方式來管理接口和類的,它將功能相同的接口和類放在一個(gè)包中,即使兩個(gè)接口或類的名字相同,如果它們位于不同的包中,則它們也是兩個(gè)不同的接口或類,這樣就能達(dá)到

39、分門別類管理,相互區(qū)分的目的。例如:java.util.Date與java.sql.Date,盡管類名相同,但它們?nèi)允莾蓚€(gè)互不相關(guān)的類。Java程序設(shè)計(jì)(SP3002)53包的必要性:包的必要性:n用于區(qū)分不同的類; 例如:java.util.Date t1=new java.util.Date();與 java.sql.Date t2=new java.sql.Date();就是創(chuàng)建了兩個(gè)不同類的對(duì)象,因?yàn)轭惷嗤?,如果不借助包就無法相互區(qū)分;n將功能相同的類歸于同一包中方便管理和使用; 例如:java.lang包中就集中了與Java語言運(yùn)行密切相關(guān)的類, java.awt包中的類則是與圖形

40、有關(guān)。n部署、發(fā)布軟件的需要:一個(gè)應(yīng)用程序可能由多個(gè)模塊構(gòu)成,包含多個(gè)類,可將它們歸到一個(gè)包中一起發(fā)布;n實(shí)現(xiàn)更多層面的訪問控制,不同訪問權(quán)限在包中的表現(xiàn)有差異。Java程序設(shè)計(jì)(SP3002)54包的定義包的定義n概念:包是相關(guān)的類和接口構(gòu)成的庫,是一個(gè)容器;n允許用戶可以構(gòu)建包的層次結(jié)構(gòu);n相鄰層次的包名之間可以使用點(diǎn)號(hào)(.)進(jìn)行分隔,格式為:package pack1.pack2.pack3,從大到小排列例如:java.lang包n用戶必須記住非常重要的另一點(diǎn):必須在Java 開發(fā)系統(tǒng)的文件系統(tǒng)中維護(hù)包的層次結(jié)構(gòu):例如:上例的包層次結(jié)構(gòu)應(yīng)該存在于:Unix或Linux中:pack1/pack2/pack3 Windo

溫馨提示

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

評(píng)論

0/150

提交評(píng)論