java期末考試復(fù)習(xí)知識點(diǎn)_第1頁
java期末考試復(fù)習(xí)知識點(diǎn)_第2頁
java期末考試復(fù)習(xí)知識點(diǎn)_第3頁
java期末考試復(fù)習(xí)知識點(diǎn)_第4頁
java期末考試復(fù)習(xí)知識點(diǎn)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

java期末考試復(fù)習(xí)知識點(diǎn)java期末考試復(fù)習(xí)知識點(diǎn)java期末考試復(fù)習(xí)知識點(diǎn)xxx公司java期末考試復(fù)習(xí)知識點(diǎn)文件編號:文件日期:修訂次數(shù):第1.0次更改批準(zhǔn)審核制定方案設(shè)計(jì),管理制度6.1.2字符串類幾個(gè)常用方法String類定義了許多方法,下面是幾個(gè)最常用方法。publicintlength():返回字符串的長度,即字符串包含的字符個(gè)數(shù)。注意,對含有中文或其他語言符號的字符串,計(jì)算長度時(shí),一個(gè)符號作為一個(gè)字符計(jì)數(shù)。publiccharcharAt(intindex):返回字符串中指定位置的字符,index表示位置,范圍為0~s.length()-1。publicStringconcat(Stringstr):將調(diào)用字符串與參數(shù)字符串連接起來,產(chǎn)生一個(gè)新的字符串。– publicStringsubstring(intbeginIndex,intendIndex):從字符串的下標(biāo)beginIndex開始到endIndex結(jié)束產(chǎn)生一個(gè)子字符串。– publicStringsubstring(intbeginIndex):(子鏈\子串);從字符串的下標(biāo)beginIndex開始到結(jié)束產(chǎn)生一個(gè)子字符串。– publicStringreplace(charoldChar,charnewChar):將字符串中的所有oldChar字符改變?yōu)閚ewChar字符,返回一個(gè)新的字符串。– publicStringtoUpperCase():將字符串轉(zhuǎn)換成大寫字母。– publicStringtoLowerCase():將字符串轉(zhuǎn)換成小寫字母。publicStringtrim():返回去掉了前后空白字符的字符串對象。(vt.裝飾;修剪;整理;adj.整齊的,整潔的;修長的;苗條的;修剪;整齊;健康狀態(tài);裝束;)publicbooleanisEmpty():返回該字符串是否為空(""),如果length()的結(jié)果為0,方法返回true,否則返回false。下面程序要求從鍵盤輸入一個(gè)字符串,判斷該字符串是否是回文串。一個(gè)字符串,如果從前向后讀和從后向前讀都一樣,則稱該串為回文串。例如,“mom”和“上海海上”都是回文串。算法思想:對于一個(gè)字符串,先判斷該字符串的第一個(gè)字符和最后一個(gè)字符是否相等,如果相等,檢查第二個(gè)字符和倒數(shù)第二個(gè)字符是否相等。這個(gè)過程一直進(jìn)行,直到出現(xiàn)不相等的情況或者串中所有字符都檢測完畢,當(dāng)字符串有奇數(shù)個(gè)字符時(shí),中間的字符不用檢查。6.1.7String對象的不變性在Java程序中一旦創(chuàng)建一個(gè)String對象,就不能對其內(nèi)容進(jìn)行改變,因此說Java的String對象是不可變的字符串。有些方法看起來是修改字符串,但字符串修改后產(chǎn)生了另一個(gè)字符串,這些方法對原字符串沒有任何影響,原字符串永遠(yuǎn)不會改變。請看下面的例子。程序6.6ChangeString.javapublicclassChangeString{publicstaticvoidmain(String[]args){Strings=newString("Hello,world");s.replace('o','A');//s的值并沒有改變s=s.substring(0,6).concat("Java");s.toUpperCase();//s的值并沒有改變System.out.println(s);}}程序運(yùn)行結(jié)果為:Hello,JavaJava面向?qū)ο蟮娜筇匦裕砑皡^(qū)分繼承(1)繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。(2)對象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過程稱為類繼承,新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。(3)派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。封裝(1)封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個(gè)受保護(hù)的接口訪問其他對象。多態(tài)性(1)多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)。(2)多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。(3)多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名問題。封裝:每個(gè)對象都包括進(jìn)行操作所需要的所有信息,而不依賴于其他對象來完成自己的操作。通過類的實(shí)例來實(shí)現(xiàn)。

好處:良好的封裝可以降低耦合度;類的內(nèi)部可以自由修改;類具有對外的清晰接口。

繼承:IS-A的關(guān)系。Ais-aB:A是B,A可以繼承B。A是B的一個(gè)特例,特殊化,A又可以具備自己獨(dú)有的個(gè)性。三點(diǎn):

子類擁有父類非private的屬性和功能(父類的構(gòu)造函數(shù)例外,可以用base關(guān)鍵字訪問,base代表著父類);

子類具有自己的屬性和功能,即子類可以擴(kuò)展父類沒有的屬性和功能;

子類可以以自己的方式重寫父類的功能。

缺點(diǎn):父類變,子類不得不變,父子是一種強(qiáng)耦合的關(guān)系。

多態(tài):不同的對象可以執(zhí)行相同的動(dòng)作,但要通過他們自己的實(shí)現(xiàn)代碼來執(zhí)行。注意點(diǎn):

子類以父類的身份出現(xiàn);

子類在運(yùn)行時(shí)以自己的方式實(shí)現(xiàn);

子類以父類的身份出現(xiàn)時(shí),子類特有的屬性和方法不可以使用。

為了使子類的實(shí)例完全接替來自父類的類成員,父類必須將該成員聲明為虛擬的(virtual),子類可以選擇使用override將父類的實(shí)現(xiàn)替換為自己的實(shí)現(xiàn),這就是多態(tài)。封裝:封裝就是要把屬于同一類事物的共性(包括屬性與行為)歸到一個(gè)類中,以方便使用.比如人這個(gè)東東,可用下面的方式7.4封裝性與訪問修飾符在Java語言中,對象的封裝是通過兩種方式實(shí)現(xiàn)的:(1)通過包實(shí)現(xiàn)封裝性。在定義類時(shí)使用package語句指定類屬于哪個(gè)包。包是Java語言最大的封裝單位,它定義了程序?qū)︻惖脑L問權(quán)限。(2)通過類或類的成員的訪問權(quán)限實(shí)現(xiàn)封裝性。7.4封裝性與訪問修飾符7.4.1類的訪問權(quán)限7.4.2類成員的訪問權(quán)限7.4封裝性與訪問修飾符在Java語言中,對象的封裝是通過兩種方式實(shí)現(xiàn)的:(1)通過包實(shí)現(xiàn)封裝性。在定義類時(shí)使用package語句指定類屬于哪個(gè)包。包是Java語言最大的封裝單位,它定義了程序?qū)︻惖脑L問權(quán)限。(2)通過類或類的成員的訪問權(quán)限實(shí)現(xiàn)封裝性。7.4.1類的訪問權(quán)限類(也包括接口和枚舉等)的訪問權(quán)限通過修飾符public實(shí)現(xiàn)。它定義哪些類可以使用該類。public類可以被任何的其他類使用,而缺省訪問修飾符的類僅能被同一包中的類使用。下面的Circle類定義在com.demo包中,該類缺省訪問修飾符。packagecom.demo;classCircle{//類的訪問修飾符為缺省Circle(){System.out.println("Creatingacircle");}}System.out.println("Creatingacircle");}}7.4.1類的訪問權(quán)限在Eclipse中程序不能被編譯,程序第一行顯示的錯(cuò)誤信息是:Thetypecom.demo.Circleisnotvisible意思是Circle類型在該類中不可見。對出現(xiàn)這樣問題可以有兩種解決辦法:(1)將Circle類的訪問修飾符修改為public,使它成為公共類,這樣就可以被所有其他類訪問。(2)在CircleTest類中加上一行package語句,這樣它們都在一個(gè)包中。packagecom.demo;一般情況下,如果一個(gè)類只提供給同一個(gè)包中的類訪問可以不加訪問修飾符,如果還希望被包外的類訪問,則需要加上public訪問修飾符。7.4.2類成員的訪問權(quán)限類成員的訪問權(quán)限包括成員變量和成員方法的訪問權(quán)限。共有4個(gè)修飾符,它們分別是private、缺省的、protected和public,這些修飾符控制成員可以在程序的哪些部分被訪問。1.private訪問修飾符用private修飾的成員稱為私有成員,私有成員只能被這個(gè)類本身訪問,外界不能訪問。private修飾符最能體現(xiàn)對象的封裝性,從而可以實(shí)現(xiàn)信息的隱藏。7.4.2類成員的訪問權(quán)限程序7.8AnimalTest.javaclassAnimal{privateStringname="animal";privatevoiddisplay(){System.out.println("Mynameis"+name);}}publicclassAnimalTest{publicstaticvoidmain(String[]args){Animala=newAnimal();System.out.println("="+);a.display();}}該程序?qū)a(chǎn)生編譯錯(cuò)誤,因?yàn)樵贏nimal類中變量name和display()方法都聲明為private,因此在AnimalTest類的main()方法中是不能訪問的。如果將上面程序的main()方法寫在Animal類中,程序能正常編譯和運(yùn)行。這時(shí),main()方法定義在Animal類中,它就可以訪問本類中的private變量和private方法。類的構(gòu)造方法也可以被聲明為私有的,這樣其他類就不能生成該類的實(shí)例,一般是通過調(diào)用該類的方法來創(chuàng)建類的實(shí)例。2.缺省訪問修飾符對于缺省訪問修飾符的成員,一般稱為包可訪問的。這樣的成員可以被該類本身和同一個(gè)包中的類訪問。其他包中的類不能訪問這些成員。對于構(gòu)造方法,如果沒有加訪問修飾符,也只能被同一個(gè)包的類產(chǎn)生實(shí)例。.protected訪問修飾符當(dāng)成員被聲明為protected時(shí),一般稱為保護(hù)成員。該類成員可以被這個(gè)類本身、同一個(gè)包中的其他類以及該類的子類(包括同一個(gè)包以及不同包中的子類)訪問。如果一個(gè)類有子類且子類可能處于不同的包中,為了使子類能直接訪問超類的成員,那么應(yīng)該將其聲明為保護(hù)成員,而不應(yīng)該聲明為私有或默認(rèn)的成員。4.public訪問修飾符用public修飾的成員一般稱為公共成員,公共成員可以被任何其他的類訪問,但前提是類是可訪問的。表7.3總結(jié)了各種修飾符的訪問權(quán)限。7.5.1抽象方法和抽象類前面定義了圓(Circle)類,假設(shè)還要設(shè)計(jì)矩形(Rectangle)類和三角形(Triangle)類,這些類也需要定義求周長和面積的方法。這時(shí)就可以設(shè)計(jì)一個(gè)更一般的類,比如幾何形狀(Shape)類。在該類中定義求周長和面積的方法。由于幾何形狀不是一個(gè)具體的形狀,這些方法就不能實(shí)現(xiàn),因此要定義為抽象方法(abstractmethod)。抽象方法只有方法的聲明,沒有方法的實(shí)現(xiàn),定義抽象方法需要在方法前加上abstract修飾符。包含抽象方法的類應(yīng)該定義為抽象類(abstractclass),定義抽象類需要在類前加上abstract修飾符。下面定義的Shape類即為抽象類,其中定義了兩個(gè)抽象方法。程序7.9Shape.javapublicabstractclassShape{privateStringname;publicShape(){}//抽象類可以定義構(gòu)造方法publicShape(Stringname){=name;}//抽象類可以定義非抽象方法publicvoidsetName(Stringname){=name;}publicStringgetName(){returnname;}publicabstractdoubleperimeter();//定義抽象方法publicabstractdoublearea();}抽象方法的作用是為所有子類提供一個(gè)統(tǒng)一的接口。對抽象方法只需聲明,不需實(shí)現(xiàn),即在聲明后用一個(gè)分號(;)結(jié)束,而不需要用大括號。在抽象類中可以定義構(gòu)造方法,這些構(gòu)造方法可以在子類的構(gòu)造方法中調(diào)用。盡管在抽象類中可以定義構(gòu)造方法,但抽象類不能被實(shí)例化,即不能生成抽象類的對象,如下列語句將會產(chǎn)生編譯錯(cuò)誤:Shapesh=newShape();在抽象類中可以定義非抽象的方法??梢詣?chuàng)建抽象類的子類,抽象類的子類還可以是抽象類。只有非抽象的子類才能使用new創(chuàng)建該類的對象。抽象類中可以沒有抽象方法,但仍然需要被子類繼承,才能實(shí)例化。注意:因?yàn)閍bstract類必須被繼承而final類不能被繼承,所以final和abstract不能在定義類時(shí)同時(shí)使用。下面重新定義了Circle類,它繼承了Shape類并實(shí)現(xiàn)了其中的抽象方法。接口(interface)是常量和方法的集合,這些方法只有聲明沒有實(shí)現(xiàn)。接口主要用來實(shí)現(xiàn)多重繼承。接口定義了一種可以被類層次中的任何類實(shí)現(xiàn)的行為的協(xié)議。接口的定義與類的定義類似,包括接口聲明和接口體兩部分。接口聲明的一般格式如下:[public]interfaceInterfaceName[extendsSuperInterfaces]{[public][static][final]typename=value;[public][abstract]returnTypemethodName([paramlist])[throwsExceptionList];}接口聲明使用interface關(guān)鍵字,InterfaceName為接口名。extends表示該接口繼承(擴(kuò)展)了哪些接口。一個(gè)接口可以繼承多個(gè)接口。如果接口使用public修飾,則該接口可以被所有的類使用,否則接口只能被同一個(gè)包中的類使用。大括號內(nèi)為接口體,接口體中包含常量定義和方法定義兩部分。常量的定義可以缺省修飾符,但系統(tǒng)會自動(dòng)加上public、final、static屬性。接口中的方法只有聲明,沒有實(shí)現(xiàn),方法也可以缺省修飾符,缺省修飾符系統(tǒng)自動(dòng)加上public、abstract屬性,接口中的所有方法都是抽象方法。因此,接口是比抽象類還抽象的類型。構(gòu)造方法的調(diào)用過程java中構(gòu)造一個(gè)類實(shí)例,就要首先構(gòu)造它的父類,因?yàn)樽宇愂怯筛割惻缮鴣?只有有了父類才可能有子類.而對于類本身的構(gòu)造過程中,是要首先按順序來對它的成員變量進(jìn)行初始化,然后再調(diào)用其構(gòu)造方法.所以java中構(gòu)造一個(gè)類的整個(gè)過程可以理解為:如果有父類先1構(gòu)造父類然后構(gòu)造本類2本類成員變量初始化3調(diào)用本類構(gòu)造方法實(shí)際上在每個(gè)類(除Object外)的構(gòu)造造方法中都要執(zhí)行super()方法,默認(rèn)的情況下系統(tǒng)會自動(dòng)為構(gòu)造方法最前面加上super()這條語句,我們可以顯示的寫出來,并且也可為其加上參數(shù),前提是父類有相對應(yīng)的構(gòu)造方法.前面說的構(gòu)造本類之前要構(gòu)造父類就是這條語句的作用.成員變量的初始化過程是在super()語句后面其它方法體前面執(zhí)行的如果某個(gè)類的父類有多個(gè)構(gòu)造方法時(shí)子類就可以用不同的參數(shù)調(diào)用父類中相對應(yīng)的構(gòu)造方法來構(gòu)造父類如果加上自由塊和靜態(tài)的自由塊執(zhí)行的順序?yàn)椋焊割惖撵o態(tài)自由塊,父類的靜態(tài)成員變量被初始化子類的靜態(tài)自由塊,子類的靜態(tài)成員變量被初始化父類的自由塊,父類的成員變量被初始化父類的構(gòu)造方法子類的自由塊,子類的成員變量被初始化子類的構(gòu)造方法自由塊和成員變量是等同的優(yōu)先級被初始化的例:publicclassE{publicstaticvoidmain(String[]args){newB();}}classA{{System.out.println("父類A的自由塊");}A(){System.out.println("父類A的構(gòu)造方法\n");}Dd=newD("父類A的成員變量被初始化\n");static{System.out.println("父類A的靜態(tài)自由塊");}staticDdd=newD("父類A的靜態(tài)成員變量被初始化\n");}classBextendsA{staticDddd=newD("子類B的靜態(tài)成員變量被初始化");static{System.out.println("子類B的靜態(tài)自由塊\n");}Ddddd=newD("子類B的成員變量被初始化");B(){super();System.out.println("子類B的構(gòu)造方法");}{System.out.println("子類B的自由塊\n");}}classD{D(Stringstr){System.out.println(str);}}覆蓋只能發(fā)生在有父子關(guān)系的時(shí)候,也就是子類在可以訪問父類方法的情況下,可以對父類的方法進(jìn)行重寫,要求:

1.方法名完全相同

2.參數(shù)列表完全相同

3.返回類型可以為原來返回類型的子類,這種叫做協(xié)變式返回,除了這種情況外,不能修改返回類型.

重載通常發(fā)生在同一個(gè)類中,但同樣可以發(fā)生在繼承關(guān)系中,也就是子類照樣能重載父類的方法(有同樣的重載要求),要求:

1.方法名完全相同

2.參數(shù)列表必須改變,也就是重載的方法參數(shù)類型、序順必須不能和原來的一樣。

3.返回類型沒有要求,可以有或沒有返回類型。

綜上,兩者的相同是:

方法名相同

不同點(diǎn)是:

1.覆蓋發(fā)生在繼承關(guān)系中,重載發(fā)生在同一類或繼承關(guān)系中。

2.方法重載必須對參數(shù)做改變,而方法重寫沒有要求。

3.重載對返回類型沒有要求,而重寫必須返回原來方法的類型或該類型的子類。方法覆蓋(重寫)和方法重載具有以下相同點(diǎn):

·都要求方法同名。

·都可以用于抽象方法和非抽象方法之間。

方法覆蓋和方法重載具有以下不同點(diǎn):

·方法覆蓋要求參數(shù)簽名必須一致,而方法重載要求參數(shù)簽名必須不一致。

·方法覆蓋要求返回類型必須一致,而方法重載對此不做限制。

·方法覆蓋只能用于子類覆蓋父類的方法,方法重載用于同一個(gè)類的所有方法(包括從父類中繼承而來的方法)。

·方法覆蓋對方法的訪問權(quán)限和拋出的異常有特殊的要求,而方法重載在這方面沒有任何限制。

·父類的一個(gè)方法只能被子類覆蓋一次,而一個(gè)方法在所在的類中可以被重載多次異常大體分為編譯異常和運(yùn)行異

溫馨提示

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

評論

0/150

提交評論