Skip to main content

Utility Klassen als Werkzeug- & Hilfsklassen in Java Programmen anlegen


java programmierung utility klassen anlegen

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 Java installieren

java-installieren

Bevor du loslegst und deine ersten Java Programme schreibst, benötigst du die entsprechende Arbeitsumgebung. Du solltest also Java installieren. Und diese Arbeitsumgebung beinhaltet dann Bibliotheken für die einzelnen Java-Standard-Klassen, Dateien um deine Programme auszuführen. Dateien um deine Programme zu packen, Logische Verzeichnisstrukturen

Lokale Variablen im Java Programm: Lebensdauer und Nutzung

lokale variablen im java programm

Lass uns über die Lebensdauer einer lokalen Variablen sprechen. Warum ausgerechnet die Lebensdauer? Alle Java Variablen, unterscheiden sich in folgenden Punkten: wo diese deklariert werden können, wie du diese aufrufen kannst, welchen Bereich diese abdecken, und Ihre Lebensdauer Und eine lokale Java Variable hat eine relativ kurze Lebensdauer. Schauen wir […]

So kannst du Instanzen in Java Klassen zählen

java programmierung instanzen in java klassen zählen

Wie kannst du die Instanzen der Java Klassen zählen? Ganz einfach. Am besten ist es, wir bleiben beim Einführungsbeispiel zu den Java Klassen. Und ich wähle die Klasse „Monster“. Um es einfach zu halten, soll auch der Programmstart durch die Klasse erfolgen. Die Klasse bietet somit eine main-Methode an.

10 ganz nützlichen Feature der Klasse Java Math

java programmierung klasse 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 […]

So funktioniert die Java Konsoleneingabe über den Scanner

java programmierung konsoleneingabe scanner

Es wird Zeit für die erste Java Konsoleneingabe. Und diese Eingaben machst du über den Java Scanner. Was ist das? Der Scanner ist eine vorgefertigte Java Klasse, welche Java mit seiner API anbietet. Das heißt du musst nichts selbst erschaffen. Du musst nur wissen, wie du darauf zugreifst. Erst einmal […]

So kannst du Java Superklassen mit dem Vererbungsbaum entwerfen

java programmierung superklassen vererbungsbaum

Vererbungsbaum in Java – klingt erstmal komisch. Dennoch wird dies so bezeichnet. Gemeint sind damit – die einzelnen Hierarchiestufen oder Vererbungsebenen – von der Superklasse bis runter zu den Kindklassen. Wie sieht das nun konkret aus? Vererbung bedeutet: Du definierst einen allgemeinen Typen – zB. Möbel Und dann implementierst du […]

So kannst du in Java eine Binärzahl in eine Dezimalzahl umwandeln

java programmierung binärzahl in dezimalzahl umwandeln

Erinnerst du dich? In einer der letzten Beiträge haben wir uns die Zusammenhänge zwischen dem dualen und dem dezimalen Zahlensystem angeschaut. Aber wir haben noch keine Java Binärzahl in eine Dezimalzahl verwandelt. Zumindestens nicht praktisch…. Stattdessen…. Haben wir festgestellt, dass beide Zahlensysteme im Grunde genommen sehr ähnlich sind. Beim Dezimalsystem […]

So sorgt Java Polymorphie für besseren Code und mehr Möglichkeiten

java programmierung polymorphie code möglichkeiten

Polymorphie ist das Herzstück jeder objektorientierten Sprache. Nicht nur in Java – auch in Python, Javascript und in anderen Sprachen. Aber was bedeutet Polymorphie eigentlich? Polymorphie oder auch Polymorphismus genannt, kommt aus dem Griechischen. Es bedeutet Vielgestaltigkeit. Etwas freier übersetzt, kannst du es auch als Facettenreichtum bezeichnen. Im Grunde genommen […]

So kannst du spielend Java Programmierung lernen

java programmierung lernen

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 […]

So funktioniert der Java Programmstart mit Argumenten-Übergabe

java programmierung programmstart argumente

Um ein Java Programm starten zu können, benötigst du immer die main-Methode. Das Programm startet immer genau an dieser Stelle. Alle lokalen Variablen, welche du in der Main Methode anlegst, kannst du dann im Programm nutzen. Auch alle Methoden, welche du innerhalb des Methodenrumpfes der main-Methode aufrust, werden ausgeführt. Was […]

So nutzt du Methoden aus der Java String Klasse

java programmierung methoden java string klasse

In einen der letzten Beiträge haben wir darüber gesprochen, dass Java Strings – Objekte sind. Dass Strings in allen Programmen äußerst häufig vorkommen Und dass sich deshalb Referenzvariablen String-Objekte im String Pool teilen. Das Konzept hinter dem String-Pool ist die Teilung der Ressourcen. Und das bedeutet: Weniger Objekte – mehr […]

Namenskonventionen bei der Java Programmierung

java-programmierung-namenskonvention-lowercasecamelcase

Beiderjavaprogrammierungsolltestduaufdierichtigenamensvergabeachten. indennnamengebendeinenjavaprogrammeinegrundlegendestruktur. Was sagen dir die beiden oberen Sätze? Häh? Da steht: Bei der Java Programmierung solltest du auf die richtige Namensvergabe achten. Denn Namen geben deinem Java Programm eine grundlegende Struktur. Jede Sprache braucht Regeln. Diese Regeln, wie Grammatik oder Rechtschreibung geben der Sprache eine Struktur. Jeder Leser, welcher […]

Java Anfänger Übung: Hello World

Java-Übung-Hello-World

Alles beginnt mit „Hello World“. Sämtliche Java Bücher beginnen mit diesem ersten Beispiel. Auch die Java Übungen sollen mit diesem ersten Programm starten. Definiere eine Klasse „Hello World“. Implementiere die Main Methode. Die Main Methode soll bei Programmaufruf die Bildschirmanzeige „Hallo Welt“ zurückgeben. Die Lösung zur Java Übung „Hallo Welt“ […]

So kannst du Konstanten in Java Programmen anlegen und nutzen

java programmierung konstanten anlegen und nutzen

Java Konstanten – was kann man sich darunter vorstellen? Du kennst Konstanten in der Mathematik. Die Kreiszahl Pi ist so eine konstante Zahl. Diese Zahl ändert sich niemals. Sie beträgt immer rund 3,141592. In der Physik gelten die Lichtgeschwindigkeit, der Erdradius oder der absolute Nullpunkt als konstant. Selbst die Geschwindigkeit […]

So unterstützen dich Java Vererbungstabellen beim Klassen-Entwurf

java programmierung vererbungstabellen klassenentwurf

Bei der Java Vererbung gibt es zwei Klassenarten bzw. -stufen. Die Superklassen, welche einen allgemeinen Typen darstellen Und die spezielleren Unterklassen, welche die Superklasse um bestimmte Funktionen erweitern. Jetzt ist dieses ganze „Der-erbt-von-dem-Konzept“ mitunter sehr schwierig darzustellen. Zum Beispiel in einem Werkzeugkoffer. In einem Werkzeugkoffer befinden sich sämtliche Werkzeuge, von […]

Syntax, Semantik und Lexikalik in der Java Programmierung

java programmierung lexikalik syntax semantik

Java ist eine Programmiersprache. Und wie jede andere Programmiersprache ist auch Java, lediglich eine künstliche Sprache.   Normalerweise bieten künstliche Projekte immer jede Menge Spielraum für Eigenkreationen. Bei der Programmierung ist dies nicht ganz so. Denn Programmiersprachen sind auch immer sehr exakt.   Jede Programmiersprache und auch jede gesprochene Sprache […]

Unterschied zwischen Klassenvariable und Instanzvariable im Java Programm

unterschied klassenvariable instanzvariable java programmierung

Bei der Java Programmierung unterscheidet man drei Arten von Variablen. Als erste Gruppe sind die lokalen Variablen zu nennen. Auf diese gehe ich in einem separaten Artikel ein. Mich interessieren die zwei anderen Variablentypen. Zum einen existieren Klassenvariablen. Und dann sind da noch die Instanzvariablen. Wo liegt der Unterschied zwischen […]

Zwei smarte Möglichkeiten eine Java Zufallszahl zu erzeugen

java zufallszahl anlegen erzeugen

Java Zufallszahl – Wieso? In der Java Programmierung benötigst du immer wieder einmal Zufallszahlen. Du möchtest deine Software mit Daten testen und dir keine Zahlen ausdenken. Du benötigst Stichproben, welche ein reales Verhalten simulieren. Du hast ein Spiel entworfen und die Akteure sollen mit zufälligen aber unterschiedlichen Größen, Rüstungsleveln usw. […]

So solltest du Kommentare im Java Programm einsetzen

java programmierung kommentare

Bei der Java Programmierung sind Kommentare mitunter genauso wichtig wie der eigentliche Code. Denn ein guter Kommentar zeigt dir sofort, was mit dem Code gemeint ist, was dieser bewirkt und was sich der Entwickler dabei dachte. Wie werden Kommentare in Java gesetzt? Die Kommentare werden in Eclipse immer grün dargestellt. […]

Java Konsolenausgaben mit formatierten Zahlen

java programmierung konsolenausgabe mit formatierten zahlen

Java Konsolenausgaben erzeugst du mit der System.out.println()-Anweisung. Dies ist relativ einfach. Aber es ist mitunter nicht ganz praktisch. Und zwar immer dann, wenn Zahlen im Spiel sind. Die Zahlen welche dann auf deiner Java Konsole erscheinen, sind unformatiert. Sie haben zu viele Kommastellen. Oder für eine bessere Darstellung benötigst du […]

Die 5 verschiedenen Zahlensysteme in der Java Programmierung

java programmierung zahlensysteme

Java Zahlensysteme – Was soll das? In sämtlichen Programmiersprachen werden Zahlen in Variablen abgespeichert. Wenn du dir die einzelnen primitiven Datentypen in Java einmal anschaust – wirst du feststellen – dass die Masse der Datentypen Zahlen annehmen und speichern können. Zahlen und die Mathematik dahinter spielen in der Programmierung eine […]