静态类变量是在调用静态方法时创建的 - Java

时间:2015-01-29 23:13:45

标签: java model-view-controller static controller

我有一个控制器类,它包含静态和非静态变量和方法。

public class Controller 
{
    // Model that will be used throughout the program
    private static Model model;
    private static ArrayList<Model> modelList = new ArrayList<Model>();

    // User Views
    private static OpenProgramView initialView = new OpenProgramView();
    private DriverProfileView driverProfileView;
}

我还需要一个静态方法,以便其他类可以在没有控制器实例的情况下访问它。以下是对此方法的调用:

int askYear = Controller.getModel().getYear();

我遇到的问题是,当我使用上一行代码时,它似乎调用了私有静态对象的一个​​新实例 - OpenProgramView。我知道这是因为它在测试期间不应该弹出。我还将其他视图从非静态更改为静态以查看会发生什么,并且当我使用静态方法时它们也会弹出,但是非静态视图没有弹出。

我的问题 - 为什么会发生这种情况?似乎当我调用静态方法时,它正在控制器中创建所有静态类变量的新实例,并且正在创建一个问题。

编辑:

我没有指定只有在我测试这段特定代码时才会发生这种情况。出现此问题时,我还没有创建一个Controller对象,因此第一次触摸Controller类时,调用静态方法。

当我运行程序退出测试模式并实际将其用于功能目的时 - 在创建程序时已经创建了一个Controller对象,因此,一旦我调用静态方法就不会发生这个问题,因为它不是我第一次触及&#34;班级。谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

那是因为第一次触摸类(调用方法,访问字段或创建对象)所有静态字段都将被初始化

Java语言规范保证了这一点,你无法真正做到这一点:

  • 将修改器更改为非静态或
  • 懒洋洋地初始化您的观点