Utility classes, which are collections of static
members, are not meant to be instantiated. Even abstract utility classes, which can
be extended, should not have public constructors.
Java adds an implicit public constructor to every class which does not define at least one explicitly. Hence, at least one non-public constructor should be defined.
class StringUtils { // Noncompliant public static String concatenate(String s1, String s2) { return s1 + s2; } }
class StringUtils { // Compliant private StringUtils() { throw new IllegalStateException("Utility class"); } public static String concatenate(String s1, String s2) { return s1 + s2; } }
When class contains public static void main(String[] args)
method it is not considered as utility class and will be ignored by this
rule.