何时执行类静态变量语句?

时间:2017-04-08 18:06:58

标签: java static

我正在用Java构建一个使用BorderLayout的GUI程序。具体而言,它仅使用CENTER,PAGE_END和LINE_END区域。我有一个每个区域的课程,他们经常需要分享信息。我的主要课程和PAGE_END课程的开头是这样的:

public class JSudokuSolver extends JFrame {
    protected static Dimension      sBoardDim = new Dimension(500, 500); 
    protected static Dimension     lineEndDim = new Dimension(200, 500); 
    protected static Dimension     pageEndDim = new Dimension(650, 120); 
    ...

public class PAGE_END_objs {
    static Dimension      pageEndDim = JSudokuSolver.pageEndDim;
    ...

有时这很好用;有时它不会。当它没有时,我在尝试使用' pageEndDim'时得到一个空指针(在这个例子中)。在PAGE_END_objs代码中。然后在Eclipse Neon调试模式下,如果我将鼠标悬停在' JSudokuSolver.pageEndDim'上,我会看到Dimension数据。但是,如果我将鼠标悬停在&page 39&page 39上,我会看到' null'。

对我来说,看起来静态作业还没有发生。是/否?如果是,它何时发生,是什么触发它?如果不是,我希望你有帮助信息吗? TIA!

2 个答案:

答案 0 :(得分:2)

在符合Java的运行时环境中,任何使用该类的代码都可以访问它们之前,类的static变量将被完全初始化。

如果您正在获取访问pageEndDim的NPE,则某些内容会在加载类之后将null分配给pageEndDim 。您可以考虑制作这些变量final

*如果初始化程序相互依赖或者你有static初始化程序块执行init,它会有点复杂,但这不是这种情况。

答案 1 :(得分:0)

当类加载器加载类时,将初始化静态字段。此时会分配默认值。在初始化任何实例变量之前,将首先初始化这些变量。