Java內部類解析

2021-09-12 09:50:44 字數 2173 閱讀 2962

內部類是定義在另乙個類中的類。

內部類分類:區域性內部類,匿名內部類,靜態內部類。

有些時候,使用內部類只是為了把乙個類隱藏在另外乙個類的內部,而且並不需要這個內部類引用外圍類物件,此時可以將內部類宣告為static,以便取消產生的引用。下面是乙個使用靜態內部類的經典例子。考慮一下計算陣列中最大值和最小是的問題。當然可以編寫兩個方法,乙個求最大值,乙個求最小值。但是這樣做的後果是需要遍歷陣列兩次。假如要求我們只允許遍歷一次陣列,那麼怎麼辦?這樣的好處是提高了效率。

其實遍歷一次陣列可以求出最大值與最小值,**如下:

double min =double.max_value;

double max =double.min_value;

for (double

v : values)

但是從上述**中我們發現,需要返回max和min兩個值。這個時候我們需要乙個pair的物件來存放我們最後需要返回的最大值與最小值。

pair類的結構如下**所示:

class

pair

//getter and setter

public

double

getfirst()

public

double

getsecond()

}

但是如果將pair宣告為單獨的乙個類,而pair這個名字又特別大眾化,可能會和專案中的其他類名衝突(比如在同乙個包下,兩個不同的public class中都定義了乙個叫做pair的外部類,就會編譯錯誤)。解決這個問題的方法就是將pair定義為arrayalg的內部類。此後通過如下方式進行訪問。

arrayalg.pair p = arrayalg.minmax(d);
arrayalg的**結構如下:

class

arrayalg

//getter and setter

public

double

getfirst()

public

double

getsecond()

}//計算陣列中的最大值與最小值

public

static pair minmax(double

values)

//最大值最小值有兩個數,所以返回乙個pair例項

return

newpair(min, max);}}

注意點:

因為在pair物件中不需要引用任何其他的物件,所以可以將這個pair內部類宣告為static。

在我們上述列舉的示例中,必須使用靜態內部類,這是因為內部類物件(new pair(min, max);)是在靜態方法(public static pair minmax(double values) )中構造的。靜態方法(類方法,而不是物件的方法)中使用的變數必須是靜態變數(類變數,而不是物件中的變數)。

靜態內部類與普通內部類的區別

靜態內部類中不能訪問外圍類中的屬性與方法,而普通內部類是可以訪問外圍類中的屬性與方法的,即使這些屬性與方法是private的。

靜態內部類相當於外部類的成員,只有在第一次被使用的時候才會被裝載。

完整的靜態內部類例項

package

edu.sjtu.erplab.innerclass;

public

class

staticinnerclasstest

}class

arrayalg

//getter and setter

public

double

getfirst()

public

double

getsecond()

}//計算陣列中的最大值與最小值

public

static pair minmax(double

values)

//最大值最小值有兩個數,所以返回乙個pair例項

return

newpair(min, max);}}

posted @

2012-06-06 14:38

xwdreamer 閱讀(

...)

編輯收藏

Java內部類解析

內部類是定義在另乙個類中的類。內部類分類 區域性內部類,匿名內部類,靜態內部類。有些時候,使用內部類只是為了把乙個類隱藏在另外乙個類的內部,而且並不需要這個內部類引用外圍類物件,此時可以將內部類宣告為static,以便取消產生的引用。下面是乙個使用靜態內部類的經典例子。考慮一下計算陣列中最大值和最小...

Java內部類 Java例項內部類

例項內部類是指沒有用 static 修飾的內部類。示例 如下 public class outer 上述示例中的 inner 類就是例項內部類。例項內部類有如下特點。1 在外部類的靜態方法和外部類以外的其他類中,必須通過外部類的例項建立內部類的例項。public class outer inner1...

Java內部類 靜態內部類

靜態內部類是外部類的靜態成員,不依賴於外部類的物件而存在,因此在外部類外面建立靜內部類物件時不需要首先建立外部類的物件 靜態內部類也可以稱為靜態巢狀類或頂級巢狀類。靜態內部類與外部類物件之間不存在著對成員的共享關係,靜態內部類其實已經脫離了外部類的控制 static關鍵字只是說明其在建立物件的時候不...