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


当前回答

我认为这可能就像喝一杯咖啡一样简单! 看看这个。 定义类时不显式使用static关键字。

public class StaticClass {

    static private int me = 3;
    public static void printHelloWorld() {
       System.out.println("Hello World");
    }



    public static void main(String[] args) {
        StaticClass.printHelloWorld();
        System.out.println(StaticClass.me);
    }
}

这不是静态类的定义吗? 我们只使用绑定到类的函数。 注意,在这种情况下,我们可以在该嵌套中使用另一个类。 看看这个:

class StaticClass1 {

    public static int yum = 4;

    static void  printHowAreYou() {
        System.out.println("How are you?");
    }
}

public class StaticClass {

    static int me = 3; 
    public static void printHelloWorld() {
       System.out.println("Hello World");
       StaticClass1.printHowAreYou();
       System.out.println(StaticClass1.yum);
    }



    public static void main(String[] args) {
        StaticClass.printHelloWorld();
        System.out.println(StaticClass.me);
    }
}

其他回答

如果使用静态类的好处是不实例化对象并使用方法,那么只需将类声明为公共,并将此方法声明为静态。

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

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

所以,我来晚了,但这是我的两种观点——哲学上补充科林·赫伯特的答案。

在高层次上,你的问题涉及对象和类型之间的区别。虽然有很多Car(对象),但只有一个Car类(类型)。将某些内容声明为静态意味着您在“类型”空间中操作。只有一个。顶级类关键字已经在“type”空间中定义了一个类型。因此,“公共静态类Car”是多余的。

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

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

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

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

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

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

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