【问题标题】:Java constructor issue [duplicate]Java构造函数问题[重复]
【发布时间】:2013-01-06 11:35:58
【问题描述】:

我不知道为什么这个代码:

class HelloWorld
{
    HelloWorld()
    {
        System.out.println("1 cnstr ");
    }

    public static void main(String[] args)
    {
        HelloWorld a = new HelloWorld();
    }


    {
        System.out.println("2 cnstr ");
    }
}

给我输出:

2 cnstr
1 cnstr

为什么System.out.println("2 cnstr "); 行有效?它是什么样的块?我使用jdb 发现JVMHelloWorld() 构造函数中的任何行之前都以该行开头。

感谢您的帮助。

【问题讨论】:

  • 您也可以使用static { } 来初始化在构造函数外部声明的static 变量。

标签: java constructor


【解决方案1】:
{
        System.out.println("2 cnstr ");
    }

它是一个实例初始化块。它在类的构造函数执行之前运行。

来自Documentation

Java 编译器将初始化程序块复制到每个构造函数中。 因此,这种方法可以用来在之间共享一个代码块 多个构造函数。

【讨论】:

    【解决方案2】:

    这是一个实例初始化块,在每个构造函数之前执行。

    【讨论】:

    猜你喜欢
    • 2012-10-26
    • 2017-10-05
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2015-07-02
    相关资源
    最近更新 更多