java經(jīng)典面試題匯總_第1頁
java經(jīng)典面試題匯總_第2頁
java經(jīng)典面試題匯總_第3頁
java經(jīng)典面試題匯總_第4頁
java經(jīng)典面試題匯總_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、Java 基礎方面 :1、作用域 public,private,protected, 以及不寫時的區(qū)別答:區(qū)別如下:作用域 當前類 同一 package 子孫類 其他 packagepublic protected ×friendly × ×private × × ×不寫時默認為 friendly2、 Anonymous Inner Class (匿 名 內(nèi) 部 類 是 否 可 以 extends(繼 承 其 它 類 , 是 否 可 以 implements(實現(xiàn) interface(接口 答:匿名的內(nèi)部類是沒有名字的內(nèi)部類。不能 e

2、xtends(繼承 其它類,但一個內(nèi)部類可以作 為一個接口,由另一個內(nèi)部類實現(xiàn)3、 Static Nested Class 和 Inner Class的不同答:Nested Class (一般是 C+的說法 , Inner Class (一般是 JA V A 的說法 。 Java 內(nèi)部類與 C+嵌套類最大的不同就在于是否有指向外部的引用上 。注:靜態(tài)內(nèi)部類(Inner Class意 味著 1創(chuàng)建一個 static 內(nèi)部類的對象, 不需要一個外部類對象, 2不能從一個 static 內(nèi)部類的 一個對象訪問一個外部類對象4、 &和 &&的區(qū)別答:&是位運算符,表示按

3、位與運算, &&是邏輯運算符,表示邏輯與(and 5、 Collection 和 Collections的區(qū)別答:Collection 是集合類的上級接口,繼承與他的接口主要有 Set 和 List.Collections 是針對集合類的一個幫助類, 他提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索、 排 序、線程安全化等操作6、什么時候用 assert答:assertion(斷言 在軟件開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)語言中都支持這種機制。 在實現(xiàn)中, assertion 就是在程序中的一條語句,它對一個 boolean 表達式進行檢查, 一個正 確程序必須保證這個 boolea

4、n 表達式的值為 true ;如果該值為 false ,說明程序已經(jīng)處于不正 確的狀態(tài)下,系統(tǒng)將給出警告或退出。一般來說, assertion 用于保證程序最基本、關鍵的正 確性。 assertion 檢查通常在開發(fā)和測試時開啟。為了提高性能,在軟件發(fā)布后, assertion 檢 查通常是關閉的7、 String s = new String("xyz"創(chuàng)建了幾個 String Object答:兩個,一個字符對象,一個字符對象引用對象8、 Math.round(11.5等於多少 ? Math.round(-11.5等於多少答 : Math.round(11.5=12;Ma

5、th.round(-11.5=-11;round方法返回與參數(shù)最接近的長整數(shù), 參 數(shù)加 1/2后求其 floor9、 short s1 = 1; s1 = s1 + 1;有什么錯 ? short s1 = 1; s1 += 1;有什么錯答:short s1 = 1; s1 = s1 + 1; (s1+1運算結(jié)果是 int 型, 需要強制轉(zhuǎn)換類型 short s1 = 1; s1 += 1; (可以正確編譯10、 Java 有沒有 goto答:java 中的保留字,現(xiàn)在沒有在 java 中使用11、數(shù)組有沒有 length(這個方法 ? String有沒有 length(這個方法答:數(shù)組沒有

6、length(這個方法,有 length 的屬性。 String 有有 length(這個方法12、 Overload 和 Override 的區(qū)別。 Overloaded 的方法是否可以改變返回值的類型答:方法的重寫 Overriding 和重載 Overloading 是 Java 多態(tài)性的不同表現(xiàn)。 重寫 Overriding 是父類與子類之間多態(tài)性的一種表現(xiàn),重載 Overloading 是一個類中多態(tài)性的一種表現(xiàn)。 如 果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding。 子類的對象使用這個方法時,將調(diào)用子類中的定義,對它而言,父類中的定義如同

7、被 " 屏蔽 " 了。 如果在一個類中定義了多個同名的方法, 它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型, 則稱為方法的重載 (Overloading。 Overloaded 的方法是可以改變返回值的類型13、 Set 里的元素是不能重復的, 那么用什么方法來區(qū)分重復與否呢 ? 是用 =還是 equals(? 它 們有何區(qū)別答:Set 里的元素是不能重復的, 那么用 iterator(方法來區(qū)分重復與否 。 equals(是判讀兩個 Set 是否相等equals(和 =方法決定引用值是否指向同一對象 equals(在類中被覆蓋, 為的是當兩個分離 的對象的內(nèi)容和類型相配的話,

8、返回真值14、給我一個你最常見到的 runtime exception答 :常 見 的 運 行 時 異 常 有 如 下 這 些 ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowExceptio n, CannotRedoException, CannotUndoException, ClassCastException, CMMException, Concurre ntModificationException, DOMException, EmptyStackExceptio

9、n, IllegalArgumentException, Ille galMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpExceptio n, IndexOutOfBoundsException , MissingResourceException, NegativeArraySizeException, NoSu chElementException, NullPointerException , ProfileDataException, ProviderException

10、, RasterFor matException, SecurityException, SystemException, UndeclaredThrowableException, Unmodifia bleSetException, UnsupportedOperationException15、 error 和 exception 有什么區(qū)別答:error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內(nèi)存溢出。不可 能指望程序能處理這樣的情況exception 表示一種設計或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運行正常,從不會發(fā)生 的情況16、 List, Set, Map是否

11、繼承自 Collection 接口答: List, Set 是, Map 不是17、 abstract class和 interface 有什么區(qū)別答:聲明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstract class ,它用于要創(chuàng)建一個體 現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實現(xiàn)該類的情況。不能創(chuàng)建 abstract 類的實例。 然而可以創(chuàng)建一個變量,其類型是一個抽象類,并讓它指向具 體子類的一個實例 。不能有抽象構造函數(shù)或抽象靜態(tài)方法。 Abstract 類的子類為它們父類 中的所有抽象方法提供實現(xiàn),否則它們也是抽象類為。取而代之, 在子類中實現(xiàn)該方法。知 道其行為的

12、其它類可以在類中實現(xiàn)這些方法接口(interface 是抽象類的變體。在接口中,所有方法都是抽象的。 多繼承性 可通過 實現(xiàn)這樣的接口而獲得。 接口中的所有方法都是抽象的, 沒有一個有程序體。 接口只可以定義 static final成員變量 。接口的實現(xiàn)與子類相似,除了該實現(xiàn)類不能從接口定義中繼 承行為。當類實現(xiàn)特殊接口時,它定義(即將程序體給予所有這種接口的方法。然后,它 可以在實現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法。 由于有抽象類, 它允許使用接口名 作為引用變量的類型。 通常的動態(tài)聯(lián)編將生效。 引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運算符可以用來決定某對象的

13、類是否實現(xiàn)了接口18、 abstract 的 method 是否可同時是 static, 是否可同時是 native ,是否可同時是 synchronized 答:都不能19、接口是否可繼承接口 ? 抽象類是否可實現(xiàn) (implements接口 ? 抽象類是否可繼承實體類 (concrete class答:接口可以繼承接口。抽象類可以實現(xiàn) (implements接口, 抽象類是否可繼承實體類,但 前提是實體類必須有明確的構造函數(shù)20、構造器 Constructor 是否可被 override答:構造器 Constructor 不能被繼承,因此不能重寫 Overriding ,但可以被重載 Ov

14、erloading 21、是否可以繼承 String 類答:String 類是 final 類故不可以繼承22、 try 里有一個 return 語句, 那么緊跟在這個 try 后的 finally 里的 code 會不會被執(zhí)行, 什么時候被執(zhí)行,在 return 前還是后答:會執(zhí)行, 在 return 前執(zhí)行23、用最有效率的方法算出 2乘以 8等於幾答:2 << 324、兩個對象值相同 (x.equals(y = true ,但卻可有不同的 hash code,這句話對不對答:不對, 有相同的 hash code25、 當一個對象被當作參數(shù)傳遞到一個方法后, 此方法可改變這個對

15、象的屬性, 并可返回變 化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞答:是值傳遞。 Java 編程語言只有值傳遞參數(shù)。 當一個對象實例作為一個參數(shù)被傳遞到方法 中時, 參數(shù)的值就是對該對象的引用。 對象的內(nèi)容可以在被調(diào)用的方法中改變, 但對象的引 用是永遠不會改變的26、 swtich 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上答:witch (expr1中, expr1是一個整數(shù)表達式。因此傳遞給 switch 和 case 語句的參數(shù)應 該是 int、 short、 char 或者 byte。 long,string 都不能作用于 swtich2

16、7、 ArrayList 和 Vector 的區(qū)別 ,HashMap 和 Hashtable 的區(qū)別答:就 ArrayList 與 Vector 主要從二方面來說 .一 . 同步性 :Vector是線程安全的,也就是說是同步的,而 ArrayList 是線程序不安全的,不是 同步的二 . 數(shù)據(jù)增長 :當需要增長時 ,Vector 默認增長為原來一培,而 ArrayList 卻是原來的一半就 HashMap 與 HashTable 主要從三方面來說。一 . 歷史原因 :Hashtable是基于陳舊的 Dictionary 類的, HashMap 是 Java 1.2引進的 Map 接口 的一個實

17、現(xiàn)二 . 同步性 :Hashtable是線程安全的,也就是說是同步的,而 HashMap 是線程序不安全的, 不是同步的三 . 值:只有 HashMap 可以讓你將空值作為一個表的條目的 key 或 value28、 char 型變量中能不能存貯一個中文漢字 ? 為什么 ?答:是能夠定義成為一個中文的,因為 java 中以 unicode 編碼, 一個 char 占 16個字節(jié),所 以放一個中文是沒問題的29、 GC 是什么 ? 為什么要有 GC答:GC 是垃圾收集的意思(Gabage Collection , 內(nèi)存處理是編程人員容易出現(xiàn)問題的地方, 忘記或者錯誤的內(nèi)存回收會導致程序或系統(tǒng)的不

18、穩(wěn)定甚至崩潰, Java 提供的 GC 功能可以自 動監(jiān)測對象是否超過作用域從而達到自動回收內(nèi)存的目的, Java 語言沒有提供釋放已分配內(nèi)存的顯示操作方法。30、 float 型 float f=3.4是否正確 ?答 :不正確。精度不準確 , 應該用強制類型轉(zhuǎn)換,如下所示:float f=(float3.431、介紹 JA V A 中的 Collection FrameWork(包括如何寫自己的數(shù)據(jù)結(jié)構 ?答:Collection FrameWork如下:CollectionListLinkedListArrayListVector StackSetMapHashtableHashMapWe

19、akHashMapCollection 是最基本的集合接口,一個 Collection 代表一組 Object ,即 Collection 的元素 (Elements Map 提供 key 到 value 的映射32、抽象類與接口?答:抽象類與接口都用于抽象,但是 抽象類 (JAV A 中 可以有自己的部分實現(xiàn),而接口則完 全是一個標識 (同時有多重繼承的功能 。Collection 框架中實現(xiàn)比較要實現(xiàn) Comparable 接口和 Comparator 接口33、 STRING 與 STRINGBUFFER 的區(qū)別。答:STRING 的長度是不可變的, STRINGBUFFER 的長度是可

20、變的。如果你對字符串中的 內(nèi)容經(jīng)常進行操作,特別是內(nèi)容要修改時,那么使用 StringBuffer ,如果最后需要 String ,那 么使用 StringBuffer 的 toString(方法34、談談 final, finally, finalize的區(qū)別答:final? 修飾符(關鍵字如果一個類被聲明為 final ,意味著它不能再派生出新的子類, 不能作為父類被繼承。 因此一個類不能既被聲明為 abstract的, 又被聲明為 final 的。 將變量 或方法聲明為 final ,可以保證它們在使用中不被改變 。 被聲明為 final 的變量必須在聲明時 給定初值,而在以后的引用中只

21、能讀取,不可修改。被聲明為 final 的方法也同樣只能使用, 不能重載finally? 再異常處理時提供 finally 塊來執(zhí)行任何清除操作。如果拋出一個異常,那么相匹配 的 catch 子句就會執(zhí)行,然后控制就會進入 finally 塊(如果有的話finalize? 方法名。 Java 技術允許使用 finalize( 方法在垃圾收集器將對象從內(nèi)存中清除出去之 前做必要的清理工作。 這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調(diào) 用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize( 方法以整 理系統(tǒng)資源或者執(zhí)行其他清理工作。 fina

22、lize( 方法是在垃圾收集器刪除對象之前對這個對象 調(diào)用的35、面向?qū)ο蟮奶卣饔心男┓矫娲?主要有以下四方面:1. 抽象:抽象就是忽略一個主題中與當前目標無關的那些方面, 以便更充分地注意與當前目標有關的 方面。 抽象并不打算了解全部問題, 而只是選擇其中的一部分,暫時不用部分細節(jié)。抽象包 括兩個方面, 一是過程抽象,二是數(shù)據(jù)抽象 。2. 繼承:繼承是一種聯(lián)結(jié)類的層次模型, 并且允許和鼓勵類的重用, 它提供了一種明確表述共性的方 法。 對象的一個新類可以從現(xiàn)有的類中派生, 這個過程稱為類繼承。 新類繼承了原始類的特 性,新類稱為原始類的派生類(子類 ,而原始類稱為新類的基類(父類 。派生類可

23、以從它 的基類那里繼承方法和實例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。 3. 封裝:封裝是把過程和數(shù)據(jù)包圍起來, 對數(shù)據(jù)的訪問只能通過已定義的界面。 面向?qū)ο笥嬎闶加谶@ 個基本概念, 即現(xiàn)實世界可以被描繪成一系列完全自治、 封裝的對象, 這些對象通過一個受 保護的接口訪問其他對象。4. 多態(tài)性:多態(tài)性是指允許不同類的對象對同一消息作出響應 。多態(tài)性包括 參數(shù)化多態(tài)性 和 包含多態(tài) 性 。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應用程序函數(shù) 同名問題。36、 String 是最基本的數(shù)據(jù)類型嗎37、 int 和 Integer 有什么區(qū)別答:Java 提

24、供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型 。 Int 是 java 的原始數(shù) 據(jù)類型, Integer 是 java 為 int 提供的封裝類。 Java 為每個原始類型提供了封裝類。原 始 類 型 封 裝 類 ,booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDoub le引用類型和原始類型的行為完全不同, 并且它們具有不同的語義。 引用類型和原始類型具有 不同的特征和用法, 它們包括:大小和速度問題, 這種類型以哪種類型的數(shù)據(jù)結(jié)構存儲,當 引用類型和原始類型用

25、作某個類的實例數(shù)據(jù)時所指定的缺省值。 對象引用實例變量的缺省值 為 null,而原始類型實例變量的缺省值與它們的類型有關38、運行時異常與一般異常有何異同答:異常表示程序運行過程中可能出現(xiàn)的非正常狀態(tài), 運行時異常表示虛擬機的通常操作中 可能遇到的異常, 是一種常見運行錯誤。 java 編譯器要求方法必須聲明拋出可能發(fā)生的非運 行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。39、說出 ArrayList,Vector, LinkedList的存儲性能和特性答:ArrayList 和 Vector 都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)大于實際存儲的數(shù)據(jù)以 便增加和插入元素, 它們都允

26、許直接按序號索引元素, 但是插入元素要涉及數(shù)組元素移動等 內(nèi)存操作, 所以 索引數(shù)據(jù)快而插入數(shù)據(jù)慢 , Vector 由于使用了 synchronized 方法 (線程安全 , 通常性能上較 ArrayList 差,而 LinkedList 使用雙向鏈表實現(xiàn)存儲,按序號索引數(shù)據(jù)需要進 行前向或后向遍歷,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入速度較快。 40、 HashMap 和 Hashtable 的區(qū)別答:HashMap 是 Hashtable 的輕量級實現(xiàn)(非線程安全的實現(xiàn) ,他們都完成了 Map 接口, 主 要區(qū)別在于 HashMap 允許空 (null 鍵值 (key ,

27、由于非線程安全, 效率上可能高于 Hashtable 。 HashMap 允許將 null 作為一個 entry 的 key 或者 value ,而 Hashtable 不允許 。把余下的元素分割為兩段 left 和 r i g h t, 使得 l e f t 中的元素都小于等于支點,而 right 中的 元素都大于等于支點 遞歸地使用快速排序方法對 left 進行排序 遞歸地使用快速排序方法對 right 進行排序 所得結(jié)果為 l e f t + m i d d l e + r i g h t 47、 JAVA 語言如何進行異常處理, 關鍵字: throws,throw,try,catch,

28、finally 分別代表什么意義? 在 try 塊中可以拋出異常嗎? 答:Java 通過面向?qū)ο蟮姆椒ㄟM行異常處理,把各種不同的異常進行分類,并提供了良好的 接口。在 Java 中,每個異常都是一個對象,它是 Throwable 類或其它子類的實例。當一個 方法出現(xiàn)異常后便拋出一個異常對象, 該對象中包含有異常信息, 調(diào)用這個對象的方法可以 捕獲到這個異常并進行處理。 Java 的異常處理是通過 5 個關鍵詞來實現(xiàn)的: catch、 try、 throw、 throws 和 finally。 一般情況下是用 try 來執(zhí)行一段程序, 如果出現(xiàn)異常, 系統(tǒng)會拋出 (throws) 一個異常,這時

29、候你可以通過它的類型來捕捉(catch)它,或最后(finally)由缺省處理器 來處理。 用 try 來指定一塊預防所有"異常"的程序。緊跟在 try 程序后面,應包含一個 catch 子句來指 定你想要捕捉的"異常"的類型。 throw 語句用來明確地拋出一個"異常"。 throws 用來標明一個成員函數(shù)可能拋出的各種"異常"。 Finally 為確保一段代碼不管發(fā)生什么"異常"都被執(zhí)行一段代碼。 可以在一個成員函數(shù)調(diào)用的外面寫一個 try 語句,在這個成員函數(shù)內(nèi)部寫另一個 try 語句保

30、護其他代碼。每當遇到一個 try 語句,"異常"的框架就放到堆棧上面,直到所有的 try 語句都 完成。如果下一級的 try 語句沒有對某種"異常"進行處理,堆棧就會展開,直到遇到有處理 這種"異常"的 try 語句。 48、一個".java"源文件中是否可以包括多個類(不是內(nèi)部類)?有什么限制? 答:可以。必須只有一個類名與文件名相同。 49、 java 中有幾種類型的流?JDK 為每種類型的流提供了一些抽象類以供繼承, 請說出他們 分別是哪些類? 答 : 字 節(jié) 流 , 字 符 流 。 字 節(jié) 流 繼 承 于

31、InputStream OutputStream , 字 符 流 繼 承 于 InputStreamReader OutputStreamWriter。在 java.io 包中還有許多其他的流,主要是為了提高 性能和使用方便。 50、java 中會存在內(nèi)存泄漏嗎,請簡單描述。 答:會。自己實現(xiàn)堆載的數(shù)據(jù)結(jié)構時有可能會出現(xiàn)內(nèi)存泄露,可參看 effective java. 51、java 中實現(xiàn)多態(tài)的機制是什么? 答:方法的重寫 Overriding 和重載 Overloading 是 Java 多態(tài)性的不同表現(xiàn)。重寫 Overriding 是父類與子類之間多態(tài)性的一種表現(xiàn),重載 Overloading 是一個類中多態(tài)性的一種表現(xiàn)。 52、 垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動通知 虛擬機進行垃圾回收 答:對于 GC 來說,當程序員創(chuàng)建對象時,GC 就開始監(jiān)控這個對象的地址、大小以及使用 情況。通常,GC 采用有向圖的方式記錄和管理堆(heap中的所有對象。通過這種方式確定 哪些對象是"可達的",哪些對象是"不可達的"。當

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論