※ 引述《Lest ()》之铭言:
: class A {
: {
: System.out.println("123");
: }
: public A(){
: System.out.println("345");
: }
: }
: 请问一下JAVA高手,我学过的JAVA Class内只能包含建构子、方法及变量
: 那为何我的Class A又可以存在一个大括号。
: 当我new A(); 会显示如下:
: 123
: 345
: 为何大括号的123会执行呢????
这个其实官网教学中有提到,概略翻译一下应该就蛮能理解的。
http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
Normally, you would put code to initialize
an instance variable in a constructor.
There are two alternatives to using a constructor to
initialize instance variables: initializer blocks and final methods.
Initializer blocks for instance variables look just like static initializer
blocks, but without the static keyword:
{
// whatever code is needed for initialization goes here
}
The Java compiler copies initializer blocks into every constructor.
Therefore, this approach can be used to share a block of code between
multiple constructors.
一般来说你应该把初始化一个变量成员的行为放在 constructor,
但还是有其他两个方法可以应用,其中一个就是你提到的这个初始化 block。
它会把这个 {} 里面的程式码放进每个建构子里面,
这样就可以用来在多个建构子里面共用程式码。
(但我个人是不会建议这么做就是了。)