当非静态类可以拥有静态方法和变量时,为什么静态类不能拥有非静态方法和变量呢?
在非静态类中使用静态方法和变量有什么好处?尽管在非静态类中使用静态构造函数是可以理解的。
发布于 2011-10-16 18:56:15
静态类首先不能被实例化,所以即使你可以声明非静态(实例)成员,它们也永远不能被访问。因为确实没有理由允许这样做,所以语言简单地禁止了它。
请记住,静态类就是类,而与非静态类有直接关系的有两件事:类本身和类的实例/对象。
非静态类可以同时具有静态和非静态成员,因此静态成员应用于该类,而非静态成员应用于该类的实例。
发布于 2011-10-16 18:57:47
静态类不能包含非静态成员,因为根据定义它不能被实例化,所以不可能使用这些成员。
然而,非静态类中的静态成员可以在没有类实例的情况下使用-有一点不同的场景,即用于实用方法或工厂方法。
发布于 2020-02-19 02:13:34
假设您有一个拥有字段名的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()打印什么?爱丽丝?鲍勃?空吗?
没有正确的答案。这没有意义,因为名称是属于个人(实例)的东西,而不是属于整个类的东西。因此,很明显,我们不能让静态方法访问非静态成员,因为我们无法知道应该访问哪些非静态成员。
https://stackoverflow.com/questions/7783828
复制相似问题