Java基礎(chǔ)知識(shí)總結(jié)

一:java概述:1991 年Sun公司的James Gosling(詹姆斯·高斯林)等人開始開發(fā)名稱為 Oak 的語(yǔ)言,希望用于控制嵌入在有線電視交換盒疏尿、PDA等的微處理器淋淀;1994年將Oak語(yǔ)言更名為Java遥昧;Java的三種技術(shù)架構(gòu):

JAVAEE:Java Platform Enterprise Edition,開發(fā)企業(yè)環(huán)境下的應(yīng)用程序朵纷,主要針對(duì)web程序開發(fā)炭臭;

JAVASE:Java Platform Standard Edition,完成桌面應(yīng)用程序的開發(fā)袍辞,是其它兩者的基礎(chǔ)鞋仍;

JAVAME:Java Platform Micro Edition,開發(fā)電子消費(fèi)產(chǎn)品和嵌入式設(shè)備搅吁,如手機(jī)中的程序

javac命令和java命令做什么事情呢威创?

2.要知道java是分兩部分的:一個(gè)是編譯落午,一個(gè)是運(yùn)行。

javac:負(fù)責(zé)的是編譯的部分那婉,當(dāng)執(zhí)行javac時(shí)板甘,會(huì)啟動(dòng)java的編譯器程序。對(duì)指定擴(kuò)展名的.java文件進(jìn)行編譯详炬。 生成了jvm可以識(shí)別的字節(jié)碼文件盐类。也就是class文件,也就是java的運(yùn)行程序呛谜。

java:負(fù)責(zé)運(yùn)行的部分.會(huì)啟動(dòng)jvm.加載運(yùn)行時(shí)所需的類庫(kù),并對(duì)class文件進(jìn)行執(zhí)行.

一個(gè)文件要被執(zhí)行,必須要有一個(gè)執(zhí)行的起始點(diǎn),這個(gè)起始點(diǎn)就是main函數(shù).

數(shù)據(jù)類型:

1):基本數(shù)據(jù)類型:byte在跳、short、int隐岛、long猫妙、float、double聚凹、char割坠、boolean

2):引用數(shù)據(jù)類型: 數(shù)組、類妒牙、接口彼哼。

級(jí)別從低到高為:byte,char,short(這三個(gè)平級(jí))-->int-->float-->long-->double

自動(dòng)類型轉(zhuǎn)換:從低級(jí)別到高級(jí)別,系統(tǒng)自動(dòng)轉(zhuǎn)的湘今;

函 數(shù):為了提高代碼的復(fù)用性敢朱,可以將其定義成一個(gè)單獨(dú)的功能,該功能的體現(xiàn)就是java中的函數(shù)摩瞎。函數(shù)就是體現(xiàn)之一拴签。

java中的函數(shù)的定義格式:

修飾符 返回值類型 函數(shù)名(參數(shù)類型 形式參數(shù)1,參數(shù)類型 形式參數(shù)1旗们,…){

執(zhí)行語(yǔ)句蚓哩;

return 返回值;

}

當(dāng)函數(shù)沒有具體的返回值時(shí)上渴,返回的返回值類型用void關(guān)鍵字表示岸梨。

如果函數(shù)的返回值類型是void時(shí),return語(yǔ)句可以省略不寫的驰贷,系統(tǒng)會(huì)幫你自動(dòng)加上。

return的作用:結(jié)束函數(shù)洛巢。結(jié)束功能括袒。

如何定義一個(gè)函數(shù)?

函數(shù)其實(shí)就是一個(gè)功能稿茉,定義函數(shù)就是實(shí)現(xiàn)功能锹锰,通過兩個(gè)明確來完成:

1)芥炭、明確該功能的運(yùn)算完的結(jié)果,其實(shí)是在明確這個(gè)函數(shù)的返回值類型恃慧。

2)园蝠、在實(shí)現(xiàn)該功能的過程中是否有未知內(nèi)容參與了運(yùn)算,其實(shí)就是在明確這個(gè)函數(shù)的參數(shù)列表(參數(shù)類型&參數(shù)個(gè)數(shù))痢士。

函數(shù)的作用:

1)彪薛、用于定義功能。

2)怠蹂、用于封裝代碼提高代碼的復(fù)用性善延。

注意:函數(shù)中只能調(diào)用函數(shù),不能定義函數(shù)城侧。

主函數(shù):

1)易遣、保證該類的獨(dú)立運(yùn)行。

2)嫌佑、因?yàn)樗浅绦虻娜肟凇?/p>

3)豆茫、因?yàn)樗诒籮vm調(diào)用。

函數(shù)定義名稱是為什么呢屋摇?

答:1)揩魂、為了對(duì)該功能進(jìn)行標(biāo)示,方便于調(diào)用摊册。

2)肤京、為了通過名稱就可以明確函數(shù)的功能,為了增加代碼的閱讀性茅特。

重載的定義是:在一個(gè)類中忘分,如果出現(xiàn)了兩個(gè)或者兩個(gè)以上的同名函數(shù),只要它們的參數(shù)的個(gè)數(shù)白修,或者參數(shù)的類型不同妒峦,即可稱之為該函數(shù)重載了。

如何區(qū)分重載:當(dāng)函數(shù)同名時(shí)兵睛,只看參數(shù)列表肯骇。和返回值類型沒關(guān)系。

7祖很,數(shù) 組:用于存儲(chǔ)同一類型數(shù)據(jù)的一個(gè)容器笛丙。好處:可以對(duì)該容器中的數(shù)據(jù)進(jìn)行編號(hào),從0開始假颇。數(shù)組用于封裝數(shù)據(jù)胚鸯,就是一個(gè)具體的實(shí)體。

如何在java中表現(xiàn)一個(gè)數(shù)組呢笨鸡??jī)煞N表現(xiàn)形式姜钳。

1)坦冠、元素類型[] 變量名 = new 元素類型[元素的個(gè)數(shù)];

2)哥桥、元素類型[] 變量名 = {元素1辙浑,元素2...};

元素類型[] 變量名 = new 元素類型[]{元素1拟糕,元素2...}判呕;

java分了5片內(nèi)存。

1:寄存器已卸。2:本地方法區(qū)佛玄。3:方法區(qū)。4:棧累澡。5:堆梦抢。

棧:存儲(chǔ)的都是局部變量 ( 函數(shù)中定義的變量,函數(shù)上的參數(shù)愧哟,語(yǔ)句中的變量 )奥吩;

只要數(shù)據(jù)運(yùn)算完成所在的區(qū)域結(jié)束,該數(shù)據(jù)就會(huì)被釋放蕊梧。

堆:用于存儲(chǔ)數(shù)組和對(duì)象霞赫,也就是實(shí)體。啥是實(shí)體胺适浮端衰?就是用于封裝多個(gè)數(shù)據(jù)的。

1:每一個(gè)實(shí)體都有內(nèi)存首地址值甘改。

2:堆內(nèi)存中的變量都有默認(rèn)初始化值旅东。因?yàn)閿?shù)據(jù)類型不同,值也不一樣十艾。

3:垃圾回收機(jī)制抵代。

----------------------------------------------------------------------------------------------

三:面向?qū)ο螅骸铩铩铩铩?/p>

特點(diǎn):1:將復(fù)雜的事情簡(jiǎn)單化。

2:面向?qū)ο髮⒁郧暗倪^程中的執(zhí)行者忘嫉,變成了指揮者荤牍。

3:面向?qū)ο筮@種思想是符合現(xiàn)在人們思考習(xí)慣的一種思想。

過程和對(duì)象在我們的程序中是如何體現(xiàn)的呢庆冕?過程其實(shí)就是函數(shù)康吵;對(duì)象是將函數(shù)等一些內(nèi)容進(jìn)行了封裝。

匿名對(duì)象使用場(chǎng)景:

1:當(dāng)對(duì)方法只進(jìn)行一次調(diào)用的時(shí)候访递,可以使用匿名對(duì)象晦嵌。

2:當(dāng)對(duì)象對(duì)成員進(jìn)行多次調(diào)用時(shí),不能使用匿名對(duì)象。必須給對(duì)象起名字耍铜。

在類中定義其實(shí)都稱之為成員。成員有兩種:

1:成員變量:其實(shí)對(duì)應(yīng)的就是事物的屬性跌前。

2:成員函數(shù):其實(shí)對(duì)應(yīng)的就是事物的行為棕兼。

所以,其實(shí)定義類抵乓,就是在定義成員變量和成員函數(shù)伴挚。但是在定義前,必須先要對(duì)事物進(jìn)行屬性和行為的分析灾炭,才可以用代碼來體現(xiàn)茎芋。

private int age;//私有的訪問權(quán)限最低,只有在本類中的訪問有效蜈出。

注意:私有僅僅是封裝的一種體現(xiàn)形式而已田弥。

私有的成員:其他類不能直接創(chuàng)建對(duì)象訪問,所以只有通過本類對(duì)外提供具體的訪問方式來完成對(duì)私有的訪問铡原,可以通過對(duì)外提供函數(shù)的形式對(duì)其進(jìn)行訪問偷厦。

好處:可以在函數(shù)中加入邏輯判斷等操作,對(duì)數(shù)據(jù)進(jìn)行判斷等操作燕刻。

總結(jié):開發(fā)時(shí)只泼,記住,屬性是用于存儲(chǔ)數(shù)據(jù)的卵洗,直接被訪問请唱,容易出現(xiàn)安全隱患,所以过蹂,類中的屬性通常被私有化十绑,并對(duì)外提供公共的訪問方法。

這個(gè)方法一般有兩個(gè)榴啸,規(guī)范寫法:對(duì)于屬性 xxx孽惰,可以使用setXXX(),getXXX()對(duì)其進(jìn)行操作。

類中怎么沒有定義主函數(shù)呢鸥印?

注意:主函數(shù)的存在勋功,僅為該類是否需要獨(dú)立運(yùn)行,如果不需要库说,主函數(shù)是不用定義的狂鞋。

主函數(shù)的解釋:保證所在類的獨(dú)立運(yùn)行,是程序的入口潜的,被jvm調(diào)用骚揍。

成員變量和局部變量的區(qū)別:

1:成員變量直接定義在類中。

局部變量定義在方法中,參數(shù)上信不,語(yǔ)句中嘲叔。

2:成員變量在這個(gè)類中有效。

局部變量只在自己所屬的大括號(hào)內(nèi)有效抽活,大括號(hào)結(jié)束硫戈,局部變量失去作用域。

3:成員變量存在于堆內(nèi)存中下硕,隨著對(duì)象的產(chǎn)生而存在丁逝,消失而消失。

局部變量存在于棧內(nèi)存中梭姓,隨著所屬區(qū)域的運(yùn)行而存在霜幼,結(jié)束而釋放。

構(gòu)造函數(shù):用于給對(duì)象進(jìn)行初始化誉尖,是給與之對(duì)應(yīng)的對(duì)象進(jìn)行初始化罪既,它具有針對(duì)性,函數(shù)中的一種铡恕。

特點(diǎn):

1:該函數(shù)的名稱和所在類的名稱相同萝衩。

2:不需要定義返回值類型。

3:該函數(shù)沒有具體的返回值没咙。

記仔梢辍:所有對(duì)象創(chuàng)建時(shí),都需要初始化才可以使用祭刚。

注意事項(xiàng):一個(gè)類在定義時(shí)牌捷,如果沒有定義過構(gòu)造函數(shù),那么該類中會(huì)自動(dòng)生成一個(gè)空參數(shù)的構(gòu)造函數(shù)涡驮,為了方便該類創(chuàng)建對(duì)象暗甥,完成初始化。如果在類中自定義了構(gòu)造函數(shù)捉捅,那么默認(rèn)的構(gòu)造函數(shù)就沒有了撤防。

一個(gè)類中,可以有多個(gè)構(gòu)造函數(shù)棒口,因?yàn)樗鼈兊暮瘮?shù)名稱都相同寄月,所以只能通過參數(shù)列表來區(qū)分。所以无牵,一個(gè)類中如果出現(xiàn)多個(gè)構(gòu)造函數(shù)漾肮。它們的存在是以重載體現(xiàn)的。

構(gòu)造函數(shù)和一般函數(shù)有什么區(qū)別呢茎毁?

1:兩個(gè)函數(shù)定義格式不同克懊。

2:構(gòu)造函數(shù)是在對(duì)象創(chuàng)建時(shí),就被調(diào)用,用于初始化,而且初始化動(dòng)作只執(zhí)行一次。

一般函數(shù),是對(duì)象創(chuàng)建后,需要調(diào)用才執(zhí)行猜揪,可以被調(diào)用多次。

什么時(shí)候使用構(gòu)造函數(shù)呢?

分析事物時(shí),發(fā)現(xiàn)具體事物一出現(xiàn),就具備了一些特征谈为,那就將這些特征定義到構(gòu)造函數(shù)內(nèi)旅挤。

構(gòu)造代碼塊和構(gòu)造函數(shù)有什么區(qū)別?

構(gòu)造代碼塊:是給所有的對(duì)象進(jìn)行初始化伞鲫,也就是說粘茄,所有的對(duì)象都會(huì)調(diào)用一個(gè)代碼塊,只要對(duì)象一建立秕脓,就會(huì)調(diào)用這個(gè)代碼塊柒瓣。

構(gòu)造函數(shù):是給與之對(duì)應(yīng)的對(duì)象進(jìn)行初始化,它具有針對(duì)性吠架。

“Person p = new Person();”

創(chuàng)建一個(gè)對(duì)象都在內(nèi)存中做了什么事情芙贫?

1:先將硬盤上指定位置的Person.class文件加載進(jìn)內(nèi)存。

2:執(zhí)行main方法時(shí)傍药,在棧內(nèi)存中開辟了main方法的空間(壓棧-進(jìn)棧)磺平,然后在main方法的棧區(qū)分配了一個(gè)變量p。

3:在堆內(nèi)存中開辟一個(gè)實(shí)體空間拐辽,分配了一個(gè)內(nèi)存首地址值拣挪。new

4:在該實(shí)體空間中進(jìn)行屬性的空間分配,并進(jìn)行了默認(rèn)初始化俱诸。

5:對(duì)空間中的屬性進(jìn)行顯示初始化菠劝。

6:進(jìn)行實(shí)體的構(gòu)造代碼塊初始化。

7:調(diào)用該實(shí)體對(duì)應(yīng)的構(gòu)造函數(shù)睁搭,進(jìn)行構(gòu)造函數(shù)初始化赶诊。()

8:將首地址賦值給p ,p變量就引用了該實(shí)體园骆。(指向了該對(duì)象)

--------------------------------------------------------------------------------------------

封 裝(面向?qū)ο筇卣髦唬菏侵鸽[藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié)甫何,僅對(duì)外提供公共訪問方式。

好處:將變化隔離遇伞;便于使用辙喂;提高重用性;安全性。

封裝原則:將不需要對(duì)外提供的內(nèi)容都隱藏起來巍耗,把屬性都隱藏秋麸,提供公共方法對(duì)其訪問。

This:代表對(duì)象炬太,就是所在函數(shù)所屬對(duì)象的引用灸蟆。

this到底代表什么呢?哪個(gè)對(duì)象調(diào)用了this所在的函數(shù)亲族,this就代表哪個(gè)對(duì)象炒考,就是哪個(gè)對(duì)象的引用。

開發(fā)時(shí)霎迫,什么時(shí)候使用this呢斋枢?

在定義功能時(shí),如果該功能內(nèi)部使用到了調(diào)用該功能的對(duì)象知给,這時(shí)就用this來表示這個(gè)對(duì)象瓤帚。

this 還可以用于構(gòu)造函數(shù)間的調(diào)用。

調(diào)用格式:this(實(shí)際參數(shù))涩赢;

this對(duì)象后面跟上 .? 調(diào)用的是成員屬性和成員方法(一般方法)戈次;

this對(duì)象后面跟上 () 調(diào)用的是本類中的對(duì)應(yīng)參數(shù)的構(gòu)造函數(shù)。

注意:用this調(diào)用構(gòu)造函數(shù)筒扒,必須定義在構(gòu)造函數(shù)的第一行怯邪。因?yàn)闃?gòu)造函數(shù)是用于初始化的,所以初始化動(dòng)作一定要執(zhí)行花墩。否則編譯失敗擎颖。

static:★★★ 關(guān)鍵字,是一個(gè)修飾符观游,用于修飾成員(成員變量和成員函數(shù))搂捧。

特點(diǎn):

1,想要實(shí)現(xiàn)對(duì)象中的共性數(shù)據(jù)的對(duì)象共享懂缕,可以將這個(gè)數(shù)據(jù)進(jìn)行靜態(tài)修飾允跑。

2,被靜態(tài)修飾的成員搪柑,可以直接被類名所調(diào)用聋丝。也就是說,靜態(tài)的成員多了一種調(diào)用方式工碾。類名.靜態(tài)方式弱睦。

3,靜態(tài)隨著類的加載而加載渊额,而且優(yōu)先于對(duì)象存在况木。

弊端:

1垒拢,有些數(shù)據(jù)是對(duì)象特有的數(shù)據(jù),是不可以被靜態(tài)修飾的火惊。因?yàn)槟菢拥脑捛罄啵赜袛?shù)據(jù)會(huì)變成對(duì)象的共享數(shù)據(jù)。這樣對(duì)事物的描述就出了問題屹耐。所以尸疆,在定義靜態(tài)時(shí),必須要明確惶岭,這個(gè)數(shù)據(jù)是否是被對(duì)象所共享的寿弱。

2,靜態(tài)方法只能訪問靜態(tài)成員按灶,不可以訪問非靜態(tài)成員症革。

因?yàn)殪o態(tài)方法加載時(shí),優(yōu)先于對(duì)象存在兆衅,所以沒有辦法訪問對(duì)象中的成員。

3嗜浮,靜態(tài)方法中不能使用this羡亩,super關(guān)鍵字。

因?yàn)閠his代表對(duì)象危融,而靜態(tài)在時(shí)畏铆,有可能沒有對(duì)象,所以this無法使用吉殃。

4辞居,主函數(shù)是靜態(tài)的。

什么時(shí)候定義靜態(tài)成員呢蛋勺?或者說:定義成員時(shí)瓦灶,到底需不需要被靜態(tài)修飾呢?

成員分兩種:

1抱完,成員變量贼陶。(數(shù)據(jù)共享時(shí)靜態(tài)化)

該成員變量的數(shù)據(jù)是否是所有對(duì)象都一樣:

如果是,那么該變量需要被靜態(tài)修飾巧娱,因?yàn)槭枪蚕淼臄?shù)據(jù)碉怔。

如果不是,那么就說這是對(duì)象的特有數(shù)據(jù)禁添,要存儲(chǔ)到對(duì)象中撮胧。

2,成員函數(shù)老翘。(方法中沒有調(diào)用特有數(shù)據(jù)時(shí)就定義成靜態(tài))

如果判斷成員函數(shù)是否需要被靜態(tài)修飾呢芹啥?

只要參考锻离,該函數(shù)內(nèi)是否訪問了對(duì)象中的特有數(shù)據(jù):

如果有訪問特有數(shù)據(jù),那方法不能被靜態(tài)修飾叁征。

如果沒有訪問過特有數(shù)據(jù)纳账,那么這個(gè)方法需要被靜態(tài)修飾。

成員變量和靜態(tài)變量的區(qū)別:

1捺疼,成員變量所屬于對(duì)象疏虫,所以也稱為實(shí)例變量。

靜態(tài)變量所屬于類啤呼,所以也稱為類變量卧秘。

2,成員變量存在于堆內(nèi)存中官扣。

靜態(tài)變量存在于方法區(qū)中翅敌。

3,成員變量隨著對(duì)象創(chuàng)建而存在惕蹄,隨著對(duì)象被回收而消失蚯涮。

靜態(tài)變量隨著類的加載而存在,隨著類的消失而消失卖陵。

4遭顶,成員變量只能被對(duì)象所調(diào)用。

靜態(tài)變量可以被對(duì)象調(diào)用泪蔫,也可以被類名調(diào)用棒旗。

所以,成員變量可以稱為對(duì)象的特有數(shù)據(jù)撩荣,靜態(tài)變量稱為對(duì)象的共享數(shù)據(jù)铣揉。

靜態(tài)的注意:靜態(tài)的生命周期很長(zhǎng)。

靜態(tài)代碼塊:就是一個(gè)有靜態(tài)關(guān)鍵字標(biāo)示的一個(gè)代碼塊區(qū)域餐曹,定義在類中逛拱。

作用:可以完成類的初始化,靜態(tài)代碼塊隨著類的加載而執(zhí)行台猴,而且只執(zhí)行一次(new 多個(gè)對(duì)象就只執(zhí)行一次)橘券。如果和主函數(shù)在同一類中,優(yōu)先于主函數(shù)執(zhí)行卿吐。

Public:訪問權(quán)限最大旁舰。

static:不需要對(duì)象,直接類名即可嗡官。

void:主函數(shù)沒有返回值箭窜。

Main:主函數(shù)特定的名稱。

(String[] args):主函數(shù)的參數(shù)衍腥,是一個(gè)字符串?dāng)?shù)組類型的參數(shù)磺樱,jvm調(diào)用main方法時(shí)纳猫,傳遞的實(shí)際參數(shù)是 new String[0]。

jvm默認(rèn)傳遞的是長(zhǎng)度為0的字符串?dāng)?shù)組竹捉,我們?cè)谶\(yùn)行該類時(shí)芜辕,也可以指定具體的參數(shù)進(jìn)行傳遞】椴睿可以在控制臺(tái)侵续,運(yùn)行該類時(shí),在后面加入?yún)?shù)憨闰。參數(shù)之間通過空格隔開状蜗。jvm會(huì)自動(dòng)將這些字符串參數(shù)作為args數(shù)組中的元素,進(jìn)行存儲(chǔ)鹉动。

靜態(tài)代碼塊轧坎、構(gòu)造代碼塊、構(gòu)造函數(shù)同時(shí)存在時(shí)的執(zhí)行順序:靜態(tài)代碼塊 à 構(gòu)造代碼塊 à 構(gòu)造函數(shù)泽示;

生成Java幫助文檔:命令格式:javadoc –d 文件夾名 –auther –version *.java

/**? ? //格式

*類描述

*@author 作者名

*@version 版本號(hào)

*/

/**

*方法描述

*@param? 參數(shù)描述

*@return? 返回值描述

*/

---------------------------------------------------------------------------------------------

設(shè)計(jì)模式:解決問題最行之有效的思想缸血。是一套被反復(fù)使用、多數(shù)人知曉的械筛、經(jīng)過分類編目的捎泻、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼变姨、讓代碼更容易被他人理解族扰、保證代碼可靠性厌丑。

java中有23種設(shè)計(jì)模式:

單例設(shè)計(jì)模式:★★★★★

解決的問題:保證一個(gè)類在內(nèi)存中的對(duì)象唯一性定欧。

比如:多程序讀取一個(gè)配置文件時(shí),建議配置文件封裝成對(duì)象怒竿。會(huì)方便操作其中數(shù)據(jù)砍鸠,又要保證多個(gè)程序讀到的是同一個(gè)配置文件對(duì)象,就需要該配置文件對(duì)象在內(nèi)存中是唯一的耕驰。

Runtime()方法就是單例設(shè)計(jì)模式進(jìn)行設(shè)計(jì)的爷辱。

如何保證對(duì)象唯一性呢?

思想:

1朦肘,不讓其他程序創(chuàng)建該類對(duì)象饭弓。

2,在本類中創(chuàng)建一個(gè)本類對(duì)象媒抠。

3弟断,對(duì)外提供方法,讓其他程序獲取這個(gè)對(duì)象趴生。

步驟:

1阀趴,因?yàn)閯?chuàng)建對(duì)象都需要構(gòu)造函數(shù)初始化昏翰,只要將本類中的構(gòu)造函數(shù)私有化,其他程序就無法再創(chuàng)建該類對(duì)象刘急;

2棚菊,就在類中創(chuàng)建一個(gè)本類的對(duì)象;

3叔汁,定義一個(gè)方法统求,返回該對(duì)象,讓其他程序可以通過方法就得到本類對(duì)象攻柠。(作用:可控)

代碼體現(xiàn):

1球订,私有化構(gòu)造函數(shù);

2瑰钮,創(chuàng)建私有并靜態(tài)的本類對(duì)象冒滩;

3,定義公有并靜態(tài)的方法浪谴,返回該對(duì)象开睡。

---------------------------------------------

//餓漢式

class Single{

private Single(){} //私有化構(gòu)造函數(shù)。

private static Single s = new Single(); //創(chuàng)建私有并靜態(tài)的本類對(duì)象苟耻。

public static Single getInstance(){ //定義公有并靜態(tài)的方法篇恒,返回該對(duì)象。

return s;

}

}

---------------------------------------------

//懶漢式:延遲加載方式凶杖。

class Single2{

private Single2(){}

private static Single2 s = null;

public static Single2 getInstance(){

if(s==null)

s = new Single2();

return s;

}

}

-------------------------------------------------------------------------------------------------

繼 承(面向?qū)ο筇卣髦唬?/p>

好處:

1:提高了代碼的復(fù)用性胁艰。

2:讓類與類之間產(chǎn)生了關(guān)系,提供了另一個(gè)特征多態(tài)的前提智蝠。

父類的由來:其實(shí)是由多個(gè)類不斷向上抽取共性內(nèi)容而來的腾么。

java中對(duì)于繼承,java只支持單繼承杈湾。java雖然不直接支持多繼承解虱,但是保留了這種多繼承機(jī)制,進(jìn)行改良漆撞。

單繼承:一個(gè)類只能有一個(gè)父類殴泰。

多繼承:一個(gè)類可以有多個(gè)父類。

為什么不支持多繼承呢浮驳?

因?yàn)楫?dāng)一個(gè)類同時(shí)繼承兩個(gè)父類時(shí)悍汛,兩個(gè)父類中有相同的功能,那么子類對(duì)象調(diào)用該功能時(shí)至会,運(yùn)行哪一個(gè)呢离咐?因?yàn)楦割愔械姆椒ㄖ写嬖诜椒w。

但是java支持多重繼承奋献。A繼承B? B繼承C? C繼承D健霹。

多重繼承的出現(xiàn)旺上,就有了繼承體系。體系中的頂層父類是通過不斷向上抽取而來的糖埋。它里面定義的該體系最基本最共性內(nèi)容的功能宣吱。

所以,一個(gè)體系要想被使用瞳别,直接查閱該系統(tǒng)中的父類的功能即可知道該體系的基本用法征候。那么想要使用一個(gè)體系時(shí),需要建立對(duì)象祟敛。建議建立最子類對(duì)象疤坝,因?yàn)樽钭宇惒粌H可以使用父類中的功能。還可以使用子類特有的一些功能馆铁。

簡(jiǎn)單說:對(duì)于一個(gè)繼承體系的使用跑揉,查閱頂層父類中的內(nèi)容,創(chuàng)建最底層子類的對(duì)象埠巨。

子父類出現(xiàn)后历谍,類中的成員都有了哪些特點(diǎn):

1:成員變量。

當(dāng)子父類中出現(xiàn)一樣的屬性時(shí)辣垒,子類類型的對(duì)象望侈,調(diào)用該屬性,值是子類的屬性值勋桶。

如果想要調(diào)用父類中的屬性值脱衙,需要使用一個(gè)關(guān)鍵字:super

This:代表是本類類型的對(duì)象引用。

Super:代表是子類所屬的父類中的內(nèi)存空間引用例驹。

注意:子父類中通常是不會(huì)出現(xiàn)同名成員變量的捐韩,因?yàn)楦割愔兄灰x了,子類就不用在定義了眠饮,直接繼承過來用就可以了奥帘。

2:成員函數(shù)铜邮。

當(dāng)子父類中出現(xiàn)了一模一樣的方法時(shí)仪召,建立子類對(duì)象會(huì)運(yùn)行子類中的方法。好像父類中的方法被覆蓋掉一樣松蒜。所以這種情況扔茅,是函數(shù)的另一個(gè)特性:覆蓋(復(fù)寫,重寫)

什么時(shí)候使用覆蓋呢秸苗?當(dāng)一個(gè)類的功能內(nèi)容需要修改時(shí)召娜,可以通過覆蓋來實(shí)現(xiàn)。

3:構(gòu)造函數(shù)惊楼。

發(fā)現(xiàn)子類構(gòu)造函數(shù)運(yùn)行時(shí)玖瘸,先運(yùn)行了父類的構(gòu)造函數(shù)秸讹。為什么呢?

原因:子類的所有構(gòu)造函數(shù)中的第一行,其實(shí)都有一條隱身的語(yǔ)句super();

super(): 表示父類的構(gòu)造函數(shù)雅倒,并會(huì)調(diào)用于參數(shù)相對(duì)應(yīng)的父類中的構(gòu)造函數(shù)璃诀。而super():是在調(diào)用父類中空參數(shù)的構(gòu)造函數(shù)。

為什么子類對(duì)象初始化時(shí)蔑匣,都需要調(diào)用父類中的函數(shù)劣欢?(為什么要在子類構(gòu)造函數(shù)的第一行加入這個(gè)super()?)

因?yàn)樽宇惱^承父類,會(huì)繼承到父類中的數(shù)據(jù)裁良,所以必須要看父類是如何對(duì)自己的數(shù)據(jù)進(jìn)行初始化的凿将。所以子類在進(jìn)行對(duì)象初始化時(shí),先調(diào)用父類的構(gòu)造函數(shù)价脾,這就是子類的實(shí)例化過程牧抵。

注意:子類中所有的構(gòu)造函數(shù)都會(huì)默認(rèn)訪問父類中的空參數(shù)的構(gòu)造函數(shù),因?yàn)槊恳粋€(gè)子類構(gòu)造內(nèi)第一行都有默認(rèn)的語(yǔ)句super();

如果父類中沒有空參數(shù)的構(gòu)造函數(shù)侨把,那么子類的構(gòu)造函數(shù)內(nèi)灭忠,必須通過super語(yǔ)句指定要訪問的父類中的構(gòu)造函數(shù)。

如果子類構(gòu)造函數(shù)中用this來指定調(diào)用子類自己的構(gòu)造函數(shù)座硕,那么被調(diào)用的構(gòu)造函數(shù)也一樣會(huì)訪問父類中的構(gòu)造函數(shù)弛作。

問題:super()和this()是否可以同時(shí)出現(xiàn)的構(gòu)造函數(shù)中。

兩個(gè)語(yǔ)句只能有一個(gè)定義在第一行华匾,所以只能出現(xiàn)其中一個(gè)映琳。

super()或者this():為什么一定要定義在第一行?

因?yàn)閟uper()或者this()都是調(diào)用構(gòu)造函數(shù)蜘拉,構(gòu)造函數(shù)用于初始化萨西,所以初始化的動(dòng)作要先完成。

繼承的細(xì)節(jié):

什么時(shí)候使用繼承呢旭旭?

當(dāng)類與類之間存在著所屬關(guān)系時(shí)谎脯,才具備了繼承的前提。a是b中的一種持寄。a繼承b。狼是犬科中的一種稍味。

英文書中废麻,所屬關(guān)系:" is a "

注意:不要僅僅為了獲取其他類中的已有成員進(jìn)行繼承。

所以判斷所屬關(guān)系模庐,可以簡(jiǎn)單看烛愧,如果繼承后,被繼承的類中的功能,都可以被該子類所具備怜姿,那么繼承成立慎冤。如果不是,不可以繼承沧卢。

細(xì)節(jié)二:

在方法覆蓋時(shí)粪薛,注意兩點(diǎn):

1:子類覆蓋父類時(shí),必須要保證搏恤,子類方法的權(quán)限必須大于等于父類方法權(quán)限可以實(shí)現(xiàn)繼承违寿。否則,編譯失敗熟空。

2:覆蓋時(shí)藤巢,要么都靜態(tài),要么都不靜態(tài)息罗。 (靜態(tài)只能覆蓋靜態(tài)掂咒,或者被靜態(tài)覆蓋)

繼承的一個(gè)弊端:打破了封裝性。對(duì)于一些類迈喉,或者類中功能绍刮,是需要被繼承,或者復(fù)寫的挨摸。

這時(shí)如何解決問題呢孩革?介紹一個(gè)關(guān)鍵字,final:最終得运。

final特點(diǎn):

1:這個(gè)關(guān)鍵字是一個(gè)修飾符膝蜈,可以修飾類,方法熔掺,變量饱搏。

2:被final修飾的類是一個(gè)最終類,不可以被繼承置逻。

3:被final修飾的方法是一個(gè)最終方法推沸,不可以被覆蓋。

4:被final修飾的變量是一個(gè)常量券坞,只能賦值一次鬓催。

其實(shí)這樣的原因的就是給一些固定的數(shù)據(jù)起個(gè)閱讀性較強(qiáng)的名稱。

不加final修飾不是也可以使用嗎报慕?那么這個(gè)值是一個(gè)變量深浮,是可以更改的压怠。加了final眠冈,程序更為嚴(yán)謹(jǐn)。常量名稱定義時(shí),有規(guī)范蜗顽,所有字母都大寫布卡,如果由多個(gè)單詞組成,中間用 _ 連接雇盖。

抽象類: abstract

抽象:不具體忿等,看不明白。抽象類表象體現(xiàn)崔挖。

在不斷抽取過程中贸街,將共性內(nèi)容中的方法聲明抽取,但是方法不一樣狸相,沒有抽取薛匪,這時(shí)抽取到的方法,并不具體脓鹃,需要被指定關(guān)鍵字abstract所標(biāo)示逸尖,聲明為抽象方法。

抽象方法所在類一定要標(biāo)示為抽象類瘸右,也就是說該類需要被abstract關(guān)鍵字所修飾娇跟。

抽象類的特點(diǎn):

1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關(guān)鍵字修飾(可以描述類和方法太颤,不可以描述變量)苞俘。

2:抽象方法只定義方法聲明,并不定義方法實(shí)現(xiàn)龄章。

3:抽象類不可以被創(chuàng)建對(duì)象(實(shí)例化)苗胀。

4:只有通過子類繼承抽象類并覆蓋了抽象類中的所有抽象方法后,該子類才可以實(shí)例化瓦堵。否則基协,該子類還是一個(gè)抽象類。

抽象類的細(xì)節(jié):

1:抽象類中是否有構(gòu)造函數(shù)菇用?有澜驮,用于給子類對(duì)象進(jìn)行初始化。

2:抽象類中是否可以定義非抽象方法惋鸥?

可以杂穷。其實(shí),抽象類和一般類沒有太大的區(qū)別卦绣,都是在描述事物耐量,只不過抽象類在描述事物時(shí),有些功能不具體滤港。所以抽象類和一般類在定義上廊蜒,都是需要定義屬性和行為的趴拧。只不過,比一般類多了一個(gè)抽象函數(shù)山叮。而且比一般類少了一個(gè)創(chuàng)建對(duì)象的部分著榴。

3:抽象關(guān)鍵字abstract和哪些不可以共存?final , private , static

4:抽象類中可不可以不定義抽象方法屁倔?可以脑又。抽象方法目的僅僅為了不讓該類創(chuàng)建對(duì)象。

-----------------------------------------------------------------------------------------------

模板方法設(shè)計(jì)模式:

解決的問題:當(dāng)功能內(nèi)部一部分實(shí)現(xiàn)時(shí)確定锐借,一部分實(shí)現(xiàn)是不確定的问麸。這時(shí)可以把不確定的部分暴露出去,讓子類去實(shí)現(xiàn)钞翔。

abstract class GetTime{

public final void getTime(){ //此功能如果不需要復(fù)寫口叙,可加final限定

long start = System.currentTimeMillis();

code(); //不確定的功能部分,提取出來嗅战,通過抽象方法實(shí)現(xiàn)

long end = System.currentTimeMillis();

System.out.println("毫秒是:"+(end-start));

}

public abstract void code(); //抽象不確定的功能妄田,讓子類復(fù)寫實(shí)現(xiàn)

}

class SubDemo extends GetTime{

public void code(){ //子類復(fù)寫功能方法

for(int y=0; y<1000; y++){

System.out.println("y");

}

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市驮捍,隨后出現(xiàn)的幾起案子疟呐,更是在濱河造成了極大的恐慌,老刑警劉巖东且,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件启具,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡珊泳,警方通過查閱死者的電腦和手機(jī)鲁冯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來色查,“玉大人薯演,你說我怎么就攤上這事⊙砹耍” “怎么了跨扮?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)验毡。 經(jīng)常有香客問我衡创,道長(zhǎng),這世上最難降的妖魔是什么晶通? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任璃氢,我火速辦了婚禮,結(jié)果婚禮上狮辽,老公的妹妹穿的比我還像新娘一也。我一直安慰自己巢寡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布塘秦。 她就那樣靜靜地躺著讼渊,像睡著了一般动看。 火紅的嫁衣襯著肌膚如雪尊剔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天菱皆,我揣著相機(jī)與錄音须误,去河邊找鬼。 笑死仇轻,一個(gè)胖子當(dāng)著我的面吹牛京痢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播篷店,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼祭椰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了疲陕?” 一聲冷哼從身側(cè)響起方淤,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蹄殃,沒想到半個(gè)月后携茂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诅岩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年讳苦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吩谦。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸳谜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出式廷,到底是詐尸還是另有隱情卿堂,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布懒棉,位于F島的核電站草描,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏策严。R本人自食惡果不足惜穗慕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妻导。 院中可真熱鬧逛绵,春花似錦怀各、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至胰苏,卻和暖如春硕蛹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硕并。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工法焰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人倔毙。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓埃仪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親陕赃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卵蛉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一:java概述:1,JDK:Java Development Kit么库,java的開發(fā)和運(yùn)行環(huán)境傻丝,java的開發(fā)工...
    ZaneInTheSun閱讀 2,629評(píng)論 0 11
  • 寫代碼: 1,明確需求廊散。我要做什么桑滩? 2,分析思路允睹。我要怎么做运准?1,2,3。 3缭受,確定步驟胁澳。每一個(gè)思路部分用到哪些...
    橫沖直撞666閱讀 349評(píng)論 0 0
  • 寫代碼: 1,明確需求米者。我要做什么韭畸? 2,分析思路蔓搞。我要怎么做胰丁?1,2,3。 3喂分,確定步驟锦庸。每一個(gè)思路部分用到哪些...
    雨塵1閱讀 293評(píng)論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法蒲祈,內(nèi)部類的語(yǔ)法甘萧,繼承相關(guān)的語(yǔ)法萝嘁,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,581評(píng)論 18 399
  • 1扬卷、一個(gè)".java"源文件中是否可以包括多個(gè)類(不是內(nèi)部類)牙言?有什么限制?答:可以有多個(gè)類怪得,但只能有一個(gè)publ...
    岳小川閱讀 908評(píng)論 0 2