Java學(xué)習(xí)歸納_第1頁(yè)
Java學(xué)習(xí)歸納_第2頁(yè)
Java學(xué)習(xí)歸納_第3頁(yè)
Java學(xué)習(xí)歸納_第4頁(yè)
Java學(xué)習(xí)歸納_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)組類型靜態(tài)初始化Type arrayName =element1,element2.動(dòng)態(tài)初始化arrayName =new type length類和對(duì)象定義類各成員之間可以相互調(diào)用,但static修飾的成員不能訪問(wèn)沒有static修飾的成員.有static修飾的成員屬于類本身,沒有的成員屬于該類的實(shí)例調(diào)用static修飾的成員,用 類 作為主調(diào) (即前面用類開頭)調(diào)用非static修飾的成員,用 this 作為主調(diào)(即前面用this開頭)方法詳解成員變量和局部變量成員變量:類里定義的變量 (包括實(shí)例變量,類變量)局部變量:方法里定義的變量(包括形參,方法局部變量,代碼塊局部變量)如果方法里

2、的局部變量跟成員變量同名,局部變量會(huì)覆蓋成員變量如果需要這個(gè)方法里引用被覆蓋的成員變量,則可使用this(對(duì)于實(shí)例變量)或類(對(duì)于類變量)作為調(diào)用者來(lái)限定訪問(wèn)成員變量。使用訪問(wèn)控制符Private 修飾成員變量最合適Default 訪問(wèn)控制的成員或外部類可以被相同包下的其他類訪問(wèn)Protected 成員即可以被同一個(gè)包中的其他類訪問(wèn),也可以被不同包中的子類訪問(wèn)。通常是希望其子類來(lái)重寫這個(gè)方法。Public 可以被所有類訪問(wèn)。 (只有一些static修飾的,類似全局變量的成員變量,才可能考慮使用public修飾)Package,import和import staticPackage一組相關(guān)功能的

3、類放在同一個(gè)package下使用:在java源代碼的第一個(gè)非注釋行放置如下代碼 package packageName;-d用于設(shè)置編譯生成class文件的保存位置-d. 代表當(dāng)前路徑(同一個(gè)包中的類不必位于相同的目錄下) 同一個(gè)包下的類可以自由訪問(wèn),無(wú)須加包前綴Import用于導(dǎo)入制定包層次下的某個(gè)類或全部類import package.subpackage.ClassName; 導(dǎo)入某個(gè)類import package.subpackage.*; 導(dǎo)入全部類import static靜態(tài)導(dǎo)入用于導(dǎo)入指定類的單個(gè)或全部 靜態(tài)成員變量,方法import static package.subpac

4、kage.ClassName.fieldName|methodName;import static package.subpackage.ClassName.*;*使用import可以省略寫包名 , 使用import static可以省略寫類名 深入構(gòu)造器構(gòu)造器里的this代表它進(jìn)行初始化的對(duì)象構(gòu)造器必須與類名相同構(gòu)造器不能直接被調(diào)用,構(gòu)造器必須使用new關(guān)鍵字來(lái)調(diào)用在構(gòu)造器B中調(diào)用構(gòu)造器A中的初始代碼,可以使用this關(guān)鍵字來(lái)調(diào)用相應(yīng)的構(gòu)造器使用this調(diào)用另一個(gè)重載的的構(gòu)造器只能在構(gòu)造器中使用,而且必須作為構(gòu)造器執(zhí)行體的第一條語(yǔ)句。類的繼承繼承的特點(diǎn):子類不能獲得父類的構(gòu)造器重寫父類的方法

5、重寫即子類把父類同名的方法覆蓋在子類方法中調(diào)用父類被覆蓋的方法,則可以使用super或 父類類名如果父類方法具有private訪問(wèn)權(quán)限,子類無(wú)法訪問(wèn),無(wú)法重寫(super可以與this對(duì)比)多態(tài)多態(tài)性編譯時(shí)類型是BaseClass,運(yùn)行時(shí)類型是SubClass,就出現(xiàn)多態(tài)了。多態(tài)簡(jiǎn)言之:BaseClass a = new SubClass() 編譯類型 運(yùn)行類型 引用變量時(shí)只能調(diào)用編譯類型中具有的方法,但運(yùn)行時(shí)執(zhí)行它運(yùn)行時(shí)類型所具有的方法(父類有,子類有,方法用子類的 父類有,子類沒,方法用父類的 父類沒,子類有,編譯失?。?duì)象的實(shí)例變量不具備多態(tài)性。因?yàn)橥ㄟ^(guò)引用變量來(lái)訪問(wèn)其包含的實(shí)例變量時(shí),

6、系統(tǒng)總是試圖訪問(wèn)它編譯時(shí)類型所定義的成員變量,而不是它運(yùn)行時(shí)類型所定義的成員變量。引用變量的強(qiáng)制類型轉(zhuǎn)換引用變量只能調(diào)用它編譯時(shí)類型的方法,而不能調(diào)用它運(yùn)行時(shí)類型的方法。如果試圖把一個(gè)父類實(shí)例轉(zhuǎn)換成子類類型,則這個(gè)對(duì)象必須實(shí)際上是子類實(shí)例才行(即編譯時(shí)類型是父類類型,而運(yùn)行時(shí)類型是子類類型)繼承與組合使用繼承的注意點(diǎn)不希望子類重寫該方法,用final修飾符希望父類某個(gè)方法被子類重寫,但不希望被其他類自由訪問(wèn),用protected來(lái)修飾。何時(shí)需要父類派生新的子類?1. 子類需要額外增加屬性,而不僅僅是屬性的改變。2. 子類需要增加自己的獨(dú)有的行為方式。利用組合實(shí)現(xiàn)復(fù)用詳見055.8Composi

7、teTest.java書P154繼承表達(dá)的是一種“是”的關(guān)系,組合表達(dá)的是一種“有”的關(guān)系初始化塊使用初始化塊初始化塊要么不帶任何修飾符,要帶修飾符只能帶static。 初始化順序:先執(zhí)行初始化塊或聲明實(shí)例變量時(shí)指定的初始值; 再執(zhí)行構(gòu)造器里指定的初始值初始化塊和構(gòu)造器與構(gòu)造器不同,初始化快是一段固定執(zhí)行的代碼,它不能接收任何參數(shù)。靜態(tài)初始化塊靜態(tài)初始化塊不能對(duì)實(shí)例變量進(jìn)行初始化處理(普通初始化塊負(fù)責(zé)對(duì)對(duì)象執(zhí)行初始化,靜態(tài)初始化塊負(fù)責(zé)對(duì)類進(jìn)行初始化)處理對(duì)象toString方法toString方法總是返回該對(duì)象實(shí)現(xiàn)類的“類名+hashCode”值,但這個(gè)描述不能真正實(shí)現(xiàn)自我描述,因此如果用戶需

8、要自定義類能實(shí)現(xiàn)自我描述,就必須重寫Object類的toString方法。=和equals方法當(dāng)使用=來(lái)判斷兩個(gè)變量是否相等時(shí),如果 兩個(gè)變量是基本類型變量,且都是數(shù)值型,只要兩個(gè)變量的值相等 ,就返回true;但如果是兩個(gè)引用類型變量,只要它們指向同一個(gè)對(duì)象,=判斷才會(huì)返回true。(Object類中equals與=沒區(qū)別,所以需要重寫)String重寫了Object的equals方法,只要兩個(gè)字符串所包含的字符序列相同,就返回true。詳見P170final修飾符final成員變量 Final修飾的成員變量必須由程序員顯示的指定初始值Final修飾的實(shí)例變量,在普通初始化塊或構(gòu)造器中指定初

9、始值;Final修飾的類變量,在定義靜態(tài)初始?jí)K或定義該類變量時(shí)指定初始值。final方法和類 Final修飾的方法不能被重寫,但可以被重載;Final修飾的類不可以有子類;抽象類抽象方法和抽象類有抽象方法的類只能被定義成抽象類,抽象類里可以沒有抽象方法;抽象類不能被實(shí)例化;抽象類的構(gòu)造器不能用于創(chuàng)建實(shí)例,主要用于被其子類調(diào)用;Abstract修飾類,表明該類只能被繼承Abstract修飾方法,表明該方法必須由子類重寫Abstract不能修飾成員變量,局部變量,構(gòu)造器接口接口的定義接口定義的基本語(yǔ)法修飾符interface 接口名 extends 父接口1,父接口2.零個(gè)到多個(gè)常量定義.零個(gè)到多

10、個(gè)抽象方法定義.零個(gè)到多個(gè)內(nèi)部類,接口,枚舉定義.零個(gè)到多個(gè)默認(rèn)方法或類方法定義.接口里的方法都是抽象方法一個(gè)接口可以有多個(gè)直接父接口,但接口只能繼承接口,不能繼承類接口里可以包含 成員變量:只能是靜態(tài)常量 方法:實(shí)例方法,類方法,默認(rèn)方法 內(nèi)部類:內(nèi)部接口,枚舉定義接口成員時(shí),可以省略訪問(wèn)控制修飾符,如果要指定,只能是public常量默認(rèn) public static final修飾方法默認(rèn) public abstract修飾使用接口實(shí)現(xiàn)接口的語(yǔ)法格式修飾符class 類名 extends 父類 implements 接口1,接口2.類體部分一個(gè)類實(shí)現(xiàn)了一個(gè)或多個(gè)接口后,這個(gè)類必須完全實(shí)現(xiàn)這些

11、接口里定義的全部抽象方法;否則,該類將保留從父類接口哪里繼承到的抽象方法,該類也必須定義成抽象類;一個(gè)類實(shí)現(xiàn)某個(gè)接口時(shí),會(huì)獲得接口中定義的常量,方法等注:實(shí)現(xiàn)接口方法時(shí),必須使用public修飾,因?yàn)榻涌诶锏姆椒ǘ际莗ublic的,而子類重寫父類方法時(shí)訪問(wèn)權(quán)限只能更大或相等接口和抽象類接口和抽象類都不能被實(shí)例化;接口和抽象類都可以包含抽象方法;接口與抽象類的差別詳見P195內(nèi)部類內(nèi)部類成員可以直接訪問(wèn)外部類的私有數(shù)據(jù)內(nèi)部類比外部類多三個(gè)修飾符 private ,protected,static非靜態(tài)內(nèi)部類不能擁有靜態(tài)成員非靜態(tài)內(nèi)部類public class Outerprivate int o

12、utProp = 9;class Innerprivate int inProp = 5;public void acessOuterProp()/內(nèi)部類可以直接訪問(wèn)外部類的成員System.out.println(外部類的outProp屬性值: + outProp);public void accessInnerProp()/外部類不能直接訪問(wèn)內(nèi)部類屬性,下面代碼出現(xiàn)編譯錯(cuò)誤/System.out.println(內(nèi)部類的inProp屬性值: + inProp);/如需訪問(wèn)內(nèi)部類成員,必須顯式創(chuàng)建內(nèi)部類對(duì)象System.out.println(內(nèi)部類的inProp屬性值: + new Inn

13、er().inProp);public static void main(String args)/執(zhí)行下面代碼,只創(chuàng)建了外部類對(duì)象,還未創(chuàng)建內(nèi)部類對(duì)象Outer out = new Outer();Inner in =new Inner();System.out.println(內(nèi)部類的inProp屬性值: +out.this.inProp);靜態(tài)內(nèi)部類用static修飾后,內(nèi)部類就屬于外部類本身,而不是外部類的某個(gè)對(duì)象了。使用內(nèi)部類1在外部類使用內(nèi)部類直接通過(guò)內(nèi)部類的類名來(lái)定義變量通過(guò)new調(diào)用內(nèi)部類構(gòu)造器來(lái)創(chuàng)建實(shí)例2在外部類以外來(lái)使用非靜態(tài)內(nèi)部類在外部類以外的地方定義內(nèi)部類OuterCl

14、ass.InnerClass varName在外部類以外的地方創(chuàng)建非靜態(tài)內(nèi)部類實(shí)例OuterInstance.new InnerConstructor() 實(shí)例 構(gòu)造器3在外部類以外使用靜態(tài)內(nèi)部類因?yàn)殪o態(tài)內(nèi)部類是外部類類相關(guān)的,所以創(chuàng)建靜態(tài)內(nèi)部類實(shí)例的語(yǔ)法如下new OuterClass.InnerConstrutor()匿名內(nèi)部類匿名內(nèi)部類適合創(chuàng)建那種只需要一次使用的類匿名內(nèi)部類必須也只能繼承一個(gè)父類,或?qū)崿F(xiàn)一個(gè)接口兩條規(guī)則1匿名內(nèi)部類不能使抽象類2匿名內(nèi)部類不能定義構(gòu)造器。因?yàn)槟涿麅?nèi)部類沒有類名,所以無(wú)法定義構(gòu)造器枚舉類繼承的是java.lang.Enum類非抽象的枚舉類默認(rèn)使用final

15、修飾,所以不能派生子類構(gòu)造器默認(rèn)private修飾單例模式單例模式的兩種寫法/*這個(gè)是先初始化對(duì)象。稱為:餓漢式。Single類一進(jìn)內(nèi)存,就已經(jīng)創(chuàng)建好了對(duì)象。class Singleprivate static Single s = new Single();private Single()public static Single getInstance()return s;*/對(duì)象是方法被調(diào)用時(shí),才初始化,也叫做對(duì)象的延時(shí)加載。成為:懶漢式。/Single類進(jìn)內(nèi)存,對(duì)象還沒有存在,只有調(diào)用了getInstance方法時(shí),才建立對(duì)象。class Singleprivate static Sin

16、gle s = null;private Single()public static Single getInstance()if(s=null)synchronized(Single.class)if(s=null)s = new Single();return s;/記錄原則:定義單例,建議使用餓漢式。異常異常體系:Throwable|-Error|-Exception|-RuntimeException異常體系的特點(diǎn):異常體系中的所有類以及建立的對(duì)象都具備可拋性。也就是說(shuō)可以被throw和throws關(guān)鍵字所操作。只有異常體系具備這個(gè)特點(diǎn)。-throw和throws的用法:throw定義

17、在函數(shù)內(nèi),用于拋出異常對(duì)象。throws定義在函數(shù)上,用于拋出異常類,可以拋出多個(gè)用逗號(hào)隔開。當(dāng)函數(shù)內(nèi)容有throw拋出異常對(duì)象,并未進(jìn)行try處理。必須要在函數(shù)上聲明,都在編譯失敗。注意,RuntimeException除外。也就說(shuō),函數(shù)內(nèi)如果拋出的RuntimeExcpetion異常,函數(shù)上可以不用聲明。-如果函數(shù)聲明了異常,調(diào)用者需要進(jìn)行處理。處理方法可以throws可以try。異常有兩種:編譯時(shí)被檢測(cè)異常該異常在編譯時(shí),如果沒有處理(沒有拋也沒有try),編譯失敗。該異常被標(biāo)識(shí),代表這可以被處理。運(yùn)行時(shí)異常(編譯時(shí)不檢測(cè))在編譯時(shí),不需要處理,編譯器不檢查。該異常的發(fā)生,建議不處理,讓

18、程序停止。需要對(duì)代碼進(jìn)行修正。-異常處理語(yǔ)句:try需要被檢測(cè)的代碼;catch ()處理異常的代碼;finally一定會(huì)執(zhí)行的代碼;有三個(gè)結(jié)合格式:1.trycatch ()2.tryfinally3.trycatch ()finally注意:1,finally中定義的通常是 關(guān)閉資源代碼。因?yàn)橘Y源必須釋放。2,finally只有一種情況不會(huì)執(zhí)行。當(dāng)執(zhí)行到System.exit(0);fianlly不會(huì)執(zhí)行。-自定義異常:定義類繼承Exception或者RuntimeException1,為了讓該自定義類具備可拋性。2,讓該類具備操作異常的共性方法。當(dāng)要定義自定義異常的信息時(shí),可以使用父類已

19、經(jīng)定義好的功能。異常異常信息傳遞給父類的構(gòu)造函數(shù)。class MyException extends ExceptionMyException(String message)super(message);自定義異常:按照java的面向?qū)ο笏枷耄瑢⒊绦蛑谐霈F(xiàn)的特有問(wèn)題進(jìn)行封裝。-異常的好處:1,將問(wèn)題進(jìn)行封裝。2,將正常流程代碼和問(wèn)題處理代碼相分離,方便于閱讀。異常的處理原則:1,處理方式有兩種:try 或者 throws。2,調(diào)用到拋出異常的功能時(shí),拋出幾個(gè),就處理幾個(gè)。一個(gè)try對(duì)應(yīng)多個(gè)catch。3,多個(gè)catch,父類的catch放到最下面。4,catch內(nèi),需要定義針對(duì)性的處理方式。不

20、要簡(jiǎn)單的定義printStackTrace,輸出語(yǔ)句。也不要不寫。當(dāng)捕獲到的異常,本功能處理不了時(shí),可以繼續(xù)在catch中拋出。trythrow new AException();catch (AException e)throw e;如果該異常處理不了,但并不屬于該功能出現(xiàn)的異常??梢詫惓^D(zhuǎn)換后,再拋出和該功能相關(guān)的異常?;蛘弋惓?梢蕴幚?,當(dāng)需要將異常產(chǎn)生的和本功能相關(guān)的問(wèn)題提供出去,當(dāng)調(diào)用者知道。并處理。也可以將捕獲異常處理后,轉(zhuǎn)換新的異常。trythrow new AException();catch (AException e)/ 對(duì)AException處理。throw new BE

21、xception();異常的注意事項(xiàng):在子父類覆蓋時(shí):1,子類拋出的異常必須是父類的異常的子類或者子集。2,如果父類或者接口沒有異常拋出時(shí),子類覆蓋出現(xiàn)異常,只能try不能拋。StringString類適用于描述字符串事物。那么它就提供了多個(gè)方法對(duì)字符串進(jìn)行操作。常見的操作有哪些?1,獲取。1.1 字符串中的包含的字符數(shù),也就是字符串的長(zhǎng)度。int length():獲取長(zhǎng)度。1.2 根據(jù)位置獲取位置上某個(gè)字符。char charAt(int index):1.3 根據(jù)字符獲取該字符在字符串中位置。int indexOf(int ch):返回的是ch在字符串中第一次出現(xiàn)的位置。int inde

22、xOf(int ch, int fromIndex) :從fromIndex指定位置開始,獲取ch在字符串中出現(xiàn)的位置。int indexOf(String str):返回的是str在字符串中第一次出現(xiàn)的位置。int indexOf(String str, int fromIndex) :從fromIndex指定位置開始,獲取str在字符串中出現(xiàn)的位置。int lastIndexOf(int ch) :2,判斷。2.1 字符串中是否包含某一個(gè)子串。boolean contains(str):特殊之處:indexOf(str):可以索引str第一次出現(xiàn)位置,如果返回-1.表示該str不在字符串中

23、存在。所以,也可以用于對(duì)指定判斷是否包含。if(str.indexOf(aa)!=-1)而且該方法即可以判斷,有可以獲取出現(xiàn)的位置。2.2 字符中是否有內(nèi)容。boolean isEmpty(): 原理就是判斷長(zhǎng)度是否為0. 2.3 字符串是否是以指定內(nèi)容開頭。boolean startsWith(str);2.4 字符串是否是以指定內(nèi)容結(jié)尾。boolean endsWith(str);2.5 判斷字符串內(nèi)容是否相同。復(fù)寫了Object類中的equals方法。boolean equals(str);2.6 判斷內(nèi)容是否相同,并忽略大小寫。boolean equalsIgnoreCase();3,

24、轉(zhuǎn)換。3.1 將字符數(shù)組轉(zhuǎn)成字符串。構(gòu)造函數(shù):String(char) String(char,offset,count):將字符數(shù)組中的一部分轉(zhuǎn)成字符串。靜態(tài)方法:static String copyValueOf(char);static String copyValueOf(char data, int offset, int count) static String valueOf(char):3.2 將字符串轉(zhuǎn)成字符數(shù)組。*char toCharArray():3.3 將字節(jié)數(shù)組轉(zhuǎn)成字符串。String(byte)String(byte,offset,count):將字節(jié)數(shù)組中的一部

25、分轉(zhuǎn)成字符串。3.4 將字符串轉(zhuǎn)成字節(jié)數(shù)組。byte getBytes():3.5 將基本數(shù)據(jù)類型轉(zhuǎn)成字符串。static String valueOf(int)static String valueOf(double)/3+;/String.valueOf(3);特殊:字符串和字節(jié)數(shù)組在轉(zhuǎn)換過(guò)程中,是可以指定編碼表的。4,替換String replace(oldchar,newchar);5,切割String split(regex);6,子串。獲取字符串中的一部分。String substring(begin);String substring(begin,end);7,轉(zhuǎn)換,去除空格,比

26、較。7.1 將字符串轉(zhuǎn)成大寫或則小寫。 String toUpperCase(); String toLowerCase();7.2 將字符串兩端的多個(gè)空格去除。String trim();7.3 對(duì)兩個(gè)字符串進(jìn)行自然順序的比較。int compareTo(string);StringBufferStringBuffer是字符串緩沖區(qū)。是一個(gè)容器。特點(diǎn):1,長(zhǎng)度是可變化的。2,可以字節(jié)操作多個(gè)數(shù)據(jù)類型。3,最終會(huì)通過(guò)toString方法變成字符串。C create U update R read D delete1,存儲(chǔ)。StringBuffer append():將指定數(shù)據(jù)作為參數(shù)添加到已有

27、數(shù)據(jù)結(jié)尾處。StringBuffer insert(index,數(shù)據(jù)):可以將數(shù)據(jù)插入到指定index位置。2,刪除。StringBuffer delete(start,end):刪除緩沖區(qū)中的數(shù)據(jù),包含start,不包含end。StringBuffer deleteCharAt(index):刪除指定位置的字符。3,獲取。char charAt(int index) int indexOf(String str) int lastIndexOf(String str) int length() String substring(int start, int end) 4,修改。StringB

28、uffer replace(start,end,string);void setCharAt(int index, char ch) ;5,反轉(zhuǎn)。StringBuffer reverse(); 6,將緩沖區(qū)中指定數(shù)據(jù)存儲(chǔ)到指定字符數(shù)組中。void getChars(int srcBegin, int srcEnd, char dst, int dstBegin) JDK1.5 版本之后出現(xiàn)了StringBuilder.StringBuffer是線程同步。StringBuilder是線程不同步。以后開發(fā),建議使用StringBuilder升級(jí)三個(gè)因素:1,提高效率。2,簡(jiǎn)化書寫。3,提高安全性。

29、基本數(shù)據(jù)類型對(duì)象包裝類。ByteByteShortshortintIntegerlongLongboolean BooleanFloatFloatdoubleDoublecharCharacter基本數(shù)據(jù)類型對(duì)象包裝類的最常見作用,就是用于基本數(shù)據(jù)類型和字符串類型之間做轉(zhuǎn)換基本數(shù)據(jù)類型轉(zhuǎn)成字符串?;緮?shù)據(jù)類型+基本數(shù)據(jù)類型.toString(基本數(shù)據(jù)類型值);如: Integer.toString(34);/將34整數(shù)變成34;字符串轉(zhuǎn)成基本數(shù)據(jù)類型。xxx a = Xxx.parseXxx(String);int a = Integer.parseInt(123);double b = Do

30、uble.parseDouble(12.23);boolean b = Boolean.parseBoolean(true);Integer i = new Integer(123);int num = Value();十進(jìn)制轉(zhuǎn)成其他進(jìn)制。toBinaryString();toHexString();toOctalString();其他進(jìn)制轉(zhuǎn)成十進(jìn)制。parseInt(string,radix);集合Collection|-List:元素是有序的,元素可以重復(fù)。因?yàn)樵摷象w系有索引。|-ArrayList:底層的數(shù)據(jù)結(jié)構(gòu)使用的是數(shù)組結(jié)構(gòu)。特點(diǎn):查詢速度很快。但是增刪稍慢。線程不同步。

31、|-LinkedList:底層使用的鏈表數(shù)據(jù)結(jié)構(gòu)。特點(diǎn):增刪速度很快,查詢稍慢。線程不同步。|-Vector:底層是數(shù)組數(shù)據(jù)結(jié)構(gòu)。線程同步。被ArrayList替代了。因?yàn)樾实?。|-Set:元素是無(wú)序,元素不可以重復(fù)Collection定義了集合框架的共性功能。1,添加add(e);addAll(collection);2,刪除remove(e);removeAll(collection);clear();3,判斷。contains(e);isEmpty();4,獲取iterator();size();5,獲取交集。retainAll();6,集合變數(shù)組。toArray();1,add方法的

32、參數(shù)類型是Object。以便于接收任意類型對(duì)象。2,集合中存儲(chǔ)的都是對(duì)象的引用(地址)什么是迭代器呢?其實(shí)就是集合的取出元素的方式。如同抓娃娃游戲機(jī)中的夾子。迭代器是取出方式,會(huì)直接訪問(wèn)集合中的元素。所以將迭代器通過(guò)內(nèi)部類的形式來(lái)進(jìn)行描述。通過(guò)容器的iterator()方法獲取該內(nèi)部類的對(duì)象。List:特有方法。凡是可以操作角標(biāo)的方法都是該體系特有的方法。增add(index,element);addAll(index,Collection);刪remove(index);改set(index,element);查get(index):subList(from,to);/包含頭元素,不包含尾元

33、素listIterator();int indexOf(obj):獲取指定元素的位置。ListIterator listIterator();List集合特有的迭代器。ListIterator是Iterator的子接口。在迭代時(shí),不可以通過(guò)集合對(duì)象的方法操作集合中的元素。因?yàn)闀?huì)發(fā)生ConcurrentModificationException異常。所以,在迭代器時(shí),只能用迭代器的放過(guò)操作元素,可是Iterator方法是有限的,只能對(duì)元素進(jìn)行判斷,取出,刪除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。該接口只能通過(guò)List集合的listIterator

34、方法獲取。LinkedList:特有方法:addFirst();addLast();getFirst();getLast();獲取元素,但不刪除元素。如果集合中沒有元素,會(huì)出現(xiàn)NoSuchElementExceptionremoveFirst();removeLast();獲取元素,但是元素被刪除。如果集合中沒有元素,會(huì)出現(xiàn)NoSuchElementException在JDK1.6出現(xiàn)了替代方法。/以后用這個(gè)offerFirst();offerLast();添加元素peekFirst();peekLast();獲取元素,但不刪除元素。如果集合中沒有元素,會(huì)返回null。pollFirst();

35、pollLast();獲取元素,但是元素被刪除。如果集合中沒有元素,會(huì)返回null。List集合判斷元素是否相同,依據(jù)是元素的equals方法。SetSet集合的功能和Collection是一致的。|-Set:元素是無(wú)序(存入和取出的順序不一定一致),元素不可以重復(fù)。、HashSet底層數(shù)據(jù)結(jié)構(gòu)是哈希表。是線程不安全的。不同步。HashSet是如何保證元素唯一性的呢?是通過(guò)元素的兩個(gè)方法,hashCode和equals來(lái)完成。如果元素的HashCode值相同,才會(huì)判斷equals是否為true。如果元素的hashcode值不同,不會(huì)調(diào)用equals。注意,對(duì)于判斷元素是否存在,以及刪除等操作,

36、依賴的方法是元素的hashcode和equals方法。TreeSet可以對(duì)Set集合中的元素進(jìn)行排序。記住,排序時(shí),當(dāng)主要條件相同時(shí),一定判斷一下次要條件底層數(shù)據(jù)結(jié)構(gòu)是二叉樹。保證元素唯一性的依據(jù):compareTo方法return 0.TreeSet排序的第一種方式:讓元素自身具備比較性。元素需要實(shí)現(xiàn)Comparable接口,覆蓋compareTo方法。也種方式也成為元素的自然順序,或者叫做默認(rèn)順序。TreeSet的第二種排序方式。當(dāng)元素自身不具備比較性時(shí),或者具備的比較性不是所需要的。這時(shí)就需要讓集合自身具備比較性。在集合初始化時(shí),就有了比較方式。當(dāng)元素自身不具備比較性,或者具備的比較性不

37、是所需要的。這時(shí)需要讓容器自身具備比較性。定義了比較器,將比較器對(duì)象作為參數(shù)傳遞給TreeSet集合的構(gòu)造函數(shù)。當(dāng)兩種排序都存在時(shí),以比較器為主。定義一個(gè)類,實(shí)現(xiàn)Comparator接口,覆蓋compare方法。MapMap集合:該集合存儲(chǔ)鍵值對(duì)。一對(duì)一對(duì)往里存。而且要保證鍵的唯一性。1,添加。put(K key, V value) /第一次賦值,第二次如果鍵相同,則覆蓋putAll(Map m) 2,刪除。clear() remove(Object key) 3,判斷。containsValue(Object value) containsKey(Object key) isEmpty()

38、4,獲取。get(Object key) size() values() entrySet() keySet() Map|-Hashtable:底層是哈希表數(shù)據(jù)結(jié)構(gòu),不可以存入null鍵null值。該集合是線程同步的。jdk1.0.效率低。|-HashMap:底層是哈希表數(shù)據(jù)結(jié)構(gòu),允許使用 null 值和 null 鍵,該集合是不同步的。將hashtable替代,jdk1.2.效率高。|-TreeMap:底層是二叉樹數(shù)據(jù)結(jié)構(gòu)。線程不同步??梢杂糜诮omap集合中的鍵進(jìn)行排序。和Set很像。其實(shí)Set底層就是使用了Map集合。map集合取出的兩種方式代碼示例見day16 MapDemo21,Set

39、 keySet:將map中所有的鍵存入到Set集合。因?yàn)閟et具備迭代器。所有可以迭代方式取出所有的鍵,在根據(jù)get方法。獲取每一個(gè)鍵對(duì)應(yīng)的值。Map集合的取出原理:將map集合轉(zhuǎn)成set集合。在通過(guò)迭代器取出。2,SetMap.Entry entrySet:將map集合中的映射關(guān)系存入到了set集合中,而這個(gè)關(guān)系的數(shù)據(jù)類型就是:Map.EntryEntry其實(shí)就是Map中的一個(gè)static內(nèi)部接口。為什么要定義在內(nèi)部呢?因?yàn)橹挥杏辛薓ap集合,有了鍵值對(duì),才會(huì)有鍵值的映射關(guān)系。關(guān)系屬于Map集合中的一個(gè)內(nèi)部事物。而且該事物在直接訪問(wèn)Map集合中的元素。Map.Entry 其實(shí)Entry也是一

40、個(gè)接口,它是Map接口中的一個(gè)內(nèi)部接口。CollectionsCollections:集合框架的工具類。里面定義的都是靜態(tài)方法。Collections和Collection有什么區(qū)別?Collection是集合框架中的一個(gè)頂層接口,它里面定義了單列集合的共性方法。它有兩個(gè)常用的子接口,List:對(duì)元素都有定義索引。有序的??梢灾貜?fù)元素。Set:不可以重復(fù)元素。無(wú)序。Collections是集合框架中的一個(gè)工具類。該類中的方法都是靜態(tài)的提供的方法中有可以對(duì)list集合進(jìn)行排序,二分查找等方法。通常常用的集合都是線程不安全的。因?yàn)橐岣咝?。如果多線程操作這些集合時(shí),可以通過(guò)該工具類中的同步方法,

41、將線程不安全的集合,轉(zhuǎn)換成安全的。集合變數(shù)組。Collection接口中的toArray方法。1,指定類型的數(shù)組到底要定義多長(zhǎng)呢?當(dāng)指定類型的數(shù)組長(zhǎng)度小于了集合的size,那么該方法內(nèi)部會(huì)創(chuàng)建一個(gè)新的數(shù)組。長(zhǎng)度為集合的size。當(dāng)指定類型的數(shù)組長(zhǎng)度大于了集合的size,就不會(huì)新創(chuàng)建了數(shù)組。而是使用傳遞進(jìn)來(lái)的數(shù)組。所以創(chuàng)建一個(gè)剛剛好的數(shù)組最優(yōu)。String arr = al.toArray(new Stringal.size();2,為什么要將集合變數(shù)組?為了限定對(duì)元素的操作。不需要進(jìn)行增刪了。Arrays:用于操作數(shù)組的工具類。里面都是靜態(tài)方法。asList:將數(shù)組變成list集合把數(shù)組變成l

42、ist集合有什么好處?可以使用集合的思想和方法來(lái)操作數(shù)組中的元素。注意:將數(shù)組變成集合,不可以使用集合的增刪方法。因?yàn)閿?shù)組的長(zhǎng)度是固定。如果數(shù)組中的元素都是對(duì)象。那么變成集合時(shí),數(shù)組中的元素就直接轉(zhuǎn)成集合中的元素。如果數(shù)組中的元素都是基本數(shù)據(jù)類型,那么會(huì)將該數(shù)組作為集合中的元素存在。高級(jí)for循環(huán)格式:for(數(shù)據(jù)類型 變量名 : 被遍歷的集合(Collection)或者數(shù)組)對(duì)集合進(jìn)行遍歷。只能獲取集合元素。但是不能對(duì)集合進(jìn)行操作。迭代器除了遍歷,還可以進(jìn)行remove集合中元素的動(dòng)作。如果是用ListIterator,還可以在遍歷過(guò)程中對(duì)集合進(jìn)行增刪改查的動(dòng)作。傳統(tǒng)for和高級(jí)for有什么

43、區(qū)別呢?高級(jí)for有一個(gè)局限性。必須有被遍歷的目標(biāo)。建議在遍歷數(shù)組的時(shí)候,還是希望是用傳統(tǒng)for。因?yàn)閭鹘y(tǒng)for可以定義腳標(biāo)。方法的可變參數(shù)。在使用時(shí)注意:可變參數(shù)一定要定義在參數(shù)列表最后面??勺儏?shù)。其實(shí)就是上一種數(shù)組參數(shù)的簡(jiǎn)寫形式。不用每一次都手動(dòng)的建立數(shù)組對(duì)象。只要將要操作的元素作為參數(shù)傳遞即可。隱式將這些參數(shù)封裝成了數(shù)組class ParamMethodDemopublic static void main(String args) show(haha,2,3,4,5,6);show(2,3,4,5,6,4,2,35,9,heh);show(); /參數(shù)可變public static

44、void show(String str,int. arr)System.out.println(arr.length); /黃色加粗部分就是可變參數(shù)的形式靜態(tài)導(dǎo)入StaticImport 。當(dāng)類名重名時(shí),需要指定具體的包名。當(dāng)方法重名是,指定具備所屬的對(duì)象或者類。示例 import static java.util.Arrays.*;/導(dǎo)入的是Arrays這個(gè)類中的所有靜態(tài)成員。泛型泛型:用于解決安全問(wèn)題,是一個(gè)類型安全機(jī)制。好處1.將運(yùn)行時(shí)期出現(xiàn)問(wèn)題ClassCastException,轉(zhuǎn)移到了編譯時(shí)期。,方便于程序員解決問(wèn)題。讓運(yùn)行時(shí)問(wèn)題減少,安全。,2,避免了強(qiáng)制轉(zhuǎn)換麻煩。泛型格式:通

45、過(guò)來(lái)定義要操作的引用數(shù)據(jù)類型。放在返回值類型前面在使用java提供的對(duì)象時(shí),什么時(shí)候?qū)懛盒湍??通常在集合框架中很常見,只要見到就要定義泛型。其實(shí) 就是用來(lái)接收類型的。當(dāng)使用集合時(shí),將集合中要存儲(chǔ)的數(shù)據(jù)類型作為參數(shù)傳遞到中即可。什么時(shí)候定義泛型類?當(dāng)類中要操作的引用數(shù)據(jù)類型不確定的時(shí)候,早期定義Object來(lái)完成擴(kuò)展?,F(xiàn)在定義泛型來(lái)完成擴(kuò)展。泛型類定義的泛型,在整個(gè)類中有效。如果被方法使用,那么泛型類的對(duì)象明確要操作的具體類型后,所有要操作的類型就已經(jīng)固定了。為了讓不同方法可以操作不同類型,而且類型還不確定。那么可以將泛型定義在方法上。特殊之處:靜態(tài)方法不可以訪問(wèn)類上定義的泛型。如果靜態(tài)方法操作

46、的應(yīng)用數(shù)據(jù)類型不確定,可以將泛型定義在方法上。通配符。也可以理解為占位符。泛型的限定;? extends E: 可以接收E類型或者E的子類型。上限。? super E: 可以接收E類型或者E的父類型。下限多線程進(jìn)程:是一個(gè)正在執(zhí)行中的程序。每一個(gè)進(jìn)程執(zhí)行都有一個(gè)執(zhí)行順序。該順序是一個(gè)執(zhí)行路徑,或者叫一個(gè)控制單元。線程:就是進(jìn)程中的一個(gè)獨(dú)立的控制單元。線程在控制著進(jìn)程的執(zhí)行。一個(gè)進(jìn)程中至少有一個(gè)線程。Java VM 啟動(dòng)的時(shí)候會(huì)有一個(gè)進(jìn)程java.exe.該進(jìn)程中至少一個(gè)線程負(fù)責(zé)java程序的執(zhí)行。而且這個(gè)線程運(yùn)行的代碼存在于main方法中。該線程稱之為主線程。擴(kuò)展:其實(shí)更細(xì)節(jié)說(shuō)明jvm,jvm

47、啟動(dòng)不止一個(gè)線程,還有負(fù)責(zé)垃圾回收機(jī)制的線程。1,如何在自定義的代碼中,自定義一個(gè)線程呢?通過(guò)對(duì)api的查找,java已經(jīng)提供了對(duì)線程這類事物的描述。就Thread類。線程都有自己默認(rèn)的名稱。Thread-編號(hào) 該編號(hào)從0開始。static Thread currentThread():獲取當(dāng)前線程對(duì)象。getName(): 獲取線程名稱。設(shè)置線程名稱:setName或者構(gòu)造函數(shù)。創(chuàng)建線程的第一種方式:繼承Thread類。步驟:1,定義類繼承Thread。2,復(fù)寫Thread類中的run方法。目的:將自定義代碼存儲(chǔ)在run方法。讓線程運(yùn)行。3,調(diào)用線程的start方法,該方法兩個(gè)作用:?jiǎn)?dòng)線程

48、,調(diào)用run方法。發(fā)現(xiàn)運(yùn)行結(jié)果每一次都不同。因?yàn)槎鄠€(gè)線程都獲取cpu的執(zhí)行權(quán)。cpu執(zhí)行到誰(shuí),誰(shuí)就運(yùn)行。明確一點(diǎn),在某一個(gè)時(shí)刻,只能有一個(gè)程序在運(yùn)行。(多核除外)cpu在做著快速的切換,以達(dá)到看上去是同時(shí)運(yùn)行的效果。我們可以形象把多線程的運(yùn)行行為在互相搶奪cpu的執(zhí)行權(quán)。這就是多線程的一個(gè)特性:隨機(jī)性。誰(shuí)搶到誰(shuí)執(zhí)行,至于執(zhí)行多長(zhǎng),cpu說(shuō)的算。為什么要覆蓋run方法呢?Thread類用于描述線程。該類就定義了一個(gè)功能,用于存儲(chǔ)線程要運(yùn)行的代碼。該存儲(chǔ)功能就是run方法。也就是說(shuō)Thread類中的run方法,用于存儲(chǔ)線程要運(yùn)行的代碼。創(chuàng)建線程的第二種方式:實(shí)現(xiàn)Runable接口步驟:1,定義類實(shí)

49、現(xiàn)Runnable接口2,覆蓋Runnable接口中的run方法。將線程要運(yùn)行的代碼存放在該run方法中。3,通過(guò)Thread類建立線程對(duì)象。4,將Runnable接口的子類對(duì)象作為實(shí)際參數(shù)傳遞給Thread類的構(gòu)造函數(shù)。為什么要將Runnable接口的子類對(duì)象傳遞給Thread的構(gòu)造函數(shù)?因?yàn)榫€程要運(yùn)行的代碼都在Runnable子類的run方法中存儲(chǔ)。所以要將該run方法所屬的對(duì)象傳遞給Thread。讓Thread線程去使用該對(duì)象調(diào)用其run方法?;蛘哒f(shuō):Runnable實(shí)現(xiàn)類里包含的run()方法僅作為線程執(zhí)行體。而實(shí)際的線程對(duì)象依然是Thread實(shí)例。5,調(diào)用Thread類的start方法開啟線程并調(diào)用Runnable接口子類的run方法。實(shí)現(xiàn)方式和繼承方式有什么區(qū)別呢?實(shí)現(xiàn)方式好處:避免了單繼承的局限性。在定義線程時(shí),建立使用實(shí)現(xiàn)方式。兩種方式區(qū)別:繼承Thread 線程代碼存放Thread子類run方法中。通過(guò)繼承Thread類來(lái)獲得當(dāng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論