2013-08-02 133 views
0

我讀的Java的思維',我也遇到了一些奇怪的例子(對我來說)靜態嵌套類

class StaticTest { 
    static class StaticClass { 
     int i = 5; 
    } 
} 

public class I { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     StaticTest.StaticClass t = new StaticTest.StaticClass(); 
    } 

} 

怎麼可能創建靜態類的實例?規則「你不能創建靜態類的實例」是一些例外嗎?

在此先感謝

+3

你聽到的地方 - *你不能創建靜態的實例cl屁股*?讓我提醒你,你不能讓你的頂級課程變得靜止。 –

+0

您是否將靜態與抽象混淆? –

+0

你認爲單身人士如何工作? :) – Shark

回答

1

在類的情況下,修飾符靜態描述外部類和內部類之間的關係。

如果內部類不是靜態的,則它綁定到外部類的實例,並且不能從外部創建。

靜態內部類可以完全創建而沒有外部類的實例,但具有對類成員的特權訪問。

0

一個static類無非是一類多,但不同的地方它的代碼被放置。

因此,您可以創建靜態類的實例。唯一的區別是你必須提供類的名稱,它嵌套在static之一(如你的代碼片段所示)。

StaticTest.StaticClass t = new StaticTest.StaticClass(); 
0

有關爲靜態嵌套類創建實例的Java docs

And like static class methods, a static nested class cannot refer directly to instance  
variables or methods defined in its enclosing class — it can use them only through an 
object reference. 

For example, to create an object for the static nested class, use this syntax: 

OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();

0
在這種情況下靜態

描述的關係的B/W內外類

它不意味內部類是靜態

靜態嵌套類犯規調用非靜態方法或訪問它嵌套的類的實例的非靜態字段