??????? ?靜態(tài)成員類和非靜態(tài)成員類的區(qū)別是:非靜態(tài)成員類的每一個實(shí)例都隱含著與外圍類的一個外圍實(shí)例(enlosing instance)緊密關(guān)聯(lián)在一起。在非靜態(tài)成員類的實(shí)例方法內(nèi)部,調(diào)用外圍實(shí)例上的方法是有可能的,或者使用經(jīng)過修飾的this指針可以得到一個指向外圍實(shí)例的引用。如果聲明的成員類不訪問外圍實(shí)例,則聲明為靜態(tài)成員類。如果使用了非靜態(tài)成員類,那么它的每一個實(shí)例都將包含一個額外的指向外圍對象的引用。
以上是《effective java》中的論述。下面是在網(wǎng)上找到的關(guān)于匿名類的敘述。
匿名類
?????? 匿名類是不能有名稱的類,所以沒辦法引用它們。必須在創(chuàng)建時,作為new語句的一部分來聲明它們。這就要采用另一種形式的new語句,如下所示:?
new?<類或接口>?<類的主體>
?????? 這種形式的new語句聲明一個新的匿名類,它對一個給定的類進(jìn)行擴(kuò)展,或者實(shí)現(xiàn)一個給定的接口。它還創(chuàng)建那個類的一個新實(shí)例,并把它作為語句的結(jié)果而返回。要擴(kuò)展的類和要實(shí)現(xiàn)的接口是new語句的操作數(shù),后跟匿名類的主體。
?????? 如果匿名類對另一個類進(jìn)行擴(kuò)展,它的主體可以訪問類的成員、覆蓋它的方法等等,這和其他任何標(biāo)準(zhǔn)的類都是一樣的。如果匿名類實(shí)現(xiàn)了一個接口,它的主體必須實(shí)現(xiàn)接口的方法。
??????? 注意匿名類的聲明是在編譯時進(jìn)行的,實(shí)例化在運(yùn)行時進(jìn)行。這意味著for循環(huán)中的一個new語句會創(chuàng)建相同匿名類的幾個實(shí)例,而不是創(chuàng)建幾個不同匿名類的一個實(shí)例。
??????? 從技術(shù)上說,匿名類可被視為非靜態(tài)的內(nèi)部類,所以它們具有和方法內(nèi)部聲明的非靜態(tài)內(nèi)部類一樣的權(quán)限和限制。
????????如果要執(zhí)行的任務(wù)需要一個對象,但卻不值得創(chuàng)建全新的對象(原因可能是所需的類過于簡單,或者是由于它只在一個方法內(nèi)部使用),匿名類就顯得非常有用。匿名類尤其適合在Swing應(yīng)用程序中快速創(chuàng)建事件處理程序。