From the JVM spec <docs.oracle.com/javase/specs/jv...
# announcements
o
From the JVM spec docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.9.2
Each instance initialization method, except for the instance initialization method derived from the constructor of class Object, must call either another instance initialization method of this or an instance initialization method of its direct superclass super before its instance members are accessed.
However, instance fields of this that are declared in the current class may be assigned before calling any instance initialization method.
I’m not sure of all the implications that could be there, but at least if property is non-final or non-private we would have to call setter method, which is explicitly prohibited.