A class that
is just a grouping of static methods and static fields. Such classes have
acquired a bad reputation because some people abuse them to avoid thinking in
terms of objects, but they do have valid uses.
Attempting to
enforce noninstantiability by making a class abstract does not work. The class can
be subclassed and the subclass instantiated.
A class can be
made noninstantiable by including a private constructor:
// Noninstantiable utility class
public class UtilityClass {
// Suppress default constructor for
noninstantiability
private UtilityClass() {
throw new AssertionError();
}
... // Remainder omitted
}
Because the
explicit constructor is private, it is inaccessible outside of the class. The AssertionError isn’t strictly required, but it provides
insurance in case the constructor is accidentally invoked from within the
class.
Reference: Effective Java 2nd Edition by Joshua Bloch