我正在阅读有关 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/