You tried to access j in the middle of initialization.
(be careful - the following reads like greek to me)
8.3.2.3 Restrictions on the use of Fields during Initialization
The declaration of a member needs to appear before it is used only if the member is an instance (respectively static) field of a class or interface C and all of the
following conditions hold:
The usage occurs in an instance (respectively static) variable initializer of C or in an instance (respectively static) initializer of C.
The usage is not on the left hand side of an assignment.
C is the innermost class or interface enclosing the usage.
A compile-time error occurs if any of the three requirements above are not met.
These restrictions are designed to catch, at compile time, circular or otherwise malformed initializations.
Accesses by methods are not checked in this way.
Cindy's translation of the above:
If you have a field that is inside an instance but not nested in any deeper scope, and you want to use the variable on the rightmost side of an assignment - YOU MUST DECLARE THE VARIABLE BEFORE READING IT'S VALUE (unless of course you use a method to get at it early).
You used a method to get at the variable, therefore you were allowed to forward reference, however you got the value of j at that point, which was BEFORE it was initialized to 10, so it still has it's default value.
[This message has been edited by Cindy Glass (edited May 18, 2001).]