A lot of complicated terminology being thrown around here but a few points:
> A static member of a class is a shared location in memory between objects of that class.
Don't mix concepts and implementation details when explaining. From the JLS:
If a field is declared static, there exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created. A static field, sometimes called a class variable, is incarnated when the class is initialized
> static values are resolved at compile time, before objects are created.
A compile time constant expression when assigned to a static field[or not] is evaluated at compile time; a static field is incarnated when the class is initialized. There is no *static value*.
> Notice that in main of a different class file, I didn't need to create an object of MyClass in
> order to access sharedInt - the address of the reference-variable sharedInt is resolved at
> Compile Time and all MyClass objects have access to it.
`sharedInt' is a variable of Primitive Type and not Reference Type.
> If q is not a static member, then although each C class object has q, they have their own
> individual address for their reference variable and therefore
Each instance created has its own set of the state/member variables. There is no *individual address for their reference variables*.
> to access q …