It is explained [here][1] (with an example `Bicycle` class with class variable `numberOfBicycles` and instance variables `cadence`, `speed`, `gear` & `id`): > Sometimes, you want to have variables that are common to all objects. This is accomplished with the `static` modifier. Fields that have the `static` modifier in their declaration are called static fields or class variables. They are associated with the class, rather than with any object. Every instance of the class shares a class variable, which is in one fixed location in memory. Any object can change the value of a class variable, but class variables can also be manipulated without creating an instance of the class. A class variable (declared `static`) is a location common to all instances. In the example, `numberOfBicycles` is a class variable (since it is declared `static`). There is only one such variable (i.e. location) common to all instances and to the class. So if you modify `numberOfBicycles` in one method, other methods would see the new value (even for different `Bicycle` objects) In contrast `gear` & `id` are *instance* variables (because their declaration has no `static` modifier). Every `Bicycle` object has its own one. If you modify `gear` for some `Bicycle` *a*, and if *b* is another instance, modifying `a.gear` has no effect on `b.gear` Each Java object is a distinct memory zone with some meta data (e.g. some reference to its class) and its own instance variables (perhaps inherited from a superclass). But the class variables are common to the class and shared by all instances. See also [Object (computer science)][2] & [Instance variable][3] wikipages. [1]: https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html [2]: https://en.wikipedia.org/wiki/Object_%28computer_science%29 [3]: https://en.wikipedia.org/wiki/Instance_variable