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

标签 java constructor initialization static-initialization

我正在阅读有关 Java 中的初始值设定项的内容。
我阅读了几乎所有与 Stackoverflows 相关的问题,并且非常熟悉什么是构造函数,以及什么非静态(实例)初始化程序 block 静态初始化器是。
我想我确实了解它们的执行顺序以及它们的不同之处。
无论如何,有件事让我担心。事实上,静态字段可以通过构造函数和实例初始化 block 进行初始化。
我确实读过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

最佳答案

在非静态 block 中初始化静态变量有什么意义? 您可以在非静态 block 中修改静态变量,因为静态变量被视为类变量,而非静态 block 、方法和变量被视为实例变量。就我个人而言,我会执行静态方法,我将从静态 block 调用该静态方法来初始化静态变量。

关于java - 使用构造函数初始化静态字段是否总是被认为是不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48527994/

相关文章:

java - 通过单链表实现栈

Java - 在构造函数中初始化 arraylist

c++ - unordered_map (A)构造函数,(B)删除分配,(C)继承自

c - 错误 : expected ‘:’ , ‘,’、 ‘;’、 ‘}’ 或 ‘__attribute__’

java - jasper 报告中的编译错误 - 错误填写打印

java - 如何在java正则表达式中正确使用反向引用?

java - 获取相对于 View 的触摸坐标(ScreenToClient 等效?)

javascript - 如何在 javascript 中使用构造函数返回实例或其他东西?

c++ - 构造函数初始化行为

c++ - cartTexture 成员实际上是否正确初始化?