Java 初始化块和指定范围的块之间有区别吗

Java 初始化块和指定范围的块之间有区别吗,java,initialization,curly-braces,Java,Initialization,Curly Braces,如果你写了一个类,你用了这样的东西 ... int x; { x = 2; } ... 这将是一个初始化块,对吗 那么,如何使用大括号来指定作用域,以便它们像其他代码一样执行呢?基本上,它们不是构造函数的一部分 前 如果在switch语句中使用一个块,它会像初始化块一样执行吗 switch(...) { case : { // this right here how does the compiler know the difference? ...

如果你写了一个类,你用了这样的东西

...
int x;
{ x = 2; }
...
这将是一个初始化块,对吗

那么,如何使用大括号来指定作用域,以便它们像其他代码一样执行呢?基本上,它们不是构造函数的一部分

如果在switch语句中使用一个块,它会像初始化块一样执行吗

    switch(...)
    {
    case :
    { // this right here how does the compiler know the difference?
    ...
    break;
    }
    }

初始化块仅适用于类范围内且前面没有函数原型的块(即不是函数体的块)

在函数体中,您创建的任何块都将引入作用域,但不会被解释为初始化

例如:

public class NameOfClass {
    {
        // This is an initalization block
    }

    AccessModifier ReturnType nameOfFunction(ParamType nameOfParam) {
        // This is a function body and is not an initialization

        {
          // This introduces scope, is not an initialization
        }
    }
}

静态初始值设定项是静态的。您正在谈论并给出了一个实例初始化器的示例。这对非静态初始化块也适用吗?“我假设它们的作用是一样的。”兰斯特瓦特,这取决于你在里面做什么。假设您分配给一个声明为静态的变量,那么它是一个静态初始化块,否?@rubixibuc,是的,它们的操作相同。尽管如此,我还是删除了这里的“static”一词,因为它实际上并不重要。@Michael:不,它不取决于你在其中做了什么,它与实例初始值设定项绝对不同。静态初始值设定项如下所示:
static{}
。实例初始值设定项如下所示:
{}
。它们与静态与实例方法或字段具有相同的语义。请参阅以获取完整的解释。