垃圾回收
:在
Java
程序的生命周期中,
Java
運(yùn)行時環(huán)境提供了一個系統(tǒng)的垃圾回收器線程,負(fù)責(zé)自動回收那些沒有引用與之相連的對象所占用的內(nèi)存,這種內(nèi)存回收的過程就叫做垃圾回收(
GC
)。當(dāng)一個對象被創(chuàng)建時,
Java
的虛擬機(jī)(
JVM
)會為該對象分配一定的內(nèi)存、調(diào)用該對象的構(gòu)造方法并開始跟蹤該對象。當(dāng)該對象停止使用時,
JVM
將通過垃圾回收器回收該對象所占用的內(nèi)存。
需要注意的是,只有當(dāng)一個對象不被任何引用類型的變量使用時,它的內(nèi)存才可能被垃圾回收,即只有在沒有任何句柄指向一個對象時,該對象才成為垃圾;不能通過程序強(qiáng)迫垃圾回收立即執(zhí)行,任何時候,程序員都不能通過程序強(qiáng)迫垃圾回收立即執(zhí)行,但是可以通過
System.gc
()或
Runtime.gc
()方法提示垃圾回收器進(jìn)行內(nèi)存回收操作,但是這也不能保證調(diào)用該方法后,垃圾回收線程立即執(zhí)行;當(dāng)垃圾回收器將要釋放無用對象的內(nèi)存時,先調(diào)用該對象的
finalize
()方法。
Java
利用
finalize
()方法撤銷無用對象。
finalize
()
方法包含在
java.lang.Object
包中。
finalize
方法只能在
Java
垃圾收集之前調(diào)用。當(dāng)一個對象超過作用域時,就不能調(diào)用
finalize
方法。
接口
:接口是一種完全沒有實(shí)現(xiàn)的類,接口是方法定義和常量值的集合。
Java
通過接口使得處于不同層次甚至互不相關(guān)的類可以擁有相同的行為。從本質(zhì)上講,接口是一種特殊的抽象類,通過利用關(guān)鍵字
interface
來指明一個類必須做什么,但是不需要明確該怎么做。在類的結(jié)構(gòu)過程中可以實(shí)現(xiàn)多個接口,而且在類對接口的實(shí)現(xiàn)過程中,必須實(shí)現(xiàn)接口中所有的方法。
一個類只能有一個父類,而一個接口可以有多個父接口,父接口之間用逗號隔開。在接口中定義的常量可以被多個類共享,具有
public
、
final
、
static
屬性,也就是任意類可以訪問該變量;接口中止對方法進(jìn)行聲明,沒有方法體,而且是用分號結(jié)尾,聲明的方法具有
public
和
abstract
屬性。一個類可以實(shí)現(xiàn)一個或多個接口,不同接口之間用逗號分開。
在類對接口實(shí)現(xiàn)的定義中,必須實(shí)現(xiàn)接口中所有方法。這種實(shí)現(xiàn)是“相對”的,既可以為接口中的方法提供實(shí)現(xiàn)代碼,也可以不提供代碼。如果不提供代碼,必須將該方法的框架完整寫出。如果一個類實(shí)現(xiàn)的是一個繼承其他接口的接口,則該類必須實(shí)現(xiàn)這個接口和棋父接口的所有方法,除非定義該類為抽象類。
?
??? 接口可以作為一種引用類型來使用,任何實(shí)現(xiàn)該接口的類的實(shí)例,都可以存儲在該接口類型的變量中,通過這些變量可以訪問類所實(shí)現(xiàn)的接口中的方法,
Java
運(yùn)行時,系統(tǒng)會動態(tài)地決定應(yīng)該使用哪個類中的方法。(接口可以理解為一種特殊類型的抽象類,不是一種基本類型的數(shù)據(jù),當(dāng)然就是引用類型的數(shù)據(jù)了。而實(shí)現(xiàn)了接口的類可以看作是接口的子類,在可以使用父類的地方都可以使用子類,此處的說法與之前提到的運(yùn)行時多態(tài)是同一個問題。