有時候, 使用內部類只是爲了把一個類隱藏在另外一個類的內部,並不需要內部類引用外圍類對象。爲此,可以將內部類聲明爲 static, 以便取消產生的引用。下面是一個使用靜態內部類的典型例子。考慮一下計算數組中最小值和最大值的問題。當然, 可以編寫兩個方法, 一個方法用於計算最小值,另一個方法用於計算最大值。在調用這兩個方法的時候,數組被遍歷兩次。如果只遍歷數組一次, 並能夠同時計算出最小值和最大值,那麼就可以大大地提高效率了。
double min = Double.POSITIVE_INFINITY;
double max = Double.NECATIVE.INFINITY;
for (double v : values){
if (min > v) min = v;
if (max < v) max = v;
}
然而, 這個方法必須返冋兩個數值, 爲此, 可以定義一個包含兩個值的類 Pair:
class Pair{
private double first;
private double second;
public Pair(double f, double s){
first = f;
second = s;
}
public double getFirstO { return first; }
public double getSecondO { return second; }
}
minmax 方法可以返回一個 Pair 類型的對象。
class ArrayAlg{
public static Pair minmax(doublet] values){
return new Pair(min, max) ;
}
}
當然, Pair 是一個十分大衆化的名字。在大型項目中, 除了定義包含一對字符串的 Pair類之外, 其他程序員也很可能使用這個名字。這樣就會產生名字衝突。解決這個問題的辦法是將 Pair 定義爲 ArrayAlg 的內部公有類。此後, 通過 ArrayAlg.Pair 訪問它:
ArrayAlg.Pair p = ArrayAlg.minmax(d);
不過, 與前面例子中所使用的內部類不同, 在 Pair 對象中不需要引用任何其他的對象,爲此, 可以將這個內部類聲明爲 static: