Static variables | Instance variables |
---|---|
Class variables are called static variables. There is only one occurrence of a class variable per JVM per class loader. When a class is loaded the class variables (aka static variables) are initialized. | Instance variables are non-static and there is one occurrence of an instance variable in each class instance (i.e. each object). Also known as a member variable or a field. |
A static variable is used in the singleton pattern. A static variable is used with a final modifier to define constants.
Local variables | Instance and static variables |
---|---|
Local variables have a narrower scope than instance variables | Instance variables have a narrower scope than static variables. |
The lifetime of a local variable is determined by execution path and local variables are also known as stack variables because they live on the stack. | Instance and static variables are associated with objects and therefore live in the heap. |
For a local variable, it is illegal for code to fail to assign it a value. It is the best practice to declare local variables only where required as opposed to declaring them upfront and cluttering up your code with some local variables that never get used. | Both the static and instance variables always have a value. If your code does not assign them a value then the run-time system will implicitly assign a default value (e.g. null/0/0.0/false). |
Note: Java does not support global, universally accessible variables. You can get the same sorts of effects with classes that have static variables.