我見過類在java
中被聲明,但是很困惑:
由於class用於創建對象,而不同的對象有不同的內存分配。
那麼什麼是"static"
用於聲明一個類時,是否表示member variables
都是static
?
這有道理嗎?爲什麼在Java中將類聲明爲static?
回答
首先,你不能讓頂級的靜態。你只能使一個嵌套類靜態。通過使嵌套類靜態化,你基本上說你不需要嵌套類的實例來從你的外部類/頂級類中使用它。
實施例:
class Outer {
static class nestedStaticClass {
//its member variables and methods (don't nessarily need to be static)
//but cannot access members of the enclosing class
}
public void OuterMethod(){
//can access members of nestedStaticClass w/o an instance
}
}
另外添加,它是非法的聲明一個內部類內部靜態字段,除非它們是常數(換言之,static final
)。由於靜態嵌套類不是內部類,所以你可以在這裏聲明靜態成員。
類可以嵌套在嵌套類嗎?
一句話,是的。看下面的Test
,嵌套的內部類和嵌套靜態類可以在嵌套類中嵌套。但是請記住,您只能在頂級類中聲明靜態類,因此在內部類中聲明它是非法的。
public class Test {
public class Inner1 {
public class Inner2 {
public class Inner3 {
}
}
}
public static class nested1 {
public static class nested2 {
public static class nested3 {
}
}
}
}
根據定義,內部類是非靜態的。 – assylias 2013-03-16 10:57:55
@assylias true .. :),編輯 – PermGenError 2013-03-16 10:59:01
@ PermGenError,所以最多有兩個級別。 – Al2O3 2013-03-16 11:04:58
嵌套類(一個類內的類)是唯一可以聲明爲靜態的類。這是因爲父類不必被實例化來訪問嵌套類。
有一個在this answer
一些很好的示例代碼它只是描述這班與包含類的關係。
內部類是在另一個類的範圍內定義的類。內部類的實例被附加到容器類的特定實例(它們被創建的實例)。
靜態嵌套類是嵌套類,但被定義爲靜態。與靜態成員一樣,它們與特定實例沒有關係;他們只屬於包含類。在嵌套類中,不能引用包含類的非靜態成員/方法,因爲沒有與它們關聯的特定實例。
- 1. 爲什麼默認情況下,varibale在c中聲明爲static?
- 2. 爲什麼不能將Java類聲明爲靜態?
- 3. 爲什麼在Java的Object類中聲明wait()和notify()?
- 4. 爲什麼我們在java中聲明變量爲private
- 5. 爲什麼Java變量聲明中的類型不同?
- 6. 爲什麼WKInterfacePicker會將其視爲未聲明的類型?
- 7. 這個聲明`int fun-name(static int)`在C++中有效,爲什麼?
- 8. 爲什麼要在$(function(){...})中聲明?
- 9. 爲什麼我們要在普通類中聲明靜態類?
- 10. 爲什麼在CakePHP中將debug更改爲0 break static pages?
- 11. 爲什麼我不能在類聲明中使用「使用」聲明?
- 12. 爲什麼try catch中的「catch」聲明類型爲$ e
- 13. 爲什麼在android中使用[static final]?
- 14. 爲什麼C++模板參數應該聲明爲類類型?
- 15. Java爲抽象類聲明類?
- 16. 爲什麼argv []被聲明爲const?
- 17. 爲什麼main不被聲明爲extern
- 18. 爲什麼WebFrameLoadDelegate被視爲未聲明?
- 19. 反應:爲什麼static propTypes
- 20. 爲什麼.position()返回「static」?
- 21. 爲什麼我不能在類中聲明一個字符串?
- 22. 爲什麼只能在頂級類中聲明接口?
- 23. 爲什麼Hugs在我的數據類型聲明中抱怨`|`?
- 24. 爲什麼不能在類中聲明const靜態字符串
- 25. 爲什麼在基類中聲明的簽名被忽略?
- 26. 爲什麼我在一個聲明中獲得多種類型?
- 27. 爲什麼要在類的構造函數中聲明變量?
- 28. 爲什麼要在註釋中聲明PHP變量類型?
- 29. 爲什麼不能將外部聲明用作類型?
- 30. 將接口聲明爲類成員有什麼用處?
請參閱[此答案](http://stackoverflow.com/a/3584151/545637)。 – Apalala 2013-03-16 10:54:17