理解Java中的静态方法
有人能帮我理解下面这句话的意思吗 与任何方法一样,静态方法可以创建或使用其类型的命名对象,因此静态方法通常被用作自己类型的一群实例的“守护者”理解Java中的静态方法,java,static,static-methods,Java,Static,Static Methods,有人能帮我理解下面这句话的意思吗 与任何方法一样,静态方法可以创建或使用其类型的命名对象,因此静态方法通常被用作自己类型的一群实例的“守护者” 来源:这里有一个例子:假设你有一个类人,看起来像这样: public class Person { static ArrayList<Person> people = new ArrayList<>(); String name; int age; public Person(String nam
来源:这里有一个例子:假设你有一个类
人
,看起来像这样:
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();
}
}
}
这将创建Person
、john
和amy
的两个实例,并将给出以下输出:
John is 25
Amy is 27
下面的代码也可以工作(假设在此之后的所有示例中,john
和amy
已经像前面的示例一样创建):
这将产生以下输出:
John, age 25
Amy, age 27
2
John, age 25
Amy, age 27
现在,由于john
和amy
是Person
的特定实例,它们不能引用静态变量或调用静态方法,因此下面两行代码都将无法编译:
System.out.println(john.people.size());
amy.displayAll();
但是,以下措施可行:
System.out.println(Person.people.size());
Person.displayAll();
这将产生以下输出:
John, age 25
Amy, age 27
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
的特定实例,一般不适用于Person
类。坦率地说,静态
方法可以创建任意数量的任何类型的实例。不知道作者想说什么。你可能应该在那个网站上问这个问题。理想情况下,你应该在那个网站上留下你的问题,因为我看到有一个框可以这样做。@JunedAhsan我同意。我不明白为什么StackOverflow应该被视为任意互联网垃圾的验证站点。为什么你必须如此粗鲁地称之为垃圾?成千上万的人从其他网站上阅读和学习,如果他们学习了错误的东西,他们应该得到纠正(即使这需要StackOverflow的帮助)。这不是StackExchange的全部要点:向每个人传授正确的知识吗?感谢贝瑟尼·路易斯的伟大榜样。那帮了大忙!只是为了让您知道amy.displayAll()代码>工作,但有警告。但这甚至不是我想要的,所以这完全没关系