java學(xué)習(xí)重點(diǎn)筆記專業(yè)資料_第1頁(yè)
java學(xué)習(xí)重點(diǎn)筆記專業(yè)資料_第2頁(yè)
java學(xué)習(xí)重點(diǎn)筆記專業(yè)資料_第3頁(yè)
java學(xué)習(xí)重點(diǎn)筆記專業(yè)資料_第4頁(yè)
java學(xué)習(xí)重點(diǎn)筆記專業(yè)資料_第5頁(yè)
已閱讀5頁(yè),還剩123頁(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)介

Java學(xué)習(xí)筆記

Java概述

java語(yǔ)言是解釋執(zhí)行,java源碼是通過(guò)編譯生成一種特殊.class中間字解碼文獻(xiàn),然后再有JVM進(jìn)行解釋執(zhí)行。

java語(yǔ)言對(duì)指針進(jìn)行了上層封裝,它保證可以通過(guò)這個(gè)指針(引用)來(lái)訪問(wèn)有效內(nèi)存單元。

java語(yǔ)言不容許多繼承,使繼承關(guān)系成樹裝圖,每個(gè)類都只能由一種父類。

java語(yǔ)言開發(fā)效率高,但執(zhí)行效率低。(相稱于c++55%)

java垃圾回收機(jī)制,在java中new對(duì)象不需要向c++同樣進(jìn)行delete操作,JVM會(huì)依照狀況回收垃圾對(duì)象。(懶漢機(jī)制,等待資源沒(méi)有時(shí)候才回收)咱們只可以建議JVM進(jìn)行垃圾回收,例如(System.gc()RunTime.gc()這兩個(gè)辦法就是建議JVM進(jìn)行垃圾回收辦法)

JDK,java開發(fā)工具包(類庫(kù)和運(yùn)營(yíng)命令),JRE,java運(yùn)營(yíng)環(huán)境,JVM,java虛擬機(jī)(解釋執(zhí)行核心,對(duì)字節(jié)碼進(jìn)行翻譯成運(yùn)營(yíng)環(huán)境機(jī)器碼,它可以屏蔽平臺(tái)差別。JVM是不跨平臺(tái)。)

JAVA_HOME,指明JDK安裝位置,CLASSPATH,指明類文獻(xiàn)位置,PATH,指明命令可執(zhí)行文獻(xiàn)位置。

java源文獻(xiàn)文獻(xiàn)名必要和文獻(xiàn)中定義publicclass類名(大小寫頁(yè)要相似)相似。

java源代碼中main辦法定義寫法。main辦法是程序入口。

publicstaticvoidmain(String[]args){

System.out.println("Helloworld");

}

java源文獻(xiàn)也要先編譯,使用javacxxx.java格式命令得來(lái)編譯,使用javaxxx來(lái)運(yùn)營(yíng)。

定義包構(gòu)造要放在有效代碼第一行,packagexxx.xxx,包定義在一種程序中只能由一種,在加上包定義之后編譯可以使用javac-d途徑xxxx.java,這個(gè)-d這個(gè)命令行參數(shù)可以指定包構(gòu)造位置“.”代表當(dāng)前目錄。在運(yùn)營(yíng)時(shí)要使用類全名

javaxxx.xxx.xxxx用包名以點(diǎn)分隔。運(yùn)營(yíng)時(shí)要在包構(gòu)造上一層目錄來(lái)運(yùn)營(yíng)。

java中注釋

單行注釋//......

多行注釋/*.......*/

文檔注釋/**........<p>(換行標(biāo)簽)*/,用javadoc命令可以依照原碼中文檔注釋生成注釋文檔(html格式)。文檔注釋中可以使用html標(biāo)簽。

javadoc-d途徑(指定注釋文檔保存途徑)

文檔注釋普通寫在類定義之前,辦法之前,屬性之前。

在文檔注釋中可以用@author表達(dá)程序作者,@version表達(dá)程序版本,前兩個(gè)注釋符號(hào)要寫在類定義之前,用于辦法注釋@param對(duì)參數(shù)進(jìn)行注釋,@return對(duì)返回值進(jìn)行注釋@throws對(duì)拋出異常注釋。

jar命令用于打一種xxx.jar文獻(xiàn)

用法:jar{ctxu}[vfm0Mi][jar-文獻(xiàn)][manifest-文獻(xiàn)][-C目錄](méi)文獻(xiàn)名...

選項(xiàng):

-c創(chuàng)立新存檔

-t列出存檔內(nèi)容列表

-x展開存檔中命名(或所有〕文獻(xiàn)

-u更新已存在存檔

-v生成詳細(xì)輸出到原則輸出上

-f指定存檔文獻(xiàn)名

-m包括來(lái)自標(biāo)明文獻(xiàn)標(biāo)明信息

-0只存儲(chǔ)方式;未用ZIP壓縮格式

-M不產(chǎn)生所有項(xiàng)清單(manifest〕文獻(xiàn)

-i為指定jar文獻(xiàn)產(chǎn)生索引信息

-C變化到指定目錄,并且包括下列文獻(xiàn):

如果一種文獻(xiàn)名是一種目錄,它將被遞歸解決。

清單(manifest〕文獻(xiàn)名和存檔文獻(xiàn)名都需要被指定,按'm'和'f'標(biāo)志指定相似順序

示例1:將兩個(gè)class文獻(xiàn)存檔到一種名為'classes.jar'存檔文獻(xiàn)中:

jarcvfclasses.jarFoo.classBar.class

示例2:用一種存在清單(manifest)文獻(xiàn)'mymanifest'將foo/目錄下所有

文獻(xiàn)存檔到一種名為'classes.jar'存檔文獻(xiàn)中:

jarcvfmclasses.jarmymanifest-Cfoo/。

普通在使用使用jarcvf文獻(xiàn)名.jar文獻(xiàn)所在途徑(xxx/xxx/xxx.class)也可以壓縮一種目錄,只要在制定途徑是指定為文獻(xiàn)夾,jar命令命令行參數(shù)在使用時(shí)可以以“-”開頭,也可以不用。

java程序運(yùn)營(yíng)過(guò)程,一方面是啟動(dòng)java虛擬機(jī),然后就是去找.class文獻(xiàn),先是從系統(tǒng)類庫(kù)中找(系統(tǒng)之會(huì)在跟目錄下查找,因此需要完整類名),如果找不到話會(huì)去CLASSPATH所設(shè)立目錄去找。然后加載到j(luò)ava虛擬機(jī)中。

系統(tǒng)會(huì)在每個(gè)java程序中隱含導(dǎo)入了java.lang這個(gè)包,import包名,導(dǎo)入包中類文獻(xiàn)。

java.lang包,這是一種基本包。

java.util包,這個(gè)包是工具類包。

java.io包,這個(gè)包是用于輸入輸出操作

包,這個(gè)包是用于網(wǎng)絡(luò)編程。

java.awt,java.swing,javax.swing,java.event等包用于圖形編程用包。

applactionjava應(yīng)用程序,java應(yīng)用程序中必要有一種main()辦法。

標(biāo)記符和核心字

Java代碼中“;”、“{}”、“”

Java語(yǔ)句以分號(hào)分隔,Java代碼塊包括在大括號(hào)內(nèi),忽視空格.標(biāo)記符

1)用以命名類、辦法和變量、以及包遵守JAVA命名規(guī)范類以每個(gè)單詞都以大寫字母開頭。辦法和變量第一種字母不大寫,其她照舊。

2)只能以字符、“_”或“$”開頭;

3)無(wú)長(zhǎng)度限制。

java中核心字

goto和const在java中雖然不再使用但是還作為核心字存在

java中沒(méi)有sizeof這個(gè)核心字了,java中boolean類型值只能用true和false,且這兩值也是核心字。

java語(yǔ)言中沒(méi)有無(wú)符號(hào)這個(gè)核心字(unsigned)

java中數(shù)據(jù)類型

1)整型

byte1字節(jié) 8位-128到127

short2字節(jié) 16位-2^15到2^15-1

int4字節(jié) 32位-2^31到2^31-1

long8字節(jié) 64位-2^63到2^63-1

2)浮點(diǎn)類型

float4字節(jié) 32位

double8字節(jié) 64位

3)字符類型

char2字節(jié) 16位

4)布爾型

booleanfalse/true

注:1)char是無(wú)符號(hào)16位整數(shù),字面值必要用單引號(hào)括起來(lái);‘a(chǎn)’

2)String是類,非原始數(shù)據(jù)類型;

3)長(zhǎng)整型數(shù)字有一種后綴為“L”或“l(fā)”,八進(jìn)制前綴為“0”,十六進(jìn)制前綴為“0x”;

4)黙認(rèn)浮點(diǎn)類型為double;

5)float數(shù)據(jù)類型有一種后綴為“f”或“F”,Double數(shù)據(jù)類型后可跟后綴“D”或“d“

6)char類型也可以用通用轉(zhuǎn)譯字符,但是不能用ASCII碼。可以用“\u0000”這種格式,由于char型中使用是unicode編碼方式。

注:整型值存儲(chǔ),正數(shù)存儲(chǔ)原碼(二進(jìn)制碼),負(fù)數(shù)則存儲(chǔ)補(bǔ)碼(原碼按位取反末位加一)。

注:實(shí)型值在存儲(chǔ)時(shí)會(huì)損失精度,因此不要直接比較兩個(gè)實(shí)型值。系統(tǒng)默認(rèn)實(shí)型都是double型,要使用時(shí)要在數(shù)據(jù)后加個(gè)f,或者強(qiáng)行轉(zhuǎn)換。強(qiáng)轉(zhuǎn)(占字節(jié)數(shù)大類型轉(zhuǎn)到占字節(jié)數(shù)小類型)時(shí)會(huì)放棄高位值只取低位值。

java中數(shù)字?jǐn)?shù)據(jù)類型減災(zāi)由占字節(jié)數(shù)小類型到占字節(jié)數(shù)大類型可以有自動(dòng)轉(zhuǎn)換,反之則需要強(qiáng)行轉(zhuǎn)換,char型和int型之間可以互相轉(zhuǎn)換。char和short不能像戶轉(zhuǎn)換。

注意:隱式類型轉(zhuǎn)換;

a運(yùn)算符b,如果a,b中有任意一種是double型,前面運(yùn)算成果就是double型,如果a,b中有任意一種是float型,前面運(yùn)算成果就是float型,如果a,b中有任意一種是long型,前面運(yùn)算成果就是long型,如果a,b中沒(méi)有double、float、long型,那么其成果就為int型。

所有基本數(shù)據(jù)類型在使用時(shí)會(huì)事先分派空間,只自身就存在空間中,在傳遞時(shí),就是值傳遞,不是引用傳遞。

在類中定義辦法在返回值前加上static修飾符就可以在main辦法中調(diào)用了。如果不用static那就需要在main辦法中創(chuàng)立對(duì)象,使用對(duì)象來(lái)調(diào)用對(duì)象辦法。

publicclassTest{

publicstaticvoidmain(String[]args){

Testt=newTest();

intb=1;

intc=2;

int[]a=newint[10];

t.sqort(a);

add(b,c)

}

publicint[]sqort(int[]a){

.......

}

staticintadd(b,c){

.......

}

}

java中運(yùn)算符(java運(yùn)算符優(yōu)先級(jí)和結(jié)合性和c++相似)

System.out.println(3/2)按整型計(jì)算得1

1)>>=前面是零補(bǔ)零,前面是一補(bǔ)一;

2)>>>=無(wú)符號(hào)右移(強(qiáng)制右移都會(huì)移進(jìn)一),

>>=和>>>=對(duì)于負(fù)數(shù)不同樣

正數(shù):右移n位等于除以2n次方

負(fù)數(shù):變成正數(shù)。

3)&&短路與,前面為假,表達(dá)式為假,背面操作不會(huì)進(jìn)行,&會(huì)對(duì)所有條件進(jìn)行判斷。

4)||短路或,前面為真,表達(dá)式為真,背面操作不會(huì)進(jìn)行,|會(huì)對(duì)所有條件進(jìn)行判斷。

例:

if(a<3&(b=a)==0)b賦值

if(a<3&&(b=a)==0)b不賦值

5)instanceof,是用于判斷一種對(duì)象與否屬于某個(gè)類型

6)java中求余運(yùn)算符“%”可以對(duì)兩個(gè)實(shí)型變量求余

注:按位與是為了讓某些位置一,按位或是令某些位置零,按位異或是令某些位取反。

注:使用左右位移和無(wú)符號(hào)右移運(yùn)算符用法是變量名<<=位移位數(shù),變量名>>=位移位數(shù)(前兩個(gè)運(yùn)算符是不會(huì)忽視整形符號(hào)位,也稱邏輯位移),變量名>>>=位移位數(shù)

注意:左右位移和無(wú)符號(hào)右移運(yùn)算符只能用于整形及其兼容類型(byte,int,short,long)

注意:java程序運(yùn)營(yíng)過(guò)程,一方面是啟動(dòng)java虛擬機(jī),然后就是去找。class文獻(xiàn),先是從系統(tǒng)類庫(kù)中找(系統(tǒng)之會(huì)在跟目錄下查找,因此需要完整類名),如果找不到話會(huì)去CLASSPATH所設(shè)立目錄去找。然后加載到j(luò)ava虛擬機(jī)中。如果要使用到其她在JAVA_HOME中沒(méi)有類或者是其她公司提供第三方。jar(jar包)文獻(xiàn)時(shí),要把它途徑及文獻(xiàn)名加到CLASSPATH中。

java流程控制

控制流

if()

if()….else

if()…..elseif()….else

注意:else只是和其上面同層近來(lái)if()來(lái)配對(duì)。

switch(){

case'a':……..

case1:……break;

default:

…………

}

注解:switch()內(nèi)數(shù)據(jù)類型為byteshortcharint類型,只有以上四種類型才可以在switch()中使用。case塊中不加break時(shí)順序執(zhí)行下面語(yǔ)句。

循環(huán)語(yǔ)句

for(inti=0;i<n;i++){}

while(){}

do{}while();-----------注意加分號(hào)

例子:

loop:for(inti=0;i<n;i++)

{

for(intj=0;j<m;j++)

{

if(3==j)

{

breakloop;//--loop為標(biāo)簽只能用在循環(huán)語(yǔ)句中,用于循環(huán)跳到外層循環(huán)

}

}

}

辨析:

intx,a=6,b=7;

x=a+++b++;//----------a=7,b=8,x=13

intx=6;x=~x;//----------------6二進(jìn)制0110取反得11001再轉(zhuǎn)成補(bǔ)碼(取反加一) 10111=-7

break,跳出本層循環(huán),執(zhí)行背面代碼,continue,提前終結(jié)本次循環(huán),再一次進(jìn)行循環(huán)或循環(huán)條件滿足或不滿足后退出循環(huán)。break標(biāo)簽名;continue標(biāo)簽名;這兩條語(yǔ)句知識(shí)表達(dá)跳出有標(biāo)簽循環(huán)和提前終結(jié)本次有標(biāo)簽循環(huán),只能用在循環(huán)語(yǔ)句(多層循環(huán)嵌套)中,循環(huán)嵌套中用于跳到外層循環(huán)。

注意:for循環(huán)在使用時(shí)一定要注意不要忘掉()中兩個(gè)";",死循環(huán)寫法for(;;){}或者是用

while(true){}

注意:System.out.println("..."+a)在使用這個(gè)語(yǔ)句時(shí),它會(huì)將其中非字符串(String)值轉(zhuǎn)換成字符串(不是所有數(shù)據(jù)類型都可以)。

java中數(shù)組Array,其包括兩個(gè)某些,分別是數(shù)組引用和數(shù)組空間兩某些。

聲明數(shù)組

1)一組相似類型(可以是類)數(shù)據(jù)集合;

2)一種數(shù)組是一種對(duì)象;

3)聲明一種數(shù)組沒(méi)有創(chuàng)立一種對(duì)象;

4)數(shù)組能如下列形式聲明:

int[]i或inti[]

Car[]c或Carc[]

*C++中只能Carc[]

*JAVA中推薦用Car[]c;

5)數(shù)組定義如:

int[]a(數(shù)組引用聲明)=newint[10](數(shù)組空間聲明,并把空間首地址賦值給數(shù)組引用)

int[]a;

a=newint[20];

創(chuàng)立數(shù)組

1)創(chuàng)立基本數(shù)據(jù)類型數(shù)組int[]i=newint[2];

2)創(chuàng)立引用數(shù)據(jù)類型數(shù)組Car[]c=newCar[100];

3)數(shù)組創(chuàng)立后有初始值。

數(shù)字類型為0布爾類型為false引用類型為null

注意:訪問(wèn)沒(méi)有初始化數(shù)組中值,是會(huì)拋出異常(NullPointerException),java中只保證一位數(shù)組地址是持續(xù),二維數(shù)組事實(shí)上是一維數(shù)組中有存儲(chǔ)了一維數(shù)組引用。

初始化數(shù)組

1)初始化、創(chuàng)立、和聲明分開

int[]i;

i=newint[2];

i[0]=0;

i[1]=1;

2)初始化、創(chuàng)立、和聲明在同一時(shí)間

int[]i={0,1};

Car[]c={newCar(),newCar()};

多維數(shù)組

1)有效定義

int[][]i1=newint[2][3];(同步給定一維,二維空間)

int[][]i2=newint[2][];(給定一維空間,二維空間待定)

i2[0]=newint[2],i2[1]=newint[3];

*C++中int[][]=newint[][3];有效

2)無(wú)效定義

int[][]i1=newint[][3];

3)數(shù)組長(zhǎng)度------------數(shù)組屬性length(在二維數(shù)組中這個(gè)屬性只代表第一維長(zhǎng)度)

int[]i=newint[5];

intlen=i.length;//len=5;

Student[][]st=newStudent[4][6];

len=st.length;//len=4;

len=st[0].length;//len=6;

數(shù)組拷貝

System.arrayCopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength);

src源數(shù)組,srcPos從第幾位開始拷貝,dest目的數(shù)組,destPos目的數(shù)組放置起始位置,length,表達(dá)要拷貝長(zhǎng)度。

拷貝一種數(shù)組到另一種數(shù)組。

類對(duì)象創(chuàng)立和對(duì)象數(shù)組

一種xxx.Java文獻(xiàn)中可以定義各種類但是只能由一種public修飾類,也只能以這個(gè)類類名作為.java文獻(xiàn)名。

java中類對(duì)象創(chuàng)立,要先創(chuàng)立這個(gè)對(duì)象引用,例如:Carc;然后用new這個(gè)核心字創(chuàng)立一種對(duì)象實(shí)例(對(duì)象空間)例如:c=newCar();,然后對(duì)象實(shí)例空間首地址賦值給對(duì)象引用。各種對(duì)象引用可以同步引用自同一種對(duì)象實(shí)例,但是對(duì)象引用只能引用一種對(duì)象實(shí)例。

對(duì)象引用和對(duì)象實(shí)例間就像是牽著氣球線和氣球同樣。

注意:只有一種沒(méi)有被任何對(duì)象引用所引用對(duì)象實(shí)例才會(huì)邊城垃圾等待被垃圾回收。

對(duì)象數(shù)組

例:Car[]c=newCar[3];

c[0]=newCar();

注意:存儲(chǔ)基本類型數(shù)組數(shù)據(jù)是直接存儲(chǔ)在數(shù)組空間中,而對(duì)象數(shù)組在數(shù)組空間中存儲(chǔ)則是對(duì)象引用。

定義在類中類屬性是實(shí)例變量,定義在類辦法中變量是局部變量。實(shí)例變量是保存在對(duì)象空間中,而局部變量則是在辦法調(diào)用分派空間,調(diào)用結(jié)束后就釋放空間。

注意:在類定義中屬性定義和辦法定義必要寫在類里。

注意:系統(tǒng)會(huì)自動(dòng)初始化實(shí)例變量,數(shù)字類型為0,布爾類型為false,引用類型為null。局部變量需要初始化,必要賦初值。如果不賦初值無(wú)法通過(guò)編譯。

Java中辦法調(diào)用中參數(shù)傳遞有兩種,一種是對(duì)于參數(shù)是基本類型使用是值傳遞(直接傳參數(shù)值),另一種是引用傳遞,它是用于參數(shù)是類對(duì)象,它傳遞是這個(gè)對(duì)象引用。

面向?qū)ο笏枷?/p>

anythingisObject(萬(wàn)物皆對(duì)象)

抽象,從對(duì)詳細(xì)對(duì)象中抽取有用信息。

對(duì)象有其固有屬性,對(duì)象辦法,即對(duì)象行為(對(duì)象能做什么)

對(duì)象自身是簡(jiǎn)樸(功能簡(jiǎn)樸),各種對(duì)象可以構(gòu)成復(fù)雜系統(tǒng)(對(duì)象之間彼此調(diào)用對(duì)方辦法)

對(duì)象應(yīng)當(dāng)是各司其職(功能簡(jiǎn)樸),各盡所能(把自己功能作到最佳)。(弱耦合性實(shí)現(xiàn)了前面所述對(duì)象特點(diǎn))

對(duì)象耦合性,是對(duì)象之間聯(lián)系,對(duì)象和系統(tǒng)之間聯(lián)系。對(duì)象耦合性要盡量弱,也就是對(duì)象之間聯(lián)系盡量弱,對(duì)象和系統(tǒng)之間聯(lián)系盡量弱。

系統(tǒng)可插入性,是在系統(tǒng)中加入新對(duì)象之后系統(tǒng)穩(wěn)定性。

對(duì)象可替代性,是在系統(tǒng)中替代原有對(duì)象之后系統(tǒng)穩(wěn)定性。

復(fù)用性,即對(duì)象可否被重復(fù)使用,對(duì)象功能越簡(jiǎn)樸,復(fù)用性就越好。(對(duì)象耦合性弱,復(fù)用性就比較強(qiáng))

面向過(guò)程是先有算法,后又?jǐn)?shù)據(jù)構(gòu)造(怎么解決問(wèn)題)

面向?qū)ο笫窍扔袑?duì)象(數(shù)據(jù)構(gòu)造),后有算法。(用什么做)

類是某些有著相似屬性集合抽象。

類是一種類對(duì)象模板,對(duì)象是類詳細(xì)化。

類是一種新數(shù)據(jù)類型,類對(duì)象。

注意:局部變量作用范疇是在定義她代碼塊以內(nèi),局部變量要先賦值后使用,在以一種重疊作用于范疇內(nèi)不容許兩個(gè)局部變量命名沖突。局部變量局部?jī)?yōu)先,且在于實(shí)例變量同名時(shí)會(huì)副該局部變量。

變量涉及簡(jiǎn)樸變量(原始數(shù)據(jù)類型),對(duì)象變量。

辦法定義:

1,辦法修飾符(各種修飾符浮現(xiàn)順序無(wú)關(guān))|

2,辦法返回值類型|順

3,辦法名|序

4,辦法參數(shù)表|向

5,辦法中容許拋出異常|下

java中不可以在返回語(yǔ)句后寫任何代碼。JVM+解釋器=JRE,JRE+類庫(kù)=JDK

java中辦法重載(overload)辦法名相似,參數(shù)表不同,返回值類型可以不同。調(diào)用時(shí)要給出明確參數(shù)并擬定調(diào)用某一辦法。在編譯時(shí),編譯器會(huì)依照參數(shù)選取恰當(dāng)辦法,因此重載也叫編譯時(shí)多態(tài)。

就近向上匹配原則

如果辦法參數(shù)表中數(shù)據(jù)類型和調(diào)用時(shí)給出參數(shù)類型不盡相似時(shí)會(huì)依照向上匹配就近原則。(類型就近向上轉(zhuǎn)化匹配)

注意:調(diào)用時(shí)要給出明確參數(shù)并擬定調(diào)用某一辦法,否則編譯會(huì)出錯(cuò)。

對(duì)象使用者(調(diào)用其她對(duì)象辦法)對(duì)象(對(duì)象中辦法被調(diào)用時(shí)依照參數(shù)進(jìn)行自己進(jìn)行選取)

一類辦法,但跟據(jù)不同參數(shù)會(huì)有差別,對(duì)象回依照參數(shù)判斷,對(duì)對(duì)象調(diào)用者透明。

創(chuàng)立對(duì)象過(guò)程:1,分派空間2,初始化屬性3,調(diào)用構(gòu)造辦法(有前提,不考慮繼承關(guān)系)

構(gòu)造辦法寫法:沒(méi)有返回值類型,構(gòu)造辦法辦法命名必要和類名相似。如果在類中不寫構(gòu)造辦法,系統(tǒng)會(huì)提供一種無(wú)參構(gòu)造辦法。

注意:最佳在寫類時(shí)提供一種無(wú)參構(gòu)造辦法。

獲得對(duì)象方式

通過(guò)new(在堆空間中申請(qǐng)分派空間),new類名(),可以通過(guò)這種形式或一種對(duì)象,這時(shí)對(duì)象是無(wú)法使用,必要把她地址存儲(chǔ)近一種對(duì)象變量才可以使用。例如:Carc=newCar();

有參構(gòu)造辦法在被調(diào)用時(shí),在用new核心字或?qū)ο髸r(shí)初始化,例如:Carc=newCar("yellow")

對(duì)象變量中存儲(chǔ)是對(duì)象引用(地址封裝形式)

this核心字

表達(dá)當(dāng)前對(duì)象(哪個(gè)對(duì)象調(diào)用了辦法,哪個(gè)對(duì)象就是當(dāng)前對(duì)象),可以用來(lái)區(qū)別實(shí)例變量和局部變量。this(),她表達(dá)掉用本類其她構(gòu)造辦法,注,只能寫在構(gòu)造辦法第一行。

java中參數(shù)傳遞,簡(jiǎn)樸類型變量傳遞是數(shù)值,對(duì)象變量傳遞則傳遞一種引用(地址)

面向?qū)ο笕筇匦?/p>

封裝、繼承、多態(tài)。

java中封裝

封裝,一種對(duì)象和外界聯(lián)系應(yīng)當(dāng)通過(guò)一種統(tǒng)一接口,應(yīng)當(dāng)公開公開,應(yīng)當(dāng)隱藏隱藏。(對(duì)象屬性應(yīng)當(dāng)隱藏),一種對(duì)象內(nèi)部是透明,就是把對(duì)象內(nèi)部可透明性和隱藏特性區(qū)別開,該透明透明,該隱藏隱藏。

(封裝屬性)java中類屬性訪問(wèn)權(quán)限默認(rèn)值不是private,要想隱藏該屬性或辦法,就可以加private(私有)修飾符,來(lái)限制只可以在類內(nèi)部進(jìn)行訪問(wèn)。

對(duì)于類中私有屬性,要對(duì)其給出一對(duì)辦法(getXxx(),setXxx())訪問(wèn)私有屬性,保證對(duì)私有屬性操作安全性。

辦法封裝

對(duì)于辦法封裝,該公開公開,該隱藏隱藏。辦法公開是辦法聲明(定義),即(只須懂得參數(shù)和返回值就可以調(diào)用該辦法),隱藏辦法實(shí)現(xiàn)會(huì)使實(shí)現(xiàn)變化對(duì)架構(gòu)影響最小化。。

封裝會(huì)使辦法實(shí)現(xiàn)變化對(duì)架構(gòu)影響最小化。

完全封裝,類屬性所有私有化,并且提供一對(duì)辦法來(lái)訪問(wèn)屬性。

java中繼承

繼承,是對(duì)有著共同特性多類事物,進(jìn)行再抽象成一種類。這個(gè)類就是多類事物父類。父類意義在于可以抽取多類事物共性。

java中繼承要使用extends核心字,并且java中只容許單繼承,也就是一種類只能有一種父類。

這樣就是繼承關(guān)系呈樹狀,體現(xiàn)了java簡(jiǎn)樸性。

子類只能繼承在父類中可以訪問(wèn)屬性和辦法(事實(shí)上父類中私有屬性和辦法也會(huì)被繼承但子類中無(wú)法訪問(wèn)罷了)。

訪問(wèn)控制修飾符(可以修飾屬性和辦法)

private修飾符,表達(dá)只有本類內(nèi)部可以訪問(wèn)。

default修飾符,辦法不加修飾符,會(huì)默以為default,表達(dá)在同一種包中可以訪問(wèn),父子類在同一包中,子類可以繼承父類相應(yīng)內(nèi)容。(可以修飾類)

protected(保護(hù))修飾符,表達(dá)同一包中可以訪問(wèn),不同包子類也可以訪問(wèn)繼承。

public修飾符,表達(dá)公開,在任何地方都可以訪問(wèn)。(可以修飾類)

修飾符權(quán)限是由上而下逐漸變寬。

繼承意義

在于子類可以在父類基本之上對(duì)父類功能進(jìn)行發(fā)展,繼承可以使系統(tǒng)耦合性減少,也就是使對(duì)象間聯(lián)系便松散,使多類對(duì)象間聯(lián)系用其父類對(duì)象代替。

注意:構(gòu)造辦法不能被繼承。

父類屬性及辦法擬定

要從子類角度來(lái)看子類間共性,當(dāng)所有子類均有這個(gè)屬性時(shí),就應(yīng)當(dāng)考慮與否該放在父類中,辦法也是如此,辦法可以被看作是對(duì)象行為,而類辦法這時(shí)這一類對(duì)象所共有行為,因此也應(yīng)當(dāng)在辦法擬定期注意是不是所有子類型中都需要有這種辦法,并且會(huì)依照不同類型行為方式也不同才可以覆蓋著個(gè)辦法。

java中辦法覆蓋

子類中有和父類中可訪問(wèn)(可繼承到子類)同名同返回類型同參數(shù)表辦法,就會(huì)覆蓋從父類繼承來(lái)辦法。

注意:在jdk1.4此前規(guī)定辦法覆蓋時(shí),需要辦法返回值,參數(shù)表,辦法名必要嚴(yán)格相似,而在jdk1.5中辦法覆蓋,子類中覆蓋辦法返回值可以是父類中被覆蓋辦法返回值類型子類型。

注意:子類辦法覆蓋父類辦法時(shí),辦法修飾符要么相似,要么子類中辦法修飾符表達(dá)訪問(wèn)權(quán)限要寬于父類。父類中私有辦法,不能被繼承到子類,就是說(shuō)子類中雖然將其覆蓋了也不會(huì)有多態(tài)。

覆蓋意義:對(duì)從父類中繼承辦法發(fā)展。

注意:父子類中有同名屬性不叫子類覆蓋父類屬性,叫做屬性遮蓋(shadow)。

當(dāng)構(gòu)造有繼承關(guān)系對(duì)象環(huán)節(jié)

1,遞歸構(gòu)造父類對(duì)象

2,分派空間

3,初始化本類實(shí)例變量(屬性)

4,調(diào)用本類構(gòu)造辦法

注意:子類對(duì)象中其實(shí)包括著父類對(duì)象,也就是父類對(duì)象加上子類對(duì)象,才是完整子類對(duì)象實(shí)例。

super核心字

super(),表達(dá)在子類構(gòu)造辦法中調(diào)用父類構(gòu)造辦法(可以通過(guò)這種辦法在子類構(gòu)造辦法中初始化父類中屬性),super()也只能出當(dāng)前構(gòu)造辦法第一句上.super(),在子類構(gòu)造方中指明構(gòu)造父類時(shí)調(diào)用哪一種父類構(gòu)造辦法構(gòu)造父類。

super,這里所示是一種父類對(duì)象,可以通過(guò)super來(lái)使用父類中可以訪問(wèn)辦法(可以在父類中定義setXxx(),getXxx()辦法來(lái)訪問(wèn)父類中私有屬性),super可以屏蔽父子類中同名屬性沖突。

注意:在寫類時(shí)候,一定要寫默認(rèn)無(wú)參構(gòu)造辦法,如果一種構(gòu)造辦法第一句既不是this(),也不是super()時(shí),那么就會(huì)在這里隱含調(diào)用她父類無(wú)參構(gòu)造辦法,即隱具有super()。

少覆蓋原則:

既子類應(yīng)當(dāng)盡量少覆蓋父類辦法,如果覆蓋了父類大多數(shù)辦法,那就應(yīng)當(dāng)考慮與否應(yīng)當(dāng)有繼承關(guān)系

java中多態(tài)(以子類覆蓋了父類辦法為前提)

多態(tài),把子類對(duì)象主觀看作是其父類型對(duì)象,那么父類型就可以是諸各種類型。

多態(tài),編譯時(shí)多態(tài)(辦法重載)

運(yùn)營(yíng)時(shí)多態(tài)(多態(tài))

編譯時(shí)類型,也就是可以被看作類型,主觀認(rèn)定。

運(yùn)營(yíng)時(shí)類型,也就是實(shí)際對(duì)象實(shí)例類型,客觀不可變化(也是被看作類型子類型)

對(duì)于一種對(duì)象來(lái)說(shuō),在對(duì)象產(chǎn)生時(shí),運(yùn)營(yíng)時(shí)類型就已經(jīng)擬定不會(huì)再變化,編譯時(shí)類型可以和運(yùn)營(yíng)時(shí)類型不同。在對(duì)象變量聲明時(shí)可以擬定其運(yùn)營(yíng)時(shí)類型,但是編譯時(shí)類型對(duì)象變量背后所指向運(yùn)營(yíng)時(shí)類型則可以是其本類型或者是其子類型。

多態(tài)三特性

1,對(duì)象實(shí)例擬定則不可變化(客觀不可變化)

2,只能調(diào)用編譯時(shí)類型所定義辦法。

3,運(yùn)營(yíng)時(shí)會(huì)依照運(yùn)營(yíng)時(shí)類型去調(diào)用相應(yīng)類型中定義辦法。

多態(tài)意義:在需要使用一類對(duì)象共性時(shí),可以用多來(lái)屏蔽掉其子類中差別。

注意:類屬性是沒(méi)有多態(tài),只會(huì)依照編譯時(shí)類型訪問(wèn)。只有子類覆蓋了父類辦法,且把子類對(duì)象黨作父類類型來(lái)看時(shí)才會(huì)有多態(tài)。要注意區(qū)別子類中辦法重載。對(duì)于辦法重載,則是會(huì)使用編譯時(shí)類型來(lái)進(jìn)行相應(yīng)辦法調(diào)用。

兩種復(fù)用

1,白箱復(fù)用,也就是繼承復(fù)用,父類中可以被子類訪問(wèn)到就可以被繼承,這樣會(huì)有些不需要內(nèi)容被繼承下來(lái),因此這種方式不太好。

2,黑箱復(fù)用,也叫組合復(fù)用,也就是把要復(fù)用代碼類對(duì)象作為本類中一種屬性,然后再通過(guò)辦法委托來(lái)實(shí)現(xiàn)由選取復(fù)用,辦法委托就是在本類辦法內(nèi)部通過(guò)該類對(duì)象調(diào)用要使用類辦法。

注意:盡量用組合復(fù)用代替繼承復(fù)用。

多態(tài)使用

多態(tài)用于參數(shù),可以在辦法參數(shù)中傳入其父類類型,在運(yùn)營(yíng)時(shí)會(huì)依照實(shí)際運(yùn)營(yíng)時(shí)類型來(lái)在辦法中進(jìn)行相應(yīng)操作。

多態(tài)用于返回值,可以在辦法返回值類型上是用其實(shí)際返回值父類型,在有效期返回值時(shí)也不比關(guān)懷其實(shí)際類型。

多態(tài)可以使代碼變得更通用,以適應(yīng)需求變化。也就是定義在父類中辦法,可以在子類中有不同實(shí)現(xiàn)將其覆蓋,在為父類型對(duì)象變量賦值相應(yīng)需要功能子類對(duì)象實(shí)例。

java中修飾符

static表達(dá)靜態(tài),它可以修飾屬性,辦法和代碼塊。

1,static修飾屬性(類變量),那么這個(gè)屬性就可以用類名.屬性名來(lái)訪問(wèn),也就是使這個(gè)屬性成為本類類變量,為本類對(duì)象所共有。這個(gè)屬性就是全類公有。(共有類變量與對(duì)象無(wú)關(guān),只和類關(guān)于)。

類加載過(guò)程,類自身也是保存在文獻(xiàn)中(字節(jié)碼文獻(xiàn)保存著類信息),java會(huì)通過(guò)I/O流把類文獻(xiàn)(字節(jié)碼文獻(xiàn))讀入JVM(java虛擬機(jī)),這個(gè)過(guò)程成為類加載.JVM(java虛擬機(jī))會(huì)通過(guò)類途徑(CLASSPATH)來(lái)找字節(jié)碼文獻(xiàn)。

類變量,會(huì)在加載時(shí)自動(dòng)初始化,初始化規(guī)則和實(shí)例變量相似。

注意:類中實(shí)例變量是在創(chuàng)立對(duì)象時(shí)被初始化,被static修飾屬性,也就是類變量,是在類加載時(shí)被創(chuàng)立并進(jìn)行初始化,類加載過(guò)程是進(jìn)行一次。也就是類變量只會(huì)被創(chuàng)立一次。

2,static修飾辦法(靜態(tài)辦法),會(huì)使這個(gè)辦法成為整個(gè)類所公有辦法,可以用類名。辦法名訪問(wèn)。

注意:static修飾辦法,不直接能訪問(wèn)(可以通過(guò)組合方式訪問(wèn))本類中非靜態(tài)(static)成員(涉及辦法和屬性),本類非靜態(tài)(static)辦法可以訪問(wèn)本類靜態(tài)成員(涉及辦法和屬性),可以調(diào)用靜態(tài)辦法。靜態(tài)辦法要慎重使用。在靜態(tài)辦法中不能浮現(xiàn)this核心字。

注意:父類中是靜態(tài)辦法,子類中不能覆蓋為非靜態(tài)辦法,在符合覆蓋規(guī)則前提下,在父子類中,父類中靜態(tài)辦法可以被子類中靜態(tài)辦法覆蓋,但是沒(méi)有多態(tài)。(在使用對(duì)象調(diào)用靜態(tài)辦法時(shí)其實(shí)是調(diào)用編譯時(shí)類型靜態(tài)辦法)

注意:父子類中,靜態(tài)辦法只能被靜態(tài)辦法覆蓋,非靜態(tài)辦法只能被非靜態(tài)辦法覆蓋。

java中main辦法必要寫成static是由于在類加載時(shí)無(wú)法創(chuàng)立對(duì)象,由于靜態(tài)辦法可以不通過(guò)對(duì)象調(diào)用,因此在類main辦法所在類加載時(shí)就可以通過(guò)main辦法入口來(lái)運(yùn)營(yíng)程序。

注意:組合方式,就是需要在辦法中創(chuàng)立一種所需要對(duì)象,并用這個(gè)對(duì)象來(lái)調(diào)用任意所需該對(duì)象內(nèi)容,不會(huì)再受只能訪問(wèn)靜態(tài)約束。

3,static修飾初始代碼塊,這時(shí)這個(gè)初始代碼塊就叫做靜態(tài)初始代碼塊,這個(gè)代碼塊只在類加載時(shí)被執(zhí)行一次??梢杂渺o態(tài)初始代碼塊初始化一種類。

動(dòng)態(tài)初始代碼塊,寫在類體中“{}”,這個(gè)代碼塊是在生成對(duì)象初始化屬性是運(yùn)營(yíng)。這種代碼塊叫動(dòng)態(tài)初始代碼塊。

類在什么時(shí)候會(huì)被加載,構(gòu)造(創(chuàng)立)對(duì)象時(shí)會(huì)加載類,調(diào)用類中靜態(tài)辦法或訪問(wèn)靜態(tài)屬性也是會(huì)加載這個(gè)靜態(tài)辦法真正所在類。在構(gòu)造子類對(duì)象時(shí)必會(huì)先加載父類,類加載會(huì)有延遲加載原則,只有在必要加載時(shí)才會(huì)加載。

final修飾符,可以修飾變量,辦法,類

1,final修飾變量

被fianl修飾變量就會(huì)變成常量(常量應(yīng)當(dāng)大寫),一旦賦值不能變化,(可以在初始化時(shí)直接賦值,也可以在構(gòu)造辦法里也可以賦值,只能在這兩種辦法里二選一,不能不為常量賦值),fianl常量不會(huì)有默認(rèn)初始值,對(duì)于直接在初始化是賦值時(shí)final修飾符常和static修飾符一起使用。

2,final修飾辦法,被final修飾辦法將不能被其子類覆蓋,保持辦法穩(wěn)定不能被覆蓋。

3,final修飾類,被final修飾類將不能被繼承。final類中辦法也都是final。

注意:final,不能用來(lái)修飾構(gòu)造辦法,在父類中如果有常量屬性,在子類中使用常量屬性時(shí)是不會(huì)進(jìn)行父類類加載。靜態(tài)常量如果其值可以擬定,就不會(huì)加載該類,如果不能擬定則會(huì)加載該常量所在類。

不變模式:對(duì)象一旦創(chuàng)立屬性就不會(huì)變化。用final修飾屬性,也用final修飾類(強(qiáng)不變模式),用final修飾屬性(弱不變模式)。

不變模式典型體現(xiàn):java.lang.String類,不變模式可以實(shí)現(xiàn)對(duì)象共享(可以用一種對(duì)象實(shí)例賦值給各種對(duì)象變量。)

池化思想,把需要共享數(shù)據(jù)放在池中(節(jié)約空間,共享數(shù)據(jù))只有String類可以用“”中字面值創(chuàng)立對(duì)象。在String類中,以字面值創(chuàng)立時(shí),會(huì)到Java辦法空間串池空間中去查找,如果有就返回串池中字符串地址,并把這個(gè)地址付給對(duì)象變量。如果沒(méi)有則會(huì)在串池里創(chuàng)立一種字符串對(duì)象,并返回其地址付購(gòu)對(duì)象變量,當(dāng)另一種以字面值創(chuàng)立對(duì)象時(shí)則會(huì)重復(fù)上述過(guò)程。

如果是new在堆空間中創(chuàng)立String類對(duì)象,則不會(huì)有上述過(guò)程。

String類中intern()辦法會(huì)將在堆空間中創(chuàng)立String類對(duì)象中字符串和串池中比對(duì),如果有相似串就返回這個(gè)串串池中地址。

不變模式在對(duì)于對(duì)象進(jìn)行修改,添加操作是使相稱麻煩,她會(huì)產(chǎn)生諸多中間垃圾對(duì)象。創(chuàng)立和銷毀資源開銷是相稱大。

String類在字符串連接時(shí)會(huì)先效率很低,就是由于它所產(chǎn)生對(duì)象書性是不可以修改,當(dāng)連接字符串時(shí)也就是只能創(chuàng)立新對(duì)象。

對(duì)于諸多字符串連接,應(yīng)當(dāng)使用StringBuffer類,在使用這個(gè)類對(duì)象來(lái)進(jìn)行字符串連接時(shí)就不會(huì)有多余中間對(duì)象生成,從而優(yōu)化了效率。

abstract(抽象)修飾符,可以修飾類和辦法

1,abstract修飾類,會(huì)使這個(gè)類成為一種抽象類,這個(gè)類將不能生成對(duì)象實(shí)例,但可以做為對(duì)象變量聲明類型,也就是編譯時(shí)類型,抽象類就像當(dāng)于一類半成品,需要子類繼承并覆蓋其中抽象辦法。

2,abstract修飾辦法,會(huì)使這個(gè)辦法變成抽象辦法,也就是只有聲明(定義)而沒(méi)有實(shí)現(xiàn),實(shí)現(xiàn)某些以";"代替。需要子類繼承實(shí)現(xiàn)(覆蓋)。

注意:有抽象辦法類一定是抽象類。但是抽象類中不一定都是抽象辦法,也可以全是詳細(xì)辦法。

abstract修飾符在修飾類時(shí)必要放在類名前。

abstract修飾辦法就是規(guī)定其子類覆蓋(實(shí)現(xiàn))這個(gè)辦法。調(diào)用時(shí)可以以多態(tài)方式調(diào)用子類覆蓋(實(shí)現(xiàn))后辦法,也就是說(shuō)抽象辦法必要在其子類中實(shí)現(xiàn),除非子類自身也是抽象類。

注意:父類是抽象類,其中有抽象辦法,那么子類繼承父類,并把父類中所有抽象辦法都實(shí)現(xiàn)(覆蓋)了,子類才有創(chuàng)立對(duì)象實(shí)例能力,否則子類也必要是抽象類。抽象類中可以有構(gòu)造辦法,是子類在構(gòu)造子類對(duì)象時(shí)需要調(diào)用父類(抽象類)構(gòu)造辦法。

final和abstract,private和abstract,static和abstract,這些是不能放在一起修飾符,由于abstract修飾辦法是必要在其子類中實(shí)現(xiàn)(覆蓋),才干以多態(tài)方式調(diào)用,以上修飾符在修飾辦法時(shí)期子類都覆蓋不了這個(gè)辦法,final是不可以覆蓋,private是不可以繼承到子類,因此也就不能覆蓋,static是可以覆蓋,但是在調(diào)用時(shí)會(huì)調(diào)用編譯時(shí)類型辦法,由于調(diào)用是父類辦法,而父類辦法又是抽象辦法,又不可以調(diào)用,因此上修飾符不能放在一起。

抽象(abstract)辦法代表了某種原則,定義原則,定義功能,在子類中去實(shí)現(xiàn)功能(子類繼承了父類并需要給出從父類繼承抽象辦法實(shí)現(xiàn))。

辦法一時(shí)間想不到怎么被實(shí)現(xiàn),或故意要子類去實(shí)現(xiàn)而定義某種原則,這個(gè)辦法可以被定義為抽象。(abstract)

模板辦法模式:用abstract把制定原則和實(shí)現(xiàn)原則分開,制定原則就是模板,實(shí)現(xiàn)就是按模板原則來(lái)實(shí)現(xiàn),也就是繼承模板,實(shí)現(xiàn)模板中相應(yīng)功能辦法。模板中不容許修改辦法可以用fianl來(lái)修飾,這個(gè)辦法不能使抽象辦法,為保證安全,封裝,把模板中不公開某些用protected(保護(hù))修飾。

Java中接口

接口是一種程序構(gòu)造,是特殊抽象類。接口中辦法必要都是公開抽象辦法(publicabstract),接口中屬性都是公開靜態(tài)常量(publicstaticfinal)。

聲明一種接口用 interface 核心字,接口也是一種類型,編譯之后也有生成相應(yīng)字節(jié)碼,她聲明規(guī)范也要符合類型定義(一種源文獻(xiàn)中只能有一種public interface,接口名和源文獻(xiàn)名相似,有public interface,就不能在寫public class了)。接口中屬性可以不加修飾符,辦法也不用加修飾符。

接口也可以繼承,但是只能由接口繼承,在用類去繼承時(shí)要換用implements 核心字,這時(shí)類和接口也不叫做繼承關(guān)系,而是實(shí)現(xiàn)關(guān)系,但其實(shí)質(zhì)也是繼承。

一種類可以繼承也只能繼承此外一種類,但是可以實(shí)現(xiàn)各種接口,其語(yǔ)法是在implements背面寫接口名,各種接口以“,”分隔。

接口之間是可以多繼承,其語(yǔ)法和類繼承語(yǔ)法是相似,在接口多繼承時(shí),在extends后寫接口名如果要繼承各種接口,接口名以“,”分隔,接口繼承關(guān)系只是把其父接口中抽象辦法繼承到子接口中。要實(shí)現(xiàn)接口就必要實(shí)現(xiàn)接口中所有辦法。

一種類可以在繼承一種類同步,也可以實(shí)現(xiàn)一種或各種接口。采用接口就繞開了單繼承限制。

接口類型也可以做為編譯時(shí)類型使用,但其實(shí)際運(yùn)營(yíng)時(shí)類型必要是完全實(shí)現(xiàn)接口類對(duì)象實(shí)例,這樣就使多態(tài)變得很靈活了,

注意:實(shí)現(xiàn)接口時(shí),在實(shí)現(xiàn)(覆蓋)抽象辦法時(shí),注意必要要在辦法返回值類型前加public修飾符。如果沒(méi)有完全實(shí)現(xiàn)接口中辦法,那么這個(gè)類就只可以是個(gè)抽象類,不能創(chuàng)立對(duì)象。接口是實(shí)質(zhì)就是特殊抽象類。接口沒(méi)有構(gòu)造辦法。

接口意義:

1,接口可以實(shí)現(xiàn)多繼承。

2,用接口可以實(shí)現(xiàn)混合類型(主類型,副類型),java中可以通過(guò)接口分出主次類型。主類型使用繼承,副類型,使用接口實(shí)現(xiàn)。

3,接口進(jìn)一步深化了原則思想,接口自身就是一種原則,她起到了減少耦合性作用,接口可以使辦法定義和實(shí)現(xiàn)相分離,也就是將接口定義者和實(shí)現(xiàn)者相分離,接口也可以用于減少模塊間或系統(tǒng)間耦合性。針對(duì)接口編程可以屏蔽不同實(shí)現(xiàn)間差別,看到只是實(shí)現(xiàn)好功能,

接口:定義原則,

接口實(shí)現(xiàn):實(shí)現(xiàn)原則

接口調(diào)用者:原則使用

針對(duì)接口編程原則,也就是按照原則實(shí)現(xiàn)。

接口回調(diào):先有接口定義(接口實(shí)現(xiàn)者),再有接口使用者,最后把接口實(shí)現(xiàn)對(duì)象傳入接口使用者中,接口使用者會(huì)通過(guò)接口來(lái)調(diào)用接口實(shí)現(xiàn)者辦法。

接口回調(diào):接口定義者定義好了原則,接口使用者先寫好了使用代碼,接口實(shí)現(xiàn)者寫好實(shí)現(xiàn)之后把實(shí)現(xiàn)對(duì)象傳入接口使用者中。她調(diào)用接口中辦法也就是掉用接口實(shí)現(xiàn)中辦法。這種過(guò)程叫做接口回調(diào)。

盡量使用接口類型作為編譯時(shí)類型,盡量將抽取到共性行為寫在接口中。

用若干個(gè)小接口取代一種大接口。(接口隔離原則)

把一種類功能作成接口,只暴露想暴露辦法,接口隔離原則可以實(shí)現(xiàn)更高層次封裝,針對(duì)對(duì)象不同,暴露辦法也不同。

java中根類Object

java中所有類父類或直接或間接或隱含都是Object類。

java不容許循環(huán)繼承,也就是互相繼承是不可以。

Object類中finalize()一種對(duì)象被垃圾收集時(shí)候,最后會(huì)由JVM調(diào)用這個(gè)對(duì)象finalize辦法

Object類中有一種String toString()辦法,返回該對(duì)象字符串表達(dá)。Object類中toString()辦法她返回是類名加上她地址一種字符串。在子類中推薦覆蓋toString()辦法。

Object類中boolean equals(Objecto)辦法是用來(lái)比較對(duì)象內(nèi)容與否相等,其返回值是boolean類型值,相似為真,不同則為假。事實(shí)上還是比較對(duì)象地址與否相似。String類覆蓋了equals()辦法,她比較是對(duì)象中內(nèi)容與否相似。子類中也推薦覆蓋Object類中繼承equals()辦法

equals()覆蓋原則:

自反性:x.equals(x)為true

對(duì)稱性:y.equals(x)和x.equals(y)值要相似,要么都為true,要么都為false。

傳遞性:x.equals(y)為true,y.equals(z)也為true,那么x.equals(z)一定也為true。

覆蓋equals()辦法環(huán)節(jié):

booleanequals(Objecto)

{

if(this==o)returntrue;//1,看看是不是一種對(duì)象

if(o==null)returntrue;//2,看看對(duì)象是不是空

if(!(oinstanceof本類類名))returnfalse;//看看是不是本類對(duì)象

......//依照本類設(shè)計(jì)。

}

封裝類

java為每一種簡(jiǎn)樸數(shù)據(jù)類型提供了一種封裝類,使每個(gè)簡(jiǎn)樸數(shù)據(jù)類型可以被Object來(lái)裝載。

除了int(Integer)和char(Character),別的類型首字母大寫即成封裝類類型名。

轉(zhuǎn)換字符方式:

intI=10;

Strings=I+””;

Strings1=String.valueOf(i);

IntI=10;

IntergerI_class=newinteger(I);

封裝類、字符串、基本類型間轉(zhuǎn)換

Interger--------------------(Double(x.toString))------------>Double

String-----------------(Integer.valueOf())---------------->Integer

Integer-----------------(x.toString())--------------------->String

int----------------------(100+””)------------------------->String

String------------------(Integer.parseInt())--------------->int

Integer-----------------(IValue())--------------->int

學(xué)會(huì)查看javadoc協(xié)助文檔。要先關(guān)注要用法返回值類型,也就是要獲得內(nèi)容類型,然后看辦法名,JDK中辦法名基本上是見名知義,參數(shù)表,就是看需要什么才可以獲得需要那些內(nèi)容,也要看自己可以提供什么。

注意:“==”在任何時(shí)候都是比較地址,這種比較永遠(yuǎn)不會(huì)被覆蓋。

程序員自己編寫類和JDK類是一種合伙關(guān)系。(由于多態(tài)存在,也許存在咱們調(diào)用JDK類狀況,也也許存在JDK自動(dòng)調(diào)用咱們類狀況。)

注意:類型轉(zhuǎn)換中double\Interger\String之間轉(zhuǎn)換最多。

(注:所有使用內(nèi)部類地方都可以不用內(nèi)部類,但使用內(nèi)部類可以使程序更加簡(jiǎn)潔,便于命名規(guī)范和劃分層次構(gòu)造)。

內(nèi)部類是指在一種外部類內(nèi)部再定義一種類。

*內(nèi)部類可為靜態(tài),可用protected和private修飾。(而外部類不可以:頂級(jí)類只能使用public和default)。

*java文獻(xiàn)中沒(méi)有publicclass,容許類名和文獻(xiàn)不同名。

內(nèi)部類

內(nèi)部類也就是定義在類內(nèi)部類。

內(nèi)部類分類

1,成員內(nèi)部類、

2,局部?jī)?nèi)部類、

3,靜態(tài)內(nèi)部類、

4,匿名內(nèi)部類(圖形是要用到,必要掌握)。

成員內(nèi)部類

四個(gè)訪問(wèn)權(quán)限修飾符都可以修飾成員內(nèi)部類。

內(nèi)部類和外部類在編譯時(shí)時(shí)不同兩個(gè)類,內(nèi)部類對(duì)外部類沒(méi)有任何依賴。

內(nèi)部類是一種編譯時(shí)語(yǔ)法,在編譯時(shí)生成各自字節(jié)碼文獻(xiàn),內(nèi)部類和外部類沒(méi)關(guān)于系。

內(nèi)部類中可以訪問(wèn)外部類私有成員。

作為外部類一種成員存在,與外部類屬性、辦法并列。

內(nèi)部類和外部類實(shí)例變量可以共存。

在內(nèi)部類中訪問(wèn)實(shí)例變量:this.屬性

在內(nèi)部類訪問(wèn)外部類實(shí)例變量:外部類名,this.屬性。

在外部類外部訪問(wèn)內(nèi)部類,使用out.inner。

成員內(nèi)部類特點(diǎn):

1.內(nèi)部類作為外部類成員,可以訪問(wèn)外部類私有成員或?qū)傩?。(雖然將外部類聲明為private,但是對(duì)于處在其內(nèi)部?jī)?nèi)部類還是可見。)

2.用內(nèi)部類定義在外部類中不可訪問(wèn)屬性。這樣就在外部類中實(shí)現(xiàn)了比外部類private還要小訪問(wèn)權(quán)限。

注意:內(nèi)部類是個(gè)編譯時(shí)概念,一旦編譯成功,就會(huì)成為完全不同兩類。

對(duì)于一種名為outer外部類和其內(nèi)部定義名為inner內(nèi)部類。編譯

完畢后浮現(xiàn)outer.class和outer$inner.class兩類。

3.成員內(nèi)部類不能具有靜態(tài)成員。

建立內(nèi)部類對(duì)象時(shí)應(yīng)注意:

在外部類內(nèi)部可以直接使用inners=newinner();(由于外部類懂得inner是哪個(gè)類,因此可以生成對(duì)象。)

而在外部類外部,要生成(new)一種內(nèi)部類對(duì)象,需要一方面建立一種外部類對(duì)象(外部類可用),然后在生成一種內(nèi)部類對(duì)象,內(nèi)部類類名是外部類類名.內(nèi)部類類名。

Outero=newOuter();

Outer.Innerin=o.new.Inner()

靜態(tài)內(nèi)部類

(注意:前三種內(nèi)部類與變量類似,因此可以對(duì)照參照變量)

靜態(tài)內(nèi)部類定義在類中,任何辦法外,用staticclass定義。

靜態(tài)內(nèi)部類只能訪問(wèn)外部類靜態(tài)成員。

生成(new)一種靜態(tài)內(nèi)部類不需要外部類成員:這是靜態(tài)內(nèi)部類和成員內(nèi)部類區(qū)別。

靜態(tài)內(nèi)部類對(duì)象可以直接生成:

Outer.Innerin=newOuter.Inner();

而不需要通過(guò)生成外部類對(duì)象來(lái)生成,這樣事實(shí)上使靜態(tài)內(nèi)部類成為了一種頂級(jí)類。靜態(tài)內(nèi)部類不可用private來(lái)進(jìn)行定義。

注意:當(dāng)類與接口(或者是接口與接口)發(fā)生辦法命名沖突時(shí)候,此時(shí)必要

使用內(nèi)部類來(lái)實(shí)現(xiàn)。用接口不能完全地實(shí)現(xiàn)多繼承,用接口配合內(nèi)部類

才干實(shí)現(xiàn)真正多繼承。

例子:

對(duì)于兩個(gè)類,擁有相似辦法:

classPeople

{

run();

}

interfaceMachine

{

run();

}

有一種robot類:classRobotextendsPeopleimplementMachine,run()不可直接實(shí)現(xiàn)。

interfaceMachine

{

voidrun();

}

classPerson

{

voidrun()

{

System.out.println("run");

}

}

classRobotextendsPerson

{

privateclassMachineHeartimplementsMachine

{

publicvoidrun()

{

System.out.println("heartrun");

}

}

publicvoidrun()

{

System.out.println("Robotrun");

}

MachinegetMachine()

{

returnnewMachineHeart();

}

}

classTest

{

publicstaticvoidmain(String[]args)

{

Robotrobot=newRobot();

Machinem=robot.getMachine();

m.run();

robot.run();

}

}

局部?jī)?nèi)部類

在辦法中定義內(nèi)部類稱為局部?jī)?nèi)部類。

與局部變量類似,在局部?jī)?nèi)部類前不加修飾符public和private,其范疇為定義它代碼塊。

注意:局部?jī)?nèi)部類不但可以訪問(wèn)外部類私有實(shí)例變量,但可以訪問(wèn)外部類局

部常量(也就是局部變量必要為final)。

在類外不可直接訪問(wèn)局部?jī)?nèi)部類(保證局部?jī)?nèi)部類對(duì)外是不可見)。

在辦法中才干調(diào)用其局部?jī)?nèi)部類。

通過(guò)內(nèi)部類和接口達(dá)到一種強(qiáng)制弱耦合,用局部?jī)?nèi)部類來(lái)實(shí)現(xiàn)接口,并在辦法中返回接口類型,使局部?jī)?nèi)部類不可見,屏蔽實(shí)現(xiàn)類可見性。

局部?jī)?nèi)部類寫法

publicclassTestLocalInnerClass

{

publicstaticvoidmain(String[]args)

{

Outero=newOuter();

finalinta=9;

o.print(a);

}

}

classOuter

{

privateintindex=100;

publicvoidprint(finalinta)

{

finalintb=10;

System.out.println(a);

classInner

{

publicvoidprint()

{

System.out.println(index);

System.out.println(a);

System.out.println(b);

}

}

Inneri=newInner();

i.print();

}

}

匿名內(nèi)部類

匿名內(nèi)部類是一種特殊局部?jī)?nèi)部類,它是通過(guò)匿名類實(shí)現(xiàn)接口。

匿名內(nèi)部類特點(diǎn):

1,一種類用于繼承其她類或是實(shí)現(xiàn)接口,并不需要增長(zhǎng)額外辦法,只是對(duì)繼承辦法事先或是覆蓋。

2,只是為了獲得一種對(duì)象實(shí)例,不許要懂得其實(shí)際類型。

3,類名沒(méi)故意義,也就是不需要使用到。

注意:一種匿名內(nèi)部類一定是在new背面,用其隱含實(shí)現(xiàn)一種接口或?qū)崿F(xiàn)一

個(gè)類,沒(méi)有類名,依照多態(tài),咱們使用其父類名。

因其為局部?jī)?nèi)部類,那么局部?jī)?nèi)部類所有限制都對(duì)其生效。

匿名內(nèi)部類是唯一一種無(wú)構(gòu)造辦法類。

大某些匿名內(nèi)部類是用于接口回調(diào)用。

匿名內(nèi)部類在編譯時(shí)候由系統(tǒng)自動(dòng)起名Out$1.class。

如果一種對(duì)象編譯時(shí)類型是接口,那么其運(yùn)營(yíng)類型為實(shí)現(xiàn)這個(gè)接口類。

因匿名內(nèi)部類無(wú)構(gòu)造辦法,因此其使用范疇非常有限。

當(dāng)需要各種對(duì)象時(shí)使用局部?jī)?nèi)部類,因而局部?jī)?nèi)部類應(yīng)用相對(duì)比較多。匿名內(nèi)部類中不能定義構(gòu)造辦法。

匿名內(nèi)部類寫法:

interfaceA

{

voidia();

}

classB

{

publicAbc()

{

returnnewA

{

voidia()

{

}

};

}

}

使用匿名內(nèi)部類:

Bb=newB();

Aa=b.bc();

a.ia();

Exception(例外/異常)

對(duì)于程序也許浮現(xiàn)錯(cuò)誤應(yīng)當(dāng)做出預(yù)案。

例外是程序中所有出乎意料成果。(關(guān)系到系統(tǒng)健壯性)

java會(huì)將所有異常封裝成為一種對(duì)象,其主線父類為Throwable。

異常分類

Error和Exception。

一種Error對(duì)象表達(dá)一種程序錯(cuò)誤,指是底層、低檔、不可恢復(fù)嚴(yán)重錯(cuò)誤。此時(shí)程序一定會(huì)退出,由于已經(jīng)失去了運(yùn)營(yíng)所必要物理環(huán)境。對(duì)于Error錯(cuò)誤咱們無(wú)法進(jìn)行解決,由于咱們是通過(guò)程序來(lái)應(yīng)對(duì)錯(cuò)誤,可是程序已經(jīng)退出了。

咱們可以解決Throwable類中只有Exception類對(duì)象(例外/異常)。

Exception有兩個(gè)子類:

Runtimeexception(未檢查異常)可以在編程時(shí)避免,可解決可不解決

非Runtimeexception(已檢查異常)必要進(jìn)行解決。

注意:無(wú)論是未檢查異常還是已檢查異常在編譯時(shí)候都不會(huì)被發(fā)現(xiàn),在編譯過(guò)程中檢查是程序語(yǔ)法錯(cuò)誤,而異常是一種運(yùn)營(yíng)時(shí)程序出錯(cuò)概念。

在Exception中,所有非未檢查異常都是已檢查異常,沒(méi)有此外異常!!

未檢查異常是由于程序員沒(méi)有進(jìn)行必要檢查,由于她疏忽和錯(cuò)誤而引起異常。一定是屬于虛擬機(jī)內(nèi)部異常(例如空指針)。

應(yīng)對(duì)未檢查異常就是養(yǎng)成良好檢查習(xí)慣。

已檢查異常是不可避免,對(duì)于已檢查異常必要實(shí)現(xiàn)定義好應(yīng)對(duì)辦法。

已檢查異常必定跨越出了虛擬機(jī)范疇。(例如“未找到文獻(xiàn)”)

異常傳遞

如何解決已檢查異常(對(duì)于所有已檢查異常都要進(jìn)行解決):

一方面理解異常形成機(jī)制:

當(dāng)一種辦法中有一條語(yǔ)句浮現(xiàn)了異常,它就會(huì)throw(拋出)一種例外對(duì)象(throw異常對(duì)象),然后背面語(yǔ)句不會(huì)執(zhí)行返回上一級(jí)辦法,其上一級(jí)辦法接受到了例外對(duì)象之后,有也許對(duì)這個(gè)異常進(jìn)行解決,也也許將這個(gè)異常轉(zhuǎn)到它上一級(jí)。

注意:當(dāng)一種辦法中浮現(xiàn)異常,沒(méi)有進(jìn)行異常解決,辦法就會(huì)把異常對(duì)象作為返回值返回。如果有異常進(jìn)入虛擬機(jī),那么虛擬機(jī)就會(huì)立即中斷程序執(zhí)行。

異常解決方式

非RuntimeException(已檢查異常)異常必要解決。如果不解決編譯出錯(cuò)。

對(duì)于接受到已檢查異常有兩種解決方式:throws和try..catch(...){}辦法。

注意:出錯(cuò)辦法有也許是JDK,也也許是程序員寫程序,無(wú)論誰(shuí)寫,拋出一定用throw。

在辦法定義中聲明辦法也許拋出異常,用(throws異常類名,異常類名),聲明這個(gè)辦法將不解決異常,并把異常交給上一級(jí)辦法解決??梢話伋鍪菍?shí)際產(chǎn)生異常父類異常對(duì)象。

例:publicvoidprint()throwsException。

對(duì)于辦法a,如果它定義了throwsException。那么當(dāng)它調(diào)用辦法b返回異常對(duì)象時(shí),辦法a并不解決,而將這個(gè)異常對(duì)象向上一級(jí)返回,如果所有辦法均不進(jìn)行解決,返回到主辦法,程序中斷。(要避免所有辦法都返回用法,由于這樣浮現(xiàn)一種很小異常就會(huì)令程序中斷)。

如果在辦法程序中有一行thrownewException(),返回錯(cuò)誤,那么其后程序不執(zhí)行。由于錯(cuò)誤返回后,背面程序必定沒(méi)有機(jī)會(huì)執(zhí)行,那么JAVA以為后來(lái)程序沒(méi)有存在必要。

Try..catch捕獲異常

對(duì)于try……catch格式:

try{也許浮現(xiàn)錯(cuò)誤代碼塊}catch(exceptione){進(jìn)行解決代碼};

對(duì)象變量聲明

用這種辦法,如果代碼對(duì)的,那么程序不通過(guò)catch語(yǔ)句直接向下運(yùn)營(yíng);

如果代碼不對(duì)的,則將返回異常對(duì)象和e進(jìn)行匹配,如果匹配成功,則解決其背面異常解決代碼。(如果用exception來(lái)聲明e話,由于exception為所有exception對(duì)象父類,所有必定匹配成功)。解決完代碼后這個(gè)例外就完全解決完畢,程序會(huì)接著從浮現(xiàn)異常地方向下執(zhí)行(是從浮現(xiàn)異常地方還是在catch背面呢?運(yùn)用程序進(jìn)行驗(yàn)證)。最后程序正常退出。

try塊中代碼如果沒(méi)有浮現(xiàn)異常,就會(huì)跳過(guò)catch,正常執(zhí)行。

try中如果發(fā)現(xiàn)錯(cuò)誤,即跳出try塊去匹配catch,那么try背面語(yǔ)句就不會(huì)被執(zhí)行。

一種try可以跟進(jìn)各種catch語(yǔ)句,用于解決不同狀況。當(dāng)一種try只能匹配一種catch。

咱們可以寫各種catch語(yǔ)句,但是不能將父類型exception位置寫在子類型excepiton之前,由于這樣父類型必定先于子類型被匹配,所有子類型就成為廢話,java中是不容許寫廢話,因此編譯會(huì)出錯(cuò)。

在try,catch后還可以再跟一子句finally。其中代碼語(yǔ)句無(wú)論如何(無(wú)論有無(wú)異常)都會(huì)被執(zhí)行(由于finally子句這個(gè)特性,因此普通將釋放資源,關(guān)閉連接語(yǔ)句寫在里面)。finally中代碼在和try中代碼沖突時(shí),finally中代碼一定會(huì)被執(zhí)行且會(huì)忽視try中代碼。但是System.exit(0);(虛擬機(jī)退出語(yǔ)句)則不會(huì)去執(zhí)行fianlly中代碼。

try{..}catch(..){..}

try{..}catch(..){}finally{..}

try{..}finally{}

以上三種寫法都可以.

如果在程序中書寫了檢查(拋出)exception但是沒(méi)有對(duì)這個(gè)也許浮現(xiàn)檢查成果進(jìn)行解決,那么程序就會(huì)報(bào)錯(cuò)。而如果只有解決狀況(try)而沒(méi)有相應(yīng)catch子句,則編譯還是通但是。

如何懂得在編寫程序中會(huì)浮現(xiàn)例外呢

1.調(diào)用辦法,查看API中查看辦法中與否有已檢查錯(cuò)誤。

2.在編譯過(guò)程中看提示信息,然后加上相應(yīng)解決。

Throwable有一種message屬性,在使用catch時(shí)候可以調(diào)用:

Catch(IOExceptione){System.out.println(e.message())};

Catch(IOExceptione){e.printStackTrace()};

以上兩條語(yǔ)句都是可以打印出錯(cuò)過(guò)程信息,告訴咱們出錯(cuò)類型所歷通過(guò)程,在調(diào)試中非常有用。

開發(fā)中兩個(gè)道理:

①如何控制try范疇:依照操作連動(dòng)性和有關(guān)性,如果前面程序代碼塊拋出錯(cuò)誤影響了背面程序代碼運(yùn)營(yíng),那么這個(gè)咱們就說(shuō)這兩個(gè)程序代碼存在關(guān)聯(lián),應(yīng)當(dāng)放在同一種try中。

②對(duì)已經(jīng)查出來(lái)例外,有throw(悲觀)和trycatch(積極)兩種解決辦法。

對(duì)于throws把異常拋到trycatch可以較好地解決例外位置(即放在具備對(duì)例外進(jìn)行解決能力位置)。如果沒(méi)有解決能力就繼續(xù)上拋。

當(dāng)咱們自己定義一種例外類時(shí)候必要使其繼承excepiton或者RuntimeException。

throw是一種語(yǔ)句,用來(lái)做拋出例外功能。

而throws是表達(dá)如果下級(jí)辦法中如果有例外拋出,那么本辦法不做解決,繼續(xù)向上拋出。

throws后跟是例外類型。

注意:辦法覆蓋中,如果子類辦法拋出例外是父類辦法拋出例外父類型,那么編譯就會(huì)出錯(cuò):子類無(wú)法覆蓋父類。

結(jié)論:子類辦法不可比父類辦法拋出更多例外。子類拋出例外或者與父類拋出例外一致,或者是父類拋出例外子類型?;蛘咦宇愋筒粧伋隼狻H绻割愋蜔o(wú)throws時(shí),子類型也不容許浮現(xiàn)throws。此時(shí)只能使用trycatch。

斷言是一種調(diào)試工具(assert)

斷言(assert)其后跟是布爾類型表達(dá)式,如果表達(dá)式成果為真不影響程序運(yùn)營(yíng)。如果為假系統(tǒng)浮現(xiàn)低檔錯(cuò)誤,在屏幕上浮現(xiàn)assert信息。

Assert只是用于調(diào)試。在產(chǎn)品編譯完畢后上線assert代碼就被刪除了。

集合類

集合(集合類對(duì)象)是用來(lái)管理其她若干對(duì)象,它類似于C++原則模板庫(kù)中容器,但是在JAVA集合類對(duì)象中可以用來(lái)存儲(chǔ)各種類型對(duì)象。

接口和類共同構(gòu)成了一種集合框架,集合概念,一種對(duì)象可以裝載各種對(duì)象,這個(gè)對(duì)象就是集合對(duì)象。

集合框架

1,接口

Collection用來(lái)管理各種對(duì)象,集合中每個(gè)元素都是對(duì)象。

Map,Map中沒(méi)有對(duì)象,而是鍵值對(duì),由Key,value構(gòu)成鍵值對(duì),Key是不可重復(fù)。value是可以相似,一種Key和一種value一一相應(yīng)。

集合中用到類,接口在java.util包中,在使用時(shí)注意將其引入import。

Collection接口(如下簡(jiǎn)介其子接口)

1)List一種List實(shí)現(xiàn)類對(duì)象在管理各種對(duì)象時(shí)會(huì)按順序組織對(duì)象(即按照將對(duì)象放入順序存儲(chǔ)),List實(shí)現(xiàn)類對(duì)象是有順序,List實(shí)現(xiàn)類對(duì)象中內(nèi)容是是可重復(fù)。(注意,順序和排序區(qū)別)

2)Set一種Set實(shí)現(xiàn)類表達(dá)一種數(shù)學(xué)概念上集合,Set實(shí)現(xiàn)類對(duì)象中元素是無(wú)順序,也就是不會(huì)按照輸入順序來(lái)存儲(chǔ),Set實(shí)現(xiàn)類對(duì)象中元素是不重復(fù)。

3)SortedSet,她是Set子接口,她實(shí)現(xiàn)類會(huì)對(duì)集合中元素進(jìn)行排序。但是要指定排序規(guī)則,她會(huì)按排序規(guī)則進(jìn)行排序。

Map接口(如下簡(jiǎn)介其子接口)

SortedMap,這個(gè)接口實(shí)現(xiàn)類同樣可以實(shí)現(xiàn),但是是對(duì)鍵值對(duì)中Key進(jìn)行排序,這個(gè)接口實(shí)現(xiàn)類也是要指定排序規(guī)則。

List接口實(shí)現(xiàn)類

1>ArrayList是接近于功能集合類,ArryList實(shí)質(zhì)就是一種會(huì)自動(dòng)增長(zhǎng)數(shù)組,ArrayList是用封裝數(shù)組來(lái)實(shí)現(xiàn)List接口。

Collection實(shí)現(xiàn)類對(duì)象遍歷方式是用迭代來(lái)實(shí)現(xiàn)。

在使用迭代器時(shí)先要活得一種迭代器對(duì)象,Iterator(迭代器接口)這是一種接口,迭代器是在集合類中實(shí)現(xiàn),也就是說(shuō),她是一種內(nèi)部類(匿名內(nèi)部類)實(shí)現(xiàn)。

Iterator接口中定義慣用辦法辦法hasNext(),next()。

hasNext(),這個(gè)辦法會(huì)使用一種游標(biāo),并通過(guò)判斷游標(biāo)指向位置與否存儲(chǔ)有對(duì)象。

next()辦法也是Iterator接口中定義好辦法,這個(gè)辦法會(huì)使游標(biāo)指向下一種元素位置,游標(biāo)會(huì)跳過(guò)第一種元素,并返回其中內(nèi)容。

Collections這是一種工具類,也是java.util包中,這個(gè)類中sort(list接口實(shí)現(xiàn)類對(duì)象)辦法,其參數(shù)是一種集合類對(duì)象,這個(gè)辦法使用來(lái)對(duì)集合類對(duì)象進(jìn)行排序。后來(lái),我將以集合這個(gè)名字來(lái)稱呼集合類對(duì)象。,對(duì)于字符串對(duì)象內(nèi)容集合來(lái)說(shuō)會(huì)按字典順序排序(升序),對(duì)于數(shù)字內(nèi)容集合排序也會(huì)按照升序排序。

排序可一份為兩某些內(nèi)容,一種是排序規(guī)則,也就是按照什么來(lái)進(jìn)行排序,并且排成什么樣順序。第二個(gè)就是排序算法,她決定了排序效率。

在對(duì)自定義集合內(nèi)容類型排序時(shí),需要先定義那個(gè)類型排序規(guī)則。

Comparable接口,這個(gè)接口中只定義了一種compareTo(Objecto),辦法返回至類型是整型,如果當(dāng)前對(duì)象不不大于參數(shù)對(duì)象就返回正數(shù),當(dāng)前對(duì)象等于參數(shù)對(duì)象是就返回0,當(dāng)前對(duì)象不大于參數(shù)對(duì)象時(shí)就返回負(fù)值,這樣寫就是升序排列,反之則是進(jìn)行降序排列,在實(shí)現(xiàn)這個(gè)接口中辦法時(shí),返回值定義方式,只有這兩種。

依照指定類型排序規(guī)則實(shí)現(xiàn)了Comparable接口,那么就可以對(duì)存有這個(gè)類型集合進(jìn)行整體排序。Comparable接口,也叫做可比較接口。這個(gè)接口在java.lang包下。只要實(shí)現(xiàn)了這個(gè)接口,就是可排序。

接下來(lái)簡(jiǎn)介此外一種對(duì)自定義類型對(duì)象集合整體排序辦法,也就是實(shí)現(xiàn)比較器接口(Comparator),這個(gè)接口中定義了一種compare(Objecto1,Objecto2)辦法來(lái)比較兩個(gè)對(duì)象,這個(gè)辦法返回值定義和上面簡(jiǎn)介那個(gè)辦法是同樣。

注意:在API,協(xié)助文檔中以上兩個(gè)辦法參數(shù)類型是T,這代表模板類型,也就是集合中存儲(chǔ)內(nèi)容類型,在JDK1。4中其參數(shù)就是Object類型,模板類型詳細(xì)內(nèi)容會(huì)在最后JDK5。0新特性中講到。

Comparator接口可以在匿名內(nèi)部類中實(shí)現(xiàn),Collections中sort(集合了對(duì)象,比較器)辦法,可以對(duì)自定義類型內(nèi)容集合進(jìn)行整體排序。

2>LinkedList,它是List接口實(shí)現(xiàn)類,其底層是用雙向循環(huán)鏈表來(lái)實(shí)現(xiàn)。

注意:ArrayList查詢效率比較高,增刪動(dòng)作效率比較差,合用于查詢比較

頻繁,增刪動(dòng)作較少元素管理集合。

LinkedList查詢效率低,但是增刪效率很高。合用于增刪動(dòng)作比較頻繁,查詢次數(shù)較少元素管理集合。

ArrayList,LinkedList都是線程不安全。

實(shí)現(xiàn)堆棧

1,數(shù)組(ArrayList,增刪效率比較低,不適合)

2,LinkedList(實(shí)現(xiàn)堆棧好辦法)

3,java。util。Stack類,Stack是Vector子類,Vector類是一種線程安全(是一種重量級(jí)類),并繼承了Vector辦法,Verctor類(這個(gè)類也是List接口實(shí)現(xiàn)類)和ArrayList功能近乎相似。(不推薦使用Stack類來(lái)實(shí)現(xiàn)堆棧)。

Set接口實(shí)現(xiàn)類

HashSet

Set實(shí)現(xiàn)類集合對(duì)象中不可以有重復(fù)元素,HashSet也同樣她是使用了一種標(biāo)記來(lái)擬定元素不重復(fù),HashSet用一種算法來(lái)保證HashSet中元素是不重復(fù),HashSet底層實(shí)現(xiàn)還是數(shù)組。

Object類中hashCode()辦法是所有子類都會(huì)繼承這個(gè)辦法,這個(gè)辦法會(huì)用Hash算法算出一種Hash(哈希)碼值返回,HashSet會(huì)用Hash碼值去和數(shù)組長(zhǎng)度取模,模(這個(gè)模就是對(duì)象要存儲(chǔ)在數(shù)組中位置)相似時(shí)才會(huì)判斷數(shù)組中元素和要加入對(duì)象內(nèi)容與否相似,如果不同才會(huì)添加進(jìn)去。

Hash算法是一種散列算法。

注意:因此要存入HashSet集合對(duì)象中自定義類必要覆蓋hashCode(),equals()兩個(gè)辦法,才干保證集合中元素容不重復(fù)。在覆蓋和hashCode()辦法時(shí),要使相似對(duì)象hashCode()辦法返回相似值,覆蓋equals()辦法再判斷其內(nèi)容。為了保證效率,因此在覆蓋hashCode()辦法時(shí),也要盡量使不同對(duì)象盡量返回不同Hash碼值。

如果數(shù)組中元素和要加入對(duì)象hashCode()返回了相似Hash值(相似對(duì)象),才會(huì)用equals()辦法來(lái)判斷兩個(gè)對(duì)象內(nèi)容與否相似。

SortedSet接口是Set子接口。

TreeSet是SortedSet接口實(shí)現(xiàn)類,她可以對(duì)集合中元素進(jìn)行排序。

要存儲(chǔ)在TreeSet中自定義類對(duì)象,這個(gè)類要么是已經(jīng)實(shí)現(xiàn)了Comparable接口,要么是能給出Comparator比較器,TreeSet可以自動(dòng)過(guò)濾掉重復(fù)元素因此不用重載hashCode()辦法,TreeSet會(huì)依照比較規(guī)則判斷元素內(nèi)容與否相似,TreeSet會(huì)在元素存入世就進(jìn)行了排序。(在TreeSet給出排序規(guī)則時(shí),一定要注意對(duì)象內(nèi)容相等條件,一定要注旨在主觀以為兩個(gè)對(duì)象內(nèi)容相似時(shí),才可以使用比較少條件來(lái)進(jìn)行判斷)

在要排序時(shí)才使用TreeSet類(存儲(chǔ)效率比較低),HashSet存儲(chǔ)效率比較高,在需要為HashSet對(duì)象排序時(shí),就可以把HashSet中元素放入TreeSet。

Map接口實(shí)現(xiàn)類

Map中只可以存儲(chǔ)鍵值對(duì)(Key,value),其中Key是不可以重復(fù)。Key和value是一一相應(yīng)。

HashMap是Map接口實(shí)現(xiàn)類,Key時(shí)無(wú)序存儲(chǔ),其中Key是不可以重復(fù),它也是通過(guò)Hash碼值來(lái)保證Key不重復(fù),Key和value是一一相應(yīng)。如果要加入鍵值對(duì)和HashMap中鍵值對(duì)Key是相似就會(huì)將這個(gè)集合中Key所隊(duì)?wèi)?yīng)value值進(jìn)行覆蓋,在使用自定義類型作為Key時(shí),那就是要覆蓋hashCode(),equals()辦法,也就是和HashSet中要放入自定義類型是解決辦法相似。這個(gè)類對(duì)象是線程不安全。

在遍歷Map時(shí),要使用其keySet()辦法獲得Key一種Set集合,可以通過(guò)遍歷這個(gè)Set,用get()辦法來(lái)獲得Key所相應(yīng)value,也就遍歷了Map。

H

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論