调用静态方法时创建静态 class 变量 - Java
Static class variables are created when Static methods are being called - Java
我有一个控制器 class,它有静态和非静态变量和方法。
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;
}
我还需要一个静态方法,以便其他 classes 可以在没有控制器实例的情况下访问它。以下是对该方法的调用:
int askYear = Controller.getModel().getYear();
我遇到的问题是,当我使用上一行代码时,它似乎调用了私有静态对象的新实例 - OpenProgramView。我知道这一点,因为它在测试过程中不应该弹出。我还将其他视图从非静态更改为静态以查看会发生什么,当我使用静态方法时它们也会弹出,但非静态视图不会弹出。
我的问题 - 为什么会这样?似乎当我调用静态方法时,它正在为控制器中的所有静态 class 变量创建一个新实例,并且正在创建一个问题。
编辑:
我没有指定这仅在我测试这段特定代码时发生。出现这个问题时我还没有创建控制器对象,因此我第一次接触控制器 class 是对静态方法的调用。
当我 运行 程序退出测试模式并实际将其用于功能目的时 - 在创建程序时已经创建了一个 Controller 对象,因此,一旦我调用静态方法,因为这不是我第一次 "touched" class。感谢您的帮助。
那是因为第一次接触class(调用方法、访问字段或创建对象)所有静态字段将被初始化.
Java 语言规范保证了这一点,您对此无能为力:
- 将修饰符更改为非静态或
- 懒惰地初始化您的视图
我有一个控制器 class,它有静态和非静态变量和方法。
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;
}
我还需要一个静态方法,以便其他 classes 可以在没有控制器实例的情况下访问它。以下是对该方法的调用:
int askYear = Controller.getModel().getYear();
我遇到的问题是,当我使用上一行代码时,它似乎调用了私有静态对象的新实例 - OpenProgramView。我知道这一点,因为它在测试过程中不应该弹出。我还将其他视图从非静态更改为静态以查看会发生什么,当我使用静态方法时它们也会弹出,但非静态视图不会弹出。
我的问题 - 为什么会这样?似乎当我调用静态方法时,它正在为控制器中的所有静态 class 变量创建一个新实例,并且正在创建一个问题。
编辑:
我没有指定这仅在我测试这段特定代码时发生。出现这个问题时我还没有创建控制器对象,因此我第一次接触控制器 class 是对静态方法的调用。
当我 运行 程序退出测试模式并实际将其用于功能目的时 - 在创建程序时已经创建了一个 Controller 对象,因此,一旦我调用静态方法,因为这不是我第一次 "touched" class。感谢您的帮助。
那是因为第一次接触class(调用方法、访问字段或创建对象)所有静态字段将被初始化.
Java 语言规范保证了这一点,您对此无能为力:
- 将修饰符更改为非静态或
- 懒惰地初始化您的视图