Q:

Llamar una variable no static en un método static

Comprendo que en un método static no se puede llamar a una variable que no sea static. Pero, ¿por qué no se puede?

A:

Las variables staticy los métodos static están en el nivel de clase. Variables y métodos que están en ese nivel son resueltos por el intérprete antes que las variables y los métodos instanciados (los que no son static).
Obviamente no puedes tratar de usar algo que no ha sido resuelto por el intérprete. El compilador de Java no dejará que eso sea resuelto en tiempo de ejecución. Por eso es que te sale el error non-static things can not be referred from static context.
Los temas que debes leer para profundizar más en esto son Class Level Scope, Instance Level Scope y Local Scope. Todo eso está aquí (en inglés) o lo puedes buscar en google para encontrar los temas en español.

