- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含静态和非静态变量和方法的 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;
}
我还需要一个静态方法,这样其他类就可以在没有 Controller 实例的情况下访问它。下面是对该方法的调用:
int askYear = Controller.getModel().getYear();
我遇到的问题是,当我使用上一行代码时,它似乎调用了私有(private)静态对象的新实例 - OpenProgramView。我知道这一点,因为它在测试过程中不应该弹出。我还将其他 View 从非静态更改为静态以查看会发生什么,当我使用静态方法时它们也会弹出,但非静态 View 不会弹出。
我的问题 - 为什么会这样?似乎当我调用静态方法时,它正在 Controller 中创建所有静态类变量的新实例并产生问题。
编辑:
我没有指定这只会在我测试这段特定代码时发生。出现这个问题时我还没有创建 Controller 对象,因此我第一次接触 Controller 类是调用静态方法。
当我在测试模式下运行程序并实际将其用于功能目的时 - 在创建程序时已经创建了一个 Controller 对象,因此,一旦我调用静态方法就不会发生这个问题,因为这不是我第一次“接触”这门课。感谢您的帮助。
最佳答案
那是因为第一次接触类(调用方法、访问字段或创建对象)时,所有静态字段都将被初始化。。 p>
这是由 Java 语言规范保证的,您不能对此做太多事情:
关于java - 调用静态方法时创建静态类变量 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28226477/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!