Java編程50問

Java編程50問

1、問題:Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(接口)
答案:匿名的內部類是無指定類名的內部類,不能extends(繼承) 其它類,但一個內部類可以作爲一個接口,由本外部類的另一個其他的內部類實現,所生存範圍爲同一個外部類。

2、問題:Collection 和 Collections的區別
答案: Collection代表集合,是集合類的上級接口,繼承與它的接口主要有Set 和List
Collections是針對集合類的一個幫助類,主要提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。總的來說,Collection是集合類,Collections是集合的幫助類,相互協調。

3、問題: 什麼時候用assert
答案: assertion(斷言)在軟件開發中是一種常用的調試方式。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值爲true;如果該值爲false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。

4、問題: String s = new String(“xyz”);創建了幾個String Object
答案: 兩個,new一個字符對象,=引用 一個字符對象引用對象

5、問題: 數組有沒有length()這個方法? String有沒有length()這個方法
答案: 數組無length()這個方法,只有length屬性。String有length()方法

6、問題: Overload和Override的區別,Overloaded的方法是否可以改變返回值的類型?
答案: 方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。Overloaded的方法是可以改變返回值的類型

7、問題: Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢?
答案:Set裏的元素是不能重複的,用iterator()方法來區分重複與否。

8、問題:runtime exception有哪些?
答案: 常見的運行時異常有

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

9、問題: error和exception的區別
答案:error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。
exception 表示一種設計或實現問題,如果程序運行正常,不會發生的情況

10、問題: List, Set, Map是否繼承自Collection接口
答案: List,Set是,Map不是

11、問題:abstract的method是否可同時是static、native或synchronized
答案:都不能

12、問題: 接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)
答案: 接口可以繼承接口、實現(implements)接口,抽象類可繼承實體類,但前提是實體類必須有明確的構造函數

13、問題: 構造器Constructor是否可被override
答案: 構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading

14、問題: try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,什麼時候被執行,在return前還是後
答案:會執行,在return前執行

15、問題:兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對
答案:不對,有相同的hash code

16、問題:swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
答案:witch(expr1)中,expr1是一個整數表達式,因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich

17、問題 :ArrayList和Vector的區別,HashMap和Hashtable的區別
答案
ArrayList和Vector區別
(1)同步性:Vector是線程安全、同步的,而ArrayList是線程序不安全的、不同步的
(2)數據增長:當需要增長時,Vector默認增長爲原來一培,而ArrayList卻是原來的一半
HashMap和HashTable區別
(1)歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現
(2)同步性:Hashtable是線程安全的、同步的,而HashMap是線程序不安全的、不同步的
(3)值:HashMap可以將空值作爲一個表的條目的key或value

18、問題:char型變量中能不能存貯一箇中文漢字?爲什麼?
答案:是能夠定義成爲一箇中文的,因爲java中以unicode編碼,一個char佔16個字節,所以放一箇中文是沒問題的

19、問題:GC是什麼? 爲什麼要有GC?
答案:GC是垃圾收集的意思(Gabage Collection),Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。

20、問題:float型float f=3.4是否正確?
答案: 不正確。精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.4

21、問題:抽象類與接口?
答案:抽象類與接口都用於抽象,但是抽象類(JAVA中)可以有自己的部分實現,而接口則完全是一個標識(同時有多重繼承的功能)。

22、問題:STRING與STRINGBUFFER的區別
答案:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。StringBuffer的toString()方法可以將StringBuffer轉變成String

23、問題:String是最基本的數據類型嗎
答案:基本數據類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,不可繼承、修改。

24、問題:int 和 Integer 的區別
答案:Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java爲int提供的封裝類。
booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble

25、問題:運行時異常與一般異常有何異同
答案:運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。

26、問題:說出ArrayList,Vector, LinkedList的存儲性能和特性
答案:ArrayList和Vector:使用數組方式存儲數據
Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。

27、問題:HashMap和Hashtable的區別
答案:HashMap是Hashtable的輕量級實現(非線程安全的實現),HashMap允許空(null)鍵值(key),由於非線程安全,效率上可能高於Hashtable。
HashMap允許將null作爲一個entry的key或者value,而Hashtable不允許。
多個線程訪問Hashtable時,不需要自己爲它的方法實現同步,而HashMap 就必須爲之提供外同步

28、問題:heap和stack有什麼區別
答案
棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。
堆是棧的一個組成元素

29、問題:Java中的異常處理機制的簡單原理和應用
答案
JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException。
JAVA允許程序員擴展這種語義檢查,可以創建自己的異常,並自由選擇在何時用throw關鍵字引發異常,所有的異常都是java.lang.Thowable的子類。

30、問題:垃圾回收的優點和原理,並考慮2種回收機制
答案
(1)由於有個垃圾回收機制,Java中的對象不再有"作用域"的概念,只有對象的引用纔有"作用域"。垃圾回收可以有效的防止內存泄露。垃圾回收器通常是作爲一個單獨的低級別的線程運行。
(2)回收機制有分代複製垃圾回收和標記垃圾回收,增量垃圾回收。

31、問題:集合類都有哪些?主要方法?
答案
(1)最常用的集合類是 List 和 Map。
(2)List :具體實現包括 ArrayList 和 Vector:可變大小的列表,比較適合構建、存儲和操作任何類型對象的元素列表。 List 適用於按數值索引訪問元素的情形。
(3)Map :用於存儲元素對(稱作"鍵"和"值"),其中每個鍵映射到一個值。

32、問題:JVM加載class文件的原理機制?
答案:JVM中類的裝載是由ClassLoader和子類來實現的, Java ClassLoader 是一個重要的Java運行時系統組件,負責在運行時查找和裝入類文件的類。

33、問題:排序都有哪幾種方法?
答案
(1)排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序)

34、問題:JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try塊中可以拋出異常嗎?
答案:在Java中,每個異常都是一個對象,是Throwable類或子類的實例。用try來執行一段程序,如果出現異常,系統會拋出(throws)一個異常,通過類型來捕捉(catch),或最後(finally)由缺省處理器來處理。

35、問題:一個".java"源文件中是否可以包括多個類(不是內部類)?有什麼限制?
答案:可以。必須只有一個類名與文件名相同。

36、問題:java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,分別是哪些類?
答案
(1)字節流,字符流。
(2)字節流繼承於InputStream OutputStream
(3)字符流繼承於InputStreamReader OutputStreamWriter

37、問題:java中會存在內存泄漏嗎?
答案:會。實現堆載的數據結構時有可能會出現內存泄露

38、問題:java中實現多態的機制是什麼?
答案:方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。

39、問題:垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收
答案:當創建對象時,GC就開始監控這個對象的地址、大小以及使用情況。
通常,GC採用有向圖的方式記錄和管理堆(heap)中的所有對象。判斷"可達的"或"不可達"。可以手動執行System.gc(),通知GC運行,但是Java語言規範並不保證GC一定會執行。

40、問題:靜態變量和實例變量的區別?
答案
static i = 10//常量
class A a; a.i =10;//可變

41、問題:什麼是java序列化,如何實現java序列化?
答案:序列化就是一種用來處理對象流的機制,對象流也就是將對象的內容進行流化,序列化是爲了解決在對對象流進行讀寫操作時所引發的問題。
JAVA類實現序例化的方法是實現java.io.Serializable接口
Collection框架中實現比較要實現Comparable 接口和 Comparator 接口

42、問題:是否可以從一個static方法內部發出對非static方法的調用?
答案:不可以, 如果其中包含對象的method(),不能保證對象初始化

43、問題:寫clone()方法時,通常都有一行代碼,是什麼?
答案:Clone 有缺省行爲,super.clone();負責產生正確大小的空間,並逐位複製。

44、問題:在JAVA中,如何跳出當前的多重嵌套循環?
答案:break; return 方法。

45、問題:List、Map、Set三個接口,存取元素時,各有什麼特點?
答案
List 以特定次序來持有元素,可有重複元素。
Set 無法擁有重複元素,內部排序。
Map 保存key-value值,value可多值。

46、問題:說出一些常用的類,包,接口
答案
常用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer
常用的包:java.lang java.awt java.io java.util java.sql
常用的接口:Remote List Map Document NodeList

47、問題:java中有幾種方法可以實現一個線程?用什麼關鍵字修飾同步方法? stop()和suspend()方法爲何不推薦使用?
答案
(1)有兩種實現方法,分別是繼承Thread類與實現Runnable接口
(2)用synchronized關鍵字修飾同步方法
(3)stop()它不安全。解除由線程獲取的所有鎖定,而且如果對象處於一種不連貫狀態,那麼其他線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。
suspend()方法容易發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復運行。對任何線程來說,如果它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應該使用suspend(),而應在自己的Thread類中置入一個標誌,指出線程應該活動還是掛起。若標誌指出線程應該掛起,便用wait()命其進入等待狀態。若標誌指出線程應當恢復,則用一個notify()重新啓動線程。

48、問題:sleep() 和 wait() 有什麼區別?
答案
(1)sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復, 調用sleep不會釋放對象鎖。
(2)wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。

49、問題:同步和異步有何異同,在什麼情況下分別使用他們?舉例說明。
答案
(1)同步:如果數據將在線程間共享 , 必須進行同步存取。
(2)異步: 當應用程序在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程序等待方法的返回時,就應該使用異步編程,在很多情況下采用異步途徑往往更有效率。

50、問題:啓動一個線程是用run()還是start()?
答案:啓動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味着它可以由JVM調度並執行,這並不意味着線程就會立即運行。run()方法可以產生必須退出的標誌來停止一個線程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章