




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1. 靜態(tài)變量和實(shí)例變量的區(qū)別局部變量不能用靜態(tài)的,如果用了靜態(tài)的,則不會(huì)從靜態(tài)區(qū)消失* 靜態(tài)變量也叫類變量 成員變量也叫對(duì)象變量* A:所屬不同* 靜態(tài)變量屬于類,所以也稱為為類變量* 成員變量屬于對(duì)象,所以也稱為實(shí)例變量(對(duì)象變量)* B:內(nèi)存中位置不同* 靜態(tài)變量存儲(chǔ)于方法區(qū)的靜態(tài)區(qū)* 成員變量存儲(chǔ)于堆內(nèi)存* C:內(nèi)存出現(xiàn)時(shí)間不同* 靜態(tài)變量隨著類的加載而加載,隨著類的消失而消失* 成員變量隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的消失而消失* D:調(diào)用不同* 靜態(tài)變量可以通過類名調(diào)用,也可以通過對(duì)象調(diào)用* 成員變量只能通過對(duì) 象名調(diào)用2. Interger和int的區(qū)別int是java提供的8種
2、原始數(shù)據(jù)類型之一。Java為每個(gè)原始類型提供了封裝類,Integer是java為int提供的封裝類。int的默認(rèn)值為0,而Integer的默認(rèn)值為null,即Integer可以區(qū)分出未賦值和值為0的區(qū)別,int則無法表達(dá)出未賦值的情況, 另外,Integer提供了多個(gè)與整數(shù)相關(guān)的操作方法,例如,將一個(gè)字符串轉(zhuǎn)換成整數(shù),Integer中還定義了表示整數(shù)的最大值和最小值的常量。3. 談?wù)勀銓?duì)面向?qū)ο蟮睦斫馊绾未笙笱b進(jìn)冰箱?面向過程:為了把大象裝進(jìn)冰箱,需要3個(gè)過程。1) 把冰箱門打開(得到打開門的冰箱)2) 把大象裝進(jìn)去(打開門后,得到里面裝著大象的冰箱)3) 把冰箱門關(guān)上(打開門、裝好大象后,獲
3、得關(guān)好門的冰箱)每個(gè)過程有一個(gè)階段性的目標(biāo),依次完成這些過程,就能把大象裝進(jìn)冰箱。1:冰箱開門(冰箱)冰箱裝進(jìn)(冰箱, 大象)冰箱關(guān)門(冰箱)=換個(gè)寫法(冰箱開門 冰箱)(冰箱裝進(jìn) 冰箱 大象)(冰箱關(guān)門 冰箱)2:冰箱關(guān)門(冰箱裝進(jìn)(冰箱開門(冰箱), 大象)=換個(gè)寫法(冰箱關(guān)門 (冰箱裝進(jìn) (冰箱開門 冰箱) 大象)面向?qū)ο螅好總€(gè)動(dòng)作有一個(gè)執(zhí)行者,它就是對(duì)象。1) 冰箱,你給我把門打開2) 冰箱,你給我把大象裝進(jìn)去(或者說,大象,你給我鉆到冰箱里去)3) 冰箱,你給我把門關(guān)上依次做這些動(dòng)作,就能把大象裝進(jìn)冰箱。1:冰箱.開門()冰箱.裝進(jìn)(大象)冰箱.關(guān)門()2:冰箱.開門().裝進(jìn)(大象
4、).關(guān)門()4. 談?wù)劽嫦驅(qū)ο蟮娜齻€(gè)特征,分別是什么? 各特征有什么優(yōu)缺點(diǎn)?(封裝 繼承 多態(tài))封 裝(:是指隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問方式。好處:將變化隔離;便于使用;提高重用性;安全性。繼 承好處:1:提高了代碼的復(fù)用性。2:讓類與類之間產(chǎn)生了關(guān)系,提供了另一個(gè)特征多態(tài)的前提。多 態(tài):函數(shù)本身就具備多態(tài)性,某一種事物有不同的具體的體現(xiàn)。體現(xiàn):父類引用或者接口的引用指向了自己的子類對(duì)象。/Animal a = new Cat();多態(tài)的好處:提高了程序的擴(kuò)展性。多態(tài)的弊端:當(dāng)父類引用指向子類對(duì)象時(shí),雖然提高了擴(kuò)展性,但是只能訪問父類中具備的方法,不可以訪問子類中特有的方法。
5、我理解的多態(tài)與繼承體系有關(guān),與方法覆蓋有關(guān),與方法重載無關(guān)。5. 重寫和重載的區(qū)別?1、重寫override概念(掌握) 子父類關(guān)系中,子類中存在與父類中方法聲明完全一樣的方法叫重寫 一句話:除了方法體以外其他都相同,但是子類修飾符權(quán)限要大于等于父類2、重載overload概念(掌握) 一個(gè)類中或者子父類關(guān)系中存在多個(gè)同名方法,并且參數(shù)列表不同的方法 叫重載 子父類關(guān)系中:子類中的方法和父類中的方法構(gòu)成了重載關(guān)系3、重寫的作用應(yīng)用(理解) 升級(jí)改造父類的方法4、注意(掌握) 只有方法才存在重寫,變量不存在6. 構(gòu)造方法的特點(diǎn)?* A:構(gòu)造方法概述和作用* 給對(duì)象的數(shù)據(jù)(屬性)進(jìn)行初始化* B:
6、構(gòu)造方法格式特點(diǎn)* a:方法名與類名相同(大小也要與類名一致)* b:沒有返回值類型,連void都沒有* c:沒有具體的返回值return;(有return 語句 return;)當(dāng)創(chuàng)建對(duì)象的時(shí)候,系統(tǒng)就調(diào)用了構(gòu)造方法; 構(gòu)造方法不能用對(duì)象調(diào)用7. Static關(guān)鍵字有什么特點(diǎn),靜態(tài)方法是否可以加this和super?為什么1、概述 1、static 可以修飾成員變量和成員方法 2、被static修飾的成員有一個(gè)最大的特點(diǎn),就是可以被該類下所有的對(duì)象共享2、什么時(shí)候用 多個(gè)對(duì)象共享某一數(shù)據(jù)的時(shí)候,我們就把這個(gè)數(shù)據(jù)用static修飾.舉例:小雞吃食3、特點(diǎn)(掌握) 1、被static修飾的內(nèi)容隨
7、著類的加載而加載,優(yōu)先于對(duì)象存在 2、可以直接通過類名調(diào)用 3、被該類下所有對(duì)象共享4、注意事項(xiàng) 1、在靜態(tài)方法中是沒有this關(guān)鍵字,因?yàn)殪o態(tài)是隨著類的加載而加載。而this是對(duì)象創(chuàng)建才存在的 2、靜態(tài)方法只能訪問靜態(tài)成員變量和靜態(tài)成員方法 一句話 靜態(tài)只 能訪問靜態(tài) 3、靜態(tài)內(nèi)容可以通過對(duì)象調(diào)用,也可以通過類名調(diào)用。推薦使用類名調(diào)用8. 多態(tài)的特點(diǎn)(包括多態(tài)中調(diào)用成員的特點(diǎn))1、概念-什么是多態(tài)(掌握) 對(duì)象在不同時(shí)刻表現(xiàn)出來的不同狀態(tài)。2、針對(duì)引用類型的理解 編譯期間狀態(tài)和運(yùn)行期間狀態(tài)不一樣 比如 Person p = new Person();/第一行 p = new Man();/第
8、二行 p = new Woman();/第三行 p在第一行和第二行的狀態(tài)是不一樣的,在第一行表示人對(duì)象,在第二行表示學(xué)生對(duì)象3、舉例 水(水,冰,水蒸氣) 狗:狗是狗,狗是動(dòng)物,狗是寵物,狗是食物/該處強(qiáng)調(diào)誰是誰的一種4、前提條件(掌握) A:要有繼承關(guān)系或?qū)崿F(xiàn)關(guān)系 B:要有方法重寫或?qū)崿F(xiàn)關(guān)系 C:要有父類引用指向子類對(duì)象,或父接口引用指向子類對(duì)象 1、成員變量 編譯看左邊,運(yùn)行看左邊。/就是因?yàn)樽兞坎淮嬖谥貙?掌握) Fu fu = new Zi(); System.out.println();/調(diào)用的是父類的name屬性 2、非靜態(tài)成員方法 編譯看左邊,運(yùn)行看右邊。/因?yàn)榉椒?/p>
9、存在重寫(掌握) Fu fu = new Zi(); fu.show();/調(diào)用的是子類的show() 3、產(chǎn)生以上現(xiàn)象的原因(掌握) 因?yàn)榉椒ㄓ兄貙懀兞繘]有 總結(jié)一句話:方法運(yùn)行看右邊* 成員變量* 編譯看左邊(父類),運(yùn)行看左邊(父類)。* 成員方法* 編譯看左邊(父類),運(yùn)行看右邊(子類)。* 靜態(tài)方法* 編譯看左邊(父類),運(yùn)行看左邊(父類)。* (靜態(tài)和類相關(guān),算不上重寫,所以,訪問還是左邊的)* 只有非靜態(tài)的成員方法,編譯看左邊,運(yùn)行看右邊 9. 抽象類和接口的區(qū)別?抽象類和接口的關(guān)系(掌握)抽象類: 成員變量:可以是變量,也可以是常量。 構(gòu)造方法:有構(gòu)造方法。 成員方法:可以是
10、抽象方法,也可以是非抽象方法。接口: 成員變量:只能是常量。 默認(rèn)修飾符:public static final 成員方法:只能是抽象方法。 默認(rèn)修飾符:public abstractA:抽象類只能被單繼承;接口可以被多實(shí)現(xiàn)。B:抽象類中的成員:成員變量:可以是常量,也可以是變量。成員方法:可以是抽象的,也可以是非抽象的。構(gòu)造方法:雖然不可以創(chuàng)建對(duì)象,但是可以給子類實(shí)例化用。接口中的成員:成員變量:只能是常量。默認(rèn)修飾符 public static final成員方法:只能是抽象的。默認(rèn)修飾符 public abstractC:抽象類中定義的是體系結(jié)構(gòu)中的共性的內(nèi)容。接口中定義的是對(duì)象的擴(kuò)展功
11、能。D:抽象類被繼承表示的是:"is a"的關(guān)系。xx是yy中的一種。接口被實(shí)現(xiàn)表示的是: "like a"的關(guān)系。xx像yy中的一種。10. 抽象類中能是否可以有構(gòu)造方法?構(gòu)造方法 有構(gòu)造方法,但是不能通過構(gòu)造方法創(chuàng)建對(duì)象問:既然不能被實(shí)例化,那么有構(gòu)造方法有什么用?答:可以用于子類訪問父類數(shù)據(jù)前,對(duì)父類數(shù)據(jù)進(jìn)行初始化。11. 接口中是否可以有構(gòu)造方法?沒有構(gòu)造方法因?yàn)榻涌谥械某蓡T變量都被final修飾,定義的時(shí)候必須做初始化任何類如果沒有繼承父類,那么這個(gè)類就繼承自O(shè)bject類。/所有類都直接或者間接的繼承自O(shè)bject類。Object類是所有類的
12、超類12. 接口是否可繼承接口? 類與類:繼承關(guān)系,只能單繼承,可以多層繼承。類與接口:實(shí)現(xiàn)關(guān)系,可以單實(shí)現(xiàn),也可以多實(shí)現(xiàn)。并且還可以在繼承一個(gè)類的同時(shí)實(shí)現(xiàn)多個(gè)接口。接口與接口:繼承關(guān)系,可以單繼承,也可以多繼承。13. 抽象類是否可實(shí)現(xiàn)(implements)接口? 可以14. 抽象類是否可繼承具體類(concrete class)? 可以class Toolabstract class List extends Tool 15. 抽象類中是否可以有靜態(tài)的main方法?可以public static void main(Strirng args)只抽取了很多類的方法的聲明,為了保證不出問題,
13、方法聲明用abstract修飾。(掌握)16. 抽象類的特點(diǎn)(掌握)(演講內(nèi)容)A:一個(gè)類如果有了抽象方法,那么這個(gè)類必須是抽象類。抽象類里邊可以沒有抽象方法。B:抽象類是不能夠被實(shí)例化的。不能夠創(chuàng)建對(duì)象的。C:如果一個(gè)類繼承抽象類,那么,它要么實(shí)現(xiàn)抽象類中的所有抽象方法,要么本身也是抽象類。17. 抽象類的成員特點(diǎn):(掌握)A:成員變量:子類可以直接繼承抽象類中的成員變量。(抽象類中的成員變量可以和以前是一樣的)B:成員方法:抽象類中分為兩種方法,一種是抽象方法,這種方法在子類中必須要被實(shí)現(xiàn)。C:構(gòu)造方法:抽象類不能被實(shí)例化,那么它有構(gòu)造方法嗎?抽象類是class,那么它就有構(gòu)造方法。它的構(gòu)
14、造方法有用嗎?有,為了讓子類實(shí)例化的時(shí)候使用。18. 抽象類的相關(guān)問題:A:抽象類中是否有構(gòu)造函數(shù)?B:抽象關(guān)鍵字abstract不可以和哪些關(guān)鍵字共存?private私有的,外部直接無法訪問。static那么這個(gè)時(shí)候抽象方法就可以可以通過類名調(diào)用,但是這樣是沒有意義的。finalfinal修飾的方法不能被重寫。所以它和abstract沖突。C:抽象類中可不可以沒有抽象方法?可以。防止其他類創(chuàng)建該類對(duì)象。19. 接口特點(diǎn):(掌握,演講面試題)A:接口是對(duì)外暴露的規(guī)則B:接口是功能的擴(kuò)展C:接口降低了程序的耦合性。*內(nèi)聚(自己實(shí)現(xiàn)功能的能力) *高內(nèi)聚,低耦合。舉例:主板和CPU,USB接口,電
15、源插座。D:擴(kuò)展說了下接口的理解*狹義的理解就是java中的接口。*廣義的理解就是:任何定義的規(guī)范都是接口。20. 什么叫匿名對(duì)象* A:什么是匿名對(duì)象* 沒有名字的對(duì)象 * B:匿名對(duì)象應(yīng)用場(chǎng)景調(diào)用方法,僅僅只調(diào)用一次的時(shí)候。匿名對(duì)象可以作為實(shí)際參數(shù)傳遞那么,這種匿名調(diào)用有什么好處嗎?* 節(jié)省代碼;匿名對(duì)象調(diào)用完畢就是垃圾。可以被垃圾回收器回收。21. 匿名內(nèi)部類和匿名對(duì)象的區(qū)別(理解)不同點(diǎn)匿名內(nèi)部類是一個(gè)繼承了類或者實(shí)現(xiàn)了接口的子類對(duì)象匿名對(duì)象就是這個(gè)類的本類對(duì)象相同點(diǎn)都作為實(shí)際參數(shù)傳遞時(shí)使用,或者該對(duì)象的方法只調(diào)用 1次的時(shí)候使用.注意:一般情況匿名對(duì)象或者匿名內(nèi)部類對(duì)象里面最多有3個(gè)
16、方法無論是匿名內(nèi)部類還是匿名對(duì)象,一般使用方式1、只調(diào)用該類中的一個(gè)方法,這種情況一般該抽象類或者該接口只有一個(gè)抽象方法時(shí)使用2、作為實(shí)際參數(shù)傳遞(一般該匿名對(duì)象或匿名內(nèi)部類中的方法不超過3個(gè))22. 什么是內(nèi)部類?B類如果要直接使用A類中的 所有(包括私有 ) 成員的時(shí)候就把B類定義到A類里面內(nèi)部類訪問特點(diǎn)* a:內(nèi)部類可以直接訪問外部類的成員,包括私有。* b:外部類要訪問內(nèi)部類的成員,必須創(chuàng)建對(duì)象。* 外部類名.內(nèi)部類名 對(duì)象名 = 外部類對(duì)象.內(nèi)部類對(duì)象;靜態(tài)的:外部類名.內(nèi)部類名 對(duì)象名 = 外部類對(duì)象.內(nèi)部類;23. 介紹一下匿名內(nèi)部類?概念:沒有名字的局部?jī)?nèi)部類 (掌握)前提:必
17、須存在一個(gè)類,抽象類或者接口(掌握) 格式: (掌握) new 類名或接口名() /重寫類或者接口中的方法 /也可自定義方法 ; 本質(zhì):其實(shí)就是繼承了一個(gè)類或者實(shí)現(xiàn)了一個(gè)接口的匿名的子類對(duì)象(掌握) 24. 匿名內(nèi)部類中的方法是否可以調(diào)用局部變量?為什么?局部?jī)?nèi)部類在訪問他所在方法中的局部變量必須用final修飾,為什么?因?yàn)楫?dāng)調(diào)用這個(gè)方法時(shí),局部變量如果沒有用final修飾,他的生命周期和方法的生命周期是一樣的,當(dāng)方法彈棧,這個(gè)局部變量也會(huì)消失,那么如果局部?jī)?nèi)部類對(duì)象還沒有馬上消失想用這個(gè)局部變量,就沒有了,如果用final修飾會(huì)在類加載的時(shí)候進(jìn)入常量池,即使方法彈棧,常量池的常量還在,也可
18、以繼續(xù)使用25. 介紹一下異常?異常就是Java程序在運(yùn)行過程中出現(xiàn)的錯(cuò)誤Throwable |Error 嚴(yán)重的錯(cuò)誤,比如硬件壞了 |Exception |RuntimeException 運(yùn)行時(shí)異常,不需要處理,需要改代碼 |非RuntimeException 編譯時(shí)異常,需要處理26. Throw和throws的區(qū)別?有幾種方式處理?A:throw用法:用在方法內(nèi)部,后面跟的是異常對(duì)象。區(qū)別:用 throw拋出了編譯時(shí)期異常,方法上面必須用 throws拋出。 用throw拋出了運(yùn)行時(shí)期異常,方法上面可以不用 throws拋出。B:throws用法:用在方法聲明上,后面跟的是異常類名。區(qū)
19、別:用 throws在方法上聲明了異常,內(nèi)部可以沒有 throw* a:throws* 用在方法聲明后面,跟的是異常類名* 可以跟多個(gè)異常類名,用逗號(hào)隔開* 表示拋出異常,由該方法的調(diào)用者來處理* b:throw* 用在方法體內(nèi),跟的是異常對(duì)象名* 只能拋出一個(gè)異常對(duì)象名* 表示拋出異常,由方法體內(nèi)的語句處理27. 談一下set和list的區(qū)別set集合元素存入取出有序,元素可以重復(fù)list集合元素存入取出無序,元素唯一28. String類的特點(diǎn)?與Stringbuffer有什么區(qū)別?特點(diǎn)及注意事項(xiàng) 字符串一旦被賦值,就不能改變。 注意:字符串的值不能改變,引用是可以改變的。String是一
20、個(gè)不可變的字符序列StringBuffer,StringBuilder是可變的字符序列29. 說一說list得三個(gè)子類?以及l(fā)ist的遍歷方式有幾種?list ArrayList:底層是數(shù)組,線程不安全,不同步;查詢快,增刪慢LinkedList:底層是鏈表,線程不安全,不同步;增刪快,查詢慢Vector:底層是數(shù)組,線程安全;普通for循環(huán)迭代器遍歷 Listiterator增強(qiáng)for循環(huán)30. 說一說set集合是怎么樣保持唯一性的?1.HashSet原理* 我們使用Set集合都是需要去掉重復(fù)元素的, 如果在存儲(chǔ)的時(shí)候逐個(gè)equals()比較, 效率較低,哈希算法提高了去重復(fù)的效率, 降低了
21、使用equals()方法的次數(shù)* 當(dāng)HashSet調(diào)用add()方法存儲(chǔ)對(duì)象的時(shí)候, 先調(diào)用對(duì)象的hashCode()方法得到一個(gè)哈希值, 然后在集合中查找是否有哈希值相同的對(duì)象* 如果沒有哈希值相同的對(duì)象就直接存入集合* 如果有哈希值相同的對(duì)象, 就和哈希值相同的對(duì)象逐個(gè)進(jìn)行equals()比較,比較結(jié)果為false就存入, true則不存2.將自定義類的對(duì)象存入HashSet去重復(fù)* 類中必須重寫hashCode()和equals()方法* hashCode(): 屬性相同的對(duì)象返回值必須相同, 屬性不同的返回值盡量不同(提高效率)* equals(): 屬性相同返回true, 屬性不同返
22、回false,返回false的時(shí)候存儲(chǔ)31. 說一下Map?HashTable和HashMap的區(qū)別* HashMap和Hashtable的區(qū)別 都是雙列集合 都是Hash算法實(shí)現(xiàn)的* Hashtable是JDK1.0版本出現(xiàn)的,是線程安全的,效率低, HashMap是JDK1.2版本出現(xiàn)的,是線程不安全的,效率高* Hashtable不可以存儲(chǔ)null鍵和null值, HashMap可以存儲(chǔ)null鍵和null值32. 說一說集合體系?只有Vector和HashTable是線程安全的,效率低Collection(單列集合)|-Collection(單列) |-List(有序,可重復(fù)) |-A
23、rrayList 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。 線程不安全,效率高。 |-Vector 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。 線程安全,效率低。 |-LinkedList 底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快。 線程不安全,效率高。 |-Set(可能無序,肯定唯一) |-HashSet 底層數(shù)據(jù)結(jié)構(gòu)是哈希表。 線程不安全,效率高。怎么保證唯一性的呢? 它依賴兩個(gè)方法:hashCode()和equals() 順序:首先判斷hashCode()值是否相同。同:繼續(xù)走equals(),看返回值;如果true:就不添加到集合。如果false:就添加到集合。不同:就添加到集合。 |-TreeSet
24、 底層數(shù)據(jù)結(jié)構(gòu)是二叉樹。 線程不安全,效率高。 怎么保證唯一性的呢?是根據(jù)返回是否是0。 怎么保證排序的呢?兩種方式 自然排序(元素具備比較性) 實(shí)現(xiàn)Comparable接口 比較器排序(集合具備比較性) 實(shí)現(xiàn)Comparator接口Map(雙列集合)|-Map(雙列 底層結(jié)構(gòu)是針對(duì)鍵有效,跟值無關(guān)) |-HashMap 底層數(shù)據(jù)結(jié)構(gòu)是哈希表。 線程不安全,效率高。允許null鍵和值 怎么保證唯一性的呢? 它依賴兩個(gè)方法:hashCode()和equals() 順序: 首先判斷hashCode()值是否相同。 同:繼續(xù)走equals(),看返回值 如果true:就不添加到集合。 如果false
25、:就添加到集合。 不同:就添加到集合。 |-Hashtable 底層數(shù)據(jù)結(jié)構(gòu)是哈希表。 線程安全,效率低。不允許null鍵和值 怎么保證唯一性的呢? 它依賴兩個(gè)方法:hashCode()和equals() 順序: 首先判斷hashCode()值是否相同。 同:繼續(xù)走equals(),看返回值 如果true:就不添加到集合。 如果false:就添加到集合。 不同:就添加到集合。 |-TreeMap 底層數(shù)據(jù)結(jié)構(gòu)是二叉樹。 線程不安全,效率高。 怎么保證唯一性的呢?是根據(jù)返回是否是0。 怎么保證排序的呢?兩種方式 自然排序(元素具備比較性) 實(shí)現(xiàn)Comparable接口 比較器排序(集合具備比較性
26、) 實(shí)現(xiàn)Comparator接口33. Map集合的遍歷方式?創(chuàng)建Map集合/ 創(chuàng)建集合對(duì)象 Map<String, String> map = new HashMap<String, String>(); / 創(chuàng)建并添加元素 map.put("楊過", "小龍女"); map.put("郭靖", "黃蓉"); map.put("梁山伯", "祝英臺(tái)"); map.put("牛郎", "織女");第一種遍歷方式(
27、通過keySet() Set<String> keySet = map.keySet(); for(String key : keySet) System.out.println("key:"+key+" value"+map.get(key); 第二種遍歷方式(通過entrySet() Set<Entry<String,String>> entrySet = map.entrySet(); for(Map.Entry<String, String> entry : entrySet) System.out
28、.println("key"+entry.getKey()+" value"+entry.getValue(); 34. 集合怎么添加一個(gè)元素和一個(gè)集合?Collection集合:add() 添加一個(gè)元素addAll();添加一個(gè)集合中的所有元素Map集合:put(key,value):當(dāng)存儲(chǔ)的鍵相同時(shí),新的值會(huì)替換老的值,并將老值返回。如果鍵沒有重復(fù),返回nullvoid putAll(Map)35. Io流體系?36. 新建BufferedWriter InputStream對(duì)象的時(shí)候, 參數(shù)列表傳遞什么內(nèi)容?37. 什么情況下用flush()? f
29、lush只刷新緩沖區(qū),不釋放流資源,流對(duì)象還可以繼續(xù)使用 close刷新并且釋放流資源,流對(duì)象不可以繼續(xù)使用38. mp3文件的復(fù)制用的是什么流?復(fù)制文件的步驟?39. 哪個(gè)流有readLine()newLine()40. 什么是序列化流以及特點(diǎn)?41. 高效流是怎么實(shí)現(xiàn)高效的?42. 與流關(guān)系密切的集合?43. 談?wù)凱roperties集合?property集合是用來做什么的?44. 多線程有哪幾種方式?具體?45. 什么是進(jìn)程?什么是線程?46. 說一說線程的生命周期?47. 說一說線程通信?為什么會(huì)出現(xiàn)線程不安全?48. Sleep()和wait()的區(qū)別?Start()和run()的區(qū)
30、別?49. 介紹一下同步?* 1.什么情況下需要同步* 當(dāng)多線程并發(fā), 有多段代碼同時(shí)執(zhí)行時(shí), 我們希望某一段代碼執(zhí)行的過程中CPU不要切換到其他線程工作. 這時(shí)就需要同步.* 如果兩段代碼是同步的, 那么同一時(shí)間只能執(zhí)行一段, 在一段代碼沒執(zhí)行結(jié)束之前, 不會(huì)執(zhí)行另外一段代碼. 多個(gè)線程必須使用同一個(gè)鎖對(duì)象,要不然鎖無效* 2.同步代碼塊* 使用synchronized關(guān)鍵字加上一個(gè)鎖對(duì)象來定義一段代碼, 這就叫同步代碼塊* 多個(gè)同步代碼塊如果使用相同的鎖對(duì)象, 那么他們就是同步的 /非靜態(tài)的同步方法的鎖對(duì)象是神馬? /答:非靜態(tài)的同步方法的鎖對(duì)象是this /靜態(tài)的同步方法的鎖對(duì)象是什么?
31、 /是該類的字節(jié)碼對(duì)象 50. TCP和UDP的特點(diǎn)UDP 1.不需要建立連接; 2.有數(shù)據(jù)大小限制,每個(gè)數(shù)據(jù)報(bào)的大小在限制在64k; 3.無連接,是不可靠協(xié)議; 4.速度快。TCP 1.在連接中進(jìn)行大數(shù)據(jù)量傳輸(數(shù)據(jù)無限制); 2.通過三次握手完成連接; 3.是可靠協(xié)議; 4.必須建立連接,效率會(huì)稍低。51. 網(wǎng)絡(luò)通訊三要素?端口:每個(gè)程序分配一個(gè)端口號(hào)ip:給每一個(gè)設(shè)備分配地址協(xié)議:定義的規(guī)則52. 理解JDK,JRE,JVM都是做什么的?JDK是Java Develop Kit,Java的開發(fā)工具包 (JRE+JAVA開發(fā)工具)JRE(Java Runtime Environment,J
32、ava運(yùn)行環(huán)境),運(yùn)行JAVA程序所必須的環(huán)境的集合,包含JVM標(biāo)準(zhǔn)實(shí)現(xiàn)及Java核心類庫。JVM是Java虛擬機(jī)JDK>JRE>JVM53. & 和&&邏輯與:a&b是把a(bǔ)和b都轉(zhuǎn)換成二進(jìn)制數(shù)然后再進(jìn)行與的運(yùn)算;&對(duì)每一個(gè)都判斷;有false則false短路與:a&&b就是當(dāng)且僅當(dāng)兩個(gè)操作數(shù)均為true時(shí),其結(jié)果才為true;只要有一個(gè)為零,a&&b就為零。&&具有短路效果,左邊是false,右邊不執(zhí)行54. | 和 | 邏輯或:有true則true短路或:|:如果左邊為true,右邊不執(zhí)行5
33、5. switch語句能否作用在byte上,能否作用在long上,能否作用在String上?基本數(shù)據(jù)類型可以接收byte,short,char,int引用數(shù)據(jù)類型可以接收枚舉(JDK1.5),String字符串(JDK1.7)56. continue和break兩個(gè)關(guān)鍵字的區(qū)別?break:結(jié)束當(dāng)前循環(huán),循環(huán)不再繼續(xù)continue:結(jié)束本次循環(huán),循環(huán)進(jìn)入下一次開發(fā)過程中如果要使用break或者continue,一般在前面我們都要加一個(gè)判斷break 和continue后面不能寫語句,一般配合if語句使用57. 函數(shù)的重載(overload)是什么?如何判斷兩個(gè)函數(shù)重載?在同一個(gè)類中,函數(shù)名相
34、同,參數(shù)列表不同(參數(shù)類型和個(gè)數(shù)),與返回值類型無關(guān)58. char型變量中能不能存貯一個(gè)中文漢字?為什么? 一個(gè)字符占幾個(gè)字節(jié)?(面試題)可以。因?yàn)镴ava語言采用的是Unicode編碼。Unicode編碼中的每個(gè)字符占用兩個(gè)字節(jié)。中文也是占的兩個(gè)字節(jié)所以,Java中的字符可以存儲(chǔ)一個(gè)中文漢字中文在gbk編碼中占2個(gè)字節(jié);中文在utf-8編碼中占3個(gè)字節(jié);59. 面向?qū)ο笏枷耄浚ɡ斫猓〢、什么是面向?qū)ο?3點(diǎn))1、面向過程是以函數(shù)為基礎(chǔ),完成各種操作,強(qiáng)調(diào)的是過程,比如C語言2、面向?qū)ο笠詫?duì)象為基礎(chǔ),完成各種操作,強(qiáng)調(diào)的是對(duì)象和結(jié)果3、面向?qū)ο笫腔诿嫦蜻^程的B、面向?qū)ο蟮乃枷胩攸c(diǎn)1、是一種
35、更符合人們思考習(xí)慣的思想2、復(fù)雜的事情簡(jiǎn)單化3、把我們從執(zhí)行者變成了指揮者C、舉例1、買電腦2、洗衣做飯3、旅游4、把大象裝進(jìn)冰箱(偽代碼體現(xiàn))5、買蛋糕60. 思考下面的問題Person p = new Person(); (掌握,面試題)它在內(nèi)存中做了哪些事情?(演講內(nèi)容)A:將Person.class文件加載到內(nèi)存中。B:在堆內(nèi)存中創(chuàng)建一個(gè)對(duì)象Person。C:把Person中的屬性進(jìn)行默認(rèn)初始化。D:把Person中的屬性進(jìn)行顯示初始化。E:調(diào)用構(gòu)造代碼塊(如果沒有,不執(zhí)行這個(gè)操作)。F:調(diào)用構(gòu)造函數(shù)進(jìn)行初始化。G:在棧內(nèi)存中聲明Person類型的變量P。H:把堆內(nèi)存的地址(引用)賦給
36、了棧內(nèi)存中P。61. 描述一下JVM加載class文件的原理機(jī)制?(面試題) 答案: JVM中類的裝載是由ClassLoader和它的子類來實(shí)現(xiàn)的,Java ClassLoader 是一個(gè)重要的Java運(yùn)行時(shí)系統(tǒng)組件。它負(fù)責(zé)在運(yùn)行時(shí)查找和裝入類文件的類。62. static關(guān)鍵字、靜態(tài)的含義?(理解)1、static 可以修飾成員變量和成員方法2、被static修飾的成員有一個(gè)最大的特點(diǎn),就是可以被該類下所有的對(duì)象共享3、隨著類的加載而加載4、優(yōu)先于對(duì)象存在5、可以通過類名調(diào)用63. 靜態(tài)的用法和特點(diǎn)?(掌握)* a:隨著類的加載而加載* b:優(yōu)先于對(duì)象存在* c:被類的所有對(duì)象共享* 舉例:
37、咱們班級(jí)的學(xué)生應(yīng)該共用同一個(gè)班級(jí)編號(hào)。* 其實(shí)這個(gè)特點(diǎn)也是在告訴我們什么時(shí)候使用靜態(tài)?* 如果某個(gè)成員變量是被所有對(duì)象共享的,那么它就應(yīng)該定義為靜態(tài)的。* d:可以通過類名調(diào)用* 其實(shí)它本身也可以通過對(duì)象名調(diào)用。* 推薦使用類名調(diào)用。* 靜態(tài)修飾的內(nèi)容一般我們稱其為:與類相關(guān)的,類成員64. 16.舉例:教師舉例,學(xué)生舉例,員工舉例65. 學(xué)生:StudentA:屬性:學(xué)號(hào),姓名,年齡 B:方法:學(xué)習(xí)(study),吃飯(抽象eat),抽煙或者不抽煙?(合適嗎)發(fā)現(xiàn):在學(xué)生中定義抽煙的方法不合適。所以呢,我們另外用一個(gè)類來定義抽煙的方法。 但是發(fā)現(xiàn),如果用一個(gè)類描述抽煙的功能后,SmokeSt
38、udent是不能繼承多個(gè)類的。 這個(gè)時(shí)候,我們又得重寫思考了。發(fā)現(xiàn),抽煙的學(xué)生像一個(gè)抽煙的機(jī)器,所以, 我們定義一個(gè)接口來放抽煙這個(gè)功能。 interface Smoking public abstract void smoking(); 描述的是抽煙的學(xué)生:SmokeStudent extends Student implements SmokingSmokeStudent ss = new SmokeStudent();ss.eat();ss.study();ss.smoking(); 老師:TeacherA:屬性 教師編號(hào),姓名,年齡B:方法 教書(teach),吃飯(吃飯eat),抽煙
39、或者不抽煙?(合適嗎)發(fā)現(xiàn):在老師中定義抽煙的方法不合適。所以呢,我們另外用一個(gè)類來定義抽煙的方法。 但是發(fā)現(xiàn),如果用一個(gè)類描述抽煙的功能后,SmokeTeacher是不能繼承多個(gè)類的。 這個(gè)時(shí)候,我們又得重寫思考了。發(fā)現(xiàn),抽煙的老師像一個(gè)抽煙的機(jī)器,所以, 我們定義一個(gè)接口來放抽煙這個(gè)功能。 interface Smoking public abstract void smoking(); 描述的是抽煙的老師:SmokeTeacher extends Teacher implements SmokingSmokeTeacher st = new SmokeTeacher();st.eat()
40、;st.teach();st.smoking(); 最后,我們發(fā)現(xiàn),這個(gè)代碼還是存在著重復(fù),比如說學(xué)生類和教師類中的屬性姓名,年齡及方法吃飯。 所以,我們進(jìn)一步向上抽取。來了一個(gè)Person類 Person:屬性:姓名,年齡 行為:吃飯(抽象eat)66. 構(gòu)造器Constructor是否可被override? (演講內(nèi)容,面試題)構(gòu)造方法的重載重載:方法名相同,與返回值類型無關(guān)(構(gòu)造方法沒有返回值),只看參數(shù)列表方法重寫:子類中出現(xiàn)了和父類中方法聲明一模一樣的方法。與返回值類型有關(guān),返回值是一致(或者是子父類)的67. 是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用?(面試
41、題)答案:不可以。因?yàn)榉莝tatic方法是要與對(duì)象關(guān)聯(lián)在一起的,必須創(chuàng)建一個(gè)對(duì)象后,才可以在該對(duì)象上進(jìn)行方法調(diào)用,而static方法調(diào)用時(shí)不需要?jiǎng)?chuàng)建對(duì)象,可以直接調(diào)用。也就是說,當(dāng)一個(gè)static方法被調(diào)用時(shí),可能還沒有創(chuàng)建任何實(shí)例對(duì)象,如果從一個(gè)static方法中發(fā)出對(duì)非static方法的調(diào)用,那個(gè)非static方法是關(guān)聯(lián)到哪個(gè)對(duì)象上的呢?這個(gè)邏輯無法成立,所以,一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用。68. Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型? 答案:override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個(gè)方
42、法并且對(duì)其重寫,以求達(dá)到不同的作用。對(duì)我們來說最熟悉的覆蓋就是對(duì)接口方法的實(shí)現(xiàn),在接口中一般只是對(duì)方法進(jìn)行了聲明,而我們?cè)趯?shí)現(xiàn)時(shí),就需要實(shí)現(xiàn)接口聲明的所有方法。除了這個(gè)典型的用法以外,我們?cè)诶^承中也可能會(huì)在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點(diǎn):1、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果;2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個(gè)方法,并沒有對(duì)其進(jìn)行覆蓋。overload對(duì)我們來說可能比較熟悉,可以翻譯為
43、重載,它是指我們可以定義一些名稱相同的方法,通過定義不同的輸入?yún)?shù)來區(qū)分這些方法,然后再調(diào)用時(shí),jVM就會(huì)根據(jù)不同的參數(shù)樣式,來選擇合適的方法執(zhí)行。在使用重載要注意以下的幾點(diǎn):1、在使用重載時(shí)只能通過不同的參數(shù)樣式。例如,不同的參數(shù)類型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個(gè)參數(shù)類型必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int));2、不能通過訪問權(quán)限、返回類型、拋出的異常進(jìn)行重載;3、方法的異常類型和數(shù)目不會(huì)對(duì)重載造成影響;4、對(duì)于繼承來說,如果某一方法在父類中是訪問權(quán)限是priavte,那么就不能在子類對(duì)其進(jìn)行重載,如果定義的話,也只
44、是定義了一個(gè)新方法,而不會(huì)達(dá)到重載的效果。69. wait和sleep的區(qū)別(面試題)wait:是Object類的方法,可以不用傳遞參數(shù),釋放鎖對(duì)象sleep:是Thread類的靜態(tài)方法,需要傳遞參數(shù),不釋放所對(duì)象70. String是最基本的數(shù)據(jù)類型嗎? (面試題)基本數(shù)據(jù)類型:整數(shù)類型,浮點(diǎn)類型,字符型,布爾型引用數(shù)據(jù)類型:類,接口,數(shù)組,枚舉String類雖然是引用數(shù)據(jù)類型,但是它作為參數(shù)傳遞時(shí)和基本數(shù)據(jù)類型是一樣的71. 是否可以繼承String類?(面試題)String類是final類故不可以繼承。72. StringBuffer與StringBuilder的區(qū)別?(面試題)Stri
45、ngBuffer和StringBuilder的區(qū)別StringBuffer是jdk1.0版本的,是線程安全的,同步的,效率低StringBuilder是jdk1.5版本的,是線程不安全的,不同步的,效率高String和StringBuffer,StringBuilder的區(qū)別String是一個(gè)不可變的字符序列StringBuffer,StringBuilder是可變的字符序列73. "="和equals方法究竟有什么區(qū)別?(面試題)= 比較地址值,equals()比較對(duì)象的屬性值,或者說具體內(nèi)容74. 35.ArrayList和Vector的區(qū)別?(面試題)ArrayLis
46、t:底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。線程不安全,效率高。Vector:底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。線程安全,效率低。Vector相對(duì)ArrayList查詢慢(線程安全的)75. 說出ArrayList,Vector, LinkedList的存儲(chǔ)性能和特性?(面試題)Vector和ArrayList的區(qū)別Vector是線程安全的,效率低ArrayList是線程不安全的,效率高共同點(diǎn):都是數(shù)組實(shí)現(xiàn)的ArrayList和LinkedList的區(qū)別ArrayList底層是數(shù)組結(jié)果,查詢和修改快LinkedList底層是鏈表結(jié)構(gòu)的,增和刪比較快,查詢和修改比較慢共同點(diǎn):都是線程不安全的76.
47、 說說 is a 和 has a 的區(qū)別?(面試題)體現(xiàn):is a抽象類被繼承,這個(gè)類中定義的是整個(gè)繼承體現(xiàn)的共性內(nèi)容。體現(xiàn):like a接口被實(shí)現(xiàn),這個(gè)接口中定義的是整個(gè)體現(xiàn)的擴(kuò)展內(nèi)容。77. jdk中哪些類是不能繼承的?(面試題) 不能繼承的是類是那些用final關(guān)鍵字修飾的類。一般比較基本的類型或防止擴(kuò)展類無意間破壞原來方法的實(shí)現(xiàn)的類型都應(yīng)該是final的,在jdk中System,String,StringBuffer等都是基本類型。78. 39.HashMap和Hashtable的區(qū)別?(面試題)HashTable: 線程安全,效率低,不允許null鍵和值HashMap: 線程不安全,
48、效率高,允許null鍵和值如果要從Hashtable或者ConcurrentHashMap中選擇,我們用ConcurrentHashMap79. List 和 Map 區(qū)別?(面試題)80. java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?(面試題) 靠的是父類或接口定義的引用變量可以指向子類或具體實(shí)現(xiàn)類的實(shí)例對(duì)象,而程序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定,就是引用變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存里正在運(yùn)行的那個(gè)對(duì)象的方法,而不是引用變量的類型中定義的方法。81. 靜態(tài)變量和實(shí)例變量的區(qū)別?(面試題) * 靜態(tài)變量也叫類變量 成員變量也叫對(duì)象變量* A:所屬不同* 靜態(tài)變量屬于類,所以也稱為為類變量* 成
49、員變量屬于對(duì)象,所以也稱為實(shí)例變量(對(duì)象變量)* B:內(nèi)存中位置不同* 靜態(tài)變量存儲(chǔ)于方法區(qū)的靜態(tài)區(qū)* 成員變量存儲(chǔ)于堆內(nèi)存* C:內(nèi)存出現(xiàn)時(shí)間不同* 靜態(tài)變量隨著類的加載而加載,隨著類的消失而消失* 成員變量隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的消失而消失* D:調(diào)用不同* 靜態(tài)變量可以通過類名調(diào)用,也可以通過對(duì)象調(diào)用* 成員變量只能通過對(duì)象名調(diào)用82. IO操作中為什么要釋放資源?(面試題)83. flush()和close()有什么區(qū)別?(面試題)* flush()方法* 用來刷新緩沖區(qū)的,刷新后可以再次寫出 * close()方法* 用來關(guān)閉流釋放資源的的; 如果是帶緩沖區(qū)的流對(duì)象的close()方法,不但會(huì)關(guān)閉流,還會(huì)再關(guān)閉流之前刷新緩沖區(qū),關(guān)閉后
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 早安正能量測(cè)試題及答案
- 掌握金融科技對(duì)證券行業(yè)的影響試題及答案
- 2025年銀行從業(yè)資格證考試信息反饋機(jī)制試題及答案
- 重點(diǎn)提煉:微生物檢驗(yàn)技師試題及答案
- 2024是項(xiàng)目管理考試的關(guān)鍵年份試題及答案
- 地磚打磨施工方案怎么寫
- 2024年項(xiàng)目管理考試講義試題及答案
- 遠(yuǎn)程項(xiàng)目管理的策略探討試題及答案
- 寧夏擠塑板地面施工方案
- 液壓馬達(dá)的排量控制考核試卷
- 招標(biāo)代理服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 市政工程施工組織設(shè)計(jì)方案
- 2024年(學(xué)習(xí)強(qiáng)國)思想政治理論知識(shí)考試題庫與答案
- 《三氣周瑜》兒童故事繪本ppt課件(圖文演講)
- 消防給水及消火栓系統(tǒng)工程驗(yàn)收記
- 鉆孔灌注樁工程結(jié)算關(guān)于充盈系數(shù)的爭(zhēng)議處理及分析(蘇亞金愛國)
- 本科畢業(yè)設(shè)計(jì)論文霓虹燈PLC控制與監(jiān)控組態(tài)設(shè)計(jì)
- 揚(yáng)塵防治教育培訓(xùn)記錄(共11頁)
- 2020年TDLTE無線網(wǎng)絡(luò)主設(shè)備功能測(cè)試規(guī)范基本功能分冊(cè)
- JJG 629-2014 多晶X射線衍射儀(原版-高清)
- 畢業(yè)設(shè)計(jì)(論文)印染廢水處理工藝設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論