非静态块何时在 java 中执行?
When does the non-static block get executed in java?
我预计非静态块总是在创建对象时执行。但在下面的示例中,我调用了静态方法,但执行了非静态块。我没有创建任何对象,为什么要执行非静态块?
class Example {
static void Mark() {
System.out.println("Mark method");
{
System.out.println("Hello");
}
}
}
public class StaticObject {
public static void main(String[] args) {
Example.Mark();
}
}
结果:
Mark method
Hello
您的示例中没有非静态初始化块。方法内部的块只是作为方法的一部分执行的代码。 (嵌套代码块引入了一个新的作用域,因此您可以创建在块外不可见的变量。)
如果它在 class 内但在方法声明之外,则它只是一个初始化程序。如果您更改代码以将块移动到任何方法之外:
class Example {
static void Mark() {
System.out.println("Mark method");
}
// now it's an instance initializer
{
System.out.println("Hello");
}
}
然后您应该会看到实例初始化程序在实例化对象时执行。如果您不实例化一个对象,就像您的示例中那样,那么实例初始化程序将不会获得 运行.
我预计非静态块总是在创建对象时执行。但在下面的示例中,我调用了静态方法,但执行了非静态块。我没有创建任何对象,为什么要执行非静态块?
class Example {
static void Mark() {
System.out.println("Mark method");
{
System.out.println("Hello");
}
}
}
public class StaticObject {
public static void main(String[] args) {
Example.Mark();
}
}
结果:
Mark method
Hello
您的示例中没有非静态初始化块。方法内部的块只是作为方法的一部分执行的代码。 (嵌套代码块引入了一个新的作用域,因此您可以创建在块外不可见的变量。)
如果它在 class 内但在方法声明之外,则它只是一个初始化程序。如果您更改代码以将块移动到任何方法之外:
class Example {
static void Mark() {
System.out.println("Mark method");
}
// now it's an instance initializer
{
System.out.println("Hello");
}
}
然后您应该会看到实例初始化程序在实例化对象时执行。如果您不实例化一个对象,就像您的示例中那样,那么实例初始化程序将不会获得 运行.