有人可以帮我理解以下声明的含义吗?
“与任何方法一样,静态方法可以创建或 使用其类型的命名对象 ,因此静态方法通常用作 “牧羊人”为一群自己类型的实例 。“
答案 0 :(得分:1)
以下是一个例子:假设您有一个类Person
,如下所示:
public class Person {
static ArrayList<Person> people = new ArrayList<>();
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
people.add(this);
}
public void display() {
System.out.println(name + ", age " + age);
}
public static void displayAll() {
for (int i=0; i<people.size(); i++) {
people.get(i).display();
}
}
}
在此示例中,people
属于Person
类本身,因为它是静态的,而name
和age
是非静态的,属于每个{{1} } instance
。同样,因为Person
是静态的,所以只能由displayAll()
调用,而非静态Person
只能由display()
的单个实例调用。
为了说明这一点,请说你在主要课程中有这个:
Person
这会创建两个Person john = new Person("John", 25);
Person amy = new Person("Amy", 27);
System.out.println(john.name + " is " + john.age);
System.out.println(amy.name + " is " + amy.age);
,Person
和john
的实例,并会提供以下输出:
amy
以下代码也可以使用(假设此处的所有示例John is 25
Amy is 27
和john
已经创建,如上例所示):
amy
这会给出这个输出:
john.display();
amy.display();
现在,因为John, age 25
Amy, age 27
和john
是amy
的特定实例,所以它们不能引用静态变量或调用静态方法,因此这两行代码都不可编译:< / p>
Person
但是,以下方法可行:
System.out.println(john.people.size());
amy.displayAll();
这会给出这个输出:
System.out.println(Person.people.size());
Person.displayAll();
但是,以下情况不起作用:
2
John, age 25
Amy, age 27
Person.display();
System.out.println(Person.name);
System.out.println(Person.age);
不起作用,因为Person.display()
不是静态方法。接下来的两行不起作用,因为变量display()
和name
属于age
的特定实例,并且一般不适用于Person
类。 / p>