static members relate to the class, non-static members relate to the instance.
For fields, this means that a static field is shared by all instances of the class while a non-static field is specific to an instance.
Non-static methods are called on an instance and have access to non-static fields of that instance (and, of course, static fields of the class). Static methods can be called without having an instance; static methods only have access to static fields.
Forget about the heap in this discussion ;-)
Check the Java Tutorial