为什么在Java中不能将类声明为静态?


当前回答

当然可以,但只能是内部嵌套类。在这里,它意味着嵌套类的实例不需要外部类的封闭实例。

但是对于顶级类,语言设计者想不出任何有用的关键字,所以它是不允许的。

其他回答

唯一可以是静态的类是内部类。下面的代码工作得很好:

public class whatever {
    static class innerclass {
    }
}

静态内部类的意义在于它们没有外部类对象的引用。

您可以在Eclipse中的PlatformUI中查看带有静态方法和私有构造函数的类,该类本身是final的。

public final class <class name>
{
   //static constants
   //static memebers
}

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

像这样声明你的类:

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();
...

您可以通过声明一个没有实例的enum类型来创建一个实用程序类(它不能创建实例)。也就是说,你明确地声明没有实例。

public enum MyUtilities {;
   public static void myMethod();
}

我们在java中编写的所有代码都包含在一个类中。每当我们运行一个类时,JVM都会实例化一个对象。JVM可以创建许多对象,根据定义,静态意味着对所有对象都有相同的复制集。

所以,如果Java允许顶级类是静态的,无论何时你运行一个程序,它都会创建一个对象,并保持在相同的内存位置上重写。

如果你只是在每次运行时替换对象,那么创建它有什么意义呢?

这就是Java摆脱顶级类静态的原因。

可能有更具体的原因,但这对我来说更合乎逻辑。