版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
JavaSE知識圖解JAVA發(fā)展歷程JAVA環(huán)境搭建基礎(chǔ)程序設(shè)計數(shù)據(jù)類型流程控制運算符數(shù)組面向?qū)ο缶幊填惡蛯ο髮傩苑椒ㄔO(shè)計模式接口三大特性應(yīng)用程序開發(fā)JDBC集合異常處理類庫多線程IO反射網(wǎng)絡(luò)連接OracleJAVA新特性Eclipse使用泛型枚舉裝箱/拆箱可變參數(shù)Annotation學(xué)習(xí)面向?qū)ο髢?nèi)容的三條主線1.java類及類的成員2.面向?qū)ο蟮娜筇卣?.其它關(guān)鍵字學(xué)習(xí)內(nèi)容3.1面向?qū)ο笈c面向過程3.2java語言的基本元素:類和對象3.3類的成員之一:屬性3.4類的成員之二:方法3.5對象的創(chuàng)建和使用3.6再談方法3.7面向?qū)ο筇卣髦唬悍庋b和隱藏3.8類的成員之三:構(gòu)造器(構(gòu)造方法)3.9幾個關(guān)鍵字:this、package、import何謂“面向?qū)ο蟆钡木幊趟枷??頓悟?OR漸悟?3.1面向?qū)ο笈c面向過程面向?qū)ο?OOP)與面向過程二者都是一種思想,面向?qū)ο笫窍鄬τ诿嫦蜻^程而言的。面向過程,強調(diào)的是功能行為。面向?qū)ο螅瑢⒐δ芊庋b進對象,強調(diào)具備了功能的對象。面向?qū)ο蟾訌娬{(diào)運用人類在日常的思維邏輯中采用的思想方法與原則,如抽象、分類、繼承、聚合、多態(tài)等。面向?qū)ο蟮娜筇卣鞣庋b(Encapsulation)繼承(Inheritance)多態(tài)(Polymorphism)
OOP:ObjectOrientedProgramming面向過程:procedureorientedprogramming例子:人把大象裝冰箱面向過程1.打開冰箱2.把大象裝進冰箱3.把冰箱門關(guān)住面向?qū)ο笕吮浯笙笕藍
打開(冰箱){
冰箱.開門(); }
操作(大象){
大象.進入();}
關(guān)閉(冰箱){
冰箱.關(guān)門();}}冰箱{
開門(){}關(guān)門(){}}大象{
進入(){}}類與類之間的關(guān)系關(guān)聯(lián)關(guān)系繼承關(guān)系類與類之間的關(guān)系聚集組合聚合關(guān)系面向?qū)ο蟮乃枷敫攀龀绦騿T從執(zhí)行者轉(zhuǎn)化成了指揮者。完成需求時:先去找具有所需功能的對象來用。如果該對象不存在,那么創(chuàng)建一個具有所需功能的對象。這樣簡化開發(fā)并提高復(fù)用。類(class)和對象(object)是面向?qū)ο蟮暮诵母拍?。類是對一類事物描述,是抽象的、概念上的定義對象是實際存在的該類事物的每個個體,因而也稱實例(instance)。
“萬事萬物皆對象”java類及類的成員現(xiàn)實世界萬事萬物是由分子、原子構(gòu)成的。同理,Java代碼世界是由諸多個不同功能的類構(gòu)成的?,F(xiàn)實世界中的分子、原子又是由什么構(gòu)成的呢?原子核、電子!那么,Java中用類class來描述事物也是如此屬性:對應(yīng)類中的成員變量行為:對應(yīng)類中的成員方法Field=屬性=成員變量,Method=(成員)方法=函數(shù)可以理解為:類=汽車設(shè)計圖;對象=實實在在的汽車面向?qū)ο蟪绦蛟O(shè)計的重點是類的設(shè)計定義類其實是定義類中的成員(成員變量和成員方法)面向?qū)ο蟮乃枷敫攀?.java類及類的成員類的成員構(gòu)成version1.0類的成員構(gòu)成verson2.01.我要開車去麗江,這句話包含的類和方法有什么?2.體會以下幾個經(jīng)典案例涉及到的類和方法。人在黑板上畫圓列車司機緊急剎車售貨員統(tǒng)計收獲小票的金額你把門關(guān)上了3.抽象出下面系統(tǒng)中的“類”及其關(guān)系。旅行社預(yù)訂機票準備機票航班目錄記賬記賬文件旅客類的語法格式修飾符
class
類名{
屬性聲明;
方法聲明;}說明:修飾符public:類可以被任意訪問 類的正文要用{}括起來舉例:
publicclassPerson{privateintage;
//聲明私有變量age
publicvoidshowAge(inti){//聲明方法showAge()
age=i;}}創(chuàng)建Java自定義類步驟:定義類(考慮修飾符、類名)編寫類的屬性(考慮修飾符、屬性類型、屬性名、初始化值)編寫類的方法(考慮修飾符、返回值類型、方法名、形參等)練習(xí):定義Person、Animal、ClassRoom、Zoo等類,加以體會。3.3類的成員之一:屬性語法格式:修飾符
類型
屬性名
=初值
;說明:修飾符private:該屬性只能由該類的方法訪問。
修飾符public:該屬性可以被該類以外的方法訪問。
類型:任何基本類型,如int、boolean或任何類。舉例:publicclassPerson{privateintage;//聲明private變量age
publicStringname=“Lila”;//聲明public變量name}補:變量的分類:成員變量與局部變量在方法體外,類體內(nèi)聲明的變量稱為成員變量。在方法體內(nèi)部聲明的變量稱為局部變量。注意:二者在初始化值方面的異同:
同:都有生命周期
異:局部變量除形參外,需顯式初始化。成員變量局部變量實例變量(不以static修飾)類變量(以static修飾)形參(方法簽名中定義的變量)方法局部變量(在方法內(nèi)定義)代碼塊局部變量(在代碼塊內(nèi)定義)所有變量成員變量(屬性)和局部變量的區(qū)別?成員變量:成員變量定義在類中,在整個類中都可以被訪問。成員變量分為類成員變量和實例成員變量,實例變量存在于對象所在的堆內(nèi)存中。成員變量有默認初始化值。成員變量的權(quán)限修飾符可以根據(jù)需要,選擇任意一個局部變量:局部變量只定義在局部范圍內(nèi),如:方法內(nèi),代碼塊內(nèi)等。局部變量存在于棧內(nèi)存中。作用的范圍結(jié)束,變量空間會自動釋放。局部變量沒有默認初始化值,每次必須顯式初始化。局部變量聲明時不指定權(quán)限修飾符3.4類的成員之二:方法語法格式:
修飾符
返回值類型
方法名
(
參數(shù)列表){
方法體語句;}說明:修飾符:public,private,protected等。 返回值類型:return語句傳遞返回值。沒有返回值:void。舉例:
publicclassPerson{privateintage;publicintgetAge(){returnage;}//聲明方法getAge
publicvoidsetAge(inti){//聲明方法setAge
age=i;
//將參數(shù)i的值賦給類的成員變量age
}}java類及類的成員java類的實例化,即創(chuàng)建類的對象如何使用java類?3.5對象的創(chuàng)建和使用棧堆Animalanimal=newAnimal();="花花";animal.age=2;int[]arr=newint[5];arr[0]=10;凡是new出來的內(nèi)容0x2332animal:0x2332name:nullage:0花花2Animalanimal1=animal;animal1:0x2332Animalanimal2=newAnimal();="皮皮";animal2.age=5;animal2:0x1234name:皮皮age:50x1234對象的引用i:27n:皮皮魯皮皮魯Person{Stringname=“Peter”;intage;publicvoidaddAge(){inti=2;age=age+i;}main(){Personp=newPerson();=“Lily”;p.addAge();Personp1=newPerson();}}棧堆p:0x3423newPerson();0x3423Stringname=“Peter”;intage=0;Lilyi=22p1:0x34330x3433Stringname=“Peter”;intage=0;Animala1=newAnimal();="花花";a1.age=3;棧:對象的引用;局部變量堆:new出來的東西(包含成員變量)a1:0x5566newAnimal();0x5566name:nullage:0花花3Animala2=newAnimal();a2:0x57760x5776name:nullage:0a3:0x5566Animala3=a1;Personp1=newPerson();p1.setName("付昊");p1:newPerson();name:nullage:0sex:false10n:付昊付昊對象的創(chuàng)建和使用使用new+構(gòu)造器創(chuàng)建一個新的對象;使用“對象名.對象成員”的方式訪問對象成員(包括屬性和方法);publicclassAnimal{publicintlegs; publicvoideat(){System.out.println(“Eating.”);}publicviodmove(){System.out.println(“Move.”);}}舉例:publicclassZoo{publicstaticvoidmain(Stringargs[]){
Animalxb=newAnimal(); xb.legs=4; System.out.println(xb.legs); xb.eat(); xb.move();}}Java類數(shù)據(jù)1…… 數(shù)據(jù)n方法1……方法n屬性方法Animallegseat()move()數(shù)據(jù)(屬性)方法類名xh:Animallegs=0eat()move()xb:Animallegs=4eat()move()newAnimal()newAnimal()舉例Java中類與對象曰:“白馬非馬,可乎?”曰:“可?!痹唬骸昂卧??”曰:“馬者,所以命形也。白者,所以命色也。命色者,非命形也,故曰白馬非馬?!睂ο蟮膭?chuàng)建和使用如果創(chuàng)建了一個類的多個對象,對于類中定義的屬性,每個對象都擁有各自的一套副本,且互不干擾。舉例:publicclassZoo{publicstaticvoidmain(Stringargs[]){
Animalxb=newAnimal(); Animalxh=newAnimal(); xb.legs=4; xh.legs=0; System.out.println(xb.legs);//4 System.out.println(xh.legs);//0 xb.legs=2; System.out.println(xb.legs);//2 System.out.println(xh.legs);//0}}animal:nullanimal2:legs:0name:花花weight:30legs:0name:小白weight:20animal3:0x1234編寫教師類和學(xué)生類,并通過測試類創(chuàng)建對象進行測試學(xué)生類屬性:姓名年齡參加的課程興趣方法:顯示學(xué)生的個人信息教師類屬性:姓名專業(yè)教授的課程教齡方法:顯示教師的個人信息練習(xí)1提示類的訪問機制:在一個類中的訪問機制:類中的方法可以直接訪問類中的成員變量。(例外:static方法訪問非static,編譯不通過。)在不同類中的訪問機制:先創(chuàng)建要訪問類的對象,再用對象訪問類中定義的成員。對象的產(chǎn)生classPerson{ intage; voidshout(){ System.out.println(“oh,mygod!Iam”+age); }}Personp1=newPerson();執(zhí)行完后的內(nèi)存狀態(tài)對象的產(chǎn)生
當一個對象被創(chuàng)建時,會對其中各種類型的成員變量自動進行初始化賦值。除了基本數(shù)據(jù)類型之外的變量類型都是引用類型,如上面的Person及前面講過的數(shù)組。成員變量類型初始值byte0short0int0long0Lfloat0.0Fdouble0.0Dchar‘\u0000’(表示為空)booleanfalse引用類型null對象的使用classTestPerson{ publicstaticvoidmain(String[]args){//程序運行的內(nèi)存布局如下圖
Personp1=newPerson(); Personp2=newPerson(); p1.age=-30; p1.shout(); p2.shout(); }}對象的生命周期根據(jù)代碼,畫出內(nèi)存圖classCar{Stringcolor="red";intnum=4;voidshow(){ System.out.println("color="+color+"..num="+num);}
}classTestCar{ publicstaticvoidmain(String[]args){
Carc1=newCar();
//建立對象c1 Carc2=newCar();
//建立對象c2
c1.color="blue";
//對對象的屬性進行修改
c1.show();
//使用對象的方法 c2.show();
}}對象內(nèi)存結(jié)構(gòu)Carc1=newCar();
c1.color="blue";Carc2=newCar();heapc10x0034c20x00780x00340x0078newCar()newCar()color="red"num=4color="red"num=4"blue"匿名對象我們也可以不定義對象的句柄,而直接調(diào)用這個對象的方法。這樣的對象叫做匿名對象。如:newPerson().shout();使用情況如果對一個對象只需要進行一次方法調(diào)用,那么就可以使用匿名對象。我們經(jīng)常將匿名對象作為實參傳遞給一個方法調(diào)用。練習(xí)21.創(chuàng)建一個Person類,其定義如下:Personname:Stringage:intsex:int+study():void+showAge():void+addAge():int要求:(1)創(chuàng)建Person類的對象,設(shè)置該對象的name、age和sex屬性,調(diào)用study方法,輸出字符串“studying”,調(diào)用showAge()方法顯示age值,調(diào)用addAge()方法給對象的age屬性值增加2歲。(2)創(chuàng)建第二個對象,執(zhí)行上述操作,體會同一個類的不同對象之間的關(guān)系。2.利用面向?qū)ο蟮木幊谭椒?,設(shè)計類Circle計算圓的面積。3.6再談方法(method)什么是方法(函數(shù))?方法是類或?qū)ο笮袨樘卣鞯某橄?,也稱為函數(shù)。
Java里的方法不能獨立存在,所有的方法必須定義在類里。
修飾符
返回值類型方法名(參數(shù)類型形參1,參數(shù)類型形參2,….){程序代碼
return返回值;}其中:形式參數(shù):在方法被調(diào)用時用于接收外部傳入的數(shù)據(jù)的變量。參數(shù)類型:就是該形式參數(shù)的數(shù)據(jù)類型。返回值:方法在執(zhí)行完畢后返還給調(diào)用它的程序的數(shù)據(jù)。返回值類型:方法要返回的結(jié)果的數(shù)據(jù)類型。實參:調(diào)用方法時實際傳給函數(shù)形式參數(shù)的數(shù)據(jù)。如何理解方法返回值類型為void的情況
?方法的調(diào)用方法只有被調(diào)用才會被執(zhí)行方法調(diào)用的過程分析方法的調(diào)用注意:沒有具體返回值的情況,返回值類型用關(guān)鍵字void表示,那么該函數(shù)中的return語句如果在最后一行可以省略不寫。定義方法時,方法的結(jié)果應(yīng)該返回給調(diào)用者,交由調(diào)用者處理。方法中只能調(diào)用方法,不可以在方法內(nèi)部定義方法。面向?qū)ο笏枷搿奥涞亍狈▌t(一)1.關(guān)注于類的設(shè)計,即設(shè)計類的成員:屬性、方法2.類的實例化,即創(chuàng)建類的對象(比如:Personp=newPerson())3.通過“對象.屬性”、“對象.方法”執(zhí)行方法的重載(overload)重載的概念在同一個類中,允許存在一個以上的同名方法,只要它們的參數(shù)個數(shù)或者參數(shù)類型不同即可。重載的特點:與返回值類型無關(guān),只看參數(shù)列表,且參數(shù)列表必須不同。(參數(shù)個數(shù)或參數(shù)類型)。調(diào)用時,根據(jù)方法參數(shù)列表的不同來區(qū)別。重載示例://返回兩個整數(shù)的和
intadd(intx,inty){returnx+y;}//返回三個整數(shù)的和
intadd(intx,inty,intz){returnx+y+z;}//返回兩個小數(shù)的和
doubleadd(doublex,doubley){returnx+y;}publicclassPrintStream{publicstaticvoidprint(inti){……}publicstaticvoidprint(floatf){……}privatestaticvoidprint(Strings){……} publicstaticvoidmain(String[]args){ print(3); print(1.2f); print(“hello!”);
}}函數(shù)的重載練習(xí)31.判斷:與voidshow(inta,charb,doublec){}構(gòu)成重載的有:voidshow(intx,chary,doublez){}//nointshow(inta,doublec,charb){}//yesc)voidshow(inta,doublec,charb){}//yesd)booleanshow(intc,charb){}//yese)voidshow(doublec){}//yesf)doubleshow(intx,chary,doublez){}//nog)voidshows(){doublec}//no練習(xí)32.編寫程序,定義三個重載方法并調(diào)用。方法名為mOL。三個方法分別接收一個int參數(shù)、兩個int參數(shù)、一個字符串參數(shù)。分別執(zhí)行平方運算并輸出結(jié)果,相乘并輸出結(jié)果,輸出字符串信息。在主類的main()方法中分別用參數(shù)區(qū)別調(diào)用三個方法。3.定義三個重載方法max(),第一個方法求兩個int值中的最大值,第二個方法求兩個double值中的最大值,第三個方法求三個double值中的最大值,并分別調(diào)用三個方法。體會可變個數(shù)的形參//下面采用數(shù)組形參來定義方法publicstaticvoidtest(inta,String[]books);//以可變個數(shù)形參來定義方法publicstaticvoidtest(inta,String…books);說明:1.可變參數(shù):方法參數(shù)部分指定類型的參數(shù)個數(shù)是可變多個2.聲明方式:方法名(參數(shù)的類型名...參數(shù)名)3.可變參數(shù)方法的使用與方法參數(shù)部分使用數(shù)組是一致的4.方法的參數(shù)部分有可變形參,需要放在形參聲明的最后體會可變個數(shù)的形參publicvoidtest(String[]msg){ System.out.println(“含字符串數(shù)組參數(shù)的test方法");}publicvoidtest1(Stringbook){ System.out.println(“****與可變形參方法構(gòu)成重載的test1方法****");} publicvoidtest1(String...books){ System.out.println("****形參長度可變的test1方法****");}publicstaticvoidmain(String[]args){ TestOverloadto=newTestOverload(); //下面兩次調(diào)用將執(zhí)行第二個test方法
to.test1(); to.test1("aa","bb"); //下面將執(zhí)行第一個test方法
to.test(newString[]{"aa"});}方法的參數(shù)傳遞方法,必須有其所在類或?qū)ο笳{(diào)用才有意義。若方法含有參數(shù):形參:方法聲明時的參數(shù)實參:方法調(diào)用時實際傳給形參的參數(shù)值Java的實參值如何傳入方法呢?Java里方法的參數(shù)傳遞方式只有一種:值傳遞。即將實際參數(shù)值的副本(復(fù)制品)傳入方法內(nèi),而參數(shù)本身不受影響。newTestArgsTransfer()tt:i:10j:5inttemp=i;i=j;j=temp;temp:10510newTestArgsTransfer()tt:i:10j:5publicvoidswap(inti,intj){inttemp=i;i=j;j=temp;}i:10j:5mainswaptemp:10510newTestArgsTransfer()tt:
newDataSwap()i:10j:50x8899ds:0x8899d:0x8899publicvoidswap(DataSwapd){inttemp=d.i;d.i=d.j;d.j=temp;}temp:10510方法的參數(shù)傳遞
—基本數(shù)據(jù)類型的參數(shù)傳遞
方法的參數(shù)傳遞
—引用數(shù)據(jù)類型的參數(shù)傳遞方法的參數(shù)傳遞
—引用數(shù)據(jù)類型的參數(shù)傳遞方法的參數(shù)傳遞publicclassTestTransfer{ publicstaticvoidswap(inta,intb){ inttmp=a; a=b; b=tmp; System.out.println("swap方法里,a的值是" +a+";b的值是"+b); } publicstaticvoidmain(String[]args){ inta=6; intb=9; swap(a,b); System.out.println("交換結(jié)束后,變量a的值是" +a+";變量b的值是"+b);}}請輸出結(jié)果方法的參數(shù)傳遞classDataSwap{ publicinta; publicintb;}publicclassTestTransfer1{ publicstaticvoidswap(DataSwapds){
inttmp=ds.a; ds.a=ds.b; ds.b=tmp; System.out.println("swap方法里,aField的值是" +ds.a+";bField的值是"+ds.b); } publicstaticvoidmain(String[]args){ DataSwapds=newDataSwap(); ds.a=6; ds.b=9; swap(ds); System.out.println("交換結(jié)束后,aField的值是" +ds.a+";bField的值是"+ds.b); }}請輸出結(jié)果mainswapa=5b=10i=10j=5temp=5tav:d:0x1234a=5;b=10;data:0x1234105classValue{inti=15;}classTest{publicstaticvoidmain(Stringargv[]){Testt=newTest();t.first();}publicvoidfirst(){inti=5;Valuev=newValue();v.i=25;second(v,i);System.out.println(v.i);}publicvoidsecond(Valuev,inti){i=0;v.i=20;Valueval=newValue();v=val;System.out.println(v.i+""+i);}}t:newTest()i:5v:0x1234newValue()0x1234i:1525v:0x1234i:5second020val:0x2233newValue()i:150x22330x2233classBirthDate{ privateintday; privateintmonth; privateintyear; publicBirthDate(intd,intm,inty){ day=d;month=m;year=y;} publicvoidsetDay(intd){day=d;} publicvoidsetMonth(intm){month=m;} publicvoidsetYear(inty){year=y;} publicintgetDay(){returnday;} publicintgetMonth(){returnmonth;} publicintgetYear(){returnyear;} publicvoiddisplay(){ System.out.println(day+"-"+month+"-"+year);}}再體會參數(shù)的傳遞publicclassTest{ publicvoidchange1(inti){ i=1234;} publicvoidchange2(BirthDateb){ b=newBirthDate(22,3,2004);} publicvoidchange3(BirthDateb){ b.setDay(22);} publicstaticvoidmain(String[]args){ Testtest=newTest(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2009); test.change1(date); test.change2(d1); test.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } }test:0x1234date:9d1:0x2233day=0month=0year=0d:7m:7y:1970771970d2:0x3344day=1month=1year=2009i:91234b:0x2553day=22month=3year=2004b:0x3344d:22223.7面向?qū)ο筇卣髦唬悍庋b和隱藏使用者對類內(nèi)部定義的屬性(對象的成員變量)的直接操作會導(dǎo)致數(shù)據(jù)的錯誤、混亂或安全性問題。publicclassAnimal{ publicintlegs; publicvoideat(){ System.out.println(“Eating.”); } publicvoidmove(){ System.out.println(“Moving.”);}}publicclassZoo{ publicstaticvoidmain(Stringargs[]){ Animalxb=newAnimal(); xb.legs=4; System.out.println(xb.legs); xb.eat();xb.move();}}問題:xb.legs=-1000;應(yīng)該將legs屬性保護起來,防止亂用。保護的方式:信息隱藏Java中通過將數(shù)據(jù)聲明為私有的(private),再提供公共的(public)方法:getXxx()和setXxx()實現(xiàn)對該屬性的操作,以實現(xiàn)下述目的:隱藏一個類中不需要對外提供的實現(xiàn)細節(jié);使用者只能通過事先定制好的方法來訪問數(shù)據(jù),可以方便地加入控制邏輯,限制對屬性的不合理操作;便于修改,增強代碼的可維護性;信息的封裝和隱藏
信息的封裝和隱藏
publicclassAnimal{
privateintlegs;//將屬性legs定義為private,只能被Animal類內(nèi)部訪問
publicvoidsetLegs(inti){//在這里定義方法eat()和move()
if(i!=0||i!=2||i!=4){ System.out.println("Wrongnumberoflegs!"); return; } legs=i; } publicintgetLegs(){ returnlegs; }}publicclassZoo{ publicstaticvoidmain(Stringargs[]){ Animalxb=newAnimal(); //xb.setLegs(4); xb.setLegs(-1000); //xb.legs=-1000;
//非法
System.out.println(xb.getLegs());}}Java權(quán)限修飾符public、protected、private置于類的成員定義前,用來限定對象對該類成員的訪問權(quán)限。四種訪問權(quán)限修飾符修飾符類內(nèi)部同一個包子類任何地方privateYes(缺省)YesYesprotectedYesYesYespublicYesYesYesYes對于class的權(quán)限修飾只可以用public和default(缺省)。public類可以在任意地方被訪問。default類只可以被同一個包內(nèi)部的類訪問。privatedefaultprotectedpublic相應(yīng)的調(diào)用者練習(xí)41.創(chuàng)建程序,在其中定義兩個類:Person和TestPerson類。定義如下:
用setAge()設(shè)置人的合法年齡(0~130),用getAge()返回人的年齡。在TestPerson類中實例化Person類的對象b,調(diào)用setAge()和getAge()方法,體會Java的封裝性。Person-age:int+setAge(i:int)+getAge():int3.8類的成員之三:構(gòu)造器(構(gòu)造方法)構(gòu)造器的特征它具有與類相同的名稱它不聲明返回值類型。(與聲明為void不同)不能被static、final、synchronized、abstract、native修飾,不能有return語句返回值構(gòu)造器的作用:創(chuàng)建對象;給對象進行初始化如:Ordero=newOrder();Personp=newPerson(Peter,15);如同我們規(guī)定每個“人”一出生就必須先洗澡,我們就可以在“人”的構(gòu)造方法中加入完成“洗澡”的程序代碼,于是每個“人”一出生就會自動完成“洗澡”,程序就不必再在每個人剛出生時一個一個地告訴他們要“洗澡”了。構(gòu)造器語法格式:修飾符
類名
(參數(shù)列表){
初始化語句;}舉例:publicclassAnimal{privateintlegs;publicAnimal(){legs=4;} //構(gòu)造器publicvoidsetLegs(inti){legs=i;}publicintgetLegs(){returnlegs;}}創(chuàng)建Animal類的實例:Animala=newAnimal();//調(diào)用構(gòu)造器,將legs初始化為4。構(gòu)造器根據(jù)參數(shù)不同,構(gòu)造器可以分為如下兩類:隱式無參構(gòu)造器(系統(tǒng)默認提供)顯式定義一個或多個構(gòu)造器(無參、有參)注意:Java語言中,每個類都至少有一個構(gòu)造器默認構(gòu)造器的修飾符與所屬類的修飾符一致一旦顯式定義了構(gòu)造器,則系統(tǒng)不再提供默認構(gòu)造器一個類可以創(chuàng)建多個重載的構(gòu)造器父類的構(gòu)造器不可被子類繼承練習(xí)51.在前面定義的Person類中添加構(gòu)造器,利用構(gòu)造器設(shè)置所有人的age屬性初始值都為18。2.修改上題中類和構(gòu)造器,增加name屬性,使得每次創(chuàng)建Person對象的同時初始化對象的age屬性值和name屬性值。Person-name:String+setName(i:String)+getName():String練習(xí)53.定義一個“點”(Point)類用來表示三維空間中的點(有三個坐標)。要求如下:1)可以生成具有特定坐標的點對象。2)提供可以設(shè)置三個坐標的方法。3)提供可以計算該“點”距原點距離平方的方法。4)編寫兩個類,TriAngle和TestTriAngle,其中TriAngle中聲明私有的底邊長base和高height,同時聲明公共方法訪問私有變量;另一個類中使用這些公共方法,計算三角形的面積。構(gòu)造器重載構(gòu)造器一般用來創(chuàng)建對象的同時初始化對象。如classPerson{ Stringname; intage; publicPerson(Stringn,inta){name=n;age=a;}}構(gòu)造器重載使得對象的創(chuàng)建更加靈活,方便創(chuàng)建各種不同的對象。構(gòu)造器重載舉例:publicclassPerson{publicPerson(Stringname,intage,Dated){this(name,age);…}publicPerson(Stringname,intage){…}publicPerson(Stringname,Dated){…}publicPerson(){…}}構(gòu)造器重載,參數(shù)列表必須不同構(gòu)造器重載舉例publicclassPerson{privateStringname;privateintage;privateDatebirthDate;publicPerson(Stringname,intage,Dated){ =name; this.age=age; this.birthDate=d;}publicPerson(Stringname,intage){ this(name,age,null); //=name;this.age=age;
this.birthDate=null;}publicPerson(Stringname,Dated){ this(name,30,d); //=name;this.age=30;this.birthDate=d;}publicPerson(Stringname){ this(name,30); //=name;this.age=30;}}練習(xí)6(1)定義Person類,有4個屬性:Stringname;intage;Stringschool;Stringmajor(2)定義Person類的3個構(gòu)造方法:第一個構(gòu)造方法Person(Stringn,inta)設(shè)置類的name和age屬性;第二個構(gòu)造方法Person(Stringn,inta,Strings)設(shè)置類的name,age和school屬性;第三個構(gòu)造方法Person(Stringn,inta,Strings,Stringm)設(shè)置類的name,age,school和major屬性;(3)在main方法中分別調(diào)用不同的構(gòu)造方法創(chuàng)建的對象,并輸出其屬性值。在java中,this關(guān)鍵字比較難理解,它的作用和其詞義很接近。它在方法內(nèi)部使用,即這個方法所屬對象的引用;它在構(gòu)造器內(nèi)部使用,表示該構(gòu)造器正在初始化的對象。this表示當前對象,可以調(diào)用類的屬性、方法和構(gòu)
造器什么時候使用this關(guān)鍵字呢?當在方法內(nèi)需要用到調(diào)用該方法的對象時,就用this。3.9關(guān)鍵字—thisthis是什么?使用this,調(diào)用屬性、方法classPerson{ //定義Person類
privateStringname;
privateintage;
publicPerson(Stringname,intage){
=name;
this.age=age;} publicvoidgetInfo(){
System.out.println("姓名:"+name); this.speak(); } publicvoidspeak(){ System.out.println(“年齡:”+this.age); }}1.當形參與成員變量重名時,如果在方法內(nèi)部需要使用成員變量,必須添加this來表明該變量時類成員2.在任意方法內(nèi),如果使用當前類的成員變量或成員方法可以在其前面添加this,增強程序的閱讀性classPerson{
//定義Person類
privateStringname;
privateintage;
publicPerson(){
//無參構(gòu)造
System.out.println("新對象實例化"); } publicPerson(Stringname){ this();//調(diào)用本類中的無參構(gòu)造方法
=name; } publicPerson(Stringname,intage){
this(name);
//調(diào)用有一個參數(shù)的構(gòu)造方法
this.age=age;
} publicStringgetInfo(){ return"姓名:"+name+",年齡:"+age; }}使用this調(diào)用本類的構(gòu)造器3.this可以作為一個類中,構(gòu)造器相互調(diào)用的特殊格式注意:1.使用this()必須放在構(gòu)造器的首行!2.使用this調(diào)用本類中其他的構(gòu)造器,保證至少有一個構(gòu)造器是不用this的。classPerson{//定義Person類 Stringname; Person(Stringname){ =name;} publicvoidgetInfo(){ System.out.println("Person類-->"+);} publicbooleancompare(Personp){ ==; }}publicclassTestPerson{ publicstaticvoidmain(Stringargs[]){ Personper1=newPerson("張三"); Personper2=newPerson("李四"); per1.getInfo(); //當前調(diào)用getInfo()方法的對象是per1 per2.getInfo(); //當前調(diào)用getInfo()方法的對象是per2 booleanb=pare(per2); }}當前正在操作本方法的對象稱為當前對象。Boy-name:String-age:int+setName(i:String)+getName():String+setAge(i:int)+getAge():int+marry(girl:Girl)+shout():voidGirl-name:String+setName(i:String)+getName():String+marry(boy:Boy)練習(xí)7添加必要的構(gòu)造器,綜合應(yīng)用構(gòu)造器的重載,this關(guān)鍵字。JavaBeanJavaBean是一種Java語言寫成的可重用組件。所謂javaBean,是指符合如下標準的Java類:類是公共的有一個無參的公共的構(gòu)造器有屬性,且有對應(yīng)的get、set方法用戶可以使用JavaBean將功能、處理、值、數(shù)據(jù)庫訪問和其他任何可以用java代碼創(chuàng)造的對象進行打包,并且其他的開發(fā)者可以通過內(nèi)部的JSP頁面、Servlet、其他JavaBean、applet程序或者應(yīng)用來使用這些對象。用戶可以認為JavaBean提供了一種隨時隨地的復(fù)制和粘貼的功能,而不用關(guān)心任何改變。JavaBean示例publicclassTestJavaBean{
privateStringname;//屬性一般定義為private
privateintage;publicTestJavaBean(){}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}類名屬性:“:”前是屬性名,“:”后是屬性的類型方法若方法有下劃線表示為構(gòu)造方
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南行政職業(yè)能力2012年
- 浙江行政職業(yè)能力33
- 2024屆中考數(shù)學(xué)一次函數(shù)天天練(6)及答案
- 2024年道路施工合同(范本)
- 2024年個人二手房居住權(quán)買賣合同
- 2024年工程設(shè)計合作協(xié)議范本
- 二手房購房定金合同范本2024年
- 2024年水果采購合同樣本
- 2024年水電工程建設(shè)監(jiān)理合同示范文本
- 上門服務(wù)合同范本2024年
- 九年級化學(xué)上冊(滬教版2024)新教材解讀課件
- 大國崛起之中國高鐵課件講解
- 內(nèi)蒙古呼和浩特市回民區(qū)2023-2024學(xué)年七年級上學(xué)期期中地理試題
- JJG 643-2024標準表法流量標準裝置
- 艾滋病初篩實驗室SOP文件
- 華師大九年級上數(shù)學(xué)半期試題
- 最新個人簡歷模板(推薦)
- 《建筑基坑支護技術(shù)規(guī)程》JGJ120-2012
- 監(jiān)控質(zhì)量保證及承諾書
- 奮斗在巴西的何氏一家
- 裝修公司財務(wù)管理制度
評論
0/150
提交評論