我试图找到为什么不能将类创建为静态?像:
public static class Qwert{
public static void main(String args[]){
int x = 12;
while(x<12){
x--;
}
System.out.println(" the X value is : "+ x);
}
}
答案 0 :(得分:57)
在Java中,static
关键字通常将一个方法或字段标记为每个类的实例不存在一次,但是一次。一个类无论如何都存在,所以实际上,所有类都是以这种方式“静态”,所有对象都是类的实例。
static
确实对内部类有意义,这完全不同:通常内部类实例可以访问它所绑定的外部类实例的成员,但是如果内部类是static
,它没有这样的引用,可以在没有外部类的实例的情况下实例化。也许你在某个地方看到了它,然后尝试在顶级类中使用它,它没有意义。
或者你可能在其他语言中看到它,比如C#,它的语法非常像Java。
(有一次我无法弄清楚为什么外部类实例没有被垃圾收集 - 这是因为我在其他地方保留了对其内部类实例之一的引用,而内部类不是{ {1}}因此引用了外部类实例。所以默认情况下,我现在创建内部类static
。)
答案 1 :(得分:8)
要防止特定类被实例化,您应该添加一个私有的构造函数。这会阻止“任何其他”类创建Qwert
类型的对象。
例如:
public static class Qwert{
private Qwert() {}
public static void main(String args[]){
int x = 12;
while(x<12){
x--;
}
System.out.println(" the X value is : "+ x);
}
}
答案 2 :(得分:2)
我们应该将成员定义为静态
现在假设我们将外部类定义为静态,并假设我们允许这样做。这是为了任何目的还是为开发人员提供任何优势,还是会给开发人员和语言创建者带来歧义和复杂性?
让我们检查一下,将外部类定义为静态将用于我们上面定义的目的吗?
从上述观点来看,我们可以说Java创建者不允许外部类是静态的,因为没有必要使它成为静态的。允许外部类静态只会增加复杂性,模糊性和欺骗性。阅读Why An Outer Java Class Can’t Be Static
的更多信息答案 3 :(得分:1)
因为当我们为组件使用static关键字时,该组件成为类级组件,其内存由其类获取。
答案 4 :(得分:0)
在 Java 中,根据定义,静态适用于类的内部组件。 “X 是静态的”在 Java 中意味着“X 与定义它的类相关联,而不是与该类的任何实例相关联”。
“静态”一词的字面意思是“固定在内存中的一个位置”。类的每个实例共享一个静态变量或静态成员。因此使用“类变量”作为“静态变量”的同义词。这让您立即看到您不能将外部类定义为静态。
因此,您的类 Qwert 不能创建为静态的。除非它被归入外部类的一个组件,有效地使其成为内部类。