[an error occurred while processing this directive]

Einführung in Klassendeklarationen in Java im Rahmen der Lehre des Programmierens mit der Programmiersprache Java. [] (Java Klassendeklaration Java Klassendefinitionen Java Klassendefinition Java Klasse definieren Java Klasse deklarieren Java), Lektion, Seite 721389
http://www.purl.org/stefan_ram/pub/java_klassendeklarationen_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Klassendeklarationen in Java

Die—etwas vereinfachte—Produktion für eine Klassendeklaration lautet folgendermaßen.

ClassDeclaration 〉 ::=
[〈ClassModifiers 〉] "class" 〈Identifier 〉 〈ClassBody 〉.

Dabei legen die Klassenmodifizierer ClassModifiers  Eigenschaften der deklarierten Klasse fest, deren Name nach dem Schlüsselwort "class" als Bezeichner Identifier  festgelegt wird. Darauf folgt der Klassenrumpf ClassBody  mit den in geschweiften Klammern enthaltenen Elementen der Klasse.

Eine Klasse kann zusammengehörige Methoden zusammenfassen. Die Namen von Methoden einer Klasse brauchen nur innerhalb der Klasse eindeutig zu sein.

Liedtest.java
/** Das Lied "Auf einem Baum ein Kuckuck sass" */ 
class AufEinemBaumEinKuckuckSass 
{ /** Den Refrain des Liedes ausgeben. */ 
private static void refrainAusgeben() 
{ System.out.println( "Sim sa la dim, bam ba," ); 
System.out.println( "Sa la du, sa la dim -" ); } 
/** Den Text des Liedes ausgeben. */ 
public static void ausgeben() 
{ { System.out.println( "Auf einem Baum ein Kuckuck, -" ); 
refrainAusgeben(); 
System.out.println( "Auf einem Baum ein Kuckuck sass." ); } 
{ System.out.println( "Da kam ein junger Jaeger, -" ); 
refrainAusgeben(); 
System.out.println( "Da kam ein junger Jaegersmann." ); } 
{ System.out.println( "Der schoss den armen Kuckuck, -" ); 
refrainAusgeben(); 
System.out.println( "Der schoss den armen Kuckuck tot." ); }}}
/** Das Lied "Vogelhochzeit" */ 
class Vogelhochzeit 
{ /** Den Refrain des Liedes ausgeben. */ 
private static void refrainAusgeben() 
{ System.out.println( "Fi-di-ra-la-la, fi-di-ra-la-la, fi-di-ra-la-la-la-la!" ); } 
/** Den Text des Liedes ausgeben. */ 
public static void ausgeben() 
{ System.out.println( "Ein Vogel wollte Hochzeit machen, in dem gruenen Walde." ); 
refrainAusgeben(); 
System.out.println( "Die Drossel war der Braeutigam, die Amsel war die Braute." ); 
refrainAusgeben(); 
System.out.println( "Die Lerche, die Lerche, die fuehrt die Braut zur Kerche." );  
refrainAusgeben(); }}
/** Testklient fuer Liedklassen */ 
public class Liedtest 
{ /** Testklient fuer Liedklassen */ 
public static void main( String[] args ) 
{ AufEinemBaumEinKuckuckSass.ausgeben();  
Vogelhochzeit.ausgeben(); }}

System.out
Auf einem Baum ein Kuckuck, - 
Sim sa la dim, bam ba, 
Sa la du, sa la dim - 
Auf einem Baum ein Kuckuck sass. 
Da kam ein junger Jaeger, - 
Sim sa la dim, bam ba, 
Sa la du, sa la dim - 
Da kam ein junger Jaegersmann. 
Der schoss den armen Kuckuck, - 
Sim sa la dim, bam ba, 
Sa la du, sa la dim - 
Der schoss den armen Kuckuck tot. 
Ein Vogel wollte Hochzeit machen, in dem gruenen Walde. 
Fi-di-ra-la-la, fi-di-ra-la-la, fi-di-ra-la-la-la-la! 
Die Drossel war der Braeutigam, die Amsel war die Braute. 
Fi-di-ra-la-la, fi-di-ra-la-la, fi-di-ra-la-la-la-la! 
Die Lerche, die Lerche, die fuehrt die Braut zur Kerche. 
Fi-di-ra-la-la, fi-di-ra-la-la, fi-di-ra-la-la-la-la!

In der Methode "main" wird zunächst die Methode "AufEinemBaumEinKuckuckSass.ausgeben" aufgerufen. Man sagt auch, daß der Klasse "AufEinemBaumEinKuckuckSass" die Nachricht "ausgeben()" geschickt werde. Dieselbe Nachricht wird in der nächsten Anweisung an eine andere Klasse geschickt und hat dann auch eine andere Wirkung.

Namen von Klassen sollten Hauptwörter (Nomen) oder kurze Nominalphrasen sein, die mit einem großen Buchstaben anfangen und in denen der Anfangsbuchstabe jedes weiteren Wortes groß geschrieben wird und sonst kleine Buchstaben verwendet werden.

In Java  darf nur eine öffentliche Klasse pro Übersetzungseinheit (Quelldatei) deklariert werden. Die Klasse mit der Methode "main" muß öffentlich sein, da diese Methode von der Javamaschine, also von außen, aufgerufen werden kann. „Öffentlich“ bedeutet daß solch ein Aufruf einer Methode von einer Entität außerhalb der Übersetzungseinheit möglich ist: Dazu müssen die Klasse und die Methode beide öffentlich sein. Der Name der Datei mit der Übersetzungseinheit muß der Name der öffentlichen Klasse mit der Erweiterung ".java" sein.

Bei nicht-öffentlichen Klassen, die nicht selber in anderen Klassen enthalten sind, braucht und darf kein Klassenmodifizierer "private" geschrieben werden. Dieser ist aber nötig, wenn es sich um Klassen handelt, die innerhalb  einer anderen Klasse deklariert werden (falls die inneren Klassen privat sein sollen). Die beiden Klassen für Lieder dürfen aber hier ohnehin nicht innerhalb der Klasse "Lieder" deklariert werden, weil sie dann keine statischen Methoden haben dürfen (Kenntnisse über andere Methoden werden in dieser Lektion noch nicht vorausgesetzt).

Die beiden anderen Klassen sind nicht öffentlich. Das ist auch nicht nötig, weil ihre Methoden nur aus derselben Übersetzungseinheit aufgerufen werden.

In der Übersetzungseinheit stehen Klassendeklarationen  mit Methodendeklarationen  und kleine Klassen oder Methoden, dennoch nennt man—nicht ganz genau—eine Klassendeklaration oder eine Methodendeklaration oft einfach nur eine „Klasse“ oder eine „Methode“, wenn keine Mißverständnisse zu befürchten sind.

Auch vor Klassendeklarationen sollte—wie vor Methodendeklarationen—jeweils ein Dokumentationskommentar  stehen, der die deklarierte Entität beschreibt. Im Falle der hier vorgestellten Übersetzungseinheit wird unter normalen Umständen aber nur die öffentliche Methode "main" der öffentlichen Klasse "Liedtest" in die erzeugte Dokumentation aufgenommen, weil nur sie öffentlich ist und damit zur von außen verwendbaren Schnittstelle der Übersetzungseinheit gehört.

Liedtest [Dokumentation]
Class Liedtest: Testklient fuer Liedklassen 
main 
public static void main( java.lang.String[] args ) 
Testklient fuer Liedklassen

Übungsaufgaben

Liedklassen erweitern
Erweitern Sie die Klasse "AufEinemBaumEinKuckuckSass" und die Klasse "Vogelhochzeit" um jeweils eine Methode "nameAusgeben", die den Namen des jeweiligen Liedes ausgibt. Die schon vorhandenen Methoden dieser beiden Klassen dürfen dabei nicht verändert werden. Rufen Sie diese Methoden in sinnvoller Weise in der Hauptmethode "main" auf.
Grußklassen deklarieren
Schreiben Sie eine Übersetzungseinheit mit einer Klasse "Englisch" und einer Klasse "Deutsch", die jeweils eine Methode "printHello" enthalten. Die Methode "printHello" der Klasse "Englisch" soll eine Begrüßung auf Englisch (z.B., den Text "Hello!") ausgeben, die Methode "printHello" der Klasse "Deutsch" soll eine Begrüßung auf Deutsch (z.B., den Text "Hallo!") ausgeben. Schreiben Sie eine Hauptmethode in einer weiteren öffentlichen Klasse dazu, die den beiden zuvor deklarierten Klassen jeweils die Nachricht "printHello" schickt und so einen Gruß auf Deutsch und einen Gruß auf Englisch ausgibt.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Von der Stefan-Ram-Startseite ausgehend finden sich oft noch mehr Informationen zu Themen, die auf einer Seite angesprochen wurden. (Eine Verbindung zur Stefan-Ram-Startseite befindet sich ganz oben auf dieser Seite.)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz