Java內部類詳解(三)

2021-06-18 21:10:09 字數 1435 閱讀 2579

首先,靜態內部類實際上與普通類(即類名必須與檔名一樣的頂級類)一樣,只是靜態內部類在某一類的內部定義了而已,既然是類,要想使用就必須例項化。概念上與靜態變數、靜態方法是不一樣的,不要被「靜態」兩個字迷惑了(不要以為凡是靜態的東西就不需要例項化就可以直接使用,靜態內部類是有區別),而且只有靜態內部類,而沒有靜態類(頂級類)的概念。例如,下面定義類是錯誤的:

public static class testclass 

}

如果你不需要內部類物件與其外部類物件之間有聯絡,那你可以將內部類宣告為static。這通常稱為巢狀類(nested class)。static nested class是被宣告為靜態(static)的內部類,它可以不依賴於外部類例項被例項化。而通常的內部類需要在外部類例項化後才能例項化。想要理解static應用於內部類時的含義,你就必須記住,普通的內部類物件隱含地儲存了乙個引用,指向建立它的外部類物件。然而,當內部類是static的時,就不是這樣了。巢狀類意味著: 

1. 巢狀類的物件,並不需要其外部類的物件。 

2. 不能從巢狀類的物件中訪問非靜態的外部類物件。 

如下所示**為定義乙個靜態巢狀類:

public class statictest 

} public void printinfo()

public static void main(string args)

}

總結:

1. 靜態內部類可以有靜態成員(方法,屬性),而非靜態內部類則不能有靜態成員(方法,屬性)。

2. 靜態內部類只能夠訪問外部類的靜態成員,而非靜態內部類則可以訪問外部類的所有成員(方法,屬性)。

3. 例項化乙個非靜態的內部類的方法:

a. 先生成乙個外部類物件例項

outclasstest oc1 = new outclasstest();

b. 通過外部類的物件例項生成內部類物件

outclasstest.innerclass no_static_inner = oc1.new innerclass();

4. 例項化乙個靜態內部類的方法:

a. 不依賴於外部類的例項,直接例項化內部類物件

outclasstest.innerstaticclass inner = new outclasstest.innerstaticclass();

b. 呼叫內部靜態類的方法或靜態變數,通過類名直接呼叫

outclasstest.innerstaticclass.static_value

outclasstest.innerstaticclass.getmessage()

public inte***ce testinte***ce 

}}class test

}



java內部類詳解

成員內部類 作為外部類的乙個成員存在,與外部類的屬性 方法並列。成員內部類中,不能定義靜態成員 成員內部類中,可以訪問外部類的所有成員 在內部類中訪問內部類自己的變數直接用變數名 在內部類中訪問內部類自己的變數也可以用this.變數名 在內部類中訪問外部類中與內部類同名的例項變數用外部類名.this...

java內部類詳解

內部類是一種類的結構擴充,讓乙個類的內部除了屬性與方法之外還可以存在有其它類的結構,並且內部類也可以定義在方法或 塊中,但是從開發的角度來講,要盡量避免使用內部類,優先考慮普通類。乙個內部類的例子 class outer public void fun public class testdemo 那...

java基礎 內部類詳解

內部類 成員內部類 非靜態的 區域性內部類 匿名內部類 靜態內部類。員內部類 作為外部類的成員存在,與成員變數和成員方法平級關係 宣告 public class out 成員變數 成員方法 成員內部類 訪問許可權 class in 成員變數 成員方法 語法說明 成員內部類的訪問許可權 任意的 思考如...