Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 初始化程序块_Java - Fatal编程技术网

Java 初始化程序块

Java 初始化程序块,java,Java,System.out.println()语句总是被执行吗?如果我有 class c2 { { System.out.println("initializer"); } public static void main(String a[]) { System.out.println("main"); c2 ob1=new c2(); } } 那么为什么还要打印“初始值设定项”语句呢。它是任何构造函数语句吗?是的,它会。如果创建类的实例(c2 ob1=new c2();),默认构造函数将执行该

System.out.println()语句总是被执行吗?如果我有

class c2
{
{
 System.out.println("initializer");
}
public static void main(String a[])
{
System.out.println("main");
 c2 ob1=new c2();
}
}

那么为什么还要打印“初始值设定项”语句呢。它是任何构造函数语句吗?

是的,它会。如果创建类的实例(
c2 ob1=new c2();
),默认构造函数将执行该命令。该程序还将输出“main”,就像在main方法中调用新命令一样。

是,它将打印:

main
initializer
一旦调用
c2
的构造函数,就会调用初始值设定项。类
c2
的默认构造函数隐式如下所示:

c2() {
  {
    System.out.println("initializer");
  }
}

请参阅JLS。

这是初始化实例成员块的示例

创建c2对象时,括号中的sysout命令也将执行。 您可以像这样添加初始化代码,只要它包含在一个块中

见:

为什么要使用它?

Java编译器将初始值设定项块复制到每个构造函数中。 因此,这种方法可用于在用户之间共享代码块 多个构造函数


是的,但最好将代码放在方法中,在本例中是c2构造函数。

在本例中是的。每次创建类的实例时,都会执行实例初始值设定项块。为什么不运行并查看一下呢?当然可以花一分钟检查结果吗?那个家伙正在运行一些测试程序。希望获胜的人有价格。投票决定关闭这家公司。这真的是OP无法解决的问题吗?运行代码只需一分钟即可得到答案。@imruction只是为了突出显示块。通过a)从另一个ctor调用一个ctor和/或b)从ctor调用方法(最终是静态方法),可以更轻松地在构造函数之间共享代码。这比初始值设定块更易于重用。在某些情况下,易用性纯粹是主观的,还取决于您试图解决的具体问题。还取决于编程级别、问题、编码风格和知识。“因此,这种方法可以用于在多个构造函数之间共享一段代码。”这是oracle官方文档中的内容。我之所以添加此评论,并不是因为您所说的有误。但如果有人稍后阅读这个答案,可以理解为初始值设定项块是推荐的,或者至少广泛用于此目的。我只是想澄清一下,这只是一种技术上的可能性,但不是常见的,也不是推荐的。@a.H.也可能有人认为,如果您通过一系列
this()
调用在构造函数之间显式共享代码,那么弄清楚哪个构造函数做了什么,初始值设定项块在哪里清楚地通信,这就成了一项正确的工作“这种情况经常发生”。你不应该写那么复杂的类,这样就很难弄清楚初始化是如何工作的;但是,如果你写的代码在宏级别是可读的,那么争论这两个功能等效的结构中哪一个“更好”就成了一个愚蠢的论据。@a.H.“答案可以理解为一项建议”比“答案并不排除被理解为一项建议的可能性”强得多,后者似乎是这样。