2013-10-29 136 views
2

“Java编译器将初始化块复制到每个构造函数中,因此,这种方法可用于在多个构造函数之间共享代码块。初始化块实例变量

我已阅读此此教程:http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

  1. 我不明白这一点。当初始化块存在并执行构造函数时,构造函数的需要是什么,换句话说,作为构造函数的替代方法工作?

  2. 哦,但创建实例时必须调用构造函数。好!但那么初始化块的需求是什么?

  3. “因此,此方法可用于在多个构造函数之间共享代码块。” 有人请给我一个例子吗?我的意思是我不明白。

在此先感谢您。

+0

对于3)我认为这意味着这样的事情: '''类Foo { 私人诠释吧= 10; private int baz = 20; 公共美孚(){} 公共美孚(美孚anotherFoo){}} ''' 你并不需要在这两个构造函数初始化的变量。 – Danstahr

+0

[使用初始化器的构造VS Java中] [1] [1]:http://stackoverflow.com/questions/804589/use-of-initializers-vs-constructors-in-java 希望它有帮助 – Jabir

回答

0

我不明白。当初始化程序块 存在并执行构造函数的工作时,构造函数需要什么,换句话说 可用作构造函数的替代方法?

只有构造函数创建对象而不是初始化块,因此构造函数是必需的。

哦,但创建实例时必须调用构造函数。行! 行!但那么初始化块的需求是什么?

当您的类中有不同的构造函数时,您可以使用初始化块保存重复的代码。

+0

我们如何保存重复的代码?构造函数是否包含初始化块或者是否隐含地调用它们? 是的我已经读过,java编译器将所有初始化块复制到每个构造函数中。 java编译器是否隐式地自动执行而不告诉我,还是必须在构造函数中编写一些代码,以便初始化块在那里被复制。 – user2882662

+0

@ user2882662 Java编译器将执行将初始化程序代码复制到构造函数的工作。你可以放松一下,享受java编译器为你完成的工作。研究生成的代码应该有助于让你更清晰。 –

0

初始化块的唯一真正需求是static变体,它允许您执行更复杂的static final变量初始化。

构造函数和初始化块之间的区别在于构造函数构造对象,并且初始化块被复制到每个构造函数中的。如果你没有指定构造函数(即使你指定了一个初始化块),编译器仍然会生成一个默认构造函数来处理对象构造。

你可以有不同的构造执行不同代码,但不顾一切初始化语句块被执行,其中构造函数被调用。你当然可以写一个private方法来和你的初始化块相同,并且让你的代码更具可读性,但是与初始化块不同,你需要从你的构造函数手动调用它们。