如果返回类型是静态的,则该方法必须是静态的

时间:2015-07-03 19:05:39

标签: java static singleton static-methods static-variables

我正在学习Singleton,我遇到了以下代码块

public class School {
private static School school;
private ArrayList<String> teachers;
private School(){
    teachers = new ArrayList<>();
    teachers.add("adam");
    teachers.add("john");
    teachers.add("jackson");
    teachers.add("jason");
}
public static School getInstance(){
    if (school==null)
        school=new School();
    return school;
}
public String getTeacher(){
    if (!(teachers.size() ==0))
        return teachers.remove(0);
    return "no teachers left";
}

}

正如您所看到的,getInstance()方法是静态的。我在徘徊为什么?

提前感谢您的帮助:)

我知道返回类型不是字面上的静态。这里的返回类型是学校。在Singleton中,必须有一个实例使用它自己的类的静态变量,我得到那个部分并且完全有意义。但我的问题是,为什么设置静态变量的方法也必须是静态的呢?就是那个问题。

3 个答案:

答案 0 :(得分:1)

因为这是Singleton的要点,是整个程序的单个实例。

如果它不是静态的,你必须使用Singleton类的实例来调用getInstance()方法,这没有任何意义。

答案 1 :(得分:1)

常见的设计模式(Singletons)是类的实例字段的用法。该字段必须是静态的(以便可以在没有预先存在的类实例的情况下检索它),因此,访问它的任何方法也必须是静态的。

答案 2 :(得分:1)

返回类型不是静态的。该方法是静态的。请参阅JLS:https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.3.2