Die folgenden Quelldateien können als Vorlagen für das Erstellen eigener Klassen verwendet werden:
Eine Main-Klasse ist nicht instanziierbar, hat keine Unterklassen und
enthält als einziges öffentliches Element die Klassenmethode
void main(String[])
.
Bei Bedarf kann eine Main-Klasse weitere private Klassenmethoden und private Klassenvariablen enthalten.
Einziger Konstruktor einer Main-Klasse ist ein privater Standardkonstruktor
mit leerer Implementierung. Er verhindert, dass (außerhalb der Klasse)
mit new
Instanzen erzeugt werden können.
Instanzen (= Objekte) von Main-Klassen sind sinnlos, weil es keine
Instanzmethoden und -variablen gibt.
Unterklassen werden durch final
-Markierung der Klasse
verhindert.
Eine Utility-Klasse ist nicht instanziierbar, hat keine Unterklassen
und enthält nur Klassenvariablen und Klassenmethoden
(aber nicht void main(String[])
).
Die Klassenvariablen sollten in der Regel final
sein
(der Name wird dann komplett in Großbuchstaben geschrieben).
Einziger Konstruktor einer Utility-Klasse ist ein privater
Standardkonstruktor mit leerer Implementierung. Er verhindert,
dass (außerhalb der Klasse) mit new
Instanzen
erzeugt werden können. Instanzen (= Objekte) von Utility-Klassen
sind sinnlos, weil es keine Instanzmethoden und -variablen gibt.
Unterklassen werden durch final
-Markierung der Klasse
verhindert.
Eine Wertklasse (value-based class) ist mittels Fabrikmethoden instanziierbar (sie ist Bauplan für Wertobjekte), hat keine Unterklassen und alle ihre Instanzvariablen sind konstant (Wertobjekte sind immutable objects). Fabrikmethoden sind Klassenmethoden, die eine Referenz auf ein Wertobjekt der Klasse liefern. Zur Instanziierung verwenden die Fabrikmethoden die privaten Konstruktoren der Klasse.
Ein Wertklasse sollte keine öffentlichen Konstruktoren haben.
Unterklassen werden durch final
-Markierung der Klasse
verhindert.
Eine Wertklasse muss die java.lang.Object
-Methoden
equals
, hashCode
und toString
überschreiben.
Eine Wertklasse muss die Schnittstelle java.lang.Comparable
implementieren, wenn es eine natürliche Ordnung für die
Wertobjekte der Klasse gibt.
Eine Wertklasse sollte die Schnittstelle java.util.Formattable
implementieren, wenn die String-Darstellung der Wertobjekte nicht durch
Formatierung (z.B. in printf
) kürzbar sein soll.
Eine Entity-Klasse ist instanziierbar (sie ist Bauplan für Entitäten). Entitäten sind Objekte, die unabhägig von den Werten ihrer Instanzvariablen eine eigene Identität haben.
Eine Entity-Klasse darf die java.lang.Object
-Methoden
equals
, hashCode
nicht überschreiben.
Die toString
-Methode kann bei Bedarf überschrieben
werden.
Eine Entity-Klasse sollte die Schnittstelle java.lang.Comparable
nicht implementieren. Für Sortierungen sollten statt dessen
java.util.Comparator
-Objekte verwendet werden.