Java基礎--Java 內部類

百聯達發表於2013-06-22
     巢狀類是定義在另一個類的內部的類。巢狀類存在的目的應該只是為它的外部類提供服務。如果巢狀類可能會用於其它的某個場景中,它就應該是頂層類。巢狀類有四種:靜態成員類,非靜態成員類,區域性類和匿名類,除了第一種外,其它三種都被稱為內部類。

一:靜態成員類
      靜態成員類可以看做是普通的類,只是碰巧被宣告在另一個類的內部而已。它的一種常見的用法是作為共有的輔助類,僅當與它的外部類一起使用時才有意義。比如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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章