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