The very basic and important thing is static variables or static methods are at the class level. And Class level variables or methods get loaded prior to instance-level methods or variables.
Interested in learning Java from basics! Go through this end to end video on Java:
So, obviously the thing which is not loaded can not be used. So java compiler not letting the things to be handled at run time resolves at compile time. That's why it can give you an error as non-static things can not be referred from the static context.
Note: You just need to take care of Class Level Scope, Instance Level Scope and Local Scope.