2013-03-16 49 views
11

我見過類在java中被聲明,但是很困惑:
由於class用於創建對象,而不同的對象有不同的內存分配。
那麼什麼是"static"用於聲明一個類時,是否表示member variables都是static
這有道理嗎?爲什麼在Java中將類聲明爲static?

+1

請參閱[此答案](http://stackoverflow.com/a/3584151/545637)。 – Apalala 2013-03-16 10:54:17

回答

21

首先,你不能讓頂級的靜態。你只能使一個嵌套類靜態。通過使嵌套類靜態化,你基本上說你不需要嵌套類的實例來從你的外部類/頂級類中使用它。

實施例:

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 { 

      } 
     } 
    } 
} 
+5

根據定義,內部類是非靜態的。 – assylias 2013-03-16 10:57:55

+0

@assylias true .. :),編輯 – PermGenError 2013-03-16 10:59:01

+0

@ PermGenError,所以最多有兩個級別。 – Al2O3 2013-03-16 11:04:58

5

嵌套類(一個類內的類)是唯一可以聲明爲靜態的類。這是因爲父類不必被實例化來訪問嵌套類。

有一個在this answer

0

一些很好的示例代碼它只是描述這班與包含類的關係。

內部類是在另一個類的範圍內定義的類。內部類的實例被附加到容器類的特定實例(它們被創建的實例)。

靜態嵌套類是嵌套類,但被定義爲靜態。與靜態成員一樣,它們與特定實例沒有關係;他們只屬於包含類。在嵌套類中,不能引用包含類的非靜態成員/方法,因爲沒有與它們關聯的特定實例。

相關問題