A coworker (who is very new to Java) stopped in today and asked what seemed like a very simple question. Unfortunately, I did an absolutely horrible job of trying to explain
A Class is just a blue print that describes what each and every instance of the class will look like and behave like. Depending on the visibility of the class and its constructors, code in the same class, in the same package, or complete strangers may create instances.
It is for example common to provide a factory method in classes where the constructor should not be public:
public class Foo {
// only I get to create new instances
private Foo() {
}
// but you can get instances through this factory method
public static Foo createFoo() {
return new Foo();
}
}