Java面試題之五 (轉)

二11、super()與this()的區別? java

(1)用this的狀況: 程序員

1.在構造方法中,經過this調用另外一個構造方法,用法:this(參數列表)。 網絡

2.在函數參數或函數的局部變量與成員變量同名,即成員變量被屏蔽的狀況下,要訪問成員變量須要用「this.成員變量」的方式進行訪問。固然不一樣名也可這樣訪問,可是不是必須這樣。 ide

3.在函數中,須要引用該函數所屬類的當前對象時,直接用this。 函數

(2)用super的狀況: this

1.在子類構造方法中要調用父類的構造方法時,用「super(參數列表)」方法調用。而且這句話只能出如今子類構造方法的第一行。 spa

2.當子類局部變量或成員變量與父類成員變量同名,即父類成員變量被覆蓋時,須要用「super.成員變量」方式來訪問父類成員變量。固然不一樣名時,也可這樣訪問父類成員變量,但不必。 .net

3.當父類成員方法被子類成員方法覆蓋,也就是他們有相同方法定義(方法體能夠不一樣)時,用「super.方法名(參數列表)」方式訪問父類方法。 hibernate

(3)比較: 線程

1.this 表明當前類對象。super表明當前類的父類對象。super()和this()都只能放在構造方法的第一行。

2.能夠用this調用一個構造器,但不能用this調用兩個。同時,this和super不能同時出如今一個構造方法裏,編譯也不會經過。

3.this和super都是指的對象,它們都不能在靜態環境中使用。包括靜態變量,靜態方法,靜態塊。

4.在構造方法中,若第一行沒有super(),編譯器會自動插入一個,可是,若父類沒有無參構造方法,或其已被私有化,那麼只能調用父類有參構造方法,不然會報錯。

二12、JAVA的事件委託機制和垃圾回收機制

事件委託機制:一個源產生一個事件並將它送到一個或多個監聽器那裏。在這種方案中,監聽器簡單的等待,直到它收到一個事件。一旦事件被接受,監聽器將處理這個事件,而後返回。

垃圾回收機制:垃圾回收是將分配給對象但再也不使用的內存回收或釋放的過程。

若是一個對象沒有指向它的引用或者其賦值爲null,則此對象適合進行垃圾回收。也就是說垃圾回收,回收的是沒有被變量指向的對象。

垃圾回收器是一個單獨的低級別的線程。在不可預知的狀況下,對內存中已經死亡或者長時間沒有使用的對象進行回收。但程序員本身並不能控制垃圾回收。

二十3、在JAVA中,如何跳出當前的多重嵌套循環?

兩種方式:break和return。

(1)對於break,有兩種方式:

1.在外層循環語句前加一個標號,而後在內層循環體內使用帶標號的break語句。我的不推薦使用這種方式。

2.經過內層循環體裏的代碼去控制外層循環的循環條件。通常定義一個boolean變量去控制。

(2)對於return,比較簡單,跳出整個方法,固然也就跳出了多重循環。

二十4、什麼是java序列化,如何實現java序列化?

序列化:處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。

序列化的實現:將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,是一個標示性接口,用來標註該對象可被序列化,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。

具體示例可參考http://blog.csdn.net/u010142437/article/details/8967349

二十5、一個".java"源文件中是否能夠包括多個類(不是內部類)?有什麼限制?

能夠。若是這個類的修飾符是public,其類名與文件名必須相同。也就是說一個".java"源文件中只能有一個類(不是內部類)聲明爲public。而且其類名與文件名必須相同。

二十6、排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序?

排序的方法:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、

快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱

排序、基數排序)。

快速排序的僞代碼:

從a[ 0 :n- 1 ]中選擇一個元素做爲m i d d l e,以該元素爲支點把餘下的元素分割爲兩段left和r i g h t,使得l e f t中的元素都小於等於支點,而right中的元素都大於等於支點。遞歸地使用快速排序方法分別對左和右進行排序,結果爲l e f t + m i d d l e + r i g h t。

二十7、Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型?

Overload指重載;Override指重寫。

重載發生在一個類當中。方法名相同,參數列表不一樣(參數個數、類型、順序)。重載是一個類中多態性的表現。重載的方法能夠改變返回值類型。由於重載只跟參數列表有關,因此重載的方法返回類型是能夠不同的。

重寫發生在父類和子類之間。方法名相同,參數列表相同,返回類型也相同。子類重寫了父類的方法,調用時會優先調用子類重寫的方法,即父類方法在這個時候被覆蓋了,因此稱之爲重寫(覆蓋)。重寫是父類和子類多態性的一種表現。

另外,重寫還需注意:子類重寫方法的訪問修飾符必須不小於父類中的訪問修飾符。子類重寫拋出的異常不能比父類多。

二十8、Final類有什麼特色?

聲明爲final的類不能夠被繼承。固然它的方法也無法被重寫。但其屬性能夠是final也能夠不是final的。

二十9、什麼是類的反射機制?

經過類(Class對象),能夠得出當前類的fields、method、construtor、interface、superClass、modified等,同是能夠經過類實例化一個實例、設置屬性、喚醒方法。Spring中一切都是返射、struts、hibernate都是經過類的反射進行開發的。

三10、類的反射機制中的包及核心類?

java.lang.Class

java.lang.refrection.Method

java.lang.refrection.Field

java.lang.refrection.Constructor

java.lang.refrection.Modifier

java.lang.refrection.Interface

相關文章
相關標籤/搜索