Since in your no-argument construtor you used your first line to call the int arg constructor, the compiler puts the call to the super constructor (in this case Object) in the first line of the int arg constructor.
To construct the instance, first the JVM allocates memory for all the variables required, both in the instance and in all of it's super classes. Then the variables are initialized. Then you can use them.
In your case, you needed the value of i to be used in order to get to the next constructor, where the call to the super could be made to FIND the variables that it would require.
Try replacing the this(i) call with this(5); or something and it will work.
12.5 Creation of New Class Instances
Whenever a new class instance is created, memory space is allocated for it with room for all the instance variables declared in the class type and all the instance variables declared in each superclass of the class type, including all the instance variables that may be hidden (�8.3). If there is not sufficient space available to allocate memory for the object, then creation of the class instance completes abruptly with an OutOfMemoryError. Otherwise, all the instance variables in the new object, including those declared in superclasses, are initialized to their default values (�4.5.5).