我在一些文章中读到,在 java 中有一种叫做 Initializing blocks 的东西;当加载类或创建实例时,我们可以在其中执行一些初始化分配。
除了方法和构造函数之外,初始化块是 Java 程序中可以执行操作的第三个地方。
class InitDemo
{
static int y;
int x;
{
y = 10;
x = 0;
}
}
我在问 C++ 中是否有这样的范例?谢谢你。
需要指出的是,Java中有两种不同形式的初始化块。{...}
没有关键字的裸块static
只是编译器的一点混乱——块中的文本被附加到任何定义的构造函数的前面——没有生成单独的代码段。另一方面,一个开始的块static {...
是一个静态初始化块和一个(半)适当的过程本身(毫不奇怪,命名为“静态”)。
该static
块只执行一次,在加载类后立即(有一些警告)。每次执行构造函数时都会执行非静态初始化程序(通过复制到构造函数中),因此通常不适合静态初始化。
简而言之,C++ 没有这个 Java 构造的直接等价物。
要获得类似的行为,您必须设置x
and y
fromInitDemo
的构造函数(您也可以在 Java 中这样做)。