Non-static variables (commonly called instance variables) are specifically contained in an instance of a class. Static variables, contrariwise, are stored in class' static storage area, of which only one exists per transaction. You cannot access an instance variable in a static method, because there is no instance to act upon. It's the same reason why you can't use "this" in a static method, because there is no "this" to act on, since you're in the class' static storage area. Alternatively, you might say that static methods have no "scope", because they are outside of all instances of the object.
+-----------------[ Class Layout ]---------------------------------+
| +----------+ +------------+ |
| | | | Instance 1 | "this" refers to Instance 1 |
| | Static | +------------+ |
| | Storage | | Instance 2 | "this" refers to Instance 2 |
| | Area | +------------+ |
| | | | ... | "this" refers to instance N |
| +----------+ +------------+ |
| No "this" |
| variable |
+------------------------------------------------------------------+
Where each box represents a single copy of data. The static area is initialized only once, and can be accessed by all static and instance code. Instance data, however, must explicitly refer to a single instance of storage area. Since the static storage area is outside of all the instances, you can't access instance variables in static methods.