理解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()工作,但有警告。但这甚至不是我想要的,所以这完全没关系