Static fields and methods belong to the class, not an instance of the class. Because of this, you do not need to create an instance of the class to use them. Since a static method may be used WITHOUT creating an instance, a static method MAY NOT USE non-static fields or methods. Think about why this rule exists. The non-static fields and methods only exists inside of instances of the class that are created in your program. Since static methods can be called from the class (and not an instance), the non-static fields are not there to use! So to be able to delcare a method as static you must restrict yourself to only using fields and methods in its code that are also static. A static field belongs to the class which means it is 'shared' by all instances of the class. This can save memory in the case where all instances can share a variable. A static field can also be used to do some useful tasks among instances of a class. Take a look at how the static field 'nextId' is used to make sure that each instance of the Player class is assigned a unique id value.