A class in Java is much like one in C++. It
consists of a group of related methods and variables lumped together under one name. The static class variables are for class-as-a-whole data. They are allocated only once at load time
and are shared by all instances of objects of that class. The instance variables, are allocated inside each
object of that class. Static class methods work when there is no current object.
They can only reference static class variables and static methods, unless of course they allocate an object and then use explicit references to the
instance variables. Instance methods work by default on the fields of the current this object.
Let’s say you had a TV class to deal with television sales. There are two
kinds of variables:
- static variables that track facts about all televisions in general, e.g. total
sold or a list of manufacturers.
- instance (non-static) variables that track facts
about individual televisions, e.g. manufacturer, serial number, diagonal, type LCD/CRT etc.
The facts about televisions in general are stored in static variables, only one copy
of the variable for the whole TV class. The facts about individual televisions are stored in instance variables
TV objects instantiated with new. There is one copy of
each instance field per TV object.
Similarly, there are static methods about televisions in general and instance
methods about particular televisions. Unless you have a TV object, you can’t call any of the instance
methods. You don’t need a TV object to call one of the TV static methods.
static methods may only look at the static fields.
Instance methods may look at either the static or instance fields.
There can be only one public class in each source file. If your class was
called HelloWorld the name of the source file must be precisely HelloWorld.java with every
letter exactly matching even in case. In Java, there is no such thing as a method or variable that does not
belong to some class. Java comes with a built-in set of classes arranged in a class hierarchy.
Class is also a class that will tell you various facts about a given class.
Where Did that Class Come From?
Sometimes you want to know where a class or resource came from. Which jar, which directory. This may help track
down
Class vs Object
One of the fundamental things a newbie has to understand is the difference between a class and an object. It is
very simple once you get your head around it. The class is like a blue print for a house, but the object is like
a house itself. Using the same house blue print, you can create many instances of the
house, each slightly different. In addition, a house class maintains static information
common to all house object instances. A house object contains its own instance information which may differ from
other house objects. The code for the methods is attached to the class because the code is the same for all
house objects. The house class survives until the program ends. However, the house objects are garbage collected
after there no longer exist any references (pointers) to them. Classes come into being when you first use one of
their methods, either a static method or a constructor. They are loaded into memory and stay there. Objects come into being when you instantiate them by using new to invoke a constructor.
Learning More
Oracle’s Javadoc on
Class hierarchy : available:
Oracle’s Javadoc on
all classes : available:
Oracle’s Javadoc on
Class class : available:
Oracle’s Javadoc on
Class.forName : available:
Oracle’s Javadoc on
Class.getComponentType : available:
Oracle’s Javadoc on
Class.getDeclaringClass : available: