Consider the code below
class Meal {
Meal() { System.out.println(\"Meal()\"); }
}
class Bread {
Bread() { System.out.println(\"Bread()\"); }
private Bread b = new Bread();
private Cheese c = new Cheese();
private Lettuce l = new Lettuce();
These initializers are put into the Sandwich constructor by the compiler after the super call to it's parent class.
If these were static, then they would happen first, because static initializers happen on class load.