You can find the order of initialization in some good
Java Books (like K&B SCJP6).
But for the purpose of your question, just know that
before your assignment of instance variables, they are set to default values (i.e. int = 0, Object = null, etc.).
The instance variables assignment itself happens in up-to-down manner, so when you start initializing x variable, the y variable is set to default value (which is 0). When the assignment of x variable is finished, the y variable will be assigned the given value.
Hope that following this you can understand the rest of the code.