Java 试题四
Java 試題四
1、abstract class 和interface 有什么區(qū)別? 【基礎(chǔ)】
答:聲明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,
并為該類聲明方法,但不能在該類中實現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實例。然而可以創(chuàng)建一個變量,其類型
是一個抽象類,并讓它指向具體子類的一個實例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們
父類中的所有抽象方法提供實現(xiàn),否則它們也是抽象類。取而代之,在子類中實現(xiàn)該方法。知道其行為的其它類
可以在類中實現(xiàn)這些方法
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現(xiàn)這樣的接口而獲得。
接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現(xiàn)與子類相似,
除了該實現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實現(xiàn)特殊接口時,它定義(即將程序體給予)所有這種接口的方法。
然后,它可以在實現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的
類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來決定某對象
的類是否實現(xiàn)了接口
2、abstract 的method 是否可同時是static,是否可同時是native,
是否可同時是synchronized?
答:都不能
3、是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用?
答:不可以,如果其中包含對象的method();不能保證對象初始化.
4、寫一個Singleton出來
Singleton模式主要作用是保證在Java應(yīng)用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有幾種種形式:
第一種形式: 定義一個類,它的構(gòu)造函數(shù)為private的,它有一個static的private的該類變量,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調(diào)用其中的方法。
第二種形式:
public class Singleton { private static Singleton instance = null;public static synchronized Singleton getInstance() {//這個方法比上面有所改進(jìn),不用每次都進(jìn)行生成對象,只是第一次 //使用時生成實例,提高了效率!if (instance==null)instance=new Singleton();return instance; } }其他形式:
定義一個類,它的構(gòu)造函數(shù)為private的,所有方法為static的。
一般認(rèn)為第一種形式要更加安全些
5、接口是否可繼承接口? 抽象類是否可實現(xiàn)(implements)接口? 抽象類是否可繼承實體類(concrete class)?
答案:接口可以繼承接口。抽象類可以實現(xiàn)(implements)接口,抽象類可繼承實體類,但實體類必須不能是如下兩種情況之一:
- final修飾符修飾的類是不能的
- 如果此實體類有且僅有私有的構(gòu)造函數(shù)也是不能的。
6、Anonymous Inner Class (匿名內(nèi)部類) 是否可以extends(繼承)其它類,是否可以implements(實現(xiàn))interface(接口)
答:匿名的內(nèi)部類是沒有名字的內(nèi)部類。不能extends(繼承) 其它類,但一個內(nèi)部類可以作為一個接口,由另一個內(nèi)部類實現(xiàn)
7、Static Nested Class 和 Inner Class的不同
答:Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。
Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。
注: 靜態(tài)內(nèi)部類(Inner Class)意味著:
- 創(chuàng)建一個static內(nèi)部類的對象,不需要一個外部類對象,
- 不能從一個static內(nèi)部類的一個對象訪問一個外部類對象
8、談?wù)刦inal, finally, finalize的區(qū)別
答:final—修飾符(關(guān)鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally—再異常處理時提供 finally 塊來執(zhí)行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執(zhí)行,然后控制就會進(jìn)入 finally 塊(如果有的話)。
finalize—方法名。Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調(diào)用的。
總結(jié)
- 上一篇: 若依框架使用总结说明
- 下一篇: Java 试题五