版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 / 23目錄面向?qū)ο缶幊蹋?OOP)常見(jiàn)的 Java 問(wèn)題Java 線(xiàn)程Java 集合類(lèi)垃圾收集器異常處理Java 小應(yīng)用程序(Applet)SwingJDBC遠(yuǎn)程方法調(diào)用( RMI )ServletJSP2 / 23面向?qū)ο缶幊蹋∣OP)Java 是一個(gè)支持并發(fā)、基于類(lèi)和面向?qū)ο蟮挠?jì)算機(jī)編程語(yǔ)言。下面列出了面向?qū)ο筌浖_(kāi)發(fā)的優(yōu)點(diǎn):代碼開(kāi)發(fā)模塊化,更易維護(hù)和修改。代碼復(fù)用。增強(qiáng)代碼的可靠性和靈活性。增加代碼的可理解性。面向?qū)ο缶幊逃泻芏嘀匾奶匦?,比如:封裝,繼承,多態(tài)和抽象。下面的章節(jié)我們會(huì)逐個(gè) 分析這些特性。封裝封裝給對(duì)象提供了隱藏內(nèi)部特性和行為的能力。對(duì)象提供一些能被其他對(duì)象訪問(wèn)的方
2、法來(lái)改變它內(nèi)部的數(shù)據(jù)。在 Java 當(dāng)中,有 3 種修飾符:public,private 和 protected。每一種修飾 符給其他的位于同一個(gè)包或者不同包下面對(duì)象賦予了不同的訪問(wèn)權(quán)限。下面列出了使用封裝的一些好處:通過(guò)隱藏對(duì)象的屬性來(lái)保護(hù)對(duì)象內(nèi)部的狀態(tài)。提高了代碼的可用性和可維護(hù)性,因?yàn)閷?duì)象的行為可以被單獨(dú)的改變或者是擴(kuò)展。 禁止對(duì)象之間的不良交互提高模塊化。參考這個(gè)文檔獲取更多關(guān)于封裝的細(xì)節(jié)和示例。多態(tài)多態(tài)是編程語(yǔ)言給不同的底層數(shù)據(jù)類(lèi)型做相同的接口展示的一種能力。一個(gè)多態(tài)類(lèi)型上的操作可以應(yīng)用到其他類(lèi)型的值上面。繼承繼承給對(duì)象提供了從基類(lèi)獲取字段和方法的能力。繼承提供了代碼的重用行,也可以
3、在不修改類(lèi)的情況下給現(xiàn)存的類(lèi)添加新特性。抽象抽象是把想法從具體的實(shí)例中分離出來(lái)的步驟,因此,要根據(jù)他們的功能而不是實(shí)現(xiàn)細(xì)節(jié)來(lái)創(chuàng)建類(lèi)。Java 支持創(chuàng)建只暴漏接口而不包含方法實(shí)現(xiàn)的抽象的類(lèi)。這種抽象技術(shù)的主要目 的是把類(lèi)的行為和實(shí)現(xiàn)細(xì)節(jié)分離開(kāi)。3 / 23抽象和封裝的不同點(diǎn)抽象和封裝是互補(bǔ)的概念。一方面,抽象關(guān)注對(duì)象的行為。另一方面,封裝關(guān)注對(duì)象行為的細(xì)節(jié)。一般是通過(guò)隱藏對(duì)象內(nèi)部狀態(tài)信息做到封裝,因此,封裝可以看成是用來(lái)提供抽象的一種策略。常見(jiàn)的 Java 問(wèn)題1. 什么是 Java 虛擬機(jī)?為什么 Java 被稱(chēng)作是 平臺(tái)無(wú)關(guān)的編程語(yǔ)言”?Java 虛擬機(jī)是一個(gè)可以執(zhí)行 Java 字節(jié)碼的虛擬
4、機(jī)進(jìn)程。Java 源文件被編譯成能被 Java 虛 擬機(jī)執(zhí)行的字節(jié)碼文件。Java 被設(shè)計(jì)成允許應(yīng)用程序可以運(yùn)行在任意的平臺(tái),而不需要程序員為每一個(gè)平臺(tái)單獨(dú)重 寫(xiě)或者是重新編譯。Java 虛擬機(jī)讓這個(gè)變?yōu)榭赡?,因?yàn)樗赖讓佑布脚_(tái)的指令長(zhǎng)度和 其他特性。2. JDK 和 JRE 的區(qū)別是什么?Java 運(yùn)行時(shí)環(huán)境(JRE)是將要執(zhí)行 Java 程序的 Java 虛擬機(jī)。它同時(shí)也包含了執(zhí)行applet需要的瀏覽器插件。Java 開(kāi)發(fā)工具包(JDK)是完整的 Java 軟件開(kāi)發(fā)包,包含了 JRE,編譯 器和其他的工具(比如:JavaDoc,Java 調(diào)試器),可以讓開(kāi)發(fā)者開(kāi)發(fā)、編譯、執(zhí)行Java
5、 應(yīng)用程序。3. ” stati(關(guān)鍵字是什么意思? Java 中是否可以覆蓋(override) 一個(gè) private 或 者是 static 的方法?“ static 關(guān)鍵字表明一個(gè)成員變量或者是成員方法可以在沒(méi)有所屬的類(lèi)的實(shí)例變量的情況下 被訪問(wèn)。Java 中 static 方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而 static 方法是編譯時(shí)靜態(tài)綁定的。static 方法跟類(lèi)的任何實(shí)例都不相關(guān),所以概念上不適用。4.是否可以在 static 環(huán)境中訪問(wèn)非 static 變量?static 變量在 Java 中是屬于類(lèi)的,它在所有的實(shí)例中的值是一樣的。 當(dāng)類(lèi)被 Java 虛擬
6、機(jī)載 入的時(shí)候,會(huì)對(duì) static 變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來(lái)訪問(wèn)非 static 的變量, 編譯器會(huì)報(bào)錯(cuò),因?yàn)檫@些變量還沒(méi)有被創(chuàng)建出來(lái),還沒(méi)有跟任何實(shí)例關(guān)聯(lián)上。4 / 235.Java 支持的數(shù)據(jù)類(lèi)型有哪些?什么是自動(dòng)拆裝箱?Java 語(yǔ)言支持的 8 中基本數(shù)據(jù)類(lèi)型是:5 / 23byte short int long float double boolea n char自動(dòng)裝箱是 Java 編譯器在基本數(shù)據(jù)類(lèi)型和對(duì)應(yīng)的對(duì)象包裝類(lèi)型之間做的一個(gè)轉(zhuǎn)化。比如:把 int 轉(zhuǎn)化成 Integer,double 轉(zhuǎn)化成 double,等等。反之就是自動(dòng)拆箱。6. Java 中的方法覆
7、蓋(Overriding)和方法重載(Overloading)是什么意思?Java 中的方法重載發(fā)生在同一個(gè)類(lèi)里面兩個(gè)或者是多個(gè)方法的方法名相同但是參數(shù)不同的 情況。與此相對(duì),方法覆蓋是說(shuō)子類(lèi)重新定義了父類(lèi)的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類(lèi)型。覆蓋者可能不會(huì)限制它所覆蓋的方法的訪問(wèn)。7. Java 中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復(fù)制構(gòu)造函數(shù)?當(dāng)新對(duì)象被創(chuàng)建的時(shí)候,構(gòu)造函數(shù)會(huì)被調(diào)用。每一個(gè)類(lèi)都有構(gòu)造函數(shù)。在程序員沒(méi)有給類(lèi)提 供構(gòu)造函數(shù)的情況下,Java 編譯器會(huì)為這個(gè)類(lèi)創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù)。Java 中構(gòu)造函數(shù)重載和方法重載很相似??梢詾橐粋€(gè)類(lèi)創(chuàng)建多個(gè)構(gòu)造函數(shù)
8、。每一個(gè)構(gòu)造函 數(shù)必須有它自己唯一的參數(shù)列表。Java 不支持像 C+中那樣的復(fù)制構(gòu)造函數(shù),這個(gè)不同點(diǎn)是因?yàn)槿绻悴蛔约簩?xiě)構(gòu)造函數(shù)的 情況下,Java不會(huì)創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函數(shù)。8. Java 支持多繼承么?不支持,Java 不支持多繼承。每個(gè)類(lèi)都只能繼承一個(gè)類(lèi),但是可以實(shí)現(xiàn)多個(gè)接口。9接口和抽象類(lèi)的區(qū)別是什么?Java 提供和支持創(chuàng)建抽象類(lèi)和接口。它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于:接口中所有的方法隱含的都是抽象的。而抽象類(lèi)則可以同時(shí)包含抽象和非抽象的方法。類(lèi)可以實(shí)現(xiàn)很多個(gè)接口,但是只能繼承一個(gè)抽象類(lèi)類(lèi)如果要實(shí)現(xiàn)一個(gè)接口,它必須要實(shí)現(xiàn)接口聲明的所有方法。但是,類(lèi)可以不實(shí)現(xiàn)抽象類(lèi)聲明的所有方法,當(dāng)
9、然,在這種情況下,類(lèi)也必須得聲明成是抽象的。6 / 23抽象類(lèi)可以在不提供接口方法實(shí)現(xiàn)的情況下實(shí)現(xiàn)接口。Java 接口中聲明的變量默認(rèn)都是final 的。抽象類(lèi)可以包含非 final 的變量。Java 接口中的成員函數(shù)默認(rèn)是public 的。抽象類(lèi)的成員函數(shù)可以是private,protected 或者是 public。接口是絕對(duì)抽象的,不可以被實(shí)例化。抽象類(lèi)也不可以被實(shí)例化,但是,如果它包 含 ma in 方法的話(huà)是可以被調(diào)用的。也可以參考 JDK8 中抽象類(lèi)和接口的區(qū)別10. 什么是值傳遞和引用傳遞?對(duì)象被值傳遞,意味著傳遞了對(duì)象的一個(gè)副本。因此,就算是改變了對(duì)象副本,也不會(huì)影響 源對(duì)象的
10、值。對(duì)象被引用傳遞,意味著傳遞的并不是實(shí)際的對(duì)象,而是對(duì)象的引用。因此,外部對(duì)引用對(duì)象所做的改變會(huì)反映到所有的對(duì)象上。Java 線(xiàn)程11. 進(jìn)程和線(xiàn)程的區(qū)別是什么?進(jìn)程是執(zhí)行著的應(yīng)用程序,而線(xiàn)程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序列。一個(gè)進(jìn)程可以有多個(gè)線(xiàn)程。 線(xiàn)程又叫做輕量級(jí)進(jìn)程。12. 創(chuàng)建線(xiàn)程有幾種不同的方式?你喜歡哪一種?為什么?有三種方式可以用來(lái)創(chuàng)建線(xiàn)程:繼承 Thread 類(lèi)實(shí)現(xiàn) Runnable 接口應(yīng)用程序可以使用 Executor 框架來(lái)創(chuàng)建線(xiàn)程池實(shí)現(xiàn) Runnable 接口這種方式更受歡迎,因?yàn)檫@不需要繼承Thread 類(lèi)。在應(yīng)用設(shè)計(jì)中已經(jīng)繼承了別的對(duì)象的情況下,這需要多繼承(而 Java
11、 不支持多繼承),只能實(shí)現(xiàn)接口。同時(shí),線(xiàn)程池也是非常高效的,很容易實(shí)現(xiàn)和使用。13. 概括的解釋下線(xiàn)程的幾種可用狀態(tài)。線(xiàn)程在執(zhí)行過(guò)程中,可以處于下面幾種狀態(tài):7 / 23就緒(Runnable):線(xiàn)程準(zhǔn)備運(yùn)行,不一定立馬就能開(kāi)始執(zhí)行。 運(yùn)行中(Running):進(jìn)程正在執(zhí)行線(xiàn)程的代碼。8 / 23等待中(Waiting):線(xiàn)程處于阻塞的狀態(tài),等待外部的處理結(jié)束。睡眠中(Sleeping):線(xiàn)程被強(qiáng)制睡眠。I/O 阻塞(Blocked on I/O):等待 I/O 操作完成。 同步阻塞(Blocked on Synchronization):等待獲取鎖。死亡(Dead):線(xiàn)程完成了執(zhí)行。14.
12、同步方法和同步代碼塊的區(qū)別是什么?在Java語(yǔ)言中, 每一個(gè)對(duì)象有一把鎖。 線(xiàn)程可以使用synchronized關(guān)鍵字來(lái)獲取對(duì)象上的 鎖。 synchronized關(guān)鍵字可應(yīng)用在方法級(jí)別(粗粒度鎖)或者是代碼塊級(jí)別(細(xì)粒度鎖)。15. 在監(jiān)視器(Monitor)內(nèi)部,是如何做線(xiàn)程同步的?程序應(yīng)該做哪種級(jí)別的同 步?監(jiān)視器和鎖在 Java 虛擬機(jī)中是一塊使用的。監(jiān)視器監(jiān)視一塊同步代碼塊,確保一次只有一 個(gè)線(xiàn)程執(zhí)行同步代碼塊。每一個(gè)監(jiān)視器都和一個(gè)對(duì)象引用相關(guān)聯(lián)。線(xiàn)程在獲取鎖之前不允許執(zhí)行同步代碼。16. 什么是死鎖(deadlock) ??jī)蓚€(gè)進(jìn)程都在等待對(duì)方執(zhí)行完畢才能繼續(xù)往下執(zhí)行的時(shí)候就發(fā)生了死
13、鎖。結(jié)果就是兩個(gè)進(jìn)程都陷入了無(wú)限的等待中。17. 如何確保 N 個(gè)線(xiàn)程可以訪問(wèn) N 個(gè)資源同時(shí)又不導(dǎo)致死鎖?使用多線(xiàn)程的時(shí)候,一種非常簡(jiǎn)單的避免死鎖的方式就是:指定獲取鎖的順序,并強(qiáng)制線(xiàn)程按照指定的順序獲取鎖。因此,如果所有的線(xiàn)程都是以同樣的順序加鎖和釋放鎖,就不會(huì)出現(xiàn)死鎖了。Java 集合類(lèi)18. Java 集合類(lèi)框架的基本接口有哪些?Java 集合類(lèi)提供了一套設(shè)計(jì)良好的支持對(duì)一組對(duì)象進(jìn)行操作的接口和類(lèi)。Java 集合類(lèi)里面最基本的接口有:Collection :代表一組對(duì)象,每一個(gè)對(duì)象都是它的子元素。Set :不包含重復(fù)元素的Collection。List :有順序的 collection
14、,并且可以包含重復(fù)元素。Map :可以把鍵(key)映射到值(value)的對(duì)象,鍵不能重復(fù)。9 / 2319.為什么集合類(lèi)沒(méi)有實(shí)現(xiàn) Cloneable 和 Serializable 接口?集合類(lèi)接口指定了一組叫做元素的對(duì)象。集合類(lèi)接口的每一種具體的實(shí)現(xiàn)類(lèi)都可以選擇以它自己的方式對(duì)元素進(jìn)行保存和排序。有的集合類(lèi)允許重復(fù)的鍵,有些不允許。20.什么是迭代器(Iterator) ?Iterator 接口提供了很多對(duì)集合元素進(jìn)行迭代的方法。每一個(gè)集合類(lèi)都包含了可以返回迭代 器實(shí)例的迭代方法。迭代器可以在迭代的過(guò)程中刪除底層集合的元素??寺?cloning)或者是序列化(serialization)的
15、語(yǔ)義和含義是跟具體的實(shí)現(xiàn)相關(guān)的。因此, 應(yīng)該 由集合類(lèi)的具體實(shí)現(xiàn)來(lái)決定如何被克隆或者是序列化。21.Iterator 和 ListIterator 的區(qū)別是什么?下面列出了他們的區(qū)別:Iterator 可用來(lái)遍歷 Set 和 List 集合,但是 ListIterator 只能用來(lái)遍歷 List。Iterator 對(duì)集合只能是前向遍歷,ListIterator 既可以前向也可以后向。ListIterator 實(shí)現(xiàn)了 Iterator 接口,并包含其他的功能,比如:增加元素,替換元素, 獲取前一個(gè)和后一個(gè)元素的索引,等等。22. 快速失敗(fail-fast)和安全失敗(fail-safe)的區(qū)
16、別是什么?Iterator 的安全失敗是基于對(duì)底層集合做拷貝,因此,它不受源集合上修改的影響。java.util包下面的所有的集合類(lèi)都是快速失敗的,而 java.util.concurrent 包下面的所有的類(lèi)都是安全失敗的??焖偈〉牡鲿?huì)拋出Concurren tModificati on Exception異常,而安全失敗的迭代器永遠(yuǎn)不會(huì)拋出這樣的異常。23. Java 中的 HashMap 的工作原理是什么?Java 中的 HashMap 是以鍵值對(duì)(key-value)的形式存儲(chǔ)元素的。 HashMap 需要一個(gè) hash 函數(shù),它使用 hashCode()和 equals()方法
17、來(lái)向集合/從集合添加和檢索元素。 當(dāng)調(diào)用 put() 方法的時(shí)候, HashMap會(huì)計(jì)算 key 的 hash 值,然后把鍵值對(duì)存儲(chǔ)在集合中合適的索引上。如果 key 已經(jīng)存在了, value 會(huì)被更新成新值。HashMap 的一些重要的特性是它的容量(capacity),負(fù)載因子(load factor)和擴(kuò)容極限(threshold resizing)。10 / 2324. hashCode()和 equals()方法的重要性體現(xiàn)在什么地方?Java 中的 HashMap 使用 hashCode()和 equals()方法來(lái)確定鍵值對(duì)的索引, 當(dāng)根據(jù)鍵獲取 值的時(shí)候也會(huì)用到這兩個(gè)方法。如果
18、沒(méi)有正確的實(shí)現(xiàn)這兩個(gè)方法,兩個(gè)不同的鍵可能會(huì)有相同的 hash 值,因此,可能會(huì)被集合認(rèn)為是相等的。而且,這兩個(gè)方法也用來(lái)發(fā)現(xiàn)重復(fù)元素。11 / 23所以這兩個(gè)方法的實(shí)現(xiàn)對(duì)HashMap 的精確性和正確性是至關(guān)重要的。25. HashMap 和 Hashtable 有什么區(qū)別??HashMap 和 Hashtable 都實(shí)現(xiàn)了 Map 接口,因此很多特性非常相似。但是,他們有以下不同點(diǎn):?HashMap 允許鍵和值是 null,而 Hashtable 不允許鍵或者值是 null。?Hashtable 是同步的,而 HashMap 不是。因此,HashMap 更適合于單線(xiàn)程環(huán)境,而 Hashtable 適合于多線(xiàn)程環(huán)境。?HashMap 提供了可供應(yīng)用迭代的鍵的集合,因此, HashMap 是快速失敗的。另一方面,Hashtable 提供了對(duì)鍵的列舉(Enumeration)。o一般認(rèn)為 Hashtable 是一個(gè)遺留的類(lèi)。26. 數(shù)組(Array)和列表(ArrayList)有什么區(qū)別?什么時(shí)候應(yīng)該使用Array 而不是 ArrayList ?下面列出了 Array 和 ArrayList 的不同點(diǎn):?Array 可以包含基本類(lèi)型和對(duì)象類(lèi)型,ArrayList 只能包含對(duì)象類(lèi)型。?Array 大小是固定的,ArrayList 的大小是動(dòng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 重慶電訊職業(yè)學(xué)院《班主任著作研讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江中醫(yī)藥大學(xué)《數(shù)字?jǐn)z影測(cè)量》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江建設(shè)職業(yè)技術(shù)學(xué)院《TIA技術(shù)及應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州工業(yè)應(yīng)用技術(shù)學(xué)院《鋼結(jié)構(gòu)設(shè)計(jì)概述》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)通風(fēng)和消毒制度
- 情境劇本創(chuàng)作技巧及其作用
- DB2201T 66.3-2024 肉牛牛舍建設(shè)規(guī)范 第3部分:種母牛
- 生物學(xué)基礎(chǔ)與方法模板
- 人資行政戰(zhàn)略展望模板
- 七夕傳媒策略研討
- 2024年日語(yǔ)培訓(xùn)機(jī)構(gòu)市場(chǎng)供需現(xiàn)狀及投資戰(zhàn)略研究報(bào)告
- 2024年公安機(jī)關(guān)理論考試題庫(kù)附參考答案(基礎(chǔ)題)
- 歷史-廣東省大灣區(qū)2025屆高三第一次模擬試卷和答案
- 2024年安全生產(chǎn)法律、法規(guī)、標(biāo)準(zhǔn)及其他要求清單
- 2023年高考文言文閱讀設(shè)題特點(diǎn)及備考策略
- 抗心律失常藥物臨床應(yīng)用中國(guó)專(zhuān)家共識(shí)
- 考級(jí)代理合同范文大全
- 2024解析:第三章物態(tài)變化-講核心(原卷版)
- DB32T 1590-2010 鋼管塑料大棚(單體)通 用技術(shù)要求
- 安全行車(chē)知識(shí)培訓(xùn)
- 2024年安徽省高校分類(lèi)對(duì)口招生考試數(shù)學(xué)試卷真題
評(píng)論
0/150
提交評(píng)論