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