I\'m looking at the code below and found something a bit strange:
public class Sequence {
Sequence() {
System.out.print(\"c \");
}
{
This:
static {
System.out.print("x ");
}
is a static initialization block, and is called when the class is loaded. You can have as many of them in your class as you want, and they will be executed in order of their appearance (from top to bottom).
This:
{
System.out.print("y ");
}
is an initialization block, and the code is copied into the beginning of each constructor of the class. So if you have many constructors of your class, and they all need to do something common at their beginning, you only need to write the code once and put it in an initialization block like this.
Hence your output makes perfect sense.
As Stanley commented below, see the section in the Oracle tutorial describing initializaiton blocks for more information.
static {
System.out.print("x ");
}
Is a static block and is called during Class Loading
{
System.out.print("y ");
}
Is an initialization block
You can have multiple initialization blocks in a class in which case they execute in the sequence in which they appear in the class.
Note that any initialization block present in the class is executed before the constructor.