9

我在一些文章中读到,在 java 中有一种叫做 Initializing blocks 的东西;当加载类或创建实例时,我们可以在其中执行一些初始化分配。

除了方法和构造函数之外,初始化块是 Java 程序中可以执行操作的第三个地方。

class InitDemo
{
     static int y;
     int x;
 {
   y = 10;
   x =  0;
 }
}

我在问 C++ 中是否有这样的范例?谢谢你。

4

2 回答 2

5

需要指出的是,Java中有两种不同形式的初始化块。{...}没有关键字的裸块static只是编译器的一点混乱——块中的文本被附加到任何定义的构造函数的前面——没有生成单独的代码段。另一方面,一个开始的块static {...是一个静态初始化块和一个(半)适当的过程本身(毫不奇怪,命名为“静态”)。

static块只执行一次,在加载类后立即(有一些警告)。每次执行构造函数时都会执行非静态初始化程序(通过复制到构造函数中),因此通常不适合静态初始化。

于 2012-05-09T18:20:23.823 回答
2

简而言之,C++ 没有这个 Java 构造的直接等价物。

要获得类似的行为,您必须设置xand yfromInitDemo的构造函数(您也可以在 Java 中这样做)。

于 2012-05-09T16:39:19.603 回答