java-静态类中的非静态字段

java-静态类中的非静态字段,java,Java,这是我第一次遇到这样的代码模式,高级大师可能对此相当熟悉: public static class Myclass{ public static class myChildClass{ public int a =1; //this doesn't give an error although I expected it should be declared static } } 我不能实例化静态内部类,也不能访问类外部的变量inta,那么这个变量对类来

这是我第一次遇到这样的代码模式,高级大师可能对此相当熟悉:

public static class Myclass{
    public static class myChildClass{
        public int a =1;   //this doesn't give an error although I expected it should be declared static
    }
}  

我不能实例化静态内部类,也不能访问类外部的变量
inta
,那么这个变量对类来说是私有的吗?为什么java允许它,而不是抱怨它被声明为静态的


我无法实例化静态内部类

当然,你可以:

Myclass.myChildclass m = new Myclass.myChildclass();
我不能在类外访问变量int a

是的,你可以:

System.out.println(m.a);
那么这个变量对类是私有的吗

不,因为这不是私人的

为什么java允许它,而不是抱怨它被声明为静态的


我认为您误解了静态类是什么:它只是一个嵌套类,没有对创建它的封闭类的实例的隐式引用。它的成员不需要是静态的。

“这不会给出错误”这是无效的代码:你会在其他地方得到错误。“我不能实例化静态内部类”为什么不?@AndyTurner,我不能实例化静态类,因为根据定义,没有静态类的实例。。。我想是吧?让我们考虑一下Myclass什么时候也static@Sheri,谢谢编辑,tiRevision 2很好,修订版1和3未编译。与C#不同,Java没有静态类的概念(不允许使用实例)。在Java中,这样的事情通常只通过一个私有构造函数来存档。如果我们不能实例化一个静态类,为什么我们可以实例化一个静态类的静态内部类?@juztcode“如果我们不能实例化一个静态类”,我们可以,所以你剩下的问题没有意义。(另外,“静态内部类”在术语上是矛盾的)。@juztcode没有
静态
vs
静态内部
类,只有一个类被声明为另一个类的静态变量。这只是和其他课程一样的另一门课。Java没有类似的东西。您可以通过创建私有构造函数(从未调用)来防止实例化,例如,请参见。@AndyTurner,我认为java与其他语言类似,但正如Johannes指出的那样,情况并非如此。那么静态类的意义是什么呢?它有一个不被实例化的选项?