当非静态类可以有静态方法和变量时,为什么静态类不能有非静态方法和变量?
在非静态类中使用静态方法和变量有什么好处?虽然在非静态类中使用静态构造函数是可以理解的。
答案 0 :(得分:27)
静态类无法在第一时间实例化,因此即使您可以声明非静态(实例)成员,也永远无法访问它们。由于这个原因确实没有一点允许它,语言只是禁止它。
请记住,静态类只是类,而有两件事与非静态类直接相关:类本身,以及类的实例/对象。
非静态类可以同时包含静态成员和非静态成员,以便静态成员应用于类,而非静态成员应用于该类的实例。
答案 1 :(得分:2)
静态类不能包含非静态成员,因为根据定义它无法实例化,因此不可能使用这些成员。
但是,非静态类中的静态成员可以在没有类实例的情况下使用 - 有点不同的情况,即实用方法或工厂方法。
答案 2 :(得分:-1)
假设您有一个具有字段名称的Person类。而且,为了便于讨论,我们假设Java确实允许静态方法直接访问非静态成员变量。然后,我们可以为Person指定一个getName静态方法,如下所示:
class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public static String getName() {
return name;
}
}
现在让我们尝试在示例中使用此类:
public static void main(String[] args) {
Person alice = new Person("Alice");
Person bob = new Person("Bob");
System.out.println("name: " + Person.getName());
}
所以告诉我,在此示例中,我们希望Person.getName()打印什么?爱丽丝?鲍勃?空值?
没有正确的答案。这没有任何意义,因为名称是属于个人(实例)的东西,而不是整个类的东西。显然,我们无法使用静态方法访问非静态成员,因为我们无法知道应该访问哪些非静态成员。