Java嵌套类的使用
嵌套類是指被定義在另一個類內部的類,它為外部類提供服務。嵌套類分四種:靜態成員類、非靜態成員類、匿名類和局部類。
一、靜態成員類與非靜態成員類的區別?在什么情況下可以用靜態成員類?
我們知道在類的設計中,為了避免繼承破壞封裝性,組合優于繼承。通過使用成員類來實現組合設計,需要足夠了解它們的特性以及在何時使用。
從表面上看,靜態成員類只是比非靜態的成員類在聲明上多出了修飾符static。盡管它們功能相似,但與實際上,非靜態成員類的每個實例都隱含關聯著一個外部類的實例。也就是說,非靜態成員類不可能獨立于它的外部類實例之外而獨立存在。
公有靜態成員類可作為輔助類,如Compass類中的枚舉Dir:
View Code 1 package com.mnid.innerclass;2
3 public class Compass {
4 private Dir direction = Dir.SOUTH;
5
6 public static enum Dir {
7 EAST, SOUTH, WEST, NORTH;
8 }
9
10 public Dir directing() {
11 //Bulk of class omitted
12 return direction;
13 }
14 }
使用私有的靜態成員類常見方法是用來代表外圍類所代表的對象的組件,如一個Map實例,它的內部都有一個Entry對象對應Map中的所有鍵-值對,但Entry本身不需要訪問Map,因此可以使用私有靜態成員類設計。
非靜態成員類實例都額外的對外部類實例的引用會引起不必要的開銷。如果成員類不需要訪問外部類實例,就應該將其聲明為static的。
二、匿名類的限制和使用以及局部類
匿名類在聲明的同時就進行實例化。它不是外部類的成員,并且只有在非靜態環境中才有外圍實例引用。
匿名類的常見用法是動態創建函數對象:
View Code 1 public String fetchShortest(String[] strArray) {2
3 Arrays.sort(strArray, new Comparator<String>() {
4
5 @Override
6 public int compare(String s1, String s2) {
7 return s1.length() - s2.length();
8 }
9 });
10 return strArray[0];
11 }
其他常見用法包括創建過程對象,如Runable、Thread;在靜態工廠方法內部也經常用到。
局部類可以在任何聲明局部變量的地方聲明,其特性與其他三種嵌套類一樣。
聲明匿名類和局部類時需非常簡短,以免影響可讀性。
轉載于:https://www.cnblogs.com/dummyE/archive/2012/01/14/2322297.html
總結
以上是生活随笔為你收集整理的Java嵌套类的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于jQuery获取Action返回的J
- 下一篇: wtl重载 CListViewCtrl,