




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Review
面向?qū)ο蟪绦蛟O(shè)計(jì)期末考試范圍面向?qū)ο缶植繛橹鰿hapter8,10,11,13,14時(shí)間2小時(shí),英文題目,熟記每章后面的英文術(shù)語〔KeyTerms〕變量和方法變量、方法,如:
//變量的申明:數(shù)據(jù)類型變量名
inta;
//方法的申明:返回類型方法名(參數(shù)列表){語句}
intadd(inta,intb){…}
voidsetParameter(inta,intb){…}注意大小寫main方法main方法
main方法是一個(gè)特殊的方法,是程序運(yùn)行的入口
main方法的形式是固定的。
publicstaticvoidmain(String[]args){//Stringargs[] inta=10; intb=12; intsum=a+b; }Java程序構(gòu)成Java是一種完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,程序中不允許單獨(dú)出現(xiàn)任何方法類是構(gòu)成Java程序的根本單位,也就是說,前面出現(xiàn)的變量、方法都必須申明在類的內(nèi)部。這些變量和方法稱為類的成員變量(屬性,Attribute)和成員方法(Method),統(tǒng)稱為類的成員(Member)。一個(gè)Java程序可以包含多個(gè)類,這些類可以封裝在不同的包中Java類申明類的語法規(guī)那么修飾符class類名{ 變量的申明 //成員變量(屬性) 方法的申明 //成員方法}申明成員變量和申明成員方法的次序無關(guān)一個(gè)類可以同時(shí)申明多個(gè)成員變量和成員方法,也可以不申明任何變量或者方法,這些都是合法的。在方法的內(nèi)部也可以申明變量,這樣的變量稱為局部變量。Java類舉例publicclassPerson{
//屬性:name、age、gender //方法:setName
//方法:getName ……}
Java程序舉例綜合以上知識(shí),我們將前面的main方法申明為類Test的一個(gè)成員: publicclassTest{ publicstaticvoidmain(String[]args){ inta=10; //變量a是一個(gè)局部變量 intb=12; intsum=a+b; } }習(xí)慣:類名首字母大寫,變量/方法名首字母小寫數(shù)據(jù)類型簡單數(shù)據(jù)類型:如int類也是一種數(shù)據(jù)類型,稱為引用數(shù)據(jù)類型(復(fù)雜數(shù)據(jù)類型,referencetype)。因此以下變量和方法的申明都是正確的: inta=10; Personp; Testb; PersongetPerson(){…}我們有時(shí)候也將類稱為類型,如變量p的類型為Person類型,注意:這時(shí)候程序中必須已經(jīng)申明了Person類,否那么將產(chǎn)生錯(cuò)誤。Java程序舉例classPerson{}publicclassTest{ publicstaticvoidmain(…){ inta=10; //變量a是一個(gè)局部變量 intb=12; intsum=a+b; Personp; }}該Java程序由Person和Test兩個(gè)類構(gòu)成自定義類和預(yù)定義類Java已經(jīng)預(yù)先定義了很多類,這些類稱為預(yù)定義類 如:String與此相對(duì)應(yīng),由我們自己定義的類那么稱為自定義類,如前面的Person類和Test類如前面所說,類是一種數(shù)據(jù)類型。因此,無論是預(yù)定義類還是自定義類,在程序中我們都可以用它們來申明變量的數(shù)據(jù)類型、或者作為方法的返回類型。Java類舉例publicclassPerson{
Stringname; intage;
publicvoidsetName(Stringstr){…} publicStringgetName(){returnname;} …}
Java源程序源程序保存在后綴名為.java的文件中。一個(gè)Java源文件可以同時(shí)包含多個(gè)類的申明,但是其中最多只能有一個(gè)用public修飾的類,即公有類。源文件的名稱必須和公有類的名稱相一致,包括大小寫Java源程序舉例:Hello.java
publicclassHello{
publicstaticvoidmain(Stringargs[]){System.out.println(“HelloWorld!”);}}對(duì)象的創(chuàng)立對(duì)象是類的實(shí)例假設(shè)程序中申明了Person類,那么我們就可以在程序的任何地方創(chuàng)立任意的Person類的實(shí)例,即Person類型的對(duì)象對(duì)象創(chuàng)立的語法形式: new類名(…);//括號(hào)中是否有參數(shù),要依據(jù)構(gòu)造方法比方:newPerson();Person類publicclassPerson{
Stringname; intage; publicvoidsetAge(inta){ age=a; } publicintgetAge(){ returna; }}對(duì)象的存在形式對(duì)象存在于內(nèi)存〔堆,heap〕nameage0x3A080x3A5C對(duì)象的引用對(duì)象由相應(yīng)類型的變量引用,如:
Personp1=newPerson(); Personp2=newPerson();nameage0x3A080x3A5Cp10x3A08p20x3A5C對(duì)象的操作語法形式:對(duì)象.成員,
如:
p1.setAge(18); p2.setAge(29);必須是對(duì)象.成員,
不能是類.成員,除非該成員是static修飾的
Person.setAge(20),Errorname18age0x3A08290x3A5Cp10x3A08p20x3A5C幾點(diǎn)說明類中申明的方法(包括屬性)是不能被直接調(diào)用的(靜態(tài)方法除外),必須由對(duì)象進(jìn)行調(diào)用,即使是在同一個(gè)類的其它方法中也不行。
語句Personp=null;說明變量p不指向任何對(duì)象,這時(shí)語句p.setAge(18);語法上是正確的,但是在運(yùn)行時(shí)將會(huì)產(chǎn)生錯(cuò)誤。任何對(duì)象總是有對(duì)應(yīng)的數(shù)據(jù)類型,也只能由相應(yīng)類型或其父類的變量來引用,否那么將產(chǎn)生語法錯(cuò)誤PublicclassTest{ publicx(){…}; publicy(){x();}}//error,newTest().x()PublicclassTest{ publicstaticx(){…}; publicy(){x();}}//correct關(guān)于方法調(diào)用如方法有返回類型,那么必須使用return語句,返回的值必須與返回類型匹配void返回類型可以沒有return語句,也可以包含一個(gè)沒有值的return語句publicclassPerson{ intage; publicvoidsetAge(inta){ age=a;
return; } }構(gòu)造方法〔Constructor〕Java中的每個(gè)類都有構(gòu)造方法,構(gòu)造方法具有和類名相同的名稱〔包括大小寫〕,而且無任何返回值〔包括void〕。構(gòu)造方法一般對(duì)成員變量賦一些初值;如果一個(gè)類沒有聲明構(gòu)造方法,Java自動(dòng)為該類生成一個(gè)默認(rèn)的無參的構(gòu)造方法,并且該默認(rèn)構(gòu)造方法的內(nèi)容為空。即,Java類可以通過兩種方式獲得構(gòu)造方法使用系統(tǒng)默認(rèn)的無參構(gòu)造方法顯式定義一個(gè)或多個(gè)構(gòu)造方法一旦顯式定義了構(gòu)造方法,系統(tǒng)不再提供默認(rèn)構(gòu)造方法一個(gè)類至少有一個(gè)構(gòu)造方法,可以有多個(gè)構(gòu)造方法,根據(jù)參數(shù)的不同決定執(zhí)行哪一個(gè)〔重載〕Person類publicclassPerson{
Stringname; intage;
publicPerson(){}//構(gòu)造方法 publicvoidsetAge(inta){age=a;} publicintgetAge(){returna;}}引用數(shù)據(jù)類型8種根本數(shù)據(jù)類型intlongshortbooleanchardoublefloatbyte除此以外的數(shù)據(jù)類型稱為引用類型引用類型數(shù)據(jù)以對(duì)象的形式存在引用類型變量的值是某個(gè)對(duì)象的句柄(對(duì)象在內(nèi)存中的地址),而不是對(duì)象本身聲明引用類型變量時(shí),系統(tǒng)只為該變量分配引用空間,并未創(chuàng)立一個(gè)具體的對(duì)象,引用類型可賦值為null類中的變量屬性變量(成員變量):在方法體外定義的變量,是類的成員,可以是根本類型、引用類型甚至是類本身,只要對(duì)象存在其屬性變量就存在。作用域:類。局部變量:在方法體內(nèi)定義的變量,也稱為stackvariable,作用域:方法。方法執(zhí)行時(shí)存在,方法執(zhí)行完畢后消失局部變量在使用前必須進(jìn)行初始化,而屬性變量可以不需要顯式進(jìn)行初始化,因?yàn)樵趧?chuàng)立對(duì)象時(shí)會(huì)進(jìn)行默認(rèn)的初始化。舉例:MyDate類publicclassMyDate{privateintday=12;privateintmonth=6;privateintyear=1900;publicMydate(intd,intm,inty){ year=y; month=m; day=d; } publicvoiddisplay(){ System.out.println(year+"/"+month+"/"+day); } publicstaticvoidmain(String[]args){MyDatem; m=newMyDate(22,9,2001); m.display();}}對(duì)象的構(gòu)造和初始化(1)為引用類型變量分配引用空間MyDatem;創(chuàng)立新對(duì)象--首先為新對(duì)象分配內(nèi)存空間,并進(jìn)行屬性(實(shí)例變量)的默認(rèn)初始化,new
nullmnullm000daymonthyear對(duì)象的構(gòu)造和初始化(2)Java引用類型成員變量默認(rèn)初始化原那么成員變量類型
取值
byte0short0int0long0Lchar'\u0000'float0.0Fdouble0.0Dbooleanfalse
所有引用類型null對(duì)象的構(gòu)造和初始化(3)進(jìn)行屬性(成員變量)的顯式初始化,顯式初始化取值來自于類的定義中屬性聲明局部 privateintday=12; privateintmonth=6; privateintyear=1900;nullm1261900daymonthyear對(duì)象的構(gòu)造和初始化(4)執(zhí)行構(gòu)造方法
publicMydate(inty,intm,intd){ year=y; month=m; day=d; }newMyDate(22,9,2001);nullm2292001daymonthyear對(duì)象的構(gòu)造和初始化(5)0x3a478bm2292001daymonthyear0x3a478b為引用類型變量m賦值
m=newMyDate(22,9,2001);封裝類Java編程語言提供wrapper類來操作作為對(duì)象的原始數(shù)據(jù)元素。每個(gè)Java原始數(shù)據(jù)類型在java.lang包中具有相應(yīng)的wrapper類。使用wrapper類的例如:intpInt=420;IntegerwInt=newInteger(pInt);//thisiscalledboxingintp2=wIValue();//thisiscalledunboxing自動(dòng)裝箱與開箱Integeri=3;不僅限于Integer,所有wrapper
類都可以O(shè)bject[]o={3,false};//合法轉(zhuǎn)換IntegerintegerObject=Integer.valueOf("12");intnumber=Integer.parseInt("12");注:Integer.parseInt(“xyz”)編譯時(shí)沒問題,但運(yùn)行時(shí)會(huì)異常訪問權(quán)限(Permission)publicprotected缺省〔default〕private數(shù)組數(shù)組由一組相同類型的元素構(gòu)成元素的個(gè)數(shù)稱為數(shù)組的長度,通過數(shù)組下標(biāo)訪問元素,下標(biāo)0代表第一個(gè)元素?cái)?shù)組是一個(gè)對(duì)象,數(shù)組類型屬于引用數(shù)據(jù)類型,可賦值為null.數(shù)組的申明和創(chuàng)立數(shù)組的申明 inta[]; 或 int[]a; Pointp[]; 或 Point[]p;數(shù)組對(duì)象必須通過new關(guān)鍵字創(chuàng)立.數(shù)組的初始化
int[]a={1,2,3,4,5};
String[]users={ “John”, “Mary” };
Point[]p={ newPoint(1,1), newPoint(2,2)};
參數(shù)傳遞1根本變量傳值,引用變量傳地址classMyDate{ privateintday; privateintmonth; privateintyear; publicMyDate(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ù)傳遞2根本變量傳值,引用變量傳地址publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; MyDated1=newMyDate(7,7,1970); MyDated2=newMyDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(MyDateb){b=newMyDate(22,2,2004);} publicvoidchange3(MyDateb){b.setDay(22);} }參數(shù)傳遞演示1main程序開始執(zhí)行時(shí)內(nèi)存狀態(tài)棧內(nèi)存堆內(nèi)存publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){b.setDay(22);} }參數(shù)傳遞演示2main棧內(nèi)存堆內(nèi)存publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){b.setDay(22);} }處內(nèi)存狀態(tài)1109259587934exd1354752d2197077200011date參數(shù)傳遞演示3main棧內(nèi)存堆內(nèi)存publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){b.setDay(22);} }處內(nèi)存狀態(tài)1109259587934exdated1354752d21970772000119ichange1參數(shù)傳遞演示4main棧內(nèi)存堆內(nèi)存publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){b.setDay(22);} }處內(nèi)存狀態(tài)1109259587934exdated1354752d21970772000111234ichange1參數(shù)傳遞演示5main棧內(nèi)存堆內(nèi)存publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){b.setDay(22);} }處內(nèi)存狀態(tài)1109259587934exdated1354752d2197077200011參數(shù)傳遞演示6main棧內(nèi)存堆內(nèi)存publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){b.setDay(22);} }處內(nèi)存狀態(tài)1109259587934exdated1354752d2197077200011587934bchange2參數(shù)傳遞演示7main棧內(nèi)存堆內(nèi)存publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){b.setDay(22);} }處內(nèi)存狀態(tài)1109259587934exdated1354752d2197077200011666888bchange22222004參數(shù)傳遞演示8main棧內(nèi)存堆內(nèi)存publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){b.setDay(22);} }處內(nèi)存狀態(tài)1109259587934exdated1354752d2197077200011參數(shù)傳遞演示9main棧內(nèi)存堆內(nèi)存publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){b.setDay(22);} }處內(nèi)存狀態(tài)1109259587934exdated1354752d2197077200011354752bchange3參數(shù)傳遞演示10main棧內(nèi)存堆內(nèi)存publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){b.setDay(22);} }處內(nèi)存狀態(tài)1109259587934exdated1354752d21970772000221354752bchange3main棧內(nèi)存堆內(nèi)存publicclassExample{ publicstaticvoidmain(Stringargs[]){ Exampleex=newExample(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); ex.change1(date); ex.change2(d1); ex.change3(d2); System.out.println("date="+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){b.setDay(22);} }處內(nèi)存狀態(tài)1109259587934exdated1354752d21970772000221參數(shù)傳遞演示11靜態(tài)方法以static關(guān)鍵字申明的方法就稱為靜態(tài)方法,也稱為類方法對(duì)于靜態(tài)方法,可以由類直接調(diào)用,當(dāng)然,也可以通過對(duì)象進(jìn)行調(diào)用靜態(tài)變量一個(gè)由static關(guān)鍵字修飾的變量,就稱為靜態(tài)變量,也稱為類變量,(請(qǐng)對(duì)照實(shí)例變量)如果一個(gè)類變量的訪問級(jí)別為public,那么可以通過類直接訪問該靜態(tài)變量靜態(tài)變量是多個(gè)對(duì)象間共享的方法的重載在同一個(gè)類中可以定義多個(gè)同名方法----方法重載
publicclassPrintStream{ publicvoidprintln(inti){……} publicvoidprintln(floatf){……} publicvoidprintln(Strings){……}}重載方法的參數(shù)列表必須不同重載方法的返回值類型可以相同,也可以不同構(gòu)造方法重載構(gòu)造方法重載舉例:
publicclassProject{ publicProject(){……} publicProject(Stringcode){……} publicProject(Stringcode,Stringname){……}}構(gòu)造方法重載,參數(shù)列表必須不同可以在構(gòu)造方法的第一行使用this關(guān)鍵字調(diào)用其它(重載的)構(gòu)造方法關(guān)鍵字this指代當(dāng)前對(duì)象自身publicclassProject{privateStringproj_code=“”;privateStringproj_name=“”;
publicvoidsetName(Stringname){
this.proj_name=name;//等價(jià)于proj_name=name}……}publicclassTest{publicstaticvoidmain(Stringargs[]){Projectproj_1=newProject();proj_1.setName(“abc”);//this是proj_1Projectproj_2=newProject();proj_2.setName(“xyz”);//this是proj_2}}關(guān)鍵字this……publicvoidsetName(Stringproj_name){
this.proj_name=proj_name;//解決了變量的命名沖突和不確定性問題}……關(guān)鍵字this調(diào)用重載的構(gòu)造方法publicclassProject{privateStringproj_code=“”;privateStringproj_name=“”;
publicProject(Stringcode){ ……}publicProject(){
this(“abc”);//this必須是方法中的第一條語句 ……}……}this指代當(dāng)前對(duì)象,可以returnthisthis可以調(diào)用重載的構(gòu)造方法,但不能直接用this初始化對(duì)象,newthis()是非法的類的繼承類繼承語法規(guī)那么<modifier>class<name>[extends<superclass>]{<declarations>}Object類是所有Java類的最高層父類Java只支持單繼承,不允許多重繼承一個(gè)子類只能有一個(gè)父類一個(gè)父類可以繼承出多個(gè)子類類的繼承為描述和處理個(gè)人信息,定義類PersonpublicclassPerson{publicStringname;publicintage;publicDatebirthDate;publicStringgetInfo(){...}}類的繼承為描述和處理學(xué)生信息,定義類StudentpublicclassStudent{publicStringname;publicintage;publicDatebirthDate;
publicStringschool;publicStringgetInfo(){...}}類的繼承通過繼承,簡化Student類的定義publicclassPerson{publicStringname;publicintage;publicDatebirthDate;publicStringgetInfo(){...}}publicclassStudentextendsPerson{publicStringschool;}父類子類方法的重寫/覆蓋在子類中可以根據(jù)需要對(duì)從父類中繼承來的方法進(jìn)行改造----方法的重寫重寫方法必須和被重寫方法具有相同的方法名稱、參數(shù)列表和返回值類型重寫方法不能使用比被重寫方法更嚴(yán)格的訪問權(quán)限構(gòu)造方法不能被重寫,只能通過super調(diào)用方法重寫舉例publicclassPerson{protectedStringname;protectedintage;protectedDatebirthDate;
publicStringgetInfo(){return"Name:"+name+"\n"+"age:"+age;}}publicclassStudentextendsPerson{protectedStringschool;
publicStringgetInfo(){return"Name:"+name+"\nage:"+age+"\nschool:"+school;}}關(guān)鍵字super在Java類中使用super來引用父類的成分super可用于訪問父類中定義的屬性super可用于調(diào)用父類中定義的成員方法super可用于在子類構(gòu)造方法中調(diào)用父類的構(gòu)造方法super的追溯不僅于直接父類關(guān)鍵字super舉例publicclassPerson{protectedStringname;protectedintage;protectedDatebirthDate;publicStringgetInfo(){return"Name:"+name+"\n"+"age:"+age;}}publicclassStudentextendsPerson{protectedStringschool;
publicStringgetInfo(){//調(diào)用父類的方法
returnsuper.getInfo()
+"\nschool:"+school;
}}調(diào)用父類構(gòu)造方法在子類的構(gòu)造方法中可使用super(argument_list)語句調(diào)用父類的構(gòu)造方法,super語句必須是構(gòu)造方法的第一條語句如果子類的構(gòu)造方法中沒有顯示地調(diào)用父類構(gòu)造方法,也沒有使用this關(guān)鍵字調(diào)用重載的其它構(gòu)造方法,那么系統(tǒng)默認(rèn)調(diào)用父類無參數(shù)的構(gòu)造方法如果子類構(gòu)造方法中既未顯式調(diào)用父類構(gòu)造方法,而父類中又沒有無參的構(gòu)造方法,那么編譯出錯(cuò)在子類中,不能通過父類的構(gòu)造方法名調(diào)用父類的構(gòu)造方法,只能通過super關(guān)鍵字調(diào)用父類構(gòu)造方法舉例1publicclassPerson{2 3 privateStringname;4 privateintage;privateDatebirthDate;6 7 publicPerson(Stringname,intage,Dated){8 =name;9 this.age=age;10 this.birthDate=d;11}12 publicPerson(Stringname,intage){13 this(name,age,null);14 }15 publicPerson(Stringname,Dated){16 this(name,30,d);17 }18 publicPerson(Stringname){19 this(name,30);20 }21 //……22}調(diào)用父類構(gòu)造方法舉例1publicclassStudentextendsPerson{2 privateStringschool;34 publicStudent(Stringname,intage,Strings){5 super(name,age);6 school=s;7 }8 publicStudent(Stringname,Strings){9 super(name);10 school=s;11 }publicStudent(Strings){//編譯出錯(cuò):nosuper()super();13 school=s;14 }}調(diào)用父類構(gòu)造方法舉例不能通過this關(guān)鍵字去初始化父類的屬性,只能通過super利用父類的構(gòu)造方法去初始化父類的屬性,不能通過父類構(gòu)造方法名調(diào)用父類構(gòu)造方法1publicclassStudentextendsPerson{2 privateStringschool;34 publicStudent(Stringname,intage,Strings){5 =name;this.age=age//error6 school=s;7 }8 publicStudent(Stringname,Strings){9 Pernson(name);//error10 school=s;11 }publicStudent(Strings){//編譯出錯(cuò):nosuper()super();13 school=s;14 }}多態(tài)(1)多態(tài)----在Java中,子類的對(duì)象可以替代父類的對(duì)象使用一個(gè)對(duì)象只能有一種確定的數(shù)據(jù)類型一個(gè)引用類型變量可能指向(引用)多種不同類型的對(duì)象,父類的引用變量可以指向子類實(shí)例,反之不成立
Personp=newStudent(); Objecto=newPerson(); o=newStudent(); Object[]o={newPerson(),newStudent()};
Students=newPerson()//error多態(tài)(2)一個(gè)引用類型變量如果聲明為父類的類型,但實(shí)際引用的是子類對(duì)象,那么該變量就不能再訪問子類中添加的屬性和方法
Studentm=newStudent(); m.school="pku"; //合法
Persone=newStudent(); e.school="pku"; //非法
publicclassPerson{publicintgetInfo(){}} Objecto=newPerson(); o.getInfo()//非法動(dòng)態(tài)綁定/虛方法調(diào)用正常的方法調(diào)用
Persone=newPerson(); e.getInfo(); Studente=newStudent(); e.getInfo();動(dòng)態(tài)綁定(多態(tài)情況下)
Persone=newStudent(); e.getInfo();//此時(shí)調(diào)用的是Student類中定義的getInfo方法
Person[]a={newPerson(),newStudent()} Person[0].getInfo()//調(diào)用Person類中的方法 Person[1].getInfo()//調(diào)用Student類中的方法編譯時(shí)類型和運(yùn)行時(shí)類型多態(tài)性應(yīng)用舉例(1)同類收集(homogenouscollections)
MyDate[]m=newMyDate[2]; m[0]=newMyDate(22,12,1964); m[1]=newMyDate(22,7,1964);異類收集(heterogeneouscollections)
Person[]p=newPerson[3]; p[0]=newStudent(); p[1]=newPerson(); p[2]=newGraduate();多態(tài)性應(yīng)用舉例(2)方法聲明的參數(shù)類型為父類類型,可以使用子類的對(duì)象作為實(shí)參調(diào)用該方法
publicclassTest{ publicvoidmethod(Persone){ //…… e.getInfo(); } publicstaticvoidmain(Stirngargs[]){ Testt=newTest(); Studentm=newStudent(); t.method(m); }}instanceof操作符publicclassPersonextendsObject{…}publicclassStudentextendsPerson{…}publicclassGraduateextendsPerson{…}----------------------------------------------------------------------Personp=newStudent();pinstanceofStudent;//true因此從〔pinstanceofStudent〕不能推斷p被聲明為Student類型----------------------------------------------------------------------publicvoidmethod1(Persone){ if(einstanceofStudent){ //處理Student類型及其子類類型對(duì)象 }elseif(einstanceofGraduate){ //處理Graduate類型及其子類類型對(duì)象 }else{ //處理Person類型對(duì)象 }}==操作符與equals方法Object中的equals()方法利用==實(shí)現(xiàn)Persona=newPerson();Personb=a;b.equals(a)==true;根本類型使用==時(shí)比較值;引用類型使用==時(shí)僅比較地址;如果想要比較引用類型不同實(shí)例的值〔內(nèi)容〕,必須重寫equals方法publicbooleanequals(Objectobj){return(this==obj);}舉例Circlea=newCircle(“1”);Circleb=newCircle(“1”);a!=b和a.equals(b)==true同時(shí)成立publicbooleanequals(Objecto){if(oinstanceofCircle){returnradius==((Circle)o).radius;}elsereturnfalse;}toString()方法任何Java類都是Object的子類Object定義了一個(gè)toString()方法,它返回一個(gè)實(shí)例(對(duì)象)所屬類的名稱@該對(duì)象在內(nèi)存的地址;System.out.println(person);
等價(jià)于System.out.println(person.toString());同樣:“Person:”+person;等價(jià)于“Person:”+person.toString();抽象類在有些情況下,可以暫時(shí)不實(shí)現(xiàn)類的某個(gè)成員方法,這時(shí)可以用abstract關(guān)鍵字修飾類、以及相應(yīng)的方法。
以abstract修飾的類稱為抽象類,以abstract修飾的方法稱為抽象方法 不能對(duì)抽象類直接進(jìn)行實(shí)例化。在子類中可以實(shí)現(xiàn)父類的抽象方法,只有子類實(shí)現(xiàn)(覆蓋)了父類所有的抽象方法,那么才能創(chuàng)立子類的對(duì)象,否那么子類仍然是一個(gè)抽象類,也就是說也需要用關(guān)鍵字abstract修飾 抽象類也可以不包含任何抽象方法,但抽象方法必須在抽象類〔或接口〕中最終類final修飾的類是最終類,不能被繼承,如String,Mathfinal修飾的方法不能被重寫/覆蓋有關(guān)final變量的說明:final
變量是常量可僅設(shè)置一次
final
變量,但是賦值可獨(dú)立于聲明而發(fā)生,這稱之為空final變量。即,如果final
變量不在其聲明中被初始化;其初始化被延遲:空final實(shí)例變量必須在構(gòu)造方法中被賦值??說inal局部變量可在方法的主體內(nèi)隨時(shí)被設(shè)置。它僅可設(shè)置一次。接口聲明接口[public]interface<接口名>[extends<父接口>]{[public][static][final]<數(shù)據(jù)類型><變量>=<值>;[public][abstract]<數(shù)據(jù)類型><方法名>([<參數(shù)>]);}聲明實(shí)現(xiàn)接口的類implementsJava類只支持單繼承,但是可以實(shí)現(xiàn)多個(gè)接口接口的特點(diǎn)接口以及接口中成員的訪問權(quán)限都是public接口中的成員方法都是公有的、抽象的接口中所有的方法都必須被實(shí)現(xiàn)接口的類覆蓋接口中的成員變量都是常量,聲明時(shí)必須賦值接口不能被實(shí)例化Java異常錯(cuò)誤(Error):JVM系統(tǒng)內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況違例(Exception):其它因編程錯(cuò)誤或偶然的外在因素導(dǎo)致的一般性問題,例如:對(duì)負(fù)數(shù)開平方根訪問null試圖讀取不存在的文件網(wǎng)絡(luò)連接中斷Java異常舉例publicclassSample1{publicstaticvoidmain(String[]args){ Stringfriends[]={"lisa","bily","kessy"};
for(inti=0;i<5;i++)System.out.println(friends[i]); System.out.println("\nthisistheend");}}Java異常類層次常見異常RuntimeException錯(cuò)誤的類型轉(zhuǎn)換數(shù)組下標(biāo)越界空指針訪問IOExeption從一個(gè)不存在的文件中讀取數(shù)據(jù)越過文件結(jié)尾繼續(xù)讀取連接一個(gè)不存在的URL異常處理機(jī)制
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國螺旋埋弧焊管行業(yè)發(fā)展?fàn)顩r及營銷戰(zhàn)略研究報(bào)告
- 2025-2030年中國營養(yǎng)煲行業(yè)運(yùn)行動(dòng)態(tài)分析與營銷策略研究報(bào)告
- 2025-2030年中國花椒大料行業(yè)運(yùn)營狀況及發(fā)展前景分析報(bào)告
- 2025-2030年中國膦酸脲行業(yè)運(yùn)行狀況與前景趨勢分析報(bào)告
- 2025-2030年中國膠合板行業(yè)十三五規(guī)劃及發(fā)展盈利分析報(bào)告
- 2025-2030年中國聚丁烯管行業(yè)現(xiàn)狀調(diào)研及發(fā)展?jié)摿Ψ治鰣?bào)告
- 2025-2030年中國紙杯機(jī)行業(yè)運(yùn)行狀況及前景趨勢分析報(bào)告
- 2025-2030年中國粽子行業(yè)十三五規(guī)劃及發(fā)展盈利分析報(bào)告
- 2025江西省建筑安全員-B證考試題庫附答案
- 珠海科技學(xué)院《邊緣計(jì)算》2023-2024學(xué)年第二學(xué)期期末試卷
- 香港(2024年-2025年小學(xué)二年級(jí)語文)人教版期末考試試卷(含答案)
- 浙江省臺(tái)州市2024年中考語文模擬試題及答案6
- 山水情懷 課件-2024-2025學(xué)年高中美術(shù)人教版 (2019) 選擇性必修2 中國書畫
- GA 2139-2024警用防暴臂盾
- 辦公軟件題庫(173道)
- 2024數(shù)字化風(fēng)電場智慧運(yùn)營
- ISO9001、ISO14001和ISO45001質(zhì)量環(huán)境及職業(yè)健康安全三個(gè)體系的對(duì)比
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)基礎(chǔ)教程(高校創(chuàng)新創(chuàng)業(yè)教育課程)全套教學(xué)課件
- 2024年內(nèi)蒙古交通職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫完整
- 天津和平區(qū)2024屆高三一模數(shù)學(xué)試題(解析版)
- 《中東》地圖填圖專練
評(píng)論
0/150
提交評(píng)論