Skip to main content

So legst du Utility Klassen in Java an

Utility Java Klassen – was ist das?
Man nennt diese auch Hilfsklassen von Java.

Diese Utility Klassen sind Java Klassen, welche lediglich Methoden und Konstanten anbieten.

Am Beispiel:
Die Klasse Math ist so eine klassische Utility Klasse.

Wozu braucht man solche Klassen?
Diese Klassen sind so etwas wie ein Werkzeugkoffer für jedes Java Programm.
Hier sind die Methoden enthalten, welche du für Nebenrechnungen oder auch für den Programmablauf benötigst.

Was ist alles nötig für die Umsetzung einer Hilfsklasse?
Drei Dinge benötigt jede Utility-Klasse.

  1. Die Klasse muss vom kompletten Programm genutzt werden können.
  2. Außerdem müssen die Methoden und Konstanten für alle Objekte und alle Programmteile gelten.
  3. Es muss verhindert werden, dass andere Klassen Objekte aus dieser Klasse erzeugen können.

In diesem Beitrag möchte ich dir zeigen, wie du so eine Hilfsklasse anlegst.
Was bietet sich dafür besser an, als ein Tafelwerk.

Ja ein klassisches Tafelwerk ist der Methodenkoffer für ein Mathematikprogramm.
Natürlich kannst du diese Utility-Klassen auch in einem anderen Programm nutzen.

Hier ein paar weitere Beispiele:

  • In einem Spiel wird die Zeit des Spielers gemessen und gespeichert.
    So eine Methode kann in einer Hilfsklasse liegen und für jedes Nutzer-Objekt zugänglich gemacht werden.
  • Die Steuerung der Frame-Rate in einem Spiel wird über eine Methode vollzogen.
    Auch diese Methode kann in einer Utility Klasse liegen.
  • Auswertungen von Kursverlusten, Renditen in einem Aktienanalyse-Programm.
    Auch hier hilft ein separater Werkzeugkoffer weiter.

Du siehst, die Erstellung einer Java Utility Klasse macht schon Sinn.

So kann die Utility Klasse im kompletten Programm genutzt werden.

Wichtig ist, dass die Klasse nach außen sichtbar ist.
Deshalb muss diese mit dem Access-Modifiers public ausgezeichnet werden.

public class UtilityKlasse {

}

Public bewirkt, dass die Klasse vom kompletten Projekt genutzt werden kann.

So können alle Objekte die Features der Utility Klasse nutzen.

Du brauchst als erstes Konstanten.

  • Auch Konstanten sind immer public.
  • Außerdem sind Konstanten immer final – somit können die Werte nicht mehr geändert werden.
  • Und Konstanten sind objektunabhängig und somit static.
public class UtilityKlasse {
	public final static double PI = 3.14159265359;// Kreiszahl

}

Die Methoden müssen ebenfalls statisch sein.
Hier eine Methode, welche den Flächeninhalt eines Kreises berechnet.

public class UtilityKlasse {
	public final static double PI = 3.14159265359;// Kreiszahl


	static double berechneKreisFlaeche(double radius){
		double flaeche= PI*(radius*radius);
		return flaeche;
	}
}

Zur Erinnerung:
Die Fläche eines Kreis kann mit dem Radius berechnet werden: PI * r².

Was macht die Methode sonst noch?
Die Methode returnt die Fläche vom Datentyp double.
Deshalb wurde hier auch im Kopf der Typ double als Rückgabetyp angegeben.
static double berechneKreisFlaeche()
Das wird noch wichtig, wenn wir die Methode später aufrufen.

Wenn du dir diese Methode so anschaust, erkennst du:
Diese Methode erwartet lediglich Zahlen. Und verrechnet diese.

Aber was ist mit Objekten?
Angenommen du möchtest der Methode einen richtigen Kreis übergeben.

Wie machst du das?
Ganz einfach.
Dann kannst du die Methode überladen und eine zweite Variante dieser Methode anbieten.

public class UtilityKlasse {
	public final static double PI = 3.14159265359;// Kreiszahl

	//Methode erwartet einen Radius als Zahl
	static double berechneKreisFlaeche(double radius){
		double flaeche= PI*(radius*radius);
		return flaeche;
	}
	
	//Methode erwartet ein Kreisobjekt mit einer Instanzvariablen radius
	static double berechneKreisFlaeche(Kreis kreisEins){
		double flaeche= PI*(kreisEins.radius*kreisEins.radius);
		return flaeche;
	}
}

Jetzt wirst du feststellen, dass Eclipse dir einen Fehler anzeigt.

Java Utility Klasse Kreisfläche berechnen

Das ist auch logisch, denn die Methode erwartet ein Kreisobjekt.
Und bisher haben wir noch keine Kreisklasse. 🙂

Bevor du die Methoden der Utility Klasse nutzen kannst, brauchen wir noch einen Kreis.

Also Kreisklasse mit einer Instanzvariablen, namens radius, anlegen.

public class Kreis {
	double radius;

	//Konstruktor für Kreisobjekt
	Kreis(double radius){
	this.radius=radius; //Zuweisung der lokalen Variablen zur Instanzvariablen	
	}
}

Ich biete in dieser Klasse einen Konstruktor an, welche den Radius erwarten.
Somit kann der Nutzer des Programmes beim Erstellen eines Kreisobjektes den Radius gleich übergeben.

Da es sich in der Parameterliste des Konstruktors, um eine lokale Variable handelt – musst du im Rumpf des Konstruktors die Zuweisung mit dem Keywort this erledigen.

Den Kreis beim Programmstart anlegen und Methoden der Utility-Klasse aufrufen

Also brauchst du noch eine Klasse für den Programmstart.
Diese Klasse kannst du nennen, wie du willst.
Hauptsache die main-Methode für den Programmstart ist enthalten.

public class UtilityStart {

	/*
	 * Du kannst diese Klasse nennen, wie du willst. 
	 * Wichtig ist, für den Programmstart -muss diese Klasse die Main-Methode haben
	 */

	public static void main(String[] args) {

	}
}

Und in dieser Klasse kannst du jetzt einen Kreis anlegen.

public class UtilityStart {

	public static void main(String[] args) {
		Kreis kreisKoerper = new Kreis(20);// Kreis mit Radius von 20

	}
}

Und dann kannst du beide Methoden aufrufen und dir die Rückgaben entweder in einer Variable abspeichern.
Oder dir die Rückgaben auf der Konsole sofort ausgeben lassen.

Beginnen wir mit der Methode, welche kein Kreisobjekt benötigt.
Sondern nur die Zahl.

public class UtilityStart {

	public static void main(String[] args) {
		Kreis kreisKoerper = new Kreis(20);

		// Entweder kannst du den Rückgabewert vorher speichern
		double flaecheEins = UtilityKlasse.berechneKreisFlaeche(20);
		System.out.println(flaecheEins);

		// Oder du kannst du den Rückgabewert direkt auf der Konsole ausgeben
		System.out.println(UtilityKlasse.berechneKreisFlaeche(20));
	}
}
  • Falls du den Rückgabewert der Methode zwischenspeichern möchtest, musst du eine lokale Variable vom Datentyp double anlegen.
    double flaecheEins = UtilityKlasse.berechneKreisFlaeche(20);
  • Außerdem kannst du die Methode nicht einfach so aufrufen.
    Denn diese befindet sich schließlich in einer anderen Klasse.
    In diesem Beispiel hieß die Klasse: UtilityKlasse.
    Und deshalb musst du per Punktnotation die Klasse und die Methode direkt ansprechen.
    UtilityKlasse.berechneKreisFlaeche(20)

Probier es einmal auf.
Klicke auf „RUN“ und schau dir die Konsolenausgaben an.

Passt oder?
Dann lass uns die andere Methode aufrufen.
Diese erwartet den Kreis als Argument.

public class UtilityStart {

	public static void main(String[] args) {
		Kreis kreisKoerper = new Kreis(20);

		// Entweder kannst du den Rückgabewert vorher speichern
		double flaecheEins = UtilityKlasse.berechneKreisFlaeche(20);
		System.out.println(flaecheEins);

		// Oder du kannst du den Rückgabewert direkt auf der Konsole ausgeben
		System.out.println(UtilityKlasse.berechneKreisFlaeche(20));

		// Entweder kannst du den Rückgabewert vorher speichern
		double flaecheZwei = UtilityKlasse.berechneKreisFlaeche(kreisKoerper);
		System.out.println(flaecheZwei);

		// Oder du lässt dir den Rückgabewert direkt ausgeben
		System.out.println(UtilityKlasse.berechneKreisFlaeche(kreisKoerper));
	}
}

Klicke auf „RUN“ und los geht’s.
Du solltest jetzt viermal eine Kreisfläche von 1256.637061436 ausgegeben bekommen.

Bis hierhin läuft es.
Du kannst aber Instanzen der Utility-Klasse anlegen.

Java Hilfsklassen Objekte erstellen

Und das ist blöd.
Denn:

  1. Du brauchst kein Objekt, denn alles in dieser Klasse ist statisch.
  2. Die Methoden sind zwar für Objekte geeignet. Aber nicht speziell für Objekte der Klasse UtilityKlasse.
  3. Eine Möglichkeit Objekte aus dieser Klasse zu erstellen, verwirrt dich später vielleicht.

Also lass uns die Instanzierung dieser Klasse unterbinden.

So kannst du das Instanzieren verhindern.

Schau dir nochmal die Utility-Klasse an.

public class UtilityKlasse {
	public final static double PI = 3.14159265359;// Kreiszahl

	//Methode erwartet einen Radius als Zahl
	static double berechneKreisFlaeche(double radius){
		double flaeche= PI*(radius*radius);
		return flaeche;
	}
	
	//Methode erwartet ein Kreisobjekt mit einer Instanzvariablen radius
	static double berechneKreisFlaeche(Kreis kreisEins){
		double flaeche= PI*(kreisEins.radius*kreisEins.radius);
		return flaeche;
	}
}

Wir bieten keinen Konstruktor an. Zumindestens nicht explizit.
Klar- Der default Konstruktor ist dennoch immer dabei.

Und mit diesem Default-Konstruktor kann jede andere Klasse Instanzen dieser Klasse erzeugen.
(Wie ich oben im Bild demonstriert habe.)

Und deshalb darfst du den default-Konstruktor nach außen nicht anbieten.
Das heißt, dieser darf nicht sichtbar sein.

public class UtilityKlasse {
	public final static double PI = 3.14159265359;

	
	static double berechneKreisFlaeche(double radius){
		double flaeche= PI*(radius*radius);
		return flaeche;
	}
	
	
	static double berechneKreisFlaeche(Kreis kreisEins){
		double flaeche= PI*(kreisEins.radius*kreisEins.radius);
		return flaeche;
	}
	
	//Durch das Keywort private kann keine Klasse außerhalb auf diesen zugreifen
	private UtilityKlasse(){
		
	}
}

Aufgrund dessen, dass der Konstruktor jetzt private ist – verbietet die Klasse die Instanzierung von Objekten.

Java Utility Klasse Instanzierung

Der Konstruktor wird nicht mehr nach außen angeboten.
Und ohne Konstruktoraufruf – keine Objekte.

Zusammenfassung:

  • Utility Klassen eignen sich besonders gut, um Methoden – welche vom kompletten Programm genutzt werden sollen, anzubieten.
  • Wichtig ist dabei, dass diese Klassen keine Objekte erzeugen können.
  • Außerdem sollten die angebotenen Methoden und Konstanten dem kompletten Programm und allen Objekten zur Verfügung stehen.

Ähnliche Beiträge

So kannst du in den Java Klassen Attribute anlegen

Java Klassen Attribute

Die bisherigen Java Klassen in unserem Einführungsbeispiel besitzen noch keine Attribute. Das ändern wir und legen diese jetzt an. In diesem Beitrag erfährst du: Warum Variablen in deinen Klassen eine entscheidende Rolle spielen. Was es bedeutet eine Variable zu deklarieren. Wo du Attribute in den Java Klassen anlegen darfst und wo nicht. Wie du durch […]

So verwendest du Inkrement und Dekrement Operatoren in deinen Java Programmen

Java Operatoren

In diesem Beitrag geht es um Java Operatoren. Ich möchte dir gern zwei neue Operatoren vorstellen. Diese nennen sich Inkrement und Dekrement. Ja was heißt das? Inkrementieren bedeutet eine schrittweise Erhöhung einer Zahl. Und dementsprechend bedeutet Dekrementieren: Die schrittweise Verminderung einer Zahl. Wozu brauchst du das? Stell dir vor. Du bekommst eine Liste mit Namen […]

So verwendest du in Java try und catch Blöcke

Java try und catch

Ich bereue lieber die Dinge, die ich getan habe – als die Dinge, welche ich gar nicht erst versucht habe. Ja ich würde mich als den typischen „try-and-error-Menschen“ bezeichnen. Was ich will, probiere ich einfach aus und schaue dann erst was passiert. So etwas wie Pläne kenne ich eigentlich nicht. Und wenn ich mal einen […]

Nutze die Fernbedienung für deine Java Objekte

Auf Java Objekte greifst du mit einer Art Fernsteuerung zu. Diese bezeichnet man als Referenz oder als Verweis. Und diese Referenzvariablen möchte ich dir jetzt einmal vorstellen. Doch bevor wir loslegen, lass mich noch ein paar Dinge loswerden. 🙂 Ich habe es ja schon einmal in einem früheren Beitrag erwähnt. Java unterscheidet zwischen primitiven und […]

10 ganz nützlichen Feature der Klasse Java Math

In diesem Beitrag geht es um eine spezielle Java Klasse. Die Klasse nennt sich Java Math. Diese ist in der Standardbibliothek von Java enthalten. Warum solltest du diese Klasse kennen? Die Math Klasse bietet dir einen Menge Methoden an, welche zur Berechnung von mathematischen Gleichungen ganz hilfreich sind. Aber auch für Nichtmathematiker ist etwas dabei. […]

Nutze die richtigen Methoden zum Java Lernen

Java lernen Methoden

Ich lernte die Java Programmierung auf die klassische Art. Ich kaufte mir das erste Buch und los ging es. „Jetzt wirst du Java lernen“ – sagte ich zu mir. Ich war relativ schnell ziemlich frustriert, denn irgendwie fehlten mir ein paar Zusammenhänge. Kennst du das? Du hast ein Wissensfetzen und noch einen. Aber das Wichtigste. […]

So verwendest du die Java Codeblöcke zur Automatisierung

Java Codeblöcke

In diesem Beitrag geht es um den Einsatz von Java Codeblöcken oder Initialisierungsblöcken. Viele Wege führen nach Rom. Oder Alle Wege führen nach Rom. Heißt es in einem alten Sprichwort. Und so ähnlich ist es bei der Java Programmierung. In diesem Beitrag möchte ich dir einen weiteren Weg vorstellen, wie du Variablen eines Java Objektes […]

Nutze das Java Switch Case Statement für komplexe Verzweigungen

Java Switch case

Java switch case statement – was ist das? Wozu brauchst du das? Lass mich anders beginnen… 🙂 In einen meiner früheren Beiträge habe ich schon einmal über bedingte Anweisungen oder Zuweisungen geschrieben. Diese if und else Konstrukte funktionieren eigentlich ganz gut. Aber was ist, wenn du mehrere Parameter abfangen möchtest. Okay ein Beispiel…

Java Übung 19 – Zähle die Kommastellen

Java Übung Kommastellen Zählen

In dieser Java Übung möchte ich, dass du eine Methode zum Zählen von Kommastellen schreibst. Lege dazu eine Klasse „KommaZahl“ an. Diese Klasse enthält die statische Methode „zaehleKommaStellen“, welche eine Kommazahl als übergebenen Parameter erwartet.

Java Übung 21 – Bestimme die Anzahl der Tage

Java Übung Tage

In dieser Java Übung möchte ich, dass du eine Methode schreibst, welche zwei Zahlen entgegennimmt. Und zwar soll die erste Zahl das Jahr sein. Die zweite Zahl soll eine Monatsangabe (1-12) repräsentieren. Was soll die Methode dann machen? Die Methode soll dir die Anzahl der Tage des jeweiligen Monats zurückgeben. Achte auf Schaltjahre.

Ein Java Fenster erzeugen mit dem JFrame

Java-Fenster-erzeugen

Ein Java Fenster erzeugen mit Swing. Java Swing – was ist das? Zum Erstellen von grafischen Benutzeroberflächen, kurz GUI, bietet Java eine eigene Standardklasse an. Diese Klasse nennt sich Swing. Aus dieser Swing-Klasse heraus können Objekte erstellt werden. Diese Objekte lassen sich in vier verschiedene Kategorien einteilen. Fenster und Dialoge bilden das Grundgerüst einer grafischen […]