原文地址:http://blog.csdn.net/yakihappy/archive/2009/03/11/3979858.aspx
如果你不需要內部類對象與其外圍類對象之間有聯繫,那你可以將內部類聲明爲 static 。這通常稱爲嵌套類( nested class )。 Static Nested Class 是被聲明爲靜態( static )的內部類,它可以不依賴於外部類實例被實例化。而通常的內部類需要在外部類實例化後才能實例化。 想要理解 static 應用於內部類時的含義,你就必須記住,普通的內部類對象隱含地保存了一個引用,指向創建它的外圍類對象。然而,當內部類是 static 的時,就不是這樣了。嵌套類意味着:
1. 嵌套類的對象,並不需要其外圍類的對象。
2. 不能從嵌套類的對象中訪問非靜態的外圍類對象。
如下所示代碼爲定義一個靜態嵌套類
在靜態嵌套類內部
,
不能訪問外部類的非靜態成員
,
這是由
Java
語法中
"
靜態方法不能直接訪問非靜態成員
"
所限定
.
注意
,
外部類訪問內部類的的成員
有些特別
,
不能直接訪問
,
但可以通過內部類實例來訪問
,
這是因爲靜態嵌套內的所有成員和方法默認爲靜態的了
.
同時注意
,
內部靜態類
Person
只在類
StaticTest
範圍內可見
,
若在其它類中引用或初始化
,
均是錯誤的
.
一
.
靜態內部類可以有靜態成員,而非靜態內部類則不能有靜態成員。
二
.
靜態內部類的非靜態成員可以訪問外部類的靜態變量
,而不可訪問外部類的非靜態變量;
三 . 非靜態內部類的非靜態成員可以訪問外部類的非靜態變量。
生成一個靜態內部類不需要外部類成員 :這是靜態內部類和成員內部類的區別。靜態內部類的對象可以直接生成: Outer.Inner in = new Outer.Inner(); 而不需要通過生成外部類對象來生成 。這樣實際上使靜態內部類成爲了一個頂級類 ( 正常情況下,你不能在接口內部放置任何代碼,但嵌套類可以作爲接口的一部分,因爲它是 static 的。只是將嵌套類置於接口的命名空間內,這並不違反接口的規則)。