Home > Informatik > Stufe EF > Folge 3 > Folge 3.1

3.1 Die Klasse Person

class Person - Getter/Setter - Fallunterscheidungen - if-else-Bedingungen - switch-Anweisung

Lernziele

Wenn Sie diese Seite durchgearbeitet haben, sollten Sie wissen

  • Wie man sein BlueJ-Projekt regelmäßig sichert,
  • wie man sicher mit Attributen, Parametern und Datentypen umgeht,
  • wie man Attributwerte mit dem Objektinspektor von BlueJ untersucht und
  • wie man Meldungen und Attributwerte mit dem System.out.println()-Befehl in der Konsole ausgeben kann.

Im letzten Unterrichtsblock haben Sie zum ersten Mal eine eigene Klasse erstellt und dazu passende Methoden geschrieben. Damit haben Sie Ihre ersten kleinen Java-Programme entwickelt.

In den nächsten Sitzungen werden wir weitere einfache Programme schreiben, diesmal allerdings nicht mit grafischer Oberfläche, sondern als sogenannte Konsolenprogramme. Auch wenn diese zunächst etwas "unspektakulärer" wirken, helfen sie dabei, grundlegende Programmierkonzepte besser zu verstehen.

Komplexere grafische Anwendungen mit Schaltflächen, Eingabefeldern oder Listen – also das, was man typischerweise unter einem "richtigen" Programm versteht – heben wir uns für später auf. Solche Oberflächen-Programmierung wäre im Moment noch zu aufwendig und würde vom eigentlichen Lernziel ablenken. Und um ehrlich zu sein: Selbst diese Programme wären aus Sicht einer professionellen Softwareentwicklerin noch ziemlich einfach.

Im schulischen Informatikunterricht stehen ohnehin andere Ziele im Vordergrund als bei einer Berufsausbildung: Sie sollen systematisch auf das Informatik-Abitur vorbereitet werden – oder auf ein mögliches späteres Studium im IT-Bereich. Auch wer eine berufliche Ausbildung in der IT-Branche anstrebt, profitiert von einem fundierten Einstieg in die theoretischen und praktischen Grundlagen.

Persönliche Bemerkung:

Ich habe ja nun 2025/26 auch mal zwei Semester an einer Hochschule unterrichtet, "Einführung in die Objektorientierte Programmierung" für Erst- und Zweitsemester. Da habe ich dann auch gemerkt, dass der Informatik-Unterricht der gymnasialen Oberstufe eine wichtige Bedeutung für das Studium der Informatik und verwandter Fächer hat. Einige Studierende hatten zwar Informatik in der Oberstufe, haben aber nie programmiert, sondern sich nur mit Word, Excel und anderen Office-Programmen beschäftigt. Für diese Leute war es dann immer sehr schwer, dem Stoff der Vorlesung zu folgen.

Wie dem auch sei, wir fangen jetzt einfach mal an ...

Und noch eine Bemerkung:

Durch meine Tätigkeit an der Hochschule ist mir klar geworden, welche enorme Bedeutung das Konzept der Vererbung innerhalb der Informatik und auch innerhalb der Java-Programmierung hat. Daher werde ich diesen EF-Kurs jetzt so umgestalten, dass das Thema "Vererbung" frühzeitig behandelt wird.

Jetzt fangen wir aber wirklich an ...

Schritt 1 - Neue Klasse erzeugen

⇒ Erstellen Sie ein neues BlueJ-Projekt und speichern Sie dieses als "Person-1" in einem neuen Ordner "Folge03-Person" ab. In diesem Ordner speichern Sie dann auch die weiteren Versionen "Person-2", "Person-3" etc. dieses Projektes.

⇒ Erstellen Sie dann eine neue Java-Klasse Personin diesem Projekt.

Übersichtliche Verzeichnisstruktur

Wenn Sie später mal ein komplexeres Projekt erstellen, wollen Sie vielleicht Methoden aus älteren Projekten wiederverwerten (warum sollte man das Rad zweimal erfinden?). Dazu müssen Sie aber die alten Projekte mit den benötigten Methoden erst mal finden.

Wenn Sie Ihre alten Java-Projekte alle im gleichen Ordner speichern und dann auch noch "Projekt01", "Projekt02" und so weiter benennen, dann finden Sie gar nichts wieder.

Es gibt auch immer wieder Schüler (meist männlichen Geschlechts - no offense), die alle Klassen, die sie jemals im Informatik-Unterricht geschrieben haben, in ein- und demselben Java-Projekt speichern. Im BlueJ-Fenster sieht man dann 30 oder 40 orangefarbene Kästen, die aber zu völlig verschiedenen Projekten gehören.

Wichtige Überlebenstipps für Schüler(innen)

Überlebenstipp 1

Immer dann, wenn Sie vorhaben, wichtige Änderungen an den Quelltexten vorzunehmen, erstellen Sie bitte ein neues Projekt mit einer neuen Versionsnummer. Das erreichten Sie mit dem "Sichern unter..."-Befehl. Für Sie hat das folgenden Vorteil: Die Lehrperson kommt zu Ihnen, um sich das aktuelle Projekt anzusehen. Ihr Quelltext ist aber gerade in Arbeit und kann daher gerade nicht kompiliert werden, so dass Sie das Programm nicht vorführen können.

Dann wird der Lehrer oder die Lehrerin Sie fragen: "Zeigen Sie doch mal die letzte lauffähige Version". Kein Problem für Sie, weil Sie ja die letzte lauffähige Version gesichert haben und jetzt an einer Kopie dieser Version arbeiten.

Und weil's so schön war, gleich noch ein wichtiger Tipp:

Überlebenstipp 2

In den meisten Schulen arbeiten Sie zu zweit an einem Computer, bei größeren Projekten auch mal zu dritt oder zu viert an zwei Rechnern. Natürlich kommt es immer wieder mal vor, dass ein Gruppenmitglied fehlt (Krankheit, Quarantäne, schulische Veranstaltung etc.). In meinem eigenen Informatik-Unterricht habe ich oft eine Sonderform des Murphyschen Gesetzes beobachtet: Grundsätzlich fehlt immer der Schüler, der alle wichtigen Projektdateien in seinem Profil oder auf seinem USB-Stick gespeichert hat, und die anderen Gruppenmitglieder können deswegen nicht weiterarbeiten.

Aufgabe:

Entwickeln Sie selbst eine Strategie, um solche Vorkommnisse zu vermeiden!

Schritt 2 - Quelltext eingeben

⇒ Doppelklicken Sie auf die Klasse Person.

Es öffnet sich ein Editor-Fenster mit dem Quelltext der Klasse. Die Programmierer von BlueJ haben Ihnen schon viel Arbeit abgenommen und viele Kommentare in den Quelltext eingebaut. Am besten lernen Sie Java jedoch, wenn Sie den von BlueJ erzeugten Quelltext komplett löschen und durch den eigenen Code ersetzen.

⇒ Geben Sie folgenden Code in den Editor ein und kompilieren Sie den Code anschließend.

public class Person
{
    String name, vorname;
    int alter;
    
    public Person()
    {
    
    }
}

Attribute und Instanzvariablen

Objekte des Alltags werden durch Eigenschaften bzw. Attribute beschrieben. Ein Auto hat beispielsweise eine bestimmte Farbe, eine Höchstgeschwindigkeit, eine Leistung, die in kW angegeben wird und viele andere Eigenschaften.

Eine Person hat ebenfalls Eigenschaften oder Attribute, zum Beispiel Name, den Vorname, Alter, Geschlecht, Augenfarbe und noch viele mehr..

In unserer Java-Klasse Person beschränken wir uns zunächst auf drei dieser Attribute, nämlich den Namen, den Vornamen und das Alter der Person.

Realisiert werden diese Attribute in Java durch sogenannte Instanzvariablen. Diese werden grundsätzlich klein geschrieben und sollten keine Umlaute (ä, ö, ü), Leerzeichen oder Sonderzeichen enthalten.

Instanzvariablen sollten möglichst prägnant sein (also nicht zu lang, aber auch nicht zu kurz) und möglichst genau widerspiegeln, für welche Eigenschaft sie genau stehen. Das Attribut Vorname werden wir also nicht durch eine Instanzvariable wie vn oder dasIstDerVornameDerPerson (zwei Extrembeispiele, das erste zu kurz und unverständlich, das zweite zu lang) darstellen, sondern schlicht und einfach durch vorname. Entsprechend wird der Name durch die Variable name und das Alter durch die Variable alter dargestellt.

Datentypen

Die beiden Instanzvariablen name und vorname unterscheiden sich grundlegend von der Instanzvariable alter. Die beiden ersten Variablen sind Zeichenketten wie "Meier" und "Carl". Zur Darstellung solcher Zeichenketten dient der Datentyp String.

String

Zeichenketten können Buchstaben, Ziffern und Sonderzeichen enthalten. Auch eine leere Zeichenkette ist erlaubt: "".

Auch "g9ß5a]¢fa" wäre eine korrekte Zeichenkette. Wichtig sind nur die doppelten Anführungszeichen am Anfang und am Ende der Zeichenkette. Einfache Anführungszeichen 'so wie hier' dürfen dagegen nicht verwendet werden

int

Das Alter einer Person könnte man natürlich auch durch eine Zeichenkette (String) darstellen: "Siebzehn" oder "Achtunddreißig". Allerdings hätten wir dann Probleme, wenn wir beispielsweise das Durchschnittsalter von zehn Personen berechnen wollten. Daher verwenden wir den Datentyp int für die Darstellung des Alters.

Variablen vom Datentyp int enthalten ganze positive oder negative Zahlen. Kommazahlen wie 3,14 oder 18,75 können dagegen nicht gespeichert werden.

Die kleinste durch int darstellbare Zahl ist −2.147.483.648, und der größte Wert ist 2.147.483.647. Aber vielleicht merken Sie sich einfach: Der Datentyp int umfasst Werte zwischen -2 Milliarden und +2 Milliarden. Das sollte für die meisten Zwecke reichen.

long und BigInteger

Möchte man jedoch beispielsweise die Anzahl der Wassermoleküle in einem Liter Wasser speichern, stößt der Datentyp int schnell an seine Grenzen. Ein Liter Wasser enthält nämlich ungefähr 33 400 000 000 000 000 000 000 000 Moleküle. Solch große Zahlen können selbst mit dem größeren Datentyp long nicht mehr dargestellt werden. Hierfür braucht man dann den Datentyp BigInteger.

Datentypen

Lesen Sie sich den Lernbaustein "Datentypen" durch, wenn Sie mehr über dieses Thema erfahren wollen.

Aufgabe 3.1-1

Angenommen, in Java gäbe es für Zahlen nur den Datentyp int. Wie könnte man dennoch eine Zahl wie 3,14 darstellen, bei der eine oder zwei Nachkommastellen berücksichtigt werden?

Lösungen der Aufgaben und Übungen (Zugangsdaten erforderlich)

Schritt 3 - Instanzvariablen initialisieren

⇒ Erstellen Sie ein Objekt der Klasse Person und untersuchen Sie dieses mit dem BlueJ-Objektinspektor.

Objektinspektor mit den automatisch vergebenen Anfangswerten der Instanzvariablen

Bisher besitzen die drei Instanzvariablen noch keine sinnvollen Werte. Instanzvariablen werden von Java zwar automatisch initialisiert, allerdings meist nicht so, wie wir es benötigen. Zahlen vom Datentyp int erhalten beispielsweise den Wert 0 und Variablen der Klasse String den Wert null.

Schauen wir uns hierzu die zweite Version der Klasse Person an:

public class Person
{
    String name, vorname;
    int alter;

    public Person(String name, String vorname, int alter)
    {
        this.name    = name;
        this.vorname = vorname;
        this.alter   = alter;
    }
}

Parameter des Konstruktors

In der Klasse Person müssen die drei Instanzvariablen initialisiert werden. Jede dieser Instanzvariablen soll einen sinnvollen Anfangswert erhalten. Solche Anfangswerte werden dem Konstruktor in Form von Parametern übergeben. Da wir drei Instanzvariablen mit Werten belegen müssen, benötigt der Konstruktor auch drei Parameter.

Jeder formale Parameter – so nennt man die Parameter, die im Kopf einer Methode oder eines Konstruktors deklariert werden – besteht aus einem Datentyp und einem Bezeichner:

  • String name
  • String vorname
  • int alter

In unserem Beispiel tragen die drei Parameter die gleichen Namen wie die Instanzvariablen. Das muss nicht so sein; wir hätten die Parameter auch p1, p2 und p3 nennen können. Sehr übersichtlich wäre das allerdings nicht.

Initialisierung der Instanzvariablen im Konstruktor

Im Konstruktor werden die Instanzvariablen nun initialisiert, also mit ihren Anfangswerten versehen. Man kann allerdings nicht einfach schreiben:

name = name;

In diesem Fall würden beide Vorkommen von name den gleichnamigen Parameter bezeichnen. Die Instanzvariable würde also nicht verändert. Deshalb kennzeichnet man die Instanzvariable mit dem Schlüsselwort this:

this.name = name;

this.vorname = vorname;

this.alter = alter;

Dadurch wird eindeutig festgelegt, dass links die Instanzvariable und rechts der gleichnamige Parameter gemeint ist.

⇒ Ergänzen Sie den Quelltext der Klasse Person entsprechend und untersuchen Sie anschließend erneut ein Objekt dieser Klasse mit dem Objektinspektor.

Achtung: Beim Erzeugen eines Objekts erscheint ein Dialogfenster, in das Sie die beiden Zeichenketten und den int-Wert eingeben müssen. Achten Sie bei den beiden Zeichenketten auf die doppelten Anführungszeichen!

Im Objektinspektor sehen Sie jetzt die korrekten Anfangswerte der drei Instanzvariablen.

Schritt 4 - Ausgabe von Daten

Wir werden unser kleines Programm jetzt um eine Methode erweitern, mit der wir die Werte der drei Instanzvariable in der Konsole ausgeben können.

⇒ Erweitern Sie die Klasse Person wie folgt:

public class Person
{
    // Instanzvariablen wie zuvor ...

    // Konstruktor wie zuvor ...

    public void anzeigen()
    {
        System.out.println(name);
        System.out.println(vorname);
        System.out.println(alter);
    }
}

Die Methode anzeigen()

Diese Methode gibt die Werte der Instanzvariablen in der Konsole aus. Die BlueJ-Konsole haben wir bisher noch nicht kennengelernt. Sie wird durch ein eigenes Fenster dargestellt, in das dann die verschiedenen Ausgaben des Programms hineingeschrieben werden. Graphische Darstellungen sind in der Konsole jedoch nicht möglich, es können nur Zeichen (Buchstaben, Ziffern etc.) ausgegeben werden.

Zur Ausgabe solcher Zeichen dient der Befehl

System.out.println(Wert);

Die eigentliche Methode heißt hier println(...), das Wort setzt sich zusammen aus "print" für "drucke" und "ln" für "linefeed". Wenn also die Zeichenkette "gedruckt" wurde, wird ein Zeilenvorschub (linefeed) erzeugt. Die nächste Ausgabe von println() beginnt also in einer neuen Zeile der Konsole.

Die beiden ersten println()-Anweisungen geben die Zeichenketten name und vorname aus, und die dritte Anweisung schreibt den Wert von alter in die Konsole.

Übung 3.1-2

Ergänzen Sie die Klasse Person nun um zwei weitere Attribute: Gewicht (in kg) und Körpergröße (in cm). Hier sollen auch Kommazahlen wie 56.7 oder 180.4 erlaubt sein.

Lösungen der Aufgaben und Übungen (Zugangsdaten erforderlich)

Weitere Übungen

Übung 3.1-3

Erstellen Sie eine Java-Klasse Auto mit folgenden Attributen: Hersteller, Modell und Baujahr.

Der Konstruktor soll die drei Instanzvariablen initialisieren, und eine Methode anzeigen() soll die Werte dieser Veriablen in der Konsole ausgeben.

Lösungen der Aufgaben und Übungen (Zugangsdaten erforderlich)

Übung 3.1-4

Erstellen Sie eine Java-Klasse Buch mit folgenden Attributen: Titel, Autor, Erscheinungsjahr, Seitenzahl und Preis.

Der Konstruktor soll die Instanzvariablen initialisieren, und eine Methode anzeigen() soll die Werte dieser Veriablen in der Konsole ausgeben.

Lösungen der Aufgaben und Übungen (Zugangsdaten erforderlich)

Seitenanfang -
Weiter mit dem zweiten Teil der Folge 3...