From the point of view of any given <init> method, the value of this is considered initialized after the invokespecial call invokespecial , whether this call calls another <init> method in the same class or superclass.
Similarly, for objects created using the new command, they are considered initialized after using the invokespecial a <init> method.
Note that initialization tracking is local to the method. Bytecode verification is performed based on a method by a method, and each method only sees objects created in it and method calls. The fact that it is impossible to initialize this value in the constructor without calling another constructor ensures that it will ultimately be bound to the java.lang.Object constructor if it does not go or goes into an infinite loop.
source share