Precedence
In your case the int j happens first and defaults to 0, then gets reassigned to 5 when the constructor is called on to create a new instance.
j only gets re-assigned when the constructor runs. Instance members get initialized first when you assign them something outside the constructor.
Order of Execution
Each line of code gets executed in the order it appears. The declarations happen before the constructor always, in the order they are listed in the code.
Deterministic and Predictable
You should only initialize instance members in a single place, inside a single constructor.
Relying on defaults leads to hard to track down bugs, and makes testing a nightmare, but a instance member that is unassigned will stand out like a sore thumb to the IDE, the compiler and at runtime. Unfortunately for primitives like int they default to 0 which might not be what you want/need.
A better design is:
private final int j;
public Foo(final int j) { this.j = j; }
This keeps the j from getting assigned anything on initialization and you never have to worry about it changing.