Java基礎--Java 內部類
巢狀類是定義在另一個類的內部的類。巢狀類存在的目的應該只是為它的外部類提供服務。如果巢狀類可能會用於其它的某個場景中,它就應該是頂層類。巢狀類有四種:靜態成員類,非靜態成員類,區域性類和匿名類,除了第一種外,其它三種都被稱為內部類。
一:靜態成員類
靜態成員類可以看做是普通的類,只是碰巧被宣告在另一個類的內部而已。它的一種常見的用法是作為共有的輔助類,僅當與它的外部類一起使用時才有意義。比如String類中的CaseInsensitiveComparator類,還有Integer類中的IntegerCache類。
二:非靜態成員類
非靜態成員類的每個例項都隱含著與外部類的一個例項相關聯。非靜態成員類例項的方法內部,可以呼叫外部類例項上的方法,或者利用this構造對外部類例項的引用。非靜態成員類的一種常見用法是定義一個介面卡,他允許外部類例項被看做是另一個不相關的類的例項。例如Map介面的實現類HaspMap會透過KeySet,EntrySet,Values等內部類來構造它的集合檢視。
三:靜態成員類與非靜態成員類的選擇
如果成員類的例項不需要訪問外部類的例項,就該把該成員類宣告為靜態的。否則,每個例項都將包含一個對外部物件的引用。儲存這份引用要消耗時間和空間,並且會導致外圍例項在符合垃圾回收時卻仍然得以保留。如果在沒有外部例項的情況下也需要分配例項,就不能使用非靜態成員類,因為它的例項必須要有一個外部例項。
四:區域性類
在任何“可以宣告區域性變數”的地方,都可以宣告區域性類,並且區域性類也遵守同樣的作用域規則。區域性類必須非常簡短,以便不會影響到可讀性。
五:匿名類
匿名類沒有名字。它不是外部類的一個成員。它並不與其它的成員一起被宣告,而是在使用的同時被宣告和例項化。它不能執行instanceof測試,或做任何需要命名類的其他事情。匿名類必須保持簡短,否則會影響程式的可讀性。
匿名內部類不能定義任何靜態成員和靜態方法;不能是public,protected,private,static;只能建立匿名內部類的一個例項;一個匿名內部類一定是在new的後面,用其隱含實現一個介面或實現一個類。
匿名內部類通常可分為繼承式的或介面式的。比如我們在進行多執行緒程式設計的時候經常會用到:
new Thread() {
public void run() {
//類繼承式的
}
}.start();
或
new Thread(new Runnable() {
public void run() {
// 介面實現式的
}
}).start();
一:靜態成員類
靜態成員類可以看做是普通的類,只是碰巧被宣告在另一個類的內部而已。它的一種常見的用法是作為共有的輔助類,僅當與它的外部類一起使用時才有意義。比如String類中的CaseInsensitiveComparator類,還有Integer類中的IntegerCache類。
二:非靜態成員類
非靜態成員類的每個例項都隱含著與外部類的一個例項相關聯。非靜態成員類例項的方法內部,可以呼叫外部類例項上的方法,或者利用this構造對外部類例項的引用。非靜態成員類的一種常見用法是定義一個介面卡,他允許外部類例項被看做是另一個不相關的類的例項。例如Map介面的實現類HaspMap會透過KeySet,EntrySet,Values等內部類來構造它的集合檢視。
三:靜態成員類與非靜態成員類的選擇
如果成員類的例項不需要訪問外部類的例項,就該把該成員類宣告為靜態的。否則,每個例項都將包含一個對外部物件的引用。儲存這份引用要消耗時間和空間,並且會導致外圍例項在符合垃圾回收時卻仍然得以保留。如果在沒有外部例項的情況下也需要分配例項,就不能使用非靜態成員類,因為它的例項必須要有一個外部例項。
四:區域性類
在任何“可以宣告區域性變數”的地方,都可以宣告區域性類,並且區域性類也遵守同樣的作用域規則。區域性類必須非常簡短,以便不會影響到可讀性。
五:匿名類
匿名類沒有名字。它不是外部類的一個成員。它並不與其它的成員一起被宣告,而是在使用的同時被宣告和例項化。它不能執行instanceof測試,或做任何需要命名類的其他事情。匿名類必須保持簡短,否則會影響程式的可讀性。
匿名內部類不能定義任何靜態成員和靜態方法;不能是public,protected,private,static;只能建立匿名內部類的一個例項;一個匿名內部類一定是在new的後面,用其隱含實現一個介面或實現一個類。
匿名內部類通常可分為繼承式的或介面式的。比如我們在進行多執行緒程式設計的時候經常會用到:
new Thread() {
public void run() {
//類繼承式的
}
}.start();
或
new Thread(new Runnable() {
public void run() {
// 介面實現式的
}
}).start();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-764578/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java基礎-內部類詳解Java
- Java基礎內部類4-內部類進階Java
- Java基礎10---包、內部類、匿名內部類Java
- 重拾java基礎之內部類Java
- JAVA基礎之介面與內部類Java
- java基礎的內部類定時Java
- Java基礎8:深入理解內部類Java
- JAVA物件導向基礎--N種內部類Java物件
- Java基礎之介面與抽象類及多型、內部類Java抽象多型
- Java 內部類Java
- Java內部類Java
- Java內部類詳解--匿名內部類Java
- java內部類之成員內部類Java
- 10、Java——內部類Java
- java內部類案例Java
- 搞懂 JAVA 內部類Java
- Java--內部類Java
- java的內部類Java
- java內部類之成員內部類之匿名內部類Java
- java內部類,區域性內部類,靜態內部類,匿名內部類Java
- Java內部類詳解-- 成員內部類Java
- java內部類,為什麼需要內部類?Java
- Java內部類和匿名內部類的用法Java
- 夯實Java基礎系列8:深入理解Java內部類及其實現原理Java
- 夯實Java基礎系列18:深入理解Java內部類及其實現原理Java
- Java類與匿名內部類Java
- 10-Java內部類——成員內部類、區域性內部類、匿名內部類Java
- Java內部類詳解--區域性內部類Java
- java內部類之成員內部類例項Java
- java內部類之成員內部類之區域性內部類Java
- 淺談java內部類Java
- Java-InnerClass內部類Java
- Java內部類詳解Java
- Java 內部類詳解Java
- java靜態內部類Java
- JAVA內部類有關Java
- java內部類的理解Java
- JAVA內部類學習Java