Programmieren 1: Java — Skript

Java-Grundlagen und objektorientierte Programmierung

Kompakt aufbereitetes Skript mit Formeln, Beispielen und Skizzen — das erste Kapitel ist komplett kostenlos, der Rest schaltest du mit dem Modul frei.

Kap. 1

Kontrollstrukturen: Verzweigungen und Schleifen

Jedes Java-Programm muss an manchen Stellen Entscheidungen treffen und Anweisungen wiederholen. Verzweigungen und Schleifen sind die beiden Werkzeuge, mit denen sich der reine Ablauf 'von oben nach unten' steuern lässt — dieses Kapitel legt damit das Grundgerüst für alle folgenden Kapitel.

1.1 Bedingte Anweisungen: if, else und switch

Mit if wird ein Codeblock nur dann ausgeführt, wenn eine boolesche Bedingung wahr ist. Ein optionaler else-Zweig fängt den restlichen Fall auf, und mehrere else if-Zweige erlauben eine Kette sich gegenseitig ausschließender Fälle. Die switch-Anweisung ist eine Alternative, wenn ein einzelner Ausdruck gegen mehrere feste Werte verglichen werden soll — sie ist oft übersichtlicher als eine lange else-if-Kette.

Fallthrough

Ausführung fällt in switch ohne break in den nächsten case-Zweig durch.

Ein häufiger Fehler bei switch ist das vergessene break: Ohne break wird nach einem passenden case-Zweig auch der Code der nachfolgenden case-Zweige ausgeführt ('Fallthrough'), bis entweder ein break erreicht wird oder der switch-Block endet. Das kann absichtlich genutzt werden, um mehrere Werte auf denselben Codepfad zu leiten, führt aber sehr häufig zu unbeabsichtigten Fehlern.

Zwei case-Werte teilen sich bewusst denselben Zweig (Fallthrough bis zum break)

int note = 2;
String text;
switch (note) {
    case 1:
    case 2:
        text = "gut";
        break;
    case 3:
    case 4:
        text = "ausreichend";
        break;
    default:
        text = "nicht bestanden";
}
System.out.println(text);
Beispiel:Für note = 2 durchläuft der switch-Block case 1 (kein break, daher Fallthrough) bis case 2, setzt dort text = "gut" und bricht mit break ab — die Ausgabe ist also 'gut', obwohl case 1 nie inhaltlich erreicht wurde.

1.2 Schleifen: for, while und do-while

Die for-Schleife bündelt Initialisierung, Abbruchbedingung und Update in einer Kopfzeile und eignet sich besonders, wenn die Anzahl der Durchläufe von vornherein bekannt ist (z. B. Zählschleifen). Die while-Schleife prüft die Bedingung vor jedem Durchlauf und eignet sich, wenn die Anzahl der Durchläufe erst zur Laufzeit feststeht. Die do-while-Schleife prüft die Bedingung erst NACH dem ersten Durchlauf — der Schleifenkörper wird also mindestens einmal ausgeführt, unabhängig davon, ob die Bedingung überhaupt je wahr war.

Verschachtelte Schleife

Eine Schleife, deren Körper selbst wieder eine Schleife enthält.

Bei verschachtelten Schleifen (eine Schleife im Körper einer anderen) multipliziert sich die Anzahl der Durchläufe der inneren Schleife mit der Anzahl der Durchläufe der äußeren Schleife. Hängt die Anzahl der inneren Durchläufe zusätzlich vom aktuellen Wert der äußeren Laufvariablen ab (z. B. eine 'Dreieck'-Struktur, bei der die innere Schleife jedes Mal einen Schritt weiter läuft), lässt sich die Gesamtzahl der Durchläufe über die Gaußsche Summenformel berechnen.

Dreiecksmuster: die innere Schleife läuft in Durchlauf i genau i-mal

for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print("*");
    }
    System.out.println();
}
Beispiel:Für n = 6 läuft die äußere Schleife 6-mal, und die innere Schleife läuft im i-ten Durchlauf genau i-mal. Insgesamt wird der Print-Befehl also 1+2+3+4+5+6 = 6·7/2 = 21-mal ausgeführt.

1.3 Kontrollierter Schleifenabbruch: break und continue

break beendet die unmittelbar umschließende Schleife sofort und vollständig — die Programmausführung springt direkt zur ersten Anweisung nach der Schleife. continue dagegen beendet nur den aktuellen Durchlauf: Die restlichen Anweisungen im Schleifenkörper werden übersprungen, aber die Schleife läuft mit dem nächsten Durchlauf ganz normal weiter (bei for wird also zuerst noch das Update ausgeführt, bevor die Bedingung erneut geprüft wird).

Label

Benannte Marke vor einer Schleife, mit der break/continue gezielt eine äußere Schleife ansprechen können.

Bei verschachtelten Schleifen wirken break und continue standardmäßig nur auf die unmittelbar umschließende (innerste) Schleife. Soll eine äußere Schleife direkt verlassen werden, benötigt man in Java eine benannte Marke (label) vor der äußeren Schleife, z. B. äussere: for (...) { ... break äussere; ... } — ein Sprachmittel, das in der Praxis eher selten, aber gelegentlich klausurrelevant ist.

Lineare Suche: break beendet die Schleife, sobald der Wert gefunden wurde

int gesucht = 7;
boolean gefunden = false;
for (int i = 0; i < werte.length; i++) {
    if (werte[i] == gesucht) {
        gefunden = true;
        break;
    }
}
Beispiel:Steht 7 an Index 3 im Array werte, wird die Schleife nach dem vierten Durchlauf (i = 3) per break verlassen — die restlichen Elemente werden nicht mehr geprüft, was bei großen Arrays einen echten Laufzeitvorteil bringt.
Kap. 2

Einfache Datentypen, Operatoren und Typumwandlung

🔒 Gesperrt

Jede Variable in Java besitzt einen festen Datentyp, der bestimmt, welche Werte sie speichern kann und wie viel Speicher dafür reserviert wird. Dieses Kapitel behandelt die primitiven Datentypen, die wichtigsten Operatoren sowie die Regeln, nach denen Java zwischen Typen konvertiert.

Dieses Kapitel gehört zum Modul Programmieren 1: Java und ist nach dem Kauf sofort freigeschaltet.

Modul freischalten
Kap. 3

Methoden: Aufbau, Parameter und Gültigkeitsbereiche

🔒 Gesperrt

Methoden bündeln wiederkehrende Abläufe unter einem Namen und machen ein Programm dadurch übersichtlicher und wartbarer. Dieses Kapitel behandelt den Aufbau einer Methode, das Überladen mehrerer Methoden mit demselben Namen sowie — als praxisnahen Exkurs — den systematischen Umgang mit Fehlern beim Testen von Methoden.

Dieses Kapitel gehört zum Modul Programmieren 1: Java und ist nach dem Kauf sofort freigeschaltet.

Modul freischalten
Kap. 4

Rekursive Methoden

🔒 Gesperrt

Eine rekursive Methode löst ein Problem, indem sie sich selbst mit einer kleineren Version desselben Problems aufruft. Dieses Kapitel behandelt den Aufbau rekursiver Methoden, den Vergleich zu iterativen Lösungen sowie ein durchgerechnetes Anwendungsbeispiel mit rekursivem Backtracking.

Dieses Kapitel gehört zum Modul Programmieren 1: Java und ist nach dem Kauf sofort freigeschaltet.

Modul freischalten
Kap. 5

Referenzdatentypen: Arrays und Strings

🔒 Gesperrt

Referenzdatentypen speichern nicht den Wert selbst, sondern eine Referenz (Adresse) auf ein Objekt im Heap-Speicher. Dieses Kapitel behandelt Arrays (Felder) als wichtigsten eingebauten Referenzdatentyp sowie den grundlegenden Unterschied zwischen Stack und Heap, der für das Verständnis von Kopien und Vergleichen zentral ist.

Dieses Kapitel gehört zum Modul Programmieren 1: Java und ist nach dem Kauf sofort freigeschaltet.

Modul freischalten
Kap. 6

Einführung in die Objektorientierung

🔒 Gesperrt

Die objektorientierte Programmierung bündelt Daten (Attribute) und die dazugehörigen Operationen (Methoden) in Klassen. Dieses Kapitel führt die grundlegenden Begriffe Klasse, Objekt und Attribut ein und erklärt den Unterschied zwischen Instanz- und klassenbezogenen Elementen.

Dieses Kapitel gehört zum Modul Programmieren 1: Java und ist nach dem Kauf sofort freigeschaltet.

Modul freischalten
Kap. 7

Klassen im Detail: Konstruktoren und Kapselung

🔒 Gesperrt

Damit ein Objekt in einem sinnvollen Ausgangszustand entsteht und seine Attribute anschließend nicht unkontrolliert von außen verändert werden können, braucht es Konstruktoren und Kapselung. Dieses Kapitel behandelt beides sowie die UML-Notation, mit der sich Klassen grafisch dokumentieren lassen.

Dieses Kapitel gehört zum Modul Programmieren 1: Java und ist nach dem Kauf sofort freigeschaltet.

Modul freischalten
Kap. 8

Vererbung

🔒 Gesperrt

Vererbung erlaubt es, eine neue Klasse auf Basis einer bereits bestehenden Klasse zu definieren und dabei deren Attribute und Methoden zu übernehmen. Dieses Kapitel behandelt Vererbungshierarchien, das Schlüsselwort super sowie das Überschreiben geerbter Methoden.

Dieses Kapitel gehört zum Modul Programmieren 1: Java und ist nach dem Kauf sofort freigeschaltet.

Modul freischalten
Kap. 9

Polymorphismus und besondere Klassen im JDK

🔒 Gesperrt

Polymorphismus erlaubt es, Objekte unterschiedlicher (aber verwandter) Klassen einheitlich über den Typ ihrer gemeinsamen Oberklasse oder eines gemeinsamen Interfaces zu behandeln. Dieses Kapitel behandelt Polymorphie, abstrakte Klassen und Interfaces sowie die Hüllklassen des JDK für die primitiven Datentypen.

Dieses Kapitel gehört zum Modul Programmieren 1: Java und ist nach dem Kauf sofort freigeschaltet.

Modul freischalten
Kap. 10

Ausnahmebehandlung

🔒 Gesperrt

Exceptions (Ausnahmen) sind Javas Mechanismus, um auf Fehler und außergewöhnliche Situationen zur Laufzeit kontrolliert zu reagieren, statt das Programm abrupt abstürzen zu lassen. Dieses Kapitel behandelt try/catch/finally sowie die Hierarchie der eingebauten Exception-Klassen und eigene Exception-Typen.

Dieses Kapitel gehört zum Modul Programmieren 1: Java und ist nach dem Kauf sofort freigeschaltet.

Modul freischalten
Kap. 11

Listen, Bäume und rekursive Datenstrukturen

🔒 Gesperrt

Arrays haben eine feste Länge und sind damit für manche Anwendungen unpraktisch. Verkettete Listen und Bäume sind Datenstrukturen, die aus einzelnen, über Referenzen verbundenen Knoten bestehen und dadurch flexibel wachsen können. Dieses Kapitel behandelt beide Strukturen und ihre Eigenschaften.

Dieses Kapitel gehört zum Modul Programmieren 1: Java und ist nach dem Kauf sofort freigeschaltet.

Modul freischalten