java學習基礎(chǔ)第07章封裝_第1頁
java學習基礎(chǔ)第07章封裝_第2頁
java學習基礎(chǔ)第07章封裝_第3頁
java學習基礎(chǔ)第07章封裝_第4頁
java學習基礎(chǔ)第07章封裝_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

J2SE(JDK5以上)開發(fā)

講師:孫雷TEL:QQ:7552314

----為你Java的夢想插上翅膀第7章封裝定義類(Class)關(guān)于方法----為你Java的夢想插上翅膀以對象思考問題有一個帳戶,帳戶中有存款余額,您可以對帳戶進行存款與提款的動作,并可以查詢以取得存款余額。識別問題中的對象與屬性識別對象上的方法----為你Java的夢想插上翅膀以對象思考問題----為你Java的夢想插上翅膀使用class定義類在Java中使用"class"關(guān)鍵詞來定義類publicclassAccount{privateStringaccountNumber;privatedoublebalance;publicAccount(){this("empty",0.0);}publicAccount(StringaccountNumber,doublebalance){this.accountNumber=accountNumber;this.balance=balance;}…定義類定義構(gòu)造函數(shù)----為你Java的夢想插上翅膀使用class定義類在Java中使用"class"關(guān)鍵詞來定義類…public

StringgetAccountNumber(){returnaccountNumber;}public

doublegetBalance(){returnbalance;}public

voiddeposit(doublemoney){balance+=money;}public

doublewithdraw(doublemoney){balance-=money;returnmoney;}}定義成員----為你Java的夢想插上翅膀使用class定義類可根據(jù)類來建構(gòu)對象要透過公開成員來操作對象或取得對象信息的話,可以在對象名稱后加上「.」運算符來進行Accountaccount1=newAccount();

Accountaccount2=newAccount("123-4567",100.0);account1.getBalance();account1.deposit(1000.0);----為你Java的夢想插上翅膀使用class定義類Accountaccount=newAccount();System.out.println("帳戶:"+account.getAccountNumber());System.out.println("余額:"+account.getBalance());account=newAccount("123-4567",100.0);account.deposit(1000.0);System.out.println("帳戶:"+account.getAccountNumber());System.out.println("余額:"+account.getBalance());----為你Java的夢想插上翅膀使用class定義類在一個文件中可以定義數(shù)個類,但只能有一個類被設(shè)置為public,而且這個類的名稱必須與主文件名稱完全相同。----為你Java的夢想插上翅膀類成員(Classmember)在類中的數(shù)據(jù)和方法,統(tǒng)稱為類成員。數(shù)據(jù)我們稱為域成員,方法稱為方法成員。在定義域時可以指定初始值,如果沒有指定初始值,則會有默認值。域成員如果是基本類型,則默認值與數(shù)組那一章講的默認值情況相同;如果是對象類型,則默認值為null,也就是不引用任何對象。類成員可用的訪問權(quán)限修飾詞有“public”、“protected”、“private”三個在宣告成員時不使用存取修飾詞,則預(yù)設(shè)以「包」(package)為存取范圍----為你Java的夢想插上翅膀類成員(Classmember)數(shù)據(jù)成員被宣告為“private”,表示它是「私有成員」(Privatemember),私有成員只能在本類中被使用方法被宣告為“public”,表示這些方法可以借由對象的參考名稱加上“.”直接調(diào)用存取修飾傳回值型態(tài)方法名稱(參數(shù)列){

//實作return傳回值;}----為你Java的夢想插上翅膀類成員(Classmember)方法區(qū)塊中可以聲明變量(Variable),參數(shù)在方法區(qū)塊執(zhí)行結(jié)束后就會自動清除方法中的相同變量名稱會暫時覆蓋域成員的作用范圍可以使用"this"關(guān)鍵詞來特別指定----為你Java的夢想插上翅膀類成員(Classmember)在定義類時,我們通常遵循一個基本的原則:信息的最小化公開。也就是說盡量通過方法來操縱對象,而不是直接存取對象內(nèi)部的域成員。信息的最小化公開原則是基于安全性的考慮,避免程序設(shè)計人員隨意操作內(nèi)部域成員而造成程序的錯誤,你可以在日后的程序設(shè)計中慢慢來體會。一個類中的域成員,若聲明為private,則其可視范圍為整個類內(nèi)部,由于外界無法直接存取私有成員,所以要使用兩個公開方法分別負責設(shè)置該域成員的值和獲取該域成員的值。通常我們的命名規(guī)則是setXXX()和getXXX()方法。如果域成員類型是boolean型,則getXXX()方法可以改為isXXX()方法。 例如:域成員為privateintage;則對應(yīng)的方法為:

publicvoidsetAge(intage){this.age=age}; publicintgetAge(){returnage};----為你Java的夢想插上翅膀類成員(Classmember)classMethodDemo{privateintdata=10;publicvoidscopeDemo(){//void表示沒有傳回值

intdata=100;}publicintgetData(){returndata;}publicvoidsetData(intdata){//void表示沒有傳回值

data=data;//這樣寫是沒用的

//寫下面這個才有用

//this.data=data;}}----為你Java的夢想插上翅膀方法成員返回類型參數(shù)列表return----為你Java的夢想插上翅膀構(gòu)造器(Constructor)構(gòu)造器(構(gòu)造函數(shù))是與類名稱相同的方法成員,且沒有返回值publicclassSafeArray{//..publicSafeArray(){//構(gòu)造器

//....

}publicSafeArray(參數(shù)列){//構(gòu)造器

//....}}----為你Java的夢想插上翅膀構(gòu)造器(Constructor)publicclassSafeArray{privateint[]arr;

publicSafeArray(){this(10);//預(yù)設(shè)10個元素

}

publicSafeArray(intlength){arr=newint[length];}…}----為你Java的夢想插上翅膀構(gòu)造器(Constructor)構(gòu)造器,通過名字我們可以了解到它的主要作用就是用來構(gòu)造對象的。因為我們有時可能需要在構(gòu)造對象時,初始化一些數(shù)據(jù),所以這些初始化數(shù)據(jù)的語句,我們往往都寫在構(gòu)造器中。一個類可以有多個構(gòu)造器,他們的名字都是和類的名字相同的,但是他們的參數(shù)列表(參數(shù)的個數(shù),類型,順序)必須不同,這樣才能得以區(qū)分。如果在類的聲明中,我們沒有聲明任何構(gòu)造器,那么Java會在編譯時為我們添加一個默認的無參數(shù)的構(gòu)造器。但如果你自己聲明了構(gòu)造器,Java就不會為我們這樣去做了。建議,如果自己聲明了有參數(shù)構(gòu)造器,最好同時提供一個無參數(shù)的構(gòu)造器。----為你Java的夢想插上翅膀關(guān)于this方法成員在內(nèi)存中會只有一份----為你Java的夢想插上翅膀關(guān)于this使用變量引用名稱來調(diào)用對象的方法成員時,程序會將對象的引用告知方法成員在方法中所編寫的每一個方法成員其實會隱含一個this參考名稱this名稱參考至呼叫方法的對象publicdoublegetBalance(){returnthis.balance;}----為你Java的夢想插上翅膀關(guān)于this在方法中使用數(shù)據(jù)成員時,都會隱含的使用this名稱,如果你的方法參數(shù)名稱與在這個方法中要使用到域成員名稱相同時,為了解決名稱歧義的沖突,我們要明確使用this來進行區(qū)分。如果不同時,可以不使用this.publicAccount(StringaccountNumber,doublebalance){this.accountNumber=accountNumber;this.balance=balance;}publicAccount(Stringnumber,doublemoney){accountNumber=number;//實際等于this.accountNumber=number;this.balance=money;//實際等于this.balance=money;}相同不相同----為你Java的夢想插上翅膀關(guān)于thisthis還有一種可以帶自變量的用法,主要是用于調(diào)用構(gòu)造器publicclassBall{privateStringname;publicBall(){this(“Noname”);//會使用Ball(“Noname”)來建構(gòu)

}publicBall(Stringname){=name;

....

}}----為你Java的夢想插上翅膀關(guān)于static被宣告為“static”的數(shù)據(jù)成員,又稱「靜態(tài)數(shù)據(jù)成員」靜態(tài)成員是屬于類所擁有,而不是個別的對象可以將靜態(tài)成員視為每個對象實例所共享的數(shù)據(jù)成員publicclassBall{publicstaticdoublePI=3.14159;//宣告static資料

...}----為你Java的夢想插上翅膀關(guān)于static屬于類所擁有,可以在不使用名稱參考下,直接使用類名稱加上‘.’運算符來存取同樣遵守“public”、“protected”與“private”的存取限制設(shè)定為“public”成員的話就可以如下存取下面的方式是不被鼓勵的System.out.println("PI="+Ball.PI);Ballball=newBall();System.out.println("PI="+ball.PI);----為你Java的夢想插上翅膀關(guān)于static可以宣告方法成員為"static"方法,又稱「靜態(tài)方法」publicclassBall{...publicstaticdoubletoRadian(doubleangle){return3.14159/180*angle;}}System.out.println("角度90等于徑度"+Ball.toRadian(90));----為你Java的夢想插上翅膀關(guān)于static靜態(tài)方法中不會有this參考名稱靜態(tài)方法中不允許直接使用非靜態(tài)成員在靜態(tài)方法中不能直接調(diào)用非靜態(tài)方法non-staticvariabletestcannotbereferencedfromastaticcontextnon-staticmethodshowHello()cannotbereferencedfromastaticcontext----為你Java的夢想插上翅膀關(guān)于static可以使用“static”定義一個靜態(tài)區(qū)塊,并在當中編寫類載入時的初始化動作在類被加載時,默認會先執(zhí)行靜態(tài)區(qū)塊中的程序代碼,且只會執(zhí)行一次publicclassBall{static{//一些初始化程序代碼

}....}----為你Java的夢想插上翅膀關(guān)于staticpublicstaticfinal思考為什么不把所有的方法都聲明稱成static的?----為你Java的夢想插上翅膀關(guān)于static單例模式 也稱為單件模式、單子模式。使用單例模式,保證一個類僅有一個實例,并提供一個訪問它的全局訪問點,該實例被所有程序模塊共享。有很多地方需要這樣的功能模塊,如系統(tǒng)的日志輸出,windows中的垃圾回收站等。

----為你Java的夢想插上翅膀關(guān)于static單例模式----為你Java的夢想插上翅膀關(guān)于static單列模式構(gòu)造器私有化,讓任何人都無法創(chuàng)建新的對象,除了本類提供靜態(tài)的域來引用并創(chuàng)建對象,因為靜態(tài)的域只會被初始化一次,且在整個內(nèi)存中只有一個提供靜態(tài)方法返回靜態(tài)域所引用的對象----為你Java的夢想插上翅膀方法重載(Overload)為類似功能的方法提供統(tǒng)一名稱,可根據(jù)參數(shù)列表的不同而自動調(diào)用對應(yīng)的方法String的valueOf()方法就提供了多個版本staticStringvalueOf(booleanb)staticStringvalueOf(charc)staticStringvalueOf(char[]data)staticStringvalueOf(char[]data,intoffset,intcount)staticStringvalueOf(doubled)staticStringvalueOf(floatf)staticStringvalueOf(inti)staticStringvalueOf(longl)staticStringvalueOf(Objectobj)----為你Java的夢想插上翅膀方法重載(Overload)參數(shù)列表不同可以用來設(shè)計方法重載publicclassSomeClass{//以下重載了someMethod()方法

publicvoidsomeMethod(){//...

}publicvoidsomeMethod(inti){//...}publicvoidsomeMethod(floatf){//...}publicvoidsomeMethod(inti,floatf){//...}}----為你Java的夢想插上翅膀方法重載(Overload)返回值類型不可用作為方法重載的區(qū)別根據(jù),以下是不正確的publicclassSomeClass{publicintsomeMethod(inti){//...return0;}publicdoublesomeMethod(inti){//...return0.0;}}----為你Java的夢想插上翅膀方法重載(Overload)注意到autoboxing、unboxing的問題publicstaticvoidmain(String[]args){someMethod(1);}

publicstaticvoidsomeMethod(inti){System.out.println("int版本被呼叫");}

publicstaticvoidsomeMethod(Integerinteger){System.out.println("Integer版本被呼叫");}----為你Java的夢想插上翅膀方法重載(Overload)注意到autoboxing、unboxing的問題找尋在還沒有裝箱動作前可以符合自變量個數(shù)與型態(tài)的方法嘗試裝箱動作后可符合自變量個數(shù)與型態(tài)的方法嘗試設(shè)有「不定長度自變量」并可以符合的方法編譯程序找不到合適的方法,回報編譯錯誤----為你Java的夢想插上翅膀不定長度參數(shù)J2SE5.0之后開始支持「不定長度參數(shù)」(Variable-lengthArgument)實際上nums是一個數(shù)組publicstaticintsum(int...nums){//使用...聲明參數(shù)

intsum=0;for(intnum:nums){sum+=num;}returnsum;}----為你Java的夢想插上翅膀不定長度參數(shù)宣告的參數(shù)必須設(shè)定在參數(shù)列的最后一個,下面的方式是合法的下面的方式是不合法的publicvoidsomeMethod(intarg1,intarg2,int...varargs){//....}publicvoidsomeMethod(int...varargs,intarg1,intarg2){//....}----為你Java的夢想插上翅膀不定長度參數(shù)不定長度參數(shù)只能在一個參數(shù)列表中聲明一個,下面的方式是不合法的如果使用對象的不定長度自變量,宣告的方法相同publicvoidsomeMethod(int...varargs1,int...varargs2){//....}publicvoidsomeMethod(SomeClass...somes){//....}----為你Java的夢想插上翅膀遞歸方法遞歸算法是用計算機解決問題的一種基本方法。它利用計算機運算速度快、適合做重復(fù)性操作的特點,讓計算機對一組指令(或一定步驟)進行重復(fù)執(zhí)行,在每次執(zhí)行這組指令(或這些步驟)時,都從變量的原值推出它的一個新值。在方法中調(diào)用自身同名方法,而調(diào)用者本身會先被置入內(nèi)存「堆?!梗⊿tack)中堆棧是一種「先進后出」(Firstin,lastout)的數(shù)據(jù)結(jié)構(gòu)----為你Java的夢想插上翅膀遞歸方法求最大公因數(shù)的列子:privatestaticintgcd(intm,intn){if(n==0)returnm;elsereturngcd(n,m%n);}----為你Java的夢想插上翅膀垃圾收集Java提供垃圾收集機制在適當?shù)臅r候,Java執(zhí)行環(huán)境會自動檢查對象,看看是否有未被參考的對象如果有的話就清除對象、回收對象所占據(jù)的內(nèi)存空間在程序執(zhí)行的空閑時候,您可以建議執(zhí)行環(huán)境進行垃圾收集(System.gc()),但也僅止于建議----為你Java的夢想插上翅膀垃圾收集finalize()會在對象被回收時執(zhí)行因為不知道對象資源何時被回收,所以也就不知道finalize()真正被執(zhí)行的時間----為你Java的夢想插上翅膀垃圾收集publicclassGcTest{privateStringname;

publicGcTest(Stringname){=name;System.out.println(name+"建立");}

//對象回收前執(zhí)行

protectedvoidfinalize(){System.out.println(name+"被回收");}}.----為你Java的夢想插上翅膀垃圾收集System.out.println("請按Ctrl+C終止程式........");

GcTestobj1=newGcTest("object1");GcTestobj2=newGcTest("object2");GcTestobj3=newGcTest("object3");

//令名稱不參考至對象

obj1=null;obj2=null;obj3=null;

//建議回收對象

System.gc();

while(true);//不斷執(zhí)行程序----為你Java的夢想插上翅膀本章需要掌握的內(nèi)容1.如何使用Class定義類,定義域成員,方法成員,構(gòu)造器。2.知道構(gòu)造器的知識點:構(gòu)造器名必須與類名相同。構(gòu)造器可以有多個,但參數(shù)列表必須不同構(gòu)造器的作用是用來初始化數(shù)據(jù)的如果我們沒有自己定義構(gòu)造器,Java會為我們自動添加無參數(shù)的構(gòu)造器。構(gòu)造器沒有返回類型----為你Java的夢想插上翅膀本章需要掌握的內(nèi)容3.什么叫做參數(shù)列表不同?答:參數(shù)的個數(shù),參數(shù)的順序,參數(shù)的類型都可以決定參數(shù)列表,但參數(shù)名不起作用。----為你Java的夢想插上翅膀本章需要掌握的內(nèi)容4.了解this的知識點:每一個類的方法成員都會隱含一個this引用名稱,可用來指向調(diào)用它的對象。參數(shù)名稱與域成員名稱相同時,為了避免參數(shù)的作用范圍覆蓋了域成員的作用范圍,必須明確地使用this名稱來指定,但如果參數(shù)名稱與域成員名稱不相同不用特別指定。this()帶參數(shù)用于調(diào)用構(gòu)造器----為你Java的夢想插上翅膀本章需要掌握的內(nèi)容5.了解static的知識點:static修飾的域或者代碼塊只會初始化一次。static修飾的域在整個內(nèi)存中只有一個,被所有對象

溫馨提示

  • 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

提交評論