用构造函数初始化静态字段总是被认为是不好的做法吗?

时间:2018-01-30 18:16:14

标签: java constructor initialization static-initialization

我正在阅读Java中的初始化程序 我阅读了几乎所有与Stackoverflows相关的问题,并且我对构造函数的内容非常熟悉,以及非静态(实例)启动器块静态初始化者是  我想我确实理解他们的执行顺序,以及他们的不同之处 无论如何,有些事情与我有关。这是一个事实,静态字段可以由构造函数和实例初始化程序块初始化 我确实读过doing that is considered bad practice,不是吗? 那么现在,我问自己为什么编译器允许这个动作\功能? 为什么它不会出现任何错误?
也许,它在某种程度上或以某种方式有用....... 代码示例:

public class Potato  {

    static int x;

    {x=10;}  

    public tuna(int a) {
        System.out.println(x);
        x=a;
    } 
}

public class MainClass {

    public static void main (String[] args) {
        Potato tom = new Potato (6);
        System.out.println(tom.x);
        Potato nick = new Potato (7);
        System.out.println(tom.x);
    }
}

输出继电器:

10
6
10
7

1 个答案:

答案 0 :(得分:2)

在非静态块中初始化静态变量有什么意义? 您可以在非静态块中修改静态变量,因为静态变量被视为Class变量,非静态块,方法和变量被视为实例变量。我个人会做静态方法,我将从静态块调用初始化静态变量。