java經(jīng)典面試題匯總
Java基礎方面:
1、作用域public,private,protected,以及不寫(xiě)時(shí)的區別 答:區別如下:
作用域 當前類(lèi) 同一package 子孫類(lèi) 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不寫(xiě)時(shí)默認為friendly
2、Anonymous Inner Class (匿名內部類(lèi)) 是否可以extends(繼承)其它類(lèi),是否可以implements(實(shí)現)interface(接口)
答:匿名的內部類(lèi)是沒(méi)有名字的內部類(lèi)。不能extends(繼承) 其它類(lèi),但一個(gè)內部類(lèi)可以作為一個(gè)接口,由另一個(gè)內部類(lèi)實(shí)現
3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的說(shuō)法),Inner Class (一般是JAVA的說(shuō)法)。Java內部類(lèi)與C++嵌套類(lèi)最大的不同就在于是否有指向外部的引用上。注: 靜態(tài)內部類(lèi)(Inner Class)意味著(zhù)1創(chuàng )建一個(gè)static內部類(lèi)的對象,不需要一個(gè)外部類(lèi)對象,2不能從一個(gè)static內部類(lèi)的一個(gè)對象訪(fǎng)問(wèn)一個(gè)外部類(lèi)對象 4、&和&&的區別
答:&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and) 5、Collection 和 Collections的區別
答:Collection是集合類(lèi)的上級接口,繼承與他的接口主要有Set 和List.
Collections是針對集合類(lèi)的一個(gè)幫助類(lèi),他提供一系列靜態(tài)方法實(shí)現對各種集合的搜索、排序、線(xiàn)程安全化等操作 6、什么時(shí)候用assert
答:assertion(斷言)在軟件開(kāi)發(fā)中是一種常用的調試方式,很多開(kāi)發(fā)語(yǔ)言中都支持這種機制。在實(shí)現中,assertion就是在程序中的一條語(yǔ)句,它對一個(gè)boolean表達式進(jìn)行檢查,一個(gè)正確程序必須保證這個(gè)boolean表達式的值為true;如果該值為false,說(shuō)明程序已經(jīng)處于不正確的狀態(tài)下,系統將給出警告或退出。一般來(lái)說(shuō),assertion用于保證程序最基本、關(guān)鍵的正確性。assertion檢查通常在開(kāi)發(fā)和測試時(shí)開(kāi)啟。為了提高性能,在軟件發(fā)布后,assertion檢查通常是關(guān)閉的
7、String s = new String("xyz");創(chuàng )建了幾個(gè)String Object 答:兩個(gè),一個(gè)字符對象,一個(gè)字符對象引用對象
8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少
答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回與參數最接近的長(cháng)整數,參數加1/2后求其floor
9、short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯 答:short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換類(lèi)型)short s1 = 1; s1 += 1;(可以正確編譯) 10、Java有沒(méi)有g(shù)oto
答:java中的保留字,現在沒(méi)有在java中使用
11、數組有沒(méi)有length()這個(gè)方法? String有沒(méi)有length()這個(gè)方法
答:數組沒(méi)有length()這個(gè)方法,有length的屬性。String有有length()這個(gè)方法 12、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類(lèi)型
Java數據結構快速入門(mén)Java數據結構基...Java數據結構基...
答:方法的重寫(xiě)Overriding和重載Overloading是Java多態(tài)性的不同表現。重寫(xiě)Overriding是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現,重載Overloading是一個(gè)類(lèi)中多態(tài)性的一種表現。如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱(chēng)和參數,我們說(shuō)該方法被重寫(xiě) (Overriding)。子類(lèi)的對象使用這個(gè)方法時(shí),將調用子類(lèi)中的定義,對它而言,父類(lèi)中的定義如同被"屏蔽"了。如果在一個(gè)類(lèi)中定義了多個(gè)同名的方法,它們或有不同的參數個(gè)數或有不同的參數類(lèi)型,則稱(chēng)為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類(lèi)型 13、Set里的元素是不能重復的,那么用什么方法來(lái)區分重復與否呢? 是用==還是equals()? 它們有何區別
答:Set里的元素是不能重復的,那么用iterator()方法來(lái)區分重復與否。equals()是判讀兩個(gè)Set是否相等
equals()和==方法決定引用值是否指向同一對象equals()在類(lèi)中被覆蓋,為的是當兩個(gè)分離的對象的內容和類(lèi)型相配的話(huà),返回真值 14、給我一個(gè)你最常見(jiàn)到的runtime exception 答:常見(jiàn)的運行時(shí)異常有如下這些ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException 15、error和exception有什么區別
答:error 表示恢復不是不可能但很困難的情況下的一種嚴重問(wèn)題。比如說(shuō)內存溢出。不可能指望程序能處理這樣的情況
exception 表示一種設計或實(shí)現問(wèn)題。也就是說(shuō),它表示如果程序運行正常,從不會(huì )發(fā)生的情況
16、List, Set, Map是否繼承自Collection接口 答: List,Set是,Map不是
17、abstract class和interface有什么區別
答:聲明方法的存在而不去實(shí)現它的類(lèi)被叫做抽象類(lèi)(abstract class),它用于要創(chuàng )建一個(gè)體現某些基本行為的類(lèi),并為該類(lèi)聲明方法,但不能在該類(lèi)中實(shí)現該類(lèi)的情況。不能創(chuàng )建abstract 類(lèi)的實(shí)例。然而可以創(chuàng )建一個(gè)變量,其類(lèi)型是一個(gè)抽象類(lèi),并讓它指向具體子類(lèi)的一個(gè)實(shí)例。不能有抽象構造函數或抽象靜態(tài)方法。Abstract 類(lèi)的子類(lèi)為它們父類(lèi)中的所有抽象方法提供實(shí)現,否則它們也是抽象類(lèi)為。取而代之,在子類(lèi)中實(shí)現該方法。知道其行為的其它類(lèi)可以在類(lèi)中實(shí)現這些方法
接口(interface)是抽象類(lèi)的變體。在接口中,所有方法都是抽象的。多繼承性可通過(guò)實(shí)現這樣的接口而獲得。接口中的所有方法都是抽象的,沒(méi)有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現與子類(lèi)相似,除了該實(shí)現類(lèi)不能從接口定義中繼承行為。當類(lèi)實(shí)現特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現了該接口的類(lèi)的任何對象上調用接口的方法。由于有抽象類(lèi),它允許使用接口名作為引用變量的類(lèi)型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉換到接口類(lèi)型或從接口類(lèi)型轉換,instanceof 運算符可以用來(lái)決定某對象的類(lèi)是否實(shí)現了接口
18、abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized
答:都不能
19、接口是否可繼承接口? 抽象類(lèi)是否可實(shí)現(implements)接口? 抽象類(lèi)是否可繼承實(shí)體類(lèi)(concrete class)
答:接口可以繼承接口。抽象類(lèi)可以實(shí)現(implements)接口,抽象類(lèi)是否可繼承實(shí)體類(lèi),但前提是實(shí)體類(lèi)必須有明確的構造函數 20、構造器Constructor是否可被override
答:構造器Constructor不能被繼承,因此不能重寫(xiě)Overriding,但可以被重載Overloading 21、是否可以繼承String類(lèi)
答:String類(lèi)是final類(lèi)故不可以繼承
22、try {}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally {}里的code會(huì )不會(huì )被執行,什么時(shí)候被執行,在return前還是后 答:會(huì )執行,在return前執行
23、用最有效率的方法算出2乘以8等於幾 答:2 << 3
24、兩個(gè)對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話(huà)對不對 答:不對,有相同的hash code
25、當一個(gè)對象被當作參數傳遞到一個(gè)方法后,此方法可改變這個(gè)對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞
答:是值傳遞。Java 編程語(yǔ)言只有值傳遞參數。當一個(gè)對象實(shí)例作為一個(gè)參數被傳遞到方法中時(shí),參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會(huì )改變的
26、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
答:witch(expr1)中,expr1是一個(gè)整數表達式。因此傳遞給 switch 和 case 語(yǔ)句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用于swtich 27、ArrayList和Vector的區別,HashMap和Hashtable的區別 答:就ArrayList與Vector主要從二方面來(lái)說(shuō).
一.同步性:Vector是線(xiàn)程安全的,也就是說(shuō)是同步的,而ArrayList是線(xiàn)程序不安全的,不是同步的
二.數據增長(cháng):當需要增長(cháng)時(shí),Vector默認增長(cháng)為原來(lái)一培,而ArrayList卻是原來(lái)的一半 就HashMap與HashTable主要從三方面來(lái)說(shuō)。
一.歷史原因:Hashtable是基于陳舊的Dictionary類(lèi)的,HashMap是Java 1.2引進(jìn)的Map接口的一個(gè)實(shí)現
二.同步性:Hashtable是線(xiàn)程安全的,也就是說(shuō)是同步的,而HashMap是線(xiàn)程序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value 28、char型變量中能不能存貯一個(gè)中文漢字?為什么?
答:是能夠定義成為一個(gè)中文的,因為java中以unicode編碼,一個(gè)char占16個(gè)字節,所以放一個(gè)中文是沒(méi)問(wèn)題的
29、GC是什么? 為什么要有GC
答:GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問(wèn)題的地方,忘記或者錯誤的內存回收會(huì )導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動(dòng)監測對象是否超過(guò)作用域從而達到自動(dòng)回收內存的目的,Java語(yǔ)言沒(méi)有提供釋放已分配內存的顯示操作方法。
30、float型float f=3.4是否正確?
答:不正確。精度不準確,應該用強制類(lèi)型轉換,如下所示:float f=(float)3.4 31、介紹JAVA中的Collection FrameWork(包括如何寫(xiě)自己的數據結構)? 答:Collection FrameWork如下: Collection ├List
│├LinkedList │├ArrayList │└Vector │ └Stack └Set Map
├Hashtable ├HashMap
└WeakHashMap
Collection是最基本的集合接口,一個(gè)Collection代表一組Object,即Collection的元素(Elements)
Map提供key到value的映射 32、抽象
【java經(jīng)典面試題】相關(guān)文章:
Java面試題07-12
JAVA題庫:JAVA面試題目整理07-11
華為Java面試題07-11
華為的JAVA面試題07-11
求java面試題07-11
java面試題五07-11
java 基礎面試題07-11
華為公司 java人員面試題07-11
一道Java面試題,題目如下07-11