1. 程式人生 > >2017.1.30 Java有感3.2

2017.1.30 Java有感3.2

Java中的方法覆蓋(Overriding)和方法過載(Overloading)是什麼意思?

Java中的方法過載發生在同一個類裡面兩個或者是多個方法的方法名相同但是引數不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,引數列表和返回型別。覆蓋者可能不會限制它所覆蓋的方法的訪問。

覆蓋(Overriding)和過載(Overloading)的區別是什麼? 
覆蓋在執行時決定,過載是在編譯時決定。並且覆蓋和過載的機制不同,例如在Java中,過載方法的簽名必須不同於原先方法的,但對於覆蓋簽名必須相同。

Java中,什麼是建構函式?什麼是建構函式過載?什麼是複製建構函式?
當新物件被建立的時候,建構函式會被呼叫。每一個類都有建構函式。在程式設計師沒有給類提供建構函式的情況下,Java編譯器會為這個類建立一個預設的建構函式。
Java中建構函式過載和方法過載很相似。可以為一個類建立多個建構函式。每一個建構函式必須有它自己唯一的引數列表。
Java不支援像C++中那樣的複製建構函式,這個不同點是因為如果你不自己寫建構函式的情況下,Java不會建立預設的複製建構函式。

Java支援多繼承麼?
不支援,Java不支援多繼承。每個類都只能繼承一個類,但是可以實現多個介面。

介面和抽象類的區別是什麼?
Java提供和支援建立抽象類和介面。它們的實現有共同點,不同點在於:
介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
類可以實現很多個介面,但是隻能繼承一個抽象類
類如果要實現一個介面,它必須要實現介面宣告的所有方法。但是,類可以不實現抽象類宣告的所有方法,當然,在這種情況下,類也必須得宣告成是抽象的。
抽象類可以在不提供介面方法實現的情況下實現介面。
Java介面中宣告的變數預設都是final的。抽象類可以包含非final的變數。
Java介面中的成員函式預設是public的。抽象類的成員函式可以是private,protected或者是public。
介面是絕對抽象的,不可以被例項化。抽象類也不可以被例項化,但是,如果它包含main方法的話是可以被呼叫的。

什麼是值傳遞和引用傳遞?
物件被值傳遞,意味著傳遞了物件的一個副本。因此,就算是改變了物件副本,也不會影響源物件的值。

物件被引用傳遞,意味著傳遞的並不是實際的物件,而是物件的引用。因此,外部對引用物件所做的改變會反映到所有的物件上。

final, finally, finalize的區別:
final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。

HashMap和Hashtable的區別: 
HashMap是Hashtable的輕量級實現(非執行緒安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非執行緒安全,效率上可能高於Hashtable。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。 
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個執行緒訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步(如果是ArrayList:List lst = Collections.synchronizedList(new ArrayList());如果是HashMap:Map map = Collections.synchronizedMap(new HashMap());)。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以效能不會有很大的差異。

從雜湊表,二叉樹和連結串列中取元素需要多少時間?如果你有數百萬記錄呢?
雜湊表需要O(1)時間,二叉樹需要O(logN) (N是樹中節點數),連結串列需要O(N) (N是連結串列中節點數)。如果資料結構工作正常(比如雜湊表沒有或只有相對少量衝突,二叉樹是平衡的),數百萬記錄並不影響效率。如果工作不正常,那麼效率會隨著記錄數上升而下降。