Why does this() and super() have to be the first statement in a constructor?

Ulf Zibis Ulf.Zibis at gmx.de
Sat Oct 8 04:28:52 PDT 2011

     int c = a + b;
doesn't affect any object field initialization.
It's just a local variable, which gets lost after the instance is instantiated.

As workaround, you can always use a static helper method which does the same:
     super(staticHelper(a, b));

So I agree, it would reasonable, to allow some code in advance of this() or super().

+ 1 for your proposal, Vimil Saju.


Am 08.10.2011 01:39, schrieb Daniel Yokomizo:
> On Oct 7, 2011 1:58 PM, "Paul Benedict"<pbenedict at apache.org>  wrote:
>> It's a compiler error because the superclass is guaranteed to be
>> initialized first before the subclass.
> Not guaranteed by the JVM, as in anonymous inner classes.
>> On Fri, Oct 7, 2011 at 11:51 AM, Vimil Saju<vimilsaju at yahoo.com>  wrote:
>>> If you have subclass then java requires that this() or super has to be
> first statement in the constructor of the subclass.
>>> Here is an example
>>> publicclassMyClass{
>>>          publicMyClass(intx){}
>>> }
>>> publicclassMySubClassextendsMyClass{
>>>          publicMySubClass(inta,intb){
>>>                  intc =a +b;
>>>                  super(c); // COMPILE ERROR
>>>          }
>>> }The above compilation error can be resolved by rewriting the code in
> the constructor as follows
>>> publicclassMySubClassextendsMyClass{
>>>          publicMySubClass(inta,intb){
>>>                  super(a + b);
>>>          }
>>> }Can't the Java compiler detect that in the previous code there was no
> access to the instance fields or methods and therefore allow the code to
> compile without any error.

More information about the coin-dev mailing list