In that context, "invoked" is when you call it, and "executed" is when the body of code is actually run.
Between the time you call it and the time the code runs, the fields are initialized.
So, you invoke it, then initialization happens, then it is executed.
Try this:
class Example {
static int report() { System.out.println("initialize"); return 0; }
int x = report(); // <- [Step 2] Initialization
Example () {
System.out.println("execute"); // <- [Step 3] Execution
}
}
Then, elsewhere:
System.out.println("invoke");
new Example(); // <- [Step 1] Invocation
The output will be:
invoke
initialize
execute