为什么你不能在Java中声明一个类是静态的?

为什么你不能在Java中声明一个类是静态的?


只有嵌套的类可以是静态的。 通过这样做,您可以使用嵌套类而不需要外部类的实例。

class OuterClass{
    public static class StaticNestedClass{
    }

    public class InnerClass{
    }

    public InnerClass getAnInnerClass(){
        return new InnerClass();
    }

    //This method doesn't work
    public static InnerClass getAnInnerClassStatically(){
        return new InnerClass();
    }
}

class OtherClass{
    //Use of a static nested class:
    private OuterClass.StaticNestedClass staticNestedClass = new OuterClass.StaticNestedClass();

    //Doesn't work
    private OuterClass.InnerClass innerClass = new OuterClass.InnerClass();

    //Use of an inner class:
    private OuterClass outerclass= new OuterClass();
    private OuterClass.InnerClass innerClass2 = outerclass.getAnInnerClass();
    private OuterClass.InnerClass innerClass3 = outerclass.new InnerClass();
}

来源:

  • 关于嵌套类的Oracle教程
  • 在同一主题上:

  • Java:静态与非静态内部类
  • Java内部类和静态嵌套类

  • 带有私有构造函数的类是静态的。

    像这样声明你的班级:

    public class eOAuth {
    
        private eOAuth(){}
    
        public final static int    ECodeOauthInvalidGrant = 0x1;
        public final static int    ECodeOauthUnknown       = 0x10;
        public static GetSomeStuff(){}
    
    }
    

    你可以在不初始化的情况下使用

    if (value == eOAuth.ECodeOauthInvalidGrant)
        eOAuth.GetSomeStuff();
    ...
    

    所以,我迟到了晚会,但这是我的两分钱 - 在科林赫伯特的答案的哲学上增加。

    在高层次上,你的问题涉及对象和类型之间的差异。 虽然有很多汽车(物体),但只有一个汽车类(类型)。 将某些东西声明为静态意味着您正在“类型”空间中操作。 只有一个。 顶级类关键字已经在“类型”空间中定义了一个类型。 结果“公共静态类车”是多余的。

    链接地址: http://www.djcxy.com/p/76127.html

    上一篇: Why are you not able to declare a class as static in Java?

    下一篇: Static variables in JavaScript