| Author |
a simple quetion,help
|
andy lau
Ranch Hand
Joined: Apr 08, 2002
Posts: 51
|
|
when will a block without static(like this: {//code})be execute???
|
 |
Corey McGlone
Ranch Hand
Joined: Dec 20, 2001
Posts: 3271
|
|
Code within {} is known as an instance initializer and will be executed when an instance of that class is initialized. You can look in the JLS, §8.6 Instance Initializers for details. Corey
|
SCJP Tipline, etc.
|
 |
Ase Lindskog
Greenhorn
Joined: Apr 08, 2002
Posts: 7
|
|
|
It will execute each time you construct by new Xxx() and execute before the constructor.
|
 |
andy lau
Ranch Hand
Joined: Apr 08, 2002
Posts: 51
|
|
can you explain this ? thank you very much! /* 456 AAA 123 CCC BBB */ /* /*456 123 AAA CCC BBB */ /* /*123 456 AAA CCC BBB */ /*456 AAA 123 CCC BBB*/ [ April 17, 2002: Message edited by: Cindy Glass ]
|
 |
Brian Lugo
Ranch Hand
Joined: Nov 10, 2000
Posts: 165
|
|
I will attempt to explain the first one ... The rest you can figure out ... I changed the class names. The output is: 456 AAA 123 CCC BBB Here is what happens: 1. DerInvTst1 constructor with no args is called. 2. This constructor calls DerInvTst1 constructor that takes an int. arg. 3. Since there is no "this()" call on the first line, the super class's default constructor is called and super class is initialized. 4. This results in printing 456. 5. Next AAA is printed from BasInvTst1 constructor. 6. Now the derived class initialization occurs and "123" is printed. 7. The control is then transfered to the constructor, which prints "CCC" 8. In the end the control is transfered back to DerInvTst1's no-arg constructor and "BBB" is printed. Hope this helps, Brian
|
 |
andy lau
Ranch Hand
Joined: Apr 08, 2002
Posts: 51
|
|
it seems that the initialiaze block is not executed before the constructor??? (because the 123 is not the first line of output) can you tell me the exactly time when the initialize block will be executed???  [ April 17, 2002: Message edited by: andy lau ]
|
 |
 |
|
|
subject: a simple quetion,help
|
|
|