Navigation überspringen

Eigene Klasse

Benötigtes Vorwissen

Neben den Klassen der Hauptbibliothek java.* lassen sich beliebig viele eigene Klassen definieren. Sie unterliegen den Konventionen der Java-Syntax.

Innerhalb von Klassen läßt sich folgendes deklarieren:

  • Attribute (Objektgruppenmerkmale)
  • Methoden (Objektgruppenfähigkeiten)*
  • Konstruktoren
  • Klasseninitialisierer
  • innere Klassen und Schnittstellen

Das Schlüsselwort class leitet die Klassendeklaration ein

[optional=Modifizierer] class Spieler{

}

Attribute

Attribute sind Merkmale einer Objektgruppe. Sie werden innerhalb der Klasse deklariert. Unter Deklaration versteht man das Zuweisen eines Modifizierers, eines Datntyps und Bezeichners in gleicher Reihenfolge. Es gilt die Camel-Notation.

public class Spieler {
    private String spielerName;
    private String spielerGeschlecht;
}

Methoden

Methoden sind die Fähigkeiten einer Objektgruppe und sind laut ihrer Definition an eine Instanz der Klasse gebunden. Das heißr, ein statischer Zugriff ist prozeduraler Art und ist automatisch eine Funktion.

Methoden werden deklariert durch Angabe des Modifizierers, des Rückgabewerts/-typs, des Bezeichners und in Klammer der Übergabeparameter (kommagetrennt), in gleicher Reihenfolge. ACHTUNG: zu jedem Übergabeparameter gehört vorangestellt der jeweilige Modifizierer. Eine Besonderheit ist der Rückgabewert void. Er bedeutet keine Rückgabe. Bei allen anderen Rückgabetypen erfordert der Compiler zwingend ein mit return eingeleitete Wertübergabe gleichen Datentyps, siehe Zeile 9.

public class Spieler {
    private String spielerName;
    private String spielerGeschlecht;
    public void setSpielerName(String spielerName){
        this.spielerName=spielerName;
    }
    public String getSpielerName(){
        return this.spielerName;
    }
}

Anmerkung:

Das Problem der Namensgleichheit des Übergabeparameters und des KLassenattributs in Zeile 4 (spielerName) wird mit Hilfe des this-Operators unterbunden. Der this-Operator kennzeichnet eindeutig den Bezug auf die eigene Klasse.

Konstruktoren

Konstruktoren nehmen zur Instanzierung von Objekten eine besondere Stellung ein. Mit ihrer Hilfe lassen sich Assoziationen (Beziehungen) verschieden intensiv gestalten, siehe Abschnitt Assoziationen. Ein Konstruktor ist nur ein einziges Mal zur Instanzierung aufrufbar. Allgemein wird immer wenn kein Konstruktor angegeben ist, der defaulkt Konstruktor aufgerufen. In unserem Beispiel heißt das, dass der Compilder einen leeren Konstruktor automatisch einfügt. Der Konstruktor wird Deklariert durch den Methodennamen exakt wie die Klasse selbst. Das heißt, nach Camel-Notation ist der Konstruktor die einzig großgeschriebene Methode einer Klasse. Hier public Spieler(){ }. Der Konstruktor hat keinen Rückgabetyp, auch nicht void. 

public class Spieler {
    private String spielerName;
    private String spielerGeschlecht;
    public Spieler(){
        //leerer Konstruktor
    }
    public void setSpielerName(String spielerName){
        this.spielerName=spielerName;
    }
    public String getSpielerName(){
        return this.spielerName;
    }
}

Durch Verwendung des Konstruktors können aber gewisse Zangsangaben eingefordert werden. Soll es beispielsweise nicht mögloich sein, einen Spieler ohne Namen anzulegen, ist das mit dem Konstruktor möglich. Soll dieser Name während der gesamten Lebenszeit der Instanz auch nicht mehr änderbar sein, so kann auf die setter-Methode verzichtet werden.

public class Spieler {
    private String spielerName;
    private String spielerGeschlecht;
    public Spieler(String spielerName){
        this.spielerName=spielerName;
    }
    public String getSpielerName(){
        return this.spielerName;
    }
}

Auszug aus der main()-Methode

public static void main(String[] args){  
...  
     Spieler spieler1 = new Spieler("Testspieler");
...
}

Der new-Operator leitet den Aufruf des Konstruktors ein. Ist dieser nicht leer, fordert der Compiler zur Laufzeit eine Parameterübergabe.

Klasseninitialisierer

Sind Attribute wie hier spielerGeschlecht nicht initialisiert durch den Konstruktor oder durch einen Zuweisungsoperator, verwendet der Java-Compiler Standardwerte. In unserem Fall handelt es sich um eine Referenz, da die Klasse String als Datentyp verwendet wird, ohne weitere Wertzuweisung.  Unser Attribut spielerGeschlecht würde zur den Wert null erhalten.

Alle Standardinitialisierer im Überblick:

  • 0 bei allen numerischen Werten
  • false bei boolean
  • null bei Referenzvariablen

* Der Prpozedurale Ansatz von Java nennt nicht-objektbezogene Fähigkeiten Funktion