☕ IHK-Bauplan · FISI & FIAE

Der Java-Bauplan

Ein Schritt-für-Schritt-Kurs, der Java so erklärt, dass er für ein Grundschulkind Sinn ergibt — und trotzdem jeden Fachbegriff auf IHK-Prüfungsniveau bringt. Wir bauen dein Java-Wissen wie ein Haus: Fundament zuerst, dann Wand für Wand.

Teil 1–5 von 5 · jetzt verfügbar XXL-Quiz folgt Pseudocode inklusive
TEIL 1 / 5

Die Werkzeugkiste einrichten

Bevor ein Schreiner ein Haus baut, braucht er eine Werkbank, einen Hammer und Nägel. Bevor du Java-Programme baust, brauchst du drei Dinge: das JDK (deine Werkzeugkiste), die Umgebungsvariablen (der Wegweiser, damit der Computer die Werkzeugkiste findet) und eine IDE wie Eclipse (deine Werkbank). Das bauen wir jetzt gemeinsam auf.

1.1 Was ist Java eigentlich?

Stell dir vor, du schreibst einen Brief auf Deutsch, aber dein Freund in Japan kann nur Japanisch lesen. Du brauchst einen Übersetzer. Java funktioniert genauso: Du schreibst deinen Code in der Sprache "Java" — aber dein Computer (egal ob Windows, Mac oder Linux) versteht eigentlich nur seine eigene Maschinensprache. Dazwischen steht ein Übersetzer.

Kinder-Erklärung: Java ist wie ein Kochrezept, das du in einer Geheimsprache schreibst. Ein kleiner Roboter namens JVM liest dein Rezept und kocht es für JEDEN Küchentyp nach — egal ob Gasherd, Elektroherd oder Lagerfeuer. Deshalb heißt Javas berühmtester Spruch: "Write once, run anywhere" — einmal schreiben, überall ausführen.

JVM (Java Virtual Machine)

Die JVM ist eine virtuelle (also simulierte) Maschine, die auf deinem echten Computer läuft und deinen übersetzten Java-Code (den Bytecode) Zeile für Zeile ausführt. Jedes Betriebssystem hat seine eigene JVM, aber der Bytecode, den sie ausführt, ist immer identisch. Das ist der Grund für Plattformunabhängigkeit — IHK-Prüfungsfrage-Klassiker.

Bytecode

Wenn du deinen .java-Quellcode kompilierst, entsteht keine fertige .exe-Datei wie bei C, sondern eine .class-Datei mit Bytecode: eine Zwischensprache, die kein Mensch direkt liest, aber jede JVM auf der Welt versteht. Bytecode ist der Grund, warum eine .class-Datei auf Windows, Mac und Linux ohne erneutes Kompilieren läuft.

JDK vs. JRE vs. JVM

JVM = führt Bytecode aus (der "Motor").
JRE (Java Runtime Environment) = JVM + Standardbibliotheken — reicht, um fertige Java-Programme auszuführen, aber nicht, um sie zu schreiben.
JDK (Java Development Kit) = JRE + Compiler (javac) + Entwickler-Werkzeuge — das brauchst du zum Programmieren.

Eselsbrücke: JDK ist wie eine komplette Küche (zum Kochen), JRE ist wie ein Mikrowellen-Fertiggericht-Aufwärmer (nur zum Ausführen fertiger Gerichte).

Compiler

Ein Programm, das deinen für Menschen lesbaren Quellcode (.java) in eine andere Form übersetzt — bei Java in Bytecode (.class). Der Java-Compiler heißt javac und wird über die Kommandozeile oder automatisch von der IDE aufgerufen.

📌 MERKE FÜR DIE IHK-PRÜFUNG Java ist eine kompilierte UND interpretierte Sprache: javac kompiliert Quellcode zu Bytecode (Kompilierung), die JVM interpretiert diesen Bytecode zur Laufzeit (Interpretation), oft zusätzlich beschleunigt durch den JIT-Compiler (Just-In-Time-Compiler), der häufig genutzten Bytecode direkt in Maschinencode übersetzt.

1.2 Das JDK installieren

Wir installieren Eclipse Temurin (früher AdoptOpenJDK) — ein kostenloses, freies JDK, das in Ausbildungsbetrieben und der IHK-Praxis Standard ist. Wir nehmen die aktuelle LTS-Version (Long Term Support — eine Version, die besonders lange mit Updates versorgt wird).

  1. Öffne im Browser adoptium.net (die offizielle Eclipse-Temurin-Seite).
  2. Wähle dein Betriebssystem (Windows / macOS / Linux) und die aktuelle LTS-Version aus (z. B. Java 21 LTS).
  3. Lade den JDK-Installer herunter (nicht das JRE — du willst entwickeln, nicht nur ausführen!).
  4. Windows: Starte die .msi-Datei. Wichtig: Im Installationsassistenten bei "Set JAVA_HOME variable" und "Add to PATH" unbedingt aktivieren — dann übernimmt dies der Installer für dich automatisch.
  5. macOS: Starte die .pkg-Datei und folge dem Assistenten. macOS registriert das JDK automatisch unter /Library/Java/JavaVirtualMachines/.
  6. Linux (Debian/Ubuntu): Alternativ per Terminal: sudo apt install temurin-21-jdk (Paketquelle vorher gemäß Adoptium-Anleitung einbinden).
  7. Installation abschließen und Terminal / Eingabeaufforderung neu öffnen (wichtig — alte Fenster kennen die neuen Einstellungen noch nicht!).
Terminal / Eingabeaufforderung — Installation prüfen
java -version
javac -version

Wenn beides eine Versionsnummer ausgibt (z. B. openjdk version "21.0.4"), hat die Installation funktioniert. Kommt stattdessen 'java' is not recognized oder command not found, fehlt der PATH-Eintrag — das reparieren wir im nächsten Schritt von Hand.

LTS (Long Term Support)

Java bringt alle 6 Monate eine neue Version heraus, aber nur bestimmte Versionen (z. B. 8, 11, 17, 21) sind LTS-Versionen, die jahrelang mit Sicherheitsupdates versorgt werden. Ausbildungsbetriebe und die IHK setzen fast immer auf LTS-Versionen, weil sie stabil und lange unterstützt sind.

✅ Checkpoint 1: JDK installiert

1.3 Umgebungsvariablen: PATH & JAVA_HOME

Kinder-Erklärung: Stell dir vor, dein Computer ist ein riesiges Haus mit tausend Zimmern. Du hast dein Werkzeug (Java) in einem bestimmten Zimmer versteckt. Eine Umgebungsvariable ist wie ein Zettel am Haupteingang, auf dem steht: "Wenn jemand nach 'java' fragt, schau in Zimmer XY nach!" Ohne diesen Zettel läuft der Computer durch das ganze Haus und findet nichts.
Umgebungsvariable (allgemein)

Eine Umgebungsvariable ist ein benannter Wert, den das Betriebssystem für alle Programme bereithält — vergleichbar mit einem globalen Notizzettel des Systems. Programme können diese Werte auslesen, ohne dass der Nutzer sie jedes Mal neu eingeben muss.

JAVA_HOME

JAVA_HOME zeigt auf den Installationsordner des JDK selbst (z. B. C:\Program Files\Eclipse Adoptium\jdk-21). Viele Programme wie Eclipse, Maven oder Gradle fragen gezielt nach JAVA_HOME, um zu wissen, welches JDK sie benutzen sollen — das ist in der IHK-Praxis besonders wichtig, wenn mehrere Java-Versionen parallel installiert sind.

PATH

PATH ist eine Liste von Ordnern, die das Betriebssystem automatisch durchsucht, wenn du in der Kommandozeile einen Befehl eingibst. Damit java und javac von überall aus aufgerufen werden können (nicht nur im Installationsordner), muss der bin-Unterordner des JDK im PATH eingetragen sein.

VariableZeigt aufWird benutzt von
JAVA_HOMEJDK-Hauptordner (z. B. ...\jdk-21)Eclipse, Maven, Gradle, Build-Tools
PATHListe von Ordnern mit ausführbaren Programmen, inkl. %JAVA_HOME%\binTerminal-Befehle java, javac

Windows — manuell einrichten (falls der Installer es nicht automatisch tat):

  1. Windows-Taste drücken, "Umgebungsvariablen" eingeben → "Systemumgebungsvariablen bearbeiten" öffnen.
  2. Im Dialog auf "Umgebungsvariablen..." klicken.
  3. Unter "Systemvariablen" auf "Neu...": Name JAVA_HOME, Wert = dein JDK-Installationspfad (z. B. C:\Program Files\Eclipse Adoptium\jdk-21.0.4.7-hotspot).
  4. In der Liste der Systemvariablen Path markieren → "Bearbeiten..." → "Neu" → eintragen: %JAVA_HOME%\bin.
  5. Alle Fenster mit "OK" bestätigen und jedes offene Terminal neu starten — Umgebungsvariablen werden nur beim Start eines neuen Fensters neu eingelesen.

macOS / Linux — manuell einrichten:

Öffne die Konfigurationsdatei deiner Shell (~/.zshrc bei macOS-Standard-Shell zsh, oder ~/.bashrc bei bash) und füge diese Zeilen hinzu:

~/.zshrc oder ~/.bashrc
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH

Danach die Shell mit source ~/.zshrc (bzw. source ~/.bashrc) neu laden, damit die Änderung sofort wirkt, ohne das Terminal zu schließen.

📌 MERKE FÜR DIE IHK-PRÜFUNG Typischer Prüfungsfehler: "'java' wird nicht als interner oder externer Befehl erkannt" bedeutet fast immer einen fehlenden oder falschen PATH-Eintrag — nicht ein fehlendes JDK. Erste Fehlersuche immer: echo %PATH% (Windows) bzw. echo $PATH (Mac/Linux) prüfen.

✅ Checkpoint 2: Umgebungsvariablen gesetzt

1.4 Eclipse IDE einrichten

Kinder-Erklärung: Du könntest Java-Code mit einem einfachen Texteditor wie Notepad schreiben — so, wie man ein Haus theoretisch nur mit einem Taschenmesser bauen könnte. Eine IDE (Integrated Development Environment) ist wie eine komplette Werkstatt mit allen Werkzeugen an einem Platz: Sie unterstreicht Fehler rot, schlägt dir Wörter vor und baut (kompiliert) dein Programm auf Knopfdruck.
IDE (Integrated Development Environment)

Eine integrierte Entwicklungsumgebung bündelt Code-Editor, Compiler-Anbindung, Debugger und Projektverwaltung in einer Anwendung. Eclipse ist eine der in deutschen Ausbildungsbetrieben am weitesten verbreiteten Java-IDEs neben IntelliJ IDEA.

Workspace

Der Workspace ist der Ordner auf deiner Festplatte, in dem Eclipse alle deine Projekte, Einstellungen und Metadaten sammelt. Du kannst mehrere Workspaces haben (z. B. einen pro Ausbildungsjahr), aber Eclipse arbeitet immer nur mit einem gleichzeitig geöffneten Workspace.

  1. Lade den Eclipse Installer von eclipse.org/downloads herunter und starte ihn.
  2. Wähle das Paket "Eclipse IDE for Java Developers" (nicht die riesige "Enterprise"-Variante — die brauchst du für den Einstieg nicht).
  3. Bestätige den Installationsordner und klicke "Install". Eclipse erkennt dein installiertes JDK automatisch, sofern JAVA_HOME korrekt gesetzt ist.
  4. Starte Eclipse. Beim ersten Start fragt es nach einem Workspace-Ordner — wähle z. B. C:\Users\DeinName\eclipse-workspace oder lasse den Vorschlag stehen.
  5. Der "Welcome"-Bildschirm erscheint — klicke oben rechts auf das Icon mit dem Pfeil ("Workbench"), um zur eigentlichen Arbeitsoberfläche zu wechseln.
  6. Prüfe das installierte JDK: Menü Window → Preferences → Java → Installed JREs. Dort sollte dein JDK mit Häkchen als Standard aufgelistet sein. Falls nicht: "Add..." → "Standard VM" → Pfad zum JDK-Ordner angeben.
📌 MERKE FÜR DIE IHK-PRÜFUNG Eclipse arbeitet nach dem Prinzip "Build automatically": Bei jedem Speichern wird dein Code im Hintergrund automatisch neu kompiliert. Fehler siehst du deshalb sofort als rote Unterschlängelung — noch bevor du das Programm überhaupt startest.

✅ Checkpoint 3: Eclipse startet

1.5 Dein erstes Projekt und die erste Klasse

Wir erstellen jetzt ein neues Java-Projekt und darin dein allererstes Programm: HalloWelt.java.

  1. In Eclipse: File → New → Java Project.
  2. Projektname eingeben, z. B. MeinErstesProjekt. Die vorausgewählte JRE sollte deinem installierten JDK entsprechen. Klicke "Finish".
  3. Falls ein Dialog "Open Associated Perspective?" erscheint: mit "Open" bestätigen.
  4. Im Package Explorer (linke Seitenleiste) das Projekt aufklappen → Rechtsklick auf den Ordner src → New → Class.
  5. Als Name HalloWelt eingeben (Achtung: Großschreibung! Klassennamen beginnen in Java per Konvention immer groß).
  6. Häkchen bei "public static void main(String[] args)" setzen — dann erstellt Eclipse das Programmgerüst automatisch für dich.
  7. Auf "Finish" klicken — die Datei HalloWelt.java öffnet sich im Editor.
Package

Ein Package ist ein "Ordner" für Java-Klassen, der verwandte Klassen thematisch bündelt und Namenskonflikte vermeidet — vergleichbar mit Aktenordnern in unterschiedlichen Schubladen, sodass zwei Dokumente denselben Namen tragen dürfen, solange sie in unterschiedlichen Schubladen liegen. Für den Einstieg arbeiten wir zunächst im "Default Package".

Ersetze den generierten Inhalt durch folgenden vollständigen, sofort lauffähigen Code:

HalloWelt.java
1public class HalloWelt {
2    public static void main(String[] args) {
3        System.out.println("Hallo Welt! Mein erstes Java-Programm läuft.");
4    }
5}
Zeile 1public class HalloWelt { — Wir erklären eine neue Klasse namens HalloWelt. public bedeutet: von überall im Programm sichtbar. Der Dateiname HalloWelt.java muss exakt mit dem Klassennamen übereinstimmen — das ist eine feste Java-Regel, keine Empfehlung. Die geschweifte Klammer { öffnet den "Körper" der Klasse.
Zeile 2public static void main(String[] args) { — Das ist die main-Methode, der feste Startpunkt jedes Java-Programms. Die JVM sucht beim Start automatisch genau nach dieser Signatur. static bedeutet: Die Methode gehört zur Klasse selbst, es muss dafür kein Objekt erzeugt werden. void bedeutet: Die Methode gibt keinen Wert zurück. String[] args ist ein Array für Kommandozeilenargumente, die dem Programm beim Start mitgegeben werden können.
Zeile 3System.out.println(...) — System.out ist der Standard-Ausgabestrom (die Konsole). println ("print line") gibt den Text aus und springt danach in eine neue Zeile. Der Text in Anführungszeichen ist ein String-Literal — ein fest im Code stehender Textwert.
Zeile 4} — schließt den Körper der main-Methode.
Zeile 5} — schließt den Körper der Klasse HalloWelt.
Was im Speicher passiert, sobald du "Run" drückst: Die JVM startet, ihr Classloader lädt die Datei HalloWelt.class (den Bytecode) in einen Speicherbereich namens Method Area. Die JVM sucht darin nach der main-Methode und legt für ihren Aufruf einen Stack Frame auf dem Call Stack an — das ist der "Notizzettel-Stapel", auf dem gerade laufende Methodenaufrufe verwaltet werden. Zeile für Zeile wird jetzt abgearbeitet: System.out.println(...) wird aufgerufen, gibt den Text auf der Konsole aus, und sobald die letzte schließende Klammer erreicht ist, wird der Stack Frame der main-Methode wieder vom Stack entfernt und das Programm beendet sich.

✅ Checkpoint 4: Projekt und Klasse erstellt

1.6 Kompilieren und Ausführen

Es gibt zwei Wege, dein Programm zum Laufen zu bringen: über die IDE (bequem, mit einem Klick) und über die Kommandozeile (wichtig, um wirklich zu verstehen, was dahintersteckt — und IHK-relevant, da Prüfungen oft nach dem reinen Kommandozeilen-Ablauf fragen).

Weg A — In Eclipse

  1. Rechtsklick auf HalloWelt.java im Package Explorer.
  2. Run As → Java Application wählen.
  3. Unten öffnet sich die Konsole (Console-View) mit der Ausgabe deines Programms.

Weg B — Über die Kommandozeile

Öffne ein Terminal im Ordner, der HalloWelt.java enthält, und führe aus:

Terminal
# Schritt 1: Quellcode zu Bytecode kompilieren
javac HalloWelt.java

# Schritt 2: Den erzeugten Bytecode mit der JVM ausführen
java HalloWelt
javacRuft den Java-Compiler auf. Er liest HalloWelt.java, prüft die Syntax und erzeugt bei Erfolg eine neue Datei HalloWelt.class im selben Ordner — den Bytecode. Bei einem Syntaxfehler (z. B. vergessenes Semikolon) bricht javac mit einer Fehlermeldung ab, und es entsteht keine .class-Datei.
javaStartet die JVM und übergibt ihr den Namen der Klasse ohne die Endung .class. Wichtig: Man ruft hier den Klassennamen auf, nicht den Dateinamen — bei javac ist es umgekehrt der Dateiname inklusive .java.
📌 MERKE FÜR DIE IHK-PRÜFUNG Merke den Unterschied ganz genau, das ist ein beliebter Prüfungsstolperstein: javac Dateiname.java (mit Endung, Compiler) vs. java Klassenname (ohne Endung, JVM-Start). Verwechselst du das, meldet die JVM z. B. Error: Could not find or load main class HalloWelt.java.
Warum heißt die Ausgabedatei .class und nicht .exe?

Eine .exe-Datei enthält fertigen Maschinencode für genau ein Betriebssystem/eine Prozessorarchitektur. Eine .class-Datei enthält plattformunabhängigen Bytecode, den jede JVM lesen kann — egal auf welchem Betriebssystem sie läuft. Genau das ist der Kern der Plattformunabhängigkeit von Java.

Die erwartete Ausgabe in beiden Fällen:

Konsolenausgabe
Hallo Welt! Mein erstes Java-Programm läuft.

✅ Checkpoint 5: Programm läuft über Eclipse

✅ Checkpoint 6: Programm läuft über die Kommandozeile

Teil 1 geschafft! 🎉

Deine Werkzeugkiste steht: JDK installiert, PATH & JAVA_HOME gesetzt, Eclipse eingerichtet, erstes Programm kompiliert und ausgeführt. Weiter geht's direkt mit Teil 2.

TEIL 2 / 5

Java-Grundlagen: Datentypen, Variablen, Operatoren & Ein-/Ausgabe

Jetzt, wo die Werkstatt steht, bauen wir das Fundament der Sprache selbst: Wie speichert Java Werte, wie rechnet man damit, und wie redet ein Programm eigentlich mit dem Menschen davor? Das sind die Bausteine, aus denen jedes einzelne Java-Programm besteht, das du je schreiben wirst.

2.1 Variablen

Kinder-Erklärung: Eine Variable ist wie eine Spielzeugkiste mit Namensschild. Auf das Schild schreibst du, was reindarf ("nur Zahlen" oder "nur Text"), und in die Kiste selbst legst du den aktuellen Wert. Du kannst den Inhalt jederzeit austauschen — aber niemals eine Zahl in eine Kiste legen, die nur Text erlaubt.
Variable

Ein benannter Speicherplatz im Arbeitsspeicher (RAM), der einen Wert eines bestimmten Datentyps enthält und dessen Inhalt sich während der Programmlaufzeit ändern kann. Der Name identifiziert die Variable eindeutig innerhalb ihres Gültigkeitsbereichs (Scope).

Deklaration

Die Ankündigung einer neuen Variable gegenüber dem Compiler: Name und Datentyp werden festgelegt, z. B. int alter;. Ab diesem Zeitpunkt reserviert die JVM Speicherplatz in der passenden Größe für diese Variable, sie enthält aber noch keinen sinnvollen Wert.

Initialisierung

Die erste Wertzuweisung an eine Variable, z. B. alter = 16;. Deklaration und Initialisierung lassen sich in einer Zeile kombinieren: int alter = 16;. Lokale Variablen in Methoden haben — anders als Attribute in Klassen — keinen automatischen Startwert und müssen vor der ersten Nutzung zwingend initialisiert werden, sonst meldet der Compiler einen Fehler.

Variablen.java
1public class Variablen {
2    public static void main(String[] args) {
3        int alter;
4        alter = 16;
5        int schuljahr = 11;
6        System.out.println("Alter: " + alter);
7        System.out.println("Schuljahr: " + schuljahr);
8    }
9}
Z. 3int alter; — Deklaration: Es wird Speicherplatz für eine Ganzzahl reserviert, aber noch kein Wert hineingelegt.
Z. 4alter = 16; — Zuweisung (Initialisierung): Der Wert 16 wird in den zuvor reservierten Speicherplatz geschrieben. = ist hier der Zuweisungsoperator, kein Gleichheitszeichen im mathematischen Sinn!
Z. 5int schuljahr = 11; — Deklaration und Initialisierung in einem Schritt, der in der Praxis übliche Weg.
Z. 6–7Der +-Operator verkettet hier Text und Zahl zu einem neuen String — Java wandelt die Zahl dafür automatisch in Text um.
📌 MERKE FÜR DIE IHK-PRÜFUNG — Namenskonventionen Variablennamen beginnen laut Java-Konvention klein und folgen camelCase (z. B. maxAnzahlVersuche). Reservierte Schlüsselwörter wie class, public, int oder if dürfen niemals als Bezeichner verwendet werden. Namen dürfen nicht mit einer Ziffer beginnen und enthalten keine Leer- oder Sonderzeichen außer _ und $.

✅ Checkpoint 7: Variablen deklariert und ausgegeben

2.2 Primitive Datentypen

Kinder-Erklärung: Ein Datentyp ist wie die Größe der Spielzeugkiste. Eine winzige Streichholzschachtel (byte) passt nur für ganz kleine Zahlen. Ein riesiger Kleiderschrank (long) passt für gigantische Zahlen — verschwendet aber Platz, wenn du nur eine einzige Murmel hineinlegst.
Primitiver Datentyp

Einer von 8 fest in Java eingebauten, elementaren Datentypen. Primitive Variablen speichern ihren Wert direkt im Stack-Speicher (nicht als Verweis) und haben eine feste, garantierte Speichergröße — unabhängig vom Betriebssystem, im Gegensatz z. B. zu C.

TypGrößeWertebereichStandardwert
byte8 Bit−128 … 1270
short16 Bit−32.768 … 32.7670
int32 Bit≈ −2,1 Mrd. … 2,1 Mrd.0
long64 Bit≈ −9,2 Trillionen … 9,2 Trillionen0L
float32 BitGleitkommazahl, ~7 Nachkommastellen genau0.0f
double64 BitGleitkommazahl, ~15 Nachkommastellen genau0.0d
char16 Bitein einzelnes Unicode-Zeichen ('A', 'ß', …)'\u0000'
boolean1 Bit (konzeptuell)true oder falsefalse
Type Casting (Typumwandlung)

Implizites Casting (Widening): Eine "kleinere" Kiste passt automatisch in eine "größere" — Java wandelt selbstständig um, z. B. int → double, ohne Datenverlust.

Explizites Casting (Narrowing): Der umgekehrte Weg (große Kiste → kleine Kiste) kann Werte abschneiden und muss deshalb vom Programmierer ausdrücklich erzwungen werden, z. B. (int) 9.7 ergibt 9 — Nachkommastellen werden dabei abgeschnitten, nicht gerundet.

Datentypen.java
1public class Datentypen {
2    public static void main(String[] args) {
3        double preis = 9.99;
4        int ganzePreis = (int) preis;
5        char note = 'A';
6        boolean bestanden = true;
7        System.out.println("Gerundet ab: " + ganzePreis);
8        System.out.println("Note: " + note + ", bestanden: " + bestanden);
9    }
10}
Z. 4(int) preis ist ein explizites Narrowing-Cast: 9.99 wird zu 9 — die Nachkommastellen werden schlicht abgeschnitten (kein Runden!). Das ist eine der häufigsten IHK-Fallen.
Z. 5char-Literale stehen in einfachen Anführungszeichen ('A'), String-Literale in doppelten ("A") — das sind zwei unterschiedliche Datentypen!
📌 MERKE FÜR DIE IHK-PRÜFUNG float-Literale benötigen zwingend das Suffix f (z. B. 3.5f), sonst interpretiert der Compiler die Zahl standardmäßig als double und meldet einen Fehler bei der Zuweisung an eine float-Variable ohne Cast.

✅ Checkpoint 8: Datentypen & Casting verstanden

2.3 Referenztypen & der Sonderfall String

Kinder-Erklärung: Eine primitive Variable ist wie ein Karton, der den Wert selbst enthält. Ein Referenztyp ist dagegen wie ein Wegweiser-Schild, das nur zeigt, wo der eigentliche Karton in einem anderen Raum (dem Heap) steht.
Referenztyp

Variablen von Referenztypen (alle Klassen, also auch String, Arrays, eigene Objekte) speichern im Stack nicht den Wert selbst, sondern eine Referenz (Speicheradresse) auf ein Objekt im Heap-Speicher. Mehrere Variablen können auf dasselbe Objekt zeigen.

String-Pool

Java legt String-Literale (direkt im Code geschriebene Texte) in einem speziellen, wiederverwendbaren Speicherbereich ab, dem String-Pool. Zwei mit "..." geschriebene identische Texte zeigen deshalb oft auf dasselbe Objekt — bei new String("...") wird dagegen immer ein neues, separates Objekt auf dem Heap erzeugt.

null

null ist der spezielle Wert, der besagt: "Diese Referenzvariable zeigt aktuell auf kein Objekt." Nur Referenztypen können null sein — primitive Typen wie int niemals. Der Versuch, auf einem null-Objekt eine Methode aufzurufen, wirft zur Laufzeit eine NullPointerException.

📌 MERKE FÜR DIE IHK-PRÜFUNG Zum Vergleichen von String-Inhalten immer .equals() verwenden, nicht ==! == vergleicht bei Referenztypen nur, ob zwei Variablen auf dasselbe Objekt zeigen — nicht, ob der Inhalt gleich ist. Ein häufiger, gezielt geprüfter Anfängerfehler.

✅ Checkpoint 9: Primitiv vs. Referenz

2.4 Operatoren

Operatoren sind die Rechenzeichen und Vergleichswerkzeuge, mit denen du Werte kombinierst, vergleichst und veränderst.

KategorieOperatorenBeispiel
Arithmetisch+ − * / %7 % 2 → 1 (Rest der Division)
Zuweisung= += -= *= /=x += 5; entspricht x = x + 5;
Vergleich== != < > <= >=alter >= 18 → boolean
Logisch&& \|\| !istWach && hatKaffee
Inkrement/Dekrement++ --zaehler++;
Ganzzahlige Division

Teilst du zwei int-Werte, liefert Java ein int-Ergebnis — Nachkommastellen fallen komplett weg (kein Runden): 7 / 2 ergibt 3, nicht 3.5. Soll das Ergebnis eine Kommazahl sein, muss mindestens einer der beiden Operanden ein double/float sein, z. B. 7.0 / 2.

Kurzschlussauswertung (Short-Circuit-Evaluation)

Bei && und || wertet Java den zweiten Operanden nur aus, wenn er das Ergebnis noch beeinflussen kann: Bei false && irgendwas wird irgendwas gar nicht mehr geprüft, da das Gesamtergebnis schon feststeht. Das wird gezielt genutzt, um z. B. NullPointerExceptions zu vermeiden: objekt != null && objekt.methode().

Operatoren.java
1public class Operatoren {
2    public static void main(String[] args) {
3        int a = 7, b = 2;
4        System.out.println("a / b = " + (a / b));
5        System.out.println("a % b = " + (a % b));
6        boolean volljaehrig = a >= 18;
7        System.out.println("Volljährig: " + volljaehrig);
8        a++;
9        System.out.println("a nach a++: " + a);
10    }
11}
Z. 4a / b → 3: ganzzahlige Division, da beide Operanden int sind.
Z. 5a % b → 1: der Modulo-Operator liefert den Rest der Division (7 = 3×2 + 1).
Z. 8a++ ist gleichbedeutend mit a = a + 1; — a war 7, ist danach 8.

✅ Checkpoint 10: Operatoren angewendet

2.5 Konsolen-Ein-/Ausgabe mit Scanner

Kinder-Erklärung: Bisher hat dein Programm nur mit dir geredet (Ausgabe). Jetzt lernt es zuhören: Die Klasse Scanner ist wie ein Ohr, das an der Tastatur klebt und wartet, bis du etwas eintippst und Enter drückst.
Scanner

Scanner ist eine Klasse aus dem Paket java.util, die Eingabequellen (z. B. die Tastatur über System.in) einliest und in nutzbare Datentypen zerlegt. Sie muss vor Gebrauch importiert werden: import java.util.Scanner;.

import

Eine import-Anweisung teilt dem Compiler mit, welche Klasse aus welchem Package du verwenden willst, damit du sie nicht jedes Mal mit ihrem vollen Namen (java.util.Scanner) ausschreiben musst. import-Zeilen stehen immer ganz oben in der Datei, vor der Klassendefinition.

Begruessung.java
1import java.util.Scanner;
2
3public class Begruessung {
4    public static void main(String[] args) {
5        Scanner eingabe = new Scanner(System.in);
6        System.out.print("Wie heißt du? ");
7        String name = eingabe.nextLine();
8        System.out.print("Wie alt bist du? ");
9        int alter = eingabe.nextInt();
10        System.out.println("Hallo " + name + ", mit " + alter + " Jahren geht's los!");
11        eingabe.close();
12    }
13}
Z. 5new Scanner(System.in) erzeugt ein neues Scanner-Objekt auf dem Heap, das an den Tastatur-Eingabestrom System.in gekoppelt ist. Die Referenz darauf wird in eingabe gespeichert.
Z. 6print (ohne "ln") gibt Text ohne Zeilenumbruch aus — praktisch, damit die Nutzereingabe direkt hinter dem Fragetext erscheint.
Z. 7nextLine() liest die komplette Zeile bis zum Zeilenumbruch als String ein und wartet dabei, bis Enter gedrückt wird.
Z. 9nextInt() liest nur das nächste Token als int, der Zeilenumbruch danach bleibt im Eingabepuffer stehen — die klassische Ursache für den unten beschriebenen Fehler.
Z. 11close() gibt die Systemressource des Scanners wieder frei. Guter Stil, sobald keine weitere Eingabe mehr folgt.
📌 MERKE FÜR DIE IHK-PRÜFUNG — die Scanner-Falle Folgt auf nextInt(), nextDouble() o. Ä. direkt ein nextLine(), liest dieses scheinbar nur den übrig gebliebenen, leeren Zeilenumbruch ein — die Abfrage wird komplett übersprungen! Lösung: Nach einer Zahlen-Eingabe einmal "blind" eingabe.nextLine(); zum Leeren des Puffers einschieben, bevor die nächste Text-Eingabe folgt.

✅ Checkpoint 11: Scanner benutzt

2.6 Pseudocode-Grundlagen

Kinder-Erklärung: Pseudocode ist wie ein Bauplan in Alltagssprache, bevor das Haus wirklich gebaut wird. Statt genauer Java-Syntax schreibst du die Idee des Programms in klaren, nummerierten Schritten auf — verständlich für jeden Menschen, unabhängig von der Programmiersprache.
Pseudocode

Eine informelle, sprachunabhängige Notation zur Beschreibung von Algorithmen, die Programmierlogik (Verzweigungen, Schleifen, Ein-/Ausgabe) klar strukturiert, ohne sich an die genaue Syntax einer bestimmten Sprache zu halten. In der IHK-Prüfung wird Pseudocode oft alternativ zu einem Programmablaufplan (PAP) oder Struktogramm (Nassi-Shneiderman-Diagramm) verwendet, um Algorithmen zu beschreiben oder zu bewerten.

Programmablaufplan (PAP)

Eine genormte, grafische Darstellung eines Algorithmus mit festgelegten Symbolen nach DIN 66001: Rauten für Entscheidungen, Rechtecke für Verarbeitungsschritte, Parallelogramme für Ein-/Ausgabe, Pfeile für den Kontrollfluss. IHK-Prüfungen verlangen regelmäßig, einen PAP in Java-Code zu übersetzen oder umgekehrt.

Struktogramm (Nassi-Shneiderman-Diagramm)

Eine blockorientierte Alternative zum PAP: Der Algorithmus wird als verschachtelte Kästen dargestellt, ohne Pfeile — Reihenfolge ergibt sich rein aus der Anordnung von oben nach unten. Besonders gut geeignet, um Schleifen und Verzweigungen übersichtlich zu verschachteln.

Eine gängige Pseudocode-Konvention für die Bausteine aus diesem Kapitel:

JavaPseudocode
int alter = 16;DEKLARIERE alter ALS GANZZAHL
SETZE alter = 16
eingabe.nextInt()LIES alter
System.out.println(...)GIB AUS alter
a + ba + b (Rechenzeichen bleiben gleich)
PSEUDOCODEBegrüßungs-Algorithmus
START
  GIB AUS "Wie heißt du?"
  LIES name
  GIB AUS "Wie alt bist du?"
  LIES alter
  GIB AUS "Hallo " + name + ", mit " + alter + " Jahren geht's los!"
ENDE

Genau dieser Pseudocode wurde in Kapitel 2.5 eins zu eins zu echtem Java-Code (Begruessung.java) ausgebaut. Dieses Muster — erst Pseudocode, dann Java — ziehen wir ab Teil 3 durch alle Kontrollstrukturen konsequent durch, da genau das in der IHK-Prüfung als Übersetzungsaufgabe abgefragt wird.

📌 MERKE FÜR DIE IHK-PRÜFUNG Es gibt keine einzige "offizielle" Pseudocode-Norm — anders als beim PAP (DIN 66001) ist die Schreibweise Konvention. Wichtig in der Prüfung ist nicht die exakte Syntax, sondern dass Start/Ende, Ein-/Ausgabe, Verarbeitung und Entscheidungen klar und eindeutig als solche erkennbar sind.

✅ Checkpoint 12: Pseudocode verstanden

Teil 2 geschafft! 🎉

Du kennst jetzt Variablen, alle 8 primitiven Datentypen, Referenztypen, sämtliche Operatorkategorien, Konsolen-Ein-/Ausgabe mit Scanner und den Einstieg in Pseudocode. Weiter geht's direkt mit Teil 3.

TEIL 3 / 5

Kontrollstrukturen: Entscheidungen & Wiederholungen

Bisher liefen unsere Programme immer stur von oben nach unten ab. Jetzt lernt dein Programm zwei neue Fähigkeiten: Entscheidungen treffen (je nach Situation etwas anderes tun) und Dinge wiederholen (dieselbe Aufgabe mehrfach erledigen, ohne den Code zu duplizieren). Das sind die Bausteine, die aus einer starren Befehlsliste ein echtes, reagierendes Programm machen.

3.1 Verzweigungen: if / else

Kinder-Erklärung: if ist wie eine Weiche bei der Modelleisenbahn: Der Zug (dein Programm) rollt bis zur Weiche, und je nachdem, ob eine Bedingung erfüllt ist oder nicht, fährt er nach links (if-Block) oder nach rechts (else-Block) weiter.
Boolescher Ausdruck (Bedingung)

Ein Ausdruck, der zu genau einem Wert vom Typ boolean ausgewertet wird — entweder true oder false. Anders als z. B. in C akzeptiert Java in einer if-Bedingung ausschließlich echte boolean-Werte, niemals Ganzzahlen wie 0 oder 1 als Ersatz.

Block (Anweisungsblock)

Eine oder mehrere Anweisungen, die durch geschweifte Klammern { } zu einer logischen Einheit zusammengefasst werden. Bei genau einer Anweisung sind die Klammern optional, werden aus Lesbarkeits- und Fehlervermeidungsgründen in der Praxis aber fast immer trotzdem gesetzt.

Notenpruefung.java
1public class Notenpruefung {
2    public static void main(String[] args) {
3        int punkte = 72;
4        if (punkte >= 90) {
5            System.out.println("Note: sehr gut");
6        } else if (punkte >= 70) {
7            System.out.println("Note: gut");
8        } else if (punkte >= 50) {
9            System.out.println("Note: befriedigend");
10        } else {
11            System.out.println("Note: nicht bestanden");
12        }
13    }
14}
Z. 4Die JVM prüft punkte >= 90. Da 72 >= 90 falsch ist, wird der Block in Z. 5 übersprungen und zur nächsten Bedingung gesprungen.
Z. 6punkte >= 70 → 72 >= 70 ist true. Der Block in Z. 7 wird ausgeführt, und die gesamte restliche Kette (Z. 8–12) wird übersprungen — es wird immer nur genau ein Zweig betreten.
Z. 10else ohne eigene Bedingung ist der Auffangzweig — er greift nur, wenn keine vorherige Bedingung true war.
📌 MERKE FÜR DIE IHK-PRÜFUNG Bei else if-Ketten wird immer nur ein einziger Zweig ausgeführt, und die Reihenfolge der Bedingungen ist entscheidend: Stünde punkte >= 50 als erste Prüfung, würden auch alle Schüler mit 95 Punkten fälschlich nur "befriedigend" bekommen, weil die erste zutreffende Bedingung sofort gewinnt.
PSEUDOCODENotenprüfung
START
  SETZE punkte = 72
  WENN punkte >= 90 DANN
    GIB AUS "sehr gut"
  SONST WENN punkte >= 70 DANN
    GIB AUS "gut"
  SONST WENN punkte >= 50 DANN
    GIB AUS "befriedigend"
  SONST
    GIB AUS "nicht bestanden"
  ENDE WENN
ENDE

✅ Checkpoint 13: if/else-Kette gebaut

3.2 switch-case

Kinder-Erklärung: switch ist wie eine Drehscheibe im Bahnhof: Statt vieler einzelner Weichen hintereinander gibt es einen zentralen Verteiler, der den Zug direkt zum passenden Gleis schickt — praktisch, wenn du viele feste, konkrete Werte statt Bereiche prüfst.
case

Eine mögliche Sprungmarke innerhalb eines switch-Blocks, die mit einem konkreten, konstanten Wert verglichen wird (int, char, String, enum sind zulässig — keine Bereiche wie > 5).

break (im switch)

Beendet den switch-Block sofort und springt hinter die schließende Klammer. Ohne break läuft die Ausführung in den nächsten case-Block weiter durch (Fallthrough) — selbst wenn dessen Bedingung gar nicht mehr geprüft wird!

Fallthrough

Das (oft ungewollte) Durchfallen in den nächsten case-Block, weil das vorherige break fehlt. Manchmal wird das absichtlich genutzt, um mehrere case-Werte dieselbe Aktion ausführen zu lassen (mehrere case-Zeilen direkt untereinander, ohne break dazwischen).

default

Der Auffangzweig eines switch-Blocks, vergleichbar mit else bei if. Wird ausgeführt, wenn kein case-Wert passt. Konvention: default steht meist als letzter Zweig, kann syntaktisch aber an beliebiger Stelle stehen.

Wochentag.java
1public class Wochentag {
2    public static void main(String[] args) {
3        int tag = 6;
4        switch (tag) {
5            case 6:
6            case 7:
7                System.out.println("Wochenende!");
8                break;
9            default:
10                System.out.println("Werktag");
11        }
12    }
13}
Z. 5–6Zwei case-Zeilen direkt hintereinander ohne break dazwischen: absichtlicher Fallthrough — sowohl 6 als auch 7 landen im selben Ausgabe-Block.
Z. 8break; beendet den switch — ohne dieses break würde die Ausführung auch noch default mit ausführen!
PSEUDOCODEWochentag
START
  SETZE tag = 6
  WÄHLE tag
    FALL 6, 7:
      GIB AUS "Wochenende!"
    SONST:
      GIB AUS "Werktag"
  ENDE WÄHLE
ENDE
📌 MERKE FÜR DIE IHK-PRÜFUNG Vergessenes break ist einer der klassischsten Java-Fehler in Prüfungsaufgaben ("Was ist die Ausgabe?"). Prüfe bei jeder switch-Aufgabe genau, ob und wo break-Anweisungen stehen — ihr Fehlen führt zum Durchfallen in alle folgenden Zweige bis zum nächsten break oder Blockende.

✅ Checkpoint 14: switch-case & Fallthrough verstanden

3.3 Die for-Schleife

Kinder-Erklärung: Eine for-Schleife ist wie ein Karussell mit einer festgelegten Rundenzahl: Du weißt vorher genau, wie oft es sich dreht (z. B. "genau 10 Runden"), bevor es wieder anhält.
Schleifenkopf

Die Kopfzeile einer for-Schleife besteht aus drei durch Semikolon getrennten Teilen: Initialisierung (einmalig vor der ersten Runde), Bedingung (vor jeder Runde geprüft — solange true, läuft die Schleife weiter) und Inkrement/Update (nach jeder Runde ausgeführt).

Zählschleife

Eine Schleife, bei der die Anzahl der Durchläufe bereits vor dem Start feststeht oder berechenbar ist — der klassische Anwendungsfall für for. Im Gegensatz dazu eignen sich while/do-while besser, wenn die Anzahl der Durchläufe von einer sich während der Laufzeit ändernden Bedingung abhängt.

Countdown.java
1public class Countdown {
2    public static void main(String[] args) {
3        for (int i = 1; i <= 5; i++) {
4            System.out.println("Runde " + i);
5        }
6        System.out.println("Fertig!");
7    }
8}
Z. 3int i = 1 — einmalige Initialisierung der Zählvariable i beim Start. i <= 5 — vor jeder Runde geprüfte Bedingung; ist sie false, endet die Schleife sofort. i++ — nach jeder abgeschlossenen Runde ausgeführtes Update.
Ablaufi=1 (Bedingung wahr → Runde 1) → i=2 (Runde 2) → i=3 → i=4 → i=5 (letzte gültige Runde) → i=6 (Bedingung 6<=5 falsch → Schleife endet, "Fertig!" wird ausgegeben).
PSEUDOCODECountdown
START
  FÜR i VON 1 BIS 5 SCHRITTWEITE 1
    GIB AUS "Runde " + i
  ENDE FÜR
  GIB AUS "Fertig!"
ENDE
📌 MERKE FÜR DIE IHK-PRÜFUNG — Off-by-one-Fehler i < 5 läuft 5-mal, für i = 0 bis 4 (bei Start bei 0). i <= 5 läuft 6-mal, für i = 0 bis 5. Diese "Off-by-one"-Stolperfalle (eine Runde zu viel oder zu wenig) ist einer der häufigsten Fehler bei Schleifen und wird in Prüfungen gezielt mit "Wie oft läuft diese Schleife?"-Fragen abgeprüft.

✅ Checkpoint 15: for-Schleife gebaut

3.4 while- und do-while-Schleife

Kinder-Erklärung: while ist ein Türsteher, der VOR jedem Betreten des Raums die Bedingung prüft — wer nicht reindarf, kommt gar nicht erst rein. do-while ist ein Türsteher, der erst NACH dem ersten Betreten kontrolliert — jeder darf mindestens einmal rein, egal was die Bedingung sagt.
Kopfgesteuerte Schleife

Die Bedingung wird vor jedem Schleifendurchlauf geprüft (while, for). Ist sie von Anfang an false, wird der Schleifenkörper kein einziges Mal ausgeführt.

Fußgesteuerte Schleife

Die Bedingung wird nach jedem Schleifendurchlauf geprüft (do-while). Der Schleifenkörper wird deshalb garantiert mindestens einmal ausgeführt — selbst wenn die Bedingung von Anfang an falsch ist.

Endlosschleife

Eine Schleife, deren Abbruchbedingung niemals false wird (z. B. weil die Zählvariable vergessen wurde zu erhöhen). Führt dazu, dass das Programm "hängt" und nicht mehr reagiert — ein häufiger, gezielt in Prüfungscode versteckter Fehler.

Eingabepruefung.java — while
1import java.util.Scanner;
2
3public class Eingabepruefung {
4    public static void main(String[] args) {
5        Scanner sc = new Scanner(System.in);
6        int zahl = -1;
7        while (zahl < 0 || zahl > 100) {
8            System.out.print("Zahl zwischen 0 und 100: ");
9            zahl = sc.nextInt();
10        }
11        System.out.println("Danke, du hast " + zahl + " eingegeben.");
12        sc.close();
13    }
14}
Z. 6zahl = -1 ist ein bewusst ungültiger Startwert — er sorgt dafür, dass die Bedingung in Z. 7 beim allerersten Check garantiert true ist, damit die Schleife überhaupt einmal betreten wird.
Z. 7Solange zahl außerhalb von 0–100 liegt, wird der Block wiederholt. Die Bedingung wird vor jeder Runde neu geprüft.
Z. 9Erst hier bekommt zahl einen echten, vom Nutzer eingegebenen Wert — der die Bedingung beim nächsten Check eventuell zu false macht und die Schleife beendet.
Mindestens-einmal.java — do-while
1public class MindestensEinmal {
2    public static void main(String[] args) {
3        int versuch = 0;
4        do {
5            versuch++;
6            System.out.println("Versuch Nr. " + versuch);
7        } while (versuch < 3);
8    }
9}
Z. 4–7Der Block wird zuerst ausgeführt (versuch wird 1, Ausgabe "Versuch Nr. 1"), und erst danach in Z. 7 die Bedingung geprüft. Das läuft insgesamt dreimal (versuch = 1, 2, 3), bevor versuch < 3 bei versuch=3 false wird.
PSEUDOCODEwhile vs. do-while
SOLANGE zahl < 0 ODER zahl > 100 TU
  LIES zahl
ENDE SOLANGE

WIEDERHOLE
  versuch = versuch + 1
  GIB AUS versuch
BIS versuch >= 3
📌 MERKE FÜR DIE IHK-PRÜFUNG Klassische Prüfungsfrage: "Wie oft wird der Schleifenkörper mindestens ausgeführt?" — bei while lautet die Antwort 0-mal (kopfgesteuert), bei do-while immer mindestens 1-mal (fußgesteuert). Dieser Unterschied ist ein Standard-Vergleichspaar in FISI/FIAE-Prüfungen.

✅ Checkpoint 16: while & do-while unterschieden

3.5 break & continue

Kinder-Erklärung: break ist der Notausstieg — sofort raus aus der ganzen Schleife. continue ist eher ein "diese Runde überspringen" — du bleibst im Karussell, lässt aber diese eine Runde aus und machst direkt mit der nächsten weiter.
break (in Schleifen)

Beendet die gesamte umschließende Schleife sofort, unabhängig davon, ob die eigentliche Abbruchbedingung erfüllt ist. Die Ausführung springt direkt zur ersten Anweisung nach der Schleife.

continue

Bricht nur den aktuellen Schleifendurchlauf ab und springt direkt zur nächsten Prüfung der Schleifenbedingung (bei for: erst wird noch das Inkrement ausgeführt). Der restliche Code im Schleifenkörper dieser Runde wird übersprungen.

BreakContinue.java
1public class BreakContinue {
2    public static void main(String[] args) {
3        for (int i = 1; i <= 10; i++) {
4            if (i == 7) {
5                break;
6            }
7            if (i % 2 == 0) {
8                continue;
9            }
10            System.out.println(i);
11        }
12    }
13}
Ausgabe1, 3, 5 — bei i=7 beendet break die Schleife komplett (7 wird nie ausgegeben); bei geraden Zahlen (2, 4, 6) überspringt continue nur die Ausgabezeile 10, die Schleife läuft aber weiter.

✅ Checkpoint 17: break & continue unterschieden

3.6 Verschachtelung in der Praxis: FizzBuzz

Zum Abschluss kombinieren wir alles aus Teil 3 in einem einzigen, in der IT-Ausbildung berühmten Übungsklassiker: FizzBuzz. Die Regel: Zähle von 1 bis 20. Ist die Zahl durch 3 und 5 teilbar, gib "FizzBuzz" aus. Ist sie nur durch 3 teilbar, gib "Fizz" aus. Nur durch 5 teilbar: "Buzz". Sonst die Zahl selbst.

PSEUDOCODEFizzBuzz
START
  FÜR i VON 1 BIS 20 SCHRITTWEITE 1
    WENN (i MOD 3 == 0) UND (i MOD 5 == 0) DANN
      GIB AUS "FizzBuzz"
    SONST WENN i MOD 3 == 0 DANN
      GIB AUS "Fizz"
    SONST WENN i MOD 5 == 0 DANN
      GIB AUS "Buzz"
    SONST
      GIB AUS i
    ENDE WENN
  ENDE FÜR
ENDE
FizzBuzz.java
1public class FizzBuzz {
2    public static void main(String[] args) {
3        for (int i = 1; i <= 20; i++) {
4            if (i % 3 == 0 && i % 5 == 0) {
5                System.out.println("FizzBuzz");
6            } else if (i % 3 == 0) {
7                System.out.println("Fizz");
8            } else if (i % 5 == 0) {
9                System.out.println("Buzz");
10            } else {
11                System.out.println(i);
12            }
13        }
14    }
15}
Z. 4Die Kombinationsprüfung (durch 3 und 5 teilbar, also durch 15) muss zwingend zuerst stehen — stünde die reine 3er- oder 5er-Prüfung zuerst, würde die 15er-Regel niemals erreicht, weil die frühere Bedingung schon zuschlägt. Derselbe Reihenfolge-Fallstrick wie in Kapitel 3.1.
Z. 4&& verlangt, dass beide Teilausdrücke true sind — Kurzschlussauswertung aus Kapitel 2.4 in Aktion.

✅ Checkpoint 18: FizzBuzz läuft

Teil 3 geschafft! 🎉

Verzweigungen, Schleifen, break/continue und der Umgang mit verschachtelter Logik sitzen jetzt — inklusive Pseudocode-Pendant zu jedem Baustein. Weiter geht's direkt mit Teil 4.

TEIL 4 / 5

Objektorientierte Programmierung (OOP)

Jetzt kommt das Herzstück von Java. Bisher haben wir Daten und Logik getrennt in einer einzigen main-Methode zusammengewürfelt. OOP bringt beides zusammen in Bausteinen, die reale Dinge abbilden — Hunde, Autos, Bankkonten. Das ist der größte gedankliche Sprung im ganzen Kurs, also nehmen wir ihn Schritt für Schritt.

4.1 Klassen & Objekte

Kinder-Erklärung: Eine Klasse ist wie ein Keksausstecher: eine Schablone, die festlegt, welche Form und welche Eigenschaften ein Keks haben wird (rund, mit Schokostückchen). Ein Objekt ist der tatsächliche, gebackene Keks, den du aus dieser Schablone ausstichst — du kannst beliebig viele Kekse aus demselben Ausstecher machen, und jeder ist ein eigenständiges Exemplar mit eigenem Schokoladenanteil.
Klasse

Ein Bauplan (Blaupause), der beschreibt, welche Attribute (Zustand/Daten) und Methoden (Verhalten/Fähigkeiten) Objekte dieses Typs besitzen. Eine Klasse selbst belegt zur Laufzeit nur einmal Speicher (im Method Area der JVM) — sie ist der Plan, kein konkretes Ding.

Objekt (Instanz)

Ein konkretes, zur Laufzeit im Heap-Speicher erzeugtes Exemplar einer Klasse mit eigenen, individuellen Attributwerten. Der Vorgang der Erzeugung heißt Instanziierung. Von einer Klasse können beliebig viele unabhängige Objekte existieren.

Attribut (Instanzvariable)

Eine Variable, die innerhalb einer Klasse, aber außerhalb jeder Methode deklariert wird und den Zustand eines Objekts beschreibt. Jedes Objekt besitzt seine eigene, unabhängige Kopie der Attributwerte.

new-Operator

Der Operator, der ein neues Objekt auf dem Heap erzeugt und dessen Konstruktor aufruft. Das Ergebnis ist eine Referenz auf das neue Objekt, die in einer Variablen gespeichert werden kann, z. B. Hund bello = new Hund();.

Hund.java
1public class Hund {
2    String name;
3    String rasse;
4    int alter;
5}
HundeTest.java
1public class HundeTest {
2    public static void main(String[] args) {
3        Hund bello = new Hund();
4        bello.name = "Bello";
5        bello.rasse = "Dackel";
6        bello.alter = 3;
7
8        Hund rex = new Hund();
9        rex.name = "Rex";
10        rex.rasse = "Schäferhund";
11        rex.alter = 5;
12
13        System.out.println(bello.name + " ist ein " + bello.alter + " Jahre alter " + bello.rasse);
14        System.out.println(rex.name + " ist ein " + rex.alter + " Jahre alter " + rex.rasse);
15    }
16}
Z. 3new Hund() erzeugt ein eigenständiges Hund-Objekt auf dem Heap. Die Variable bello auf dem Stack speichert nur eine Referenz (Adresse) darauf — nicht das Objekt selbst.
Z. 4–6bello.name = "Bello" greift über die Referenz auf das Heap-Objekt zu (Punktnotation) und setzt dort das Attribut. Da jedes Attribut ohne explizite Initialisierung automatisch einen Standardwert hätte (null bei String, 0 bei int), müssen wir sie hier bewusst befüllen.
Z. 8rex ist ein komplett separates Objekt an einer anderen Heap-Adresse — Änderungen an rex haben null Einfluss auf bello, obwohl beide vom selben Bauplan (derselben Klasse) stammen.
PSEUDOCODEKlasse & Objekt
KLASSE Hund
  ATTRIBUT name: TEXT
  ATTRIBUT rasse: TEXT
  ATTRIBUT alter: GANZZAHL
ENDE KLASSE

START
  ERZEUGE bello ALS NEUES Hund
  SETZE bello.name = "Bello"
  SETZE bello.rasse = "Dackel"
  SETZE bello.alter = 3
  GIB AUS bello.name
ENDE

✅ Checkpoint 19: Klasse & zwei Objekte erstellt

4.2 Methoden

Kinder-Erklärung: Wenn Attribute beschreiben, was ein Objekt ist (Name, Farbe), beschreiben Methoden, was ein Objekt kann — der Keks kann zwar nichts, aber unser Hund kann bellen, fressen, apportieren.
Methode

Ein benannter, wiederverwendbarer Codeblock innerhalb einer Klasse, der eine bestimmte Fähigkeit oder Berechnung kapselt. Methoden können Eingabewerte (Parameter) entgegennehmen und optional einen Wert zurückgeben.

Parameter vs. Argument

Parameter ist der Platzhalter-Name in der Methodendefinition (z. B. String neuerName in void umbenennen(String neuerName)). Argument ist der konkrete Wert, der beim tatsächlichen Aufruf übergeben wird (z. B. bello.umbenennen("Fido") — hier ist "Fido" das Argument).

Methodensignatur

Name der Methode + Anzahl, Typ und Reihenfolge ihrer Parameter (der Rückgabetyp zählt NICHT zur Signatur). Zwei Methoden mit gleichem Namen müssen sich in ihrer Signatur unterscheiden — das ist die Grundlage für Method Overloading.

Overloading (Methodenüberladung)

Mehrere Methoden mit demselben Namen, aber unterschiedlicher Parameterliste, innerhalb derselben Klasse. Der Compiler entscheidet anhand der übergebenen Argumente zur Kompilierzeit, welche Version aufgerufen wird — nicht zu verwechseln mit Overriding (Kapitel 4.5).

Hund.java — mit Methoden
1public class Hund {
2    String name;
3    int alter;
4
5    void bellen() {
6        System.out.println(name + " sagt: Wuff!");
7    }
8
9    int jahreAlsMensch() {
10        return alter * 7;
11    }
12
13    void umbenennen(String neuerName) {
14        name = neuerName;
15    }
16}
Z. 5void bellen() — void heißt: kein Rückgabewert, die Methode gibt lediglich Text aus (einen Seiteneffekt) statt einen Wert zurückzugeben.
Z. 9–11int jahreAlsMensch() — der Rückgabetyp int verlangt zwingend ein return mit einem passenden Wert. return alter * 7; beendet die Methode sofort und liefert das Ergebnis an den Aufrufer zurück.
Z. 13–15umbenennen(String neuerName) nimmt einen Parameter entgegen und überschreibt das Attribut name des Objekts, auf dem die Methode aufgerufen wurde.

✅ Checkpoint 20: Methoden mit & ohne Rückgabewert

4.3 Konstruktoren

Kinder-Erklärung: Bisher mussten wir jedes Attribut nach der Erzeugung mühsam einzeln von Hand befüllen. Ein Konstruktor ist wie eine Gussform, die den Keks direkt beim Backen mit der richtigen Füllung versieht — alles auf einmal, in einem Rutsch.
Konstruktor

Eine spezielle, methodenähnliche Struktur, die beim new-Aufruf automatisch ausgeführt wird, um ein Objekt zu initialisieren. Ein Konstruktor trägt denselben Namen wie die Klasse und hat keinen Rückgabetyp — auch nicht void.

Standardkonstruktor

Definiert eine Klasse keinen eigenen Konstruktor, erzeugt der Compiler automatisch einen parameterlosen Standardkonstruktor, der alle Attribute mit ihren Default-Werten belässt. Sobald du irgendeinen eigenen Konstruktor schreibst, entfällt dieser automatische Standardkonstruktor ersatzlos.

this

Ein Schlüsselwort, das innerhalb einer Instanzmethode oder eines Konstruktors auf das aktuelle Objekt selbst verweist. Besonders wichtig, wenn ein Parametername identisch mit einem Attributnamen ist — this.name meint dann das Attribut, name allein meint den Parameter.

Hund.java — mit Konstruktoren
1public class Hund {
2    String name;
3    int alter;
4
5    Hund(String name, int alter) {
6        this.name = name;
7        this.alter = alter;
8    }
9
10    Hund(String name) {
11        this(name, 0);
12    }
13}
Z. 5Konstruktor mit zwei Parametern — trägt exakt den Klassennamen Hund, hat keinen Rückgabetyp.
Z. 6this.name = name; — links vom = ist this.name das Attribut des Objekts, rechts ist name der Parameter. Ohne this wüsste Java nicht, welches der beiden gemeint ist (Namensgleichheit / "Shadowing").
Z. 10–12Ein zweiter, überladener Konstruktor mit nur einem Parameter. this(name, 0); ruft den anderen Konstruktor (Z. 5) mit alter=0 auf — so wird Code nicht doppelt geschrieben. Ein solcher this(...)-Aufruf muss immer die erste Zeile im Konstruktor sein.
📌 MERKE FÜR DIE IHK-PRÜFUNG Sobald eine Klasse einen eigenen Konstruktor definiert, gibt es keinen automatischen parameterlosen Standardkonstruktor mehr. new Hund() würde im obigen Beispiel einen Kompilierfehler erzeugen, weil kein passender parameterloser Konstruktor existiert.

✅ Checkpoint 21: Konstruktoren & this

4.4 Kapselung: Getter & Setter

Kinder-Erklärung: Kapselung ist wie ein Medizinschrank mit abgeschlossener Tür: Niemand darf einfach so reingreifen und Tabletten vertauschen. Wer etwas will, muss durch die kontrollierte Schranktür (eine Methode) gehen — und die Krankenschwester (dein Code) kann dabei prüfen, ob die Anfrage überhaupt sinnvoll ist.
Kapselung (Encapsulation)

Eines der vier Grundprinzipien der OOP: Attribute werden vor direktem Zugriff von außen geschützt (meist private) und nur über kontrollierte, öffentliche Methoden (Getter/Setter) erreichbar gemacht. Ziel: Datenintegrität sichern, interne Umsetzung frei änderbar halten, ohne den Code anderer zu brechen.

Zugriffsmodifizierer

private: nur innerhalb derselben Klasse sichtbar.
(package-private, kein Schlüsselwort): sichtbar innerhalb desselben Packages.
protected: sichtbar im Package + für Unterklassen (auch in anderen Packages).
public: von überall sichtbar.

Getter & Setter

Getter (z. B. getName()) liest ein privates Attribut kontrolliert aus. Setter (z. B. setName(String n)) schreibt es kontrolliert — und kann dabei Prüfungen (Validierung) einbauen, z. B. verhindern, dass ein Alter negativ wird.

Konto.java
1public class Konto {
2    private double kontostand;
3
4    public double getKontostand() {
5        return kontostand;
6    }
7
8    public void einzahlen(double betrag) {
9        if (betrag > 0) {
10            kontostand += betrag;
11        }
12    }
13}
Z. 2private double kontostand; — von außerhalb der Klasse Konto ist kein direkter Zugriff möglich, weder Lesen noch Schreiben; Compilerfehler bei meinKonto.kontostand = -500; von außen.
Z. 4–6Der Getter erlaubt kontrolliertes Lesen von außen, ohne Schreibzugriff zu gewähren.
Z. 8–12Statt eines simplen Setters gibt es hier eine geschäftslogik-geprüfte Methode: negative Einzahlungen werden schlicht ignoriert — genau der Vorteil von Kapselung gegenüber einem öffentlichen Attribut.
📌 MERKE FÜR DIE IHK-PRÜFUNG Kapselung ist eines der vier zentralen OOP-Prinzipien, die in der IHK-Prüfung regelmäßig abgefragt werden: Kapselung, Vererbung, Polymorphie, Abstraktion. Merke dir diese vier als festes Quartett.

✅ Checkpoint 22: Kapselung mit Validierung

4.5 Vererbung

Kinder-Erklärung: Vererbung ist wie bei einer Familie: Ein Kind erbt automatisch bestimmte Eigenschaften der Eltern (z. B. "kann laufen"), kann aber auch eigene, neue Talente entwickeln oder eine geerbte Fähigkeit auf seine eigene Art ausüben.
Vererbung (Inheritance)

Eine Klasse (Unterklasse/abgeleitete Klasse) übernimmt Attribute und Methoden einer anderen Klasse (Oberklasse/Basisklasse) mit dem Schlüsselwort extends und kann sie erweitern oder anpassen. Java erlaubt pro Klasse nur eine direkte Oberklasse (Einfachvererbung) — anders als bei Interfaces.

super

Verweist innerhalb einer Unterklasse auf die Oberklasse. super(...) ruft explizit den Konstruktor der Oberklasse auf (muss die erste Zeile im Unterklassen-Konstruktor sein), super.methode() ruft eine überschriebene Methode der Oberklasse gezielt auf.

Overriding (Methodenüberschreibung) & @Override

Eine Unterklasse definiert eine Methode mit identischer Signatur wie in der Oberklasse neu, um das geerbte Verhalten zu ersetzen. Die Annotation @Override ist optional, aber dringend empfohlen — sie lässt den Compiler prüfen, ob wirklich eine passende Methode der Oberklasse existiert, und verhindert Tippfehler, die sonst versehentlich eine neue, eigenständige Methode erzeugen würden.

Tier.java & Hund.java — Vererbung
1public class Tier {
2    String name;
3
4    Tier(String name) {
5        this.name = name;
6    }
7
8    void lautGeben() {
9        System.out.println(name + " gibt ein Geräusch von sich.");
10    }
11}
12
13public class Hund extends Tier {
14    Hund(String name) {
15        super(name);
16    }
17
18    @Override
19    void lautGeben() {
20        System.out.println(name + " bellt: Wuff!");
21    }
22}
Z. 13class Hund extends Tier — Hund erbt automatisch das Attribut name und alle Methoden von Tier, ohne sie neu zu schreiben.
Z. 15super(name) ruft den Konstruktor von Tier auf, damit name dort korrekt initialisiert wird — jeder Unterklassen-Konstruktor ruft implizit oder explizit immer zuerst einen Konstruktor der Oberklasse auf.
Z. 18–21@Override markiert, dass lautGeben() die geerbte Version aus Tier bewusst ersetzt — mit identischer Signatur, aber eigenem Verhalten.

✅ Checkpoint 23: Vererbung & Overriding

4.6 Polymorphie

Kinder-Erklärung: Polymorphie ("Vielgestaltigkeit") ist wie ein Play-Knopf, der auf jedem Gerät existiert — Radio, Fernseher, Smartphone — aber je nach Gerät etwas völlig anderes tut. Du drückst denselben Knopf ("lautGeben()"), doch was tatsächlich passiert, hängt vom konkreten Objekt dahinter ab.
Polymorphie

Die Fähigkeit, ein Objekt über den Typ seiner Oberklasse (oder eines Interfaces) anzusprechen, während zur Laufzeit automatisch die tatsächlich passende, überschriebene Methode der konkreten Unterklasse ausgeführt wird — genannt dynamische Bindung.

Tierheim.java
1public class Tierheim {
2    public static void main(String[] args) {
3        Tier[] tiere = new Tier[2];
4        tiere[0] = new Hund("Bello");
5        tiere[1] = new Tier("Unbekannt");
6
7        for (Tier t : tiere) {
8            t.lautGeben();
9        }
10    }
11}
Z. 3Ein Array vom Oberklassen-Typ Tier — kann trotzdem Objekte jeder Unterklasse von Tier aufnehmen.
Z. 4Ein Hund-Objekt wird über eine Tier-Referenz gespeichert — erlaubt, weil ein Hund laut Vererbung immer auch ein Tier ist ("Ist-ein"-Beziehung).
Z. 7–9Obwohl t als Tier deklariert ist, ruft t.lautGeben() zur Laufzeit die tatsächliche, überschriebene Version des jeweils dahinterliegenden Objekts auf — für Bello die Hund-Version ("bellt"), für das zweite Objekt die Tier-Version ("gibt ein Geräusch von sich"). Genau das ist dynamische Bindung.
📌 MERKE FÜR DIE IHK-PRÜFUNG Polymorphie entscheidet zur Laufzeit (dynamische Bindung), welche Methode aufgerufen wird — im Gegensatz zu Overloading, das der Compiler bereits zur Kompilierzeit anhand der Parametertypen auflöst (statische Bindung). Diese Unterscheidung ist ein IHK-Prüfungsklassiker.

✅ Checkpoint 24: Polymorphie in Aktion

4.7 Abstrakte Klassen

Kinder-Erklärung: Eine abstrakte Klasse ist wie ein unvollständiger Bauplan — er legt fest, dass jedes Haus ein Dach haben muss, sagt aber nicht, wie genau das Dach aussieht. Aus so einem unvollständigen Plan kann man selbst kein Haus bauen; erst wenn jemand die fehlenden Details ergänzt, wird daraus ein echtes, baubares Haus.
Abstrakte Klasse

Eine mit abstract markierte Klasse, die nicht direkt instanziiert werden kann (new ist verboten). Sie dient als gemeinsame Basis für Unterklassen und kann sowohl fertig implementierte als auch abstrakte Methoden (ohne Methodenkörper) enthalten.

Abstrakte Methode

Eine Methode ohne Implementierung, nur mit Signatur und Semikolon statt geschweiften Klammern: abstract void fliegen();. Jede konkrete (nicht-abstrakte) Unterklasse muss diese Methode zwingend überschreiben, sonst meldet der Compiler einen Fehler.

Form.java
1public abstract class Form {
2    abstract double flaecheBerechnen();
3
4    void beschreiben() {
5        System.out.println("Diese Form hat eine Fläche von " + flaecheBerechnen());
6    }
7}
8
9public class Kreis extends Form {
10    double radius;
11
12    Kreis(double radius) {
13        this.radius = radius;
14    }
15
16    @Override
17    double flaecheBerechnen() {
18        return Math.PI * radius * radius;
19    }
20}
Z. 1abstract class Form — new Form() wäre ein Kompilierfehler, da Form unvollständig ist (sie enthält eine nicht implementierte Methode).
Z. 2abstract double flaecheBerechnen(); — nur die Signatur, kein Körper, kein { }. Jede konkrete Form-Unterklasse muss selbst festlegen, wie ihre Fläche berechnet wird.
Z. 4–6Eine abstrakte Klasse darf trotzdem fertige Methoden enthalten — beschreiben() nutzt sogar die noch abstrakte flaecheBerechnen() und funktioniert später dank Polymorphie für jede Unterklasse korrekt.
Z. 9Kreis extends Form und implementiert flaecheBerechnen() vollständig — erst dadurch wird Kreis zu einer konkreten, instanziierbaren Klasse.

✅ Checkpoint 25: Abstrakte Klasse verstanden

4.8 Interfaces

Kinder-Erklärung: Ein Interface ist wie eine Checkliste eines Vertrags: "Wer diesen Vertrag unterschreibt, verspricht, fliegen zu können." Es ist völlig egal, ob der Unterzeichner ein Vogel, ein Flugzeug oder eine Drohne ist — solange er das Versprechen einhält, ist der Vertrag erfüllt. Anders als bei der Familie (Vererbung) kann jemand gleichzeitig mehrere solcher Verträge unterschreiben.
Interface

Ein rein abstrakter Bauplan, der ausschließlich Methodensignaturen (und Konstanten) festlegt, aber keine eigene Implementierung und keinen Objektzustand besitzt. Eine Klasse verpflichtet sich mit implements, alle im Interface geforderten Methoden konkret umzusetzen.

implements

Das Schlüsselwort, mit dem eine Klasse angibt, ein bestimmtes Interface zu erfüllen. Anders als bei extends (nur eine Oberklasse erlaubt) kann eine Klasse beliebig viele Interfaces gleichzeitig implementieren, getrennt durch Komma.

Unterschied: abstrakte Klasse vs. Interface

Abstrakte Klasse: kann Zustand (Attribute) und fertige Methoden besitzen, aber nur eine pro Klasse erbbar. Interface: klassisch zustandslos, rein vertraglich, aber eine Klasse kann mehrere Interfaces gleichzeitig implementieren. Seit Java 8 dürfen Interfaces zusätzlich default-Methoden mit fertigem Methodenkörper enthalten.

Fliegbar.java & Vogel.java
1public interface Fliegbar {
2    void fliegen();
3}
4
5public interface Schwimmbar {
6    void schwimmen();
7}
8
9public class Ente implements Fliegbar, Schwimmbar {
10    @Override
11    public void fliegen() {
12        System.out.println("Die Ente fliegt tief über den Teich.");
13    }
14
15    @Override
16    public void schwimmen() {
17        System.out.println("Die Ente schwimmt auf dem Teich.");
18    }
19}
Z. 1–3, 5–7Beide Interfaces schreiben nur die Methoden-Signatur vor, keine Implementierung — die Methoden sind implizit public abstract.
Z. 9implements Fliegbar, Schwimmbar — Ente erfüllt zwei Verträge gleichzeitig, was mit Einfachvererbung (extends) unmöglich wäre.
Z. 11, 16Beide Methoden müssen zwingend implementiert werden, sonst weigert sich der Compiler, Ente als vollständige (konkrete) Klasse zu akzeptieren.
PSEUDOCODEInterface-Vertrag
SCHNITTSTELLE Fliegbar
  METHODE fliegen()
ENDE SCHNITTSTELLE

KLASSE Ente ERFÜLLT Fliegbar, Schwimmbar
  METHODE fliegen()
    GIB AUS "Die Ente fliegt tief über den Teich."
  ENDE METHODE
ENDE KLASSE
📌 MERKE FÜR DIE IHK-PRÜFUNG — das OOP-Quartett komplett Du kennst jetzt alle vier Säulen der Objektorientierung: Kapselung (4.4, Daten schützen), Vererbung (4.5, Code wiederverwenden), Polymorphie (4.6, ein Aufruf, viele Verhalten) und Abstraktion (4.7–4.8, abstrakte Klassen/Interfaces — nur das Wesentliche nach außen zeigen). Diese vier Begriffe sind DER Kern jeder OOP-Prüfungsfrage.

✅ Checkpoint 26: Interfaces angewendet

Teil 4 geschafft! 🎉

Das komplette OOP-Fundament steht: Klassen, Objekte, Methoden, Konstruktoren, Kapselung, Vererbung, Polymorphie, abstrakte Klassen und Interfaces. Weiter geht's direkt mit Teil 5.

TEIL 5 / 5

Fortgeschrittene IHK-Themen

Der letzte inhaltliche Teil: Wir lernen, viele Werte auf einmal zu verwalten (Arrays, ArrayLists, HashMaps), unser Programm gegen Fehler abzusichern (Exception Handling) und Code zu schreiben, den auch andere Menschen in einem Jahr noch verstehen (Clean Code). Danach wartet das große Abschluss-Quiz.

5.1 Arrays

Kinder-Erklärung: Ein Array ist wie ein Eierkarton: eine feste Anzahl nummerierter Fächer (beginnend bei Fach Nummer 0, nicht 1!), die alle denselben Typ von Inhalt aufnehmen. Der Karton kann nachträglich nicht größer oder kleiner gemacht werden — er hat von Anfang an eine feste Größe.
Array

Eine Datenstruktur fester Länge, die mehrere Werte desselben Datentyps unter einem gemeinsamen Namen speichert. Arrays sind in Java Referenztypen und liegen auf dem Heap, selbst wenn sie primitive Werte wie int enthalten.

Index

Die Position eines Elements im Array, beginnend bei 0 für das erste Element. Ein Array der Länge n hat gültige Indizes von 0 bis n-1. Der Zugriff auf einen ungültigen Index wirft zur Laufzeit eine ArrayIndexOutOfBoundsException.

.length

Ein Attribut (kein Methodenaufruf, also ohne Klammern!) jedes Arrays, das seine feste Länge zurückgibt, z. B. zahlen.length. Häufig verwechselt mit .length() bei Strings, das eine echte Methode mit Klammern ist.

ArrayDemo.java
1public class ArrayDemo {
2    public static void main(String[] args) {
3        int[] noten = {2, 1, 3, 2, 4};
4        int summe = 0;
5
6        for (int i = 0; i < noten.length; i++) {
7            summe += noten[i];
8        }
9
10        double durchschnitt = (double) summe / noten.length;
11        System.out.println("Durchschnitt: " + durchschnitt);
12
13        for (int note : noten) {
14            System.out.print(note + " ");
15        }
16    }
17}
Z. 3{2, 1, 3, 2, 4} ist eine kompakte Array-Initialisierung: Java legt automatisch ein Array der Länge 5 an und befüllt es sofort.
Z. 6–8Die klassische, indexbasierte for-Schleife: noten[i] greift per eckiger Klammer auf das Element an Position i zu.
Z. 10(double) summe castet vor der Division — sonst würde ganzzahlige Division (Kapitel 2.4) das Ergebnis fälschlich abschneiden.
Z. 13for (int note : noten) ist die erweiterte for-Schleife ("for-each"): sie iteriert bequem über jedes Element, ohne manuellen Index — ideal, wenn man den Index selbst nicht braucht.
📌 MERKE FÜR DIE IHK-PRÜFUNG ArrayIndexOutOfBoundsException ist einer der häufigsten Laufzeitfehler in Prüfungsaufgaben. Ein Array der Länge 5 hat die gültigen Indizes 0–4 — der Zugriff auf noten[5] wirft diese Exception, selbst wenn "5" wie eine naheliegende, harmlose Zahl aussieht.

✅ Checkpoint 27: Arrays durchlaufen

5.2 ArrayList

Kinder-Erklärung: Wenn ein Array ein starrer Eierkarton ist, ist eine ArrayList ein dehnbarer Rucksack: Du kannst jederzeit neue Dinge hineinpacken oder herausnehmen, und der Rucksack passt sich automatisch in der Größe an — du musst dich nie vorher auf eine feste Anzahl festlegen.
ArrayList

Eine Klasse aus java.util, die eine dynamisch wachsende Liste implementiert. Intern verwaltet sie selbst ein Array, das bei Bedarf automatisch vergrößert wird — für dich als Nutzer unsichtbar.

Generics (<T>)

Spitze Klammern nach dem Typnamen, z. B. ArrayList<String>, legen fest, welchen Datentyp die Liste ausschließlich aufnehmen darf. Das verhindert Typfehler bereits zur Kompilierzeit, statt sie erst zur Laufzeit zu entdecken.

Wrapper-Klassen & Autoboxing

Generics funktionieren nur mit Referenztypen, nicht mit primitiven Typen — deshalb gibt es zu jedem primitiven Typ eine Wrapper-Klasse (int→Integer, double→Double, boolean→Boolean, …). Autoboxing ist die automatische Umwandlung zwischen primitivem Typ und Wrapper-Klasse durch den Compiler, z. B. bei ArrayList<Integer> liste; liste.add(5); wird die 5 automatisch zu einem Integer-Objekt "verpackt".

ArrayListDemo.java
1import java.util.ArrayList;
2
3public class ArrayListDemo {
4    public static void main(String[] args) {
5        ArrayList<String> einkaufsliste = new ArrayList<>();
6        einkaufsliste.add("Milch");
7        einkaufsliste.add("Brot");
8        einkaufsliste.add("Käse");
9        einkaufsliste.remove("Brot");
10
11        for (String artikel : einkaufsliste) {
12            System.out.println("- " + artikel);
13        }
14        System.out.println("Anzahl Artikel: " + einkaufsliste.size());
15    }
16}
Z. 5new ArrayList<>() — die leeren spitzen Klammern rechts ("Diamond-Operator") lassen Java den Typ aus der linken Deklaration übernehmen, statt ihn zu wiederholen.
Z. 6–8.add(...) hängt Elemente ans Ende an; die Liste wächst automatisch von 0 auf 3 Elemente.
Z. 9.remove("Brot") entfernt das erste Vorkommen dieses konkreten Werts (nicht den Index!) — für Indexlöschung gäbe es .remove(1), was hier zu Verwechslungen führen kann.
Z. 14.size() liefert die aktuelle Anzahl der Elemente — bei Arrays heißt die Entsprechung .length (Attribut), bei ArrayList .size() (Methode, mit Klammern)!
ArrayArrayList
Größefest, bei Erzeugung festgelegtdynamisch, wächst/schrumpft automatisch
Datentypenprimitive & Referenztypennur Referenztypen (Autoboxing für primitive)
Länge abfragen.length (Attribut).size() (Methode)
Elemente ändernnur überschreibenhinzufügen, entfernen, überschreiben

✅ Checkpoint 28: ArrayList genutzt

5.3 Exception Handling: try-catch

Kinder-Erklärung: try-catch ist wie ein Sicherheitsnetz unter einem Seiltänzer: Der Seiltänzer (dein Code) versucht (try) den riskanten Balanceakt. Fällt er trotzdem herunter (ein Fehler tritt auf), fängt ihn das Netz (catch) auf, statt dass die ganze Show (das Programm) abrupt abbricht.
Exception

Ein Objekt, das einen Ausnahmefall zur Laufzeit repräsentiert — einen Fehler, der den normalen Programmablauf unterbricht (z. B. Division durch Null, ungültiger Array-Index). Wird eine Exception nicht abgefangen, bricht das Programm mit einem Stacktrace ab.

try / catch / finally

try: umschließt den riskanten Code. catch (ExceptionTyp e): fängt eine passende Exception ab und behandelt sie kontrolliert. finally: wird immer ausgeführt — egal ob eine Exception auftrat oder nicht, egal ob im try ein return stand — typisch verwendet, um Ressourcen wie Dateien oder einen Scanner sicher zu schließen.

Checked vs. Unchecked Exception

Checked Exceptions (z. B. IOException) muss der Compiler zwingend entweder abgefangen oder mit throws weitergereicht sehen — sonst Kompilierfehler. Unchecked Exceptions (Unterklassen von RuntimeException, z. B. NullPointerException, ArithmeticException) müssen syntaktisch nicht behandelt werden, sollten aber durch guten Code von vornherein vermieden werden.

throw vs. throws

throw (im Methodenkörper) löst tatsächlich eine konkrete Exception aus: throw new IllegalArgumentException("ungültig");. throws (in der Methodensignatur) kündigt nur an, dass diese Methode eine bestimmte Checked Exception weiterreichen könnte, ohne sie selbst zu behandeln: void lesen() throws IOException.

Division.java
1import java.util.Scanner;
2
3public class Division {
4    public static void main(String[] args) {
5        Scanner sc = new Scanner(System.in);
6        try {
7            System.out.print("Zahl: ");
8            int zahl = Integer.parseInt(sc.nextLine());
9            System.out.println("100 / Zahl = " + (100 / zahl));
10        } catch (NumberFormatException e) {
11            System.out.println("Das war keine gültige Zahl.");
12        } catch (ArithmeticException e) {
13            System.out.println("Division durch 0 ist nicht erlaubt.");
14        } finally {
15            System.out.println("Programm beendet.");
16            sc.close();
17        }
18    }
19}
Z. 8Integer.parseInt(...) wandelt Text in eine Zahl um — wirft eine NumberFormatException, wenn der Text keine gültige Zahl ist (z. B. "abc").
Z. 9100 / zahl wirft eine ArithmeticException, wenn zahl gleich 0 ist — ganzzahlige Division durch 0 ist in Java (anders als bei Gleitkommazahlen!) immer ein Laufzeitfehler.
Z. 10, 12Java prüft die catch-Blöcke von oben nach unten und springt in den ersten passenden. Es wird niemals mehr als ein catch-Block pro try ausgeführt.
Z. 14–17Der finally-Block läuft in jedem Fall — egal ob eine Exception geworfen, welche abgefangen wurde oder gar keine auftrat. Ideal, um sc.close() garantiert auszuführen.
📌 MERKE FÜR DIE IHK-PRÜFUNG — häufige Exceptions NullPointerException (Zugriff auf null-Referenz), ArrayIndexOutOfBoundsException (ungültiger Array-Index), ArithmeticException (z. B. Ganzzahl-Division durch 0), NumberFormatException (ungültige Text-zu-Zahl-Umwandlung) — diese vier sind die in Prüfungsaufgaben am häufigsten vorkommenden Exceptions. Alle vier sind Unchecked Exceptions.

✅ Checkpoint 29: try-catch-finally angewendet

5.4 Grundlegende Datenstrukturen

Kinder-Erklärung: Ein Stack ist wie ein Tellerstapel — du nimmst immer nur den obersten Teller ("Last In, First Out"). Eine Queue ist wie eine Warteschlange an der Kasse — wer zuerst kommt, wird zuerst bedient ("First In, First Out"). Eine HashMap ist wie ein Wörterbuch — du schlägst nicht der Reihe nach nach, sondern springst direkt über ein Stichwort (Key) zur passenden Erklärung (Value).
Stack (LIFO)

Last In, First Out: Das zuletzt hinzugefügte Element wird als erstes wieder entfernt. Java bietet dies über die Klasse Stack oder — moderner empfohlen — über Deque mit push()/pop().

Queue (FIFO)

First In, First Out: Das zuerst hinzugefügte Element wird als erstes wieder entfernt — über das Interface Queue mit offer() (einreihen) und poll() (bedienen).

HashMap

Eine Schlüssel-Wert-Datenstruktur (Key→Value) aus java.util, die den Zugriff über einen eindeutigen Schlüssel statt über einen numerischen Index erlaubt und intern über sogenanntes Hashing sehr schnellen Zugriff ermöglicht. Schlüssel sind eindeutig — eine erneute put()-Zuweisung mit demselben Key überschreibt den alten Wert.

HashMapDemo.java
1import java.util.HashMap;
2
3public class HashMapDemo {
4    public static void main(String[] args) {
5        HashMap<String, Integer> noten = new HashMap<>();
6        noten.put("Java", 2);
7        noten.put("Datenbanken", 1);
8
9        int javaNote = noten.get("Java");
10        System.out.println("Note in Java: " + javaNote);
11
12        if (noten.containsKey("Mathe")) {
13            System.out.println("Note vorhanden");
14        } else {
15            System.out.println("Keine Note für Mathe hinterlegt");
16        }
17    }
18}
Z. 5HashMap<String, Integer> — der erste Typ-Parameter ist der Key-Typ, der zweite der Value-Typ.
Z. 6–7.put(key, value) fügt ein Schlüssel-Wert-Paar ein oder überschreibt den Wert, falls der Schlüssel bereits existiert.
Z. 9.get("Java") liefert den zum Schlüssel gehörenden Wert — null, falls der Schlüssel nicht existiert (bei nicht vorhandenem Key auf primitiven Wrapper-Typ würde das Auspacken sogar eine NullPointerException werfen).
Z. 12.containsKey(...) prüft sicher, ob ein Schlüssel existiert, bevor man ihn abruft — vermeidet genau das eben genannte null-Problem.

✅ Checkpoint 30: Datenstrukturen im Überblick

5.5 Sauberer Code & Naming Conventions

Kinder-Erklärung: Sauberer Code ist wie ein aufgeräumtes Kinderzimmer mit beschrifteten Kisten: Jeder, der reinkommt (auch du selbst in drei Monaten!), findet sofort, was er sucht — statt alles unter dem Bett zu suchen.
ElementKonventionBeispiel
Klassen & InterfacesPascalCaseKundenverwaltung, Fliegbar
Variablen & MethodencamelCasekontostand, berechneSumme()
KonstantenUPPER_SNAKE_CASEMAX_VERSUCHE
Packagesdurchgehend kleinde.firma.projekt
Magic Number

Eine fest im Code verstreute Zahl ohne erklärenden Namen, deren Bedeutung sich nicht selbst erschließt, z. B. if (versuch > 3). Besser: als benannte Konstante auslagern, static final int MAX_VERSUCHE = 3; — dann versteht jeder sofort, wofür die 3 steht, und sie muss bei Änderung nur an einer Stelle angepasst werden.

DRY-Prinzip (Don't Repeat Yourself)

Wiederholter Code sollte in eine eigene Methode oder Klasse ausgelagert werden, statt ihn mehrfach zu kopieren. Reduziert Fehlerquellen, da eine Korrektur nur an einer Stelle nötig ist.

Single-Responsibility-Prinzip

Eine Methode oder Klasse sollte genau eine klar abgegrenzte Aufgabe erfüllen und diese gut, statt viele verschiedene Aufgaben schlecht zu vermischen. Erleichtert Testen, Verstehen und Wiederverwenden.

Vorher — unsauber
1public class x {
2    public static void main(String[] args) {
3        int a = 3;
4        if (a > 3) { System.out.println("zu viele"); }
5    }
6}
Nachher — sauber
1public class Loginversuche {
2    private static final int MAX_VERSUCHE = 3;
3
4    public static void main(String[] args) {
5        int aktuelleVersuche = 3;
6        if (aktuelleVersuche > MAX_VERSUCHE) {
7            System.out.println("Zu viele Login-Versuche.");
8        }
9    }
10}

Beide Programme tun exakt dasselbe — aber nur die zweite Version verrät auf einen Blick, was sie tut und warum die Zahl 3 dort steht.

📌 MERKE FÜR DIE IHK-PRÜFUNG Auch wenn Clean Code selten direkt als eigenständige Prüfungsfrage auftaucht, wird sauberer, konventionsgerechter Code in praktischen Prüfungsteilen (z. B. Ganzheitliche Aufgaben) bei FISI/FIAE explizit bewertet — schlechte Namensgebung kann Punkte kosten, selbst wenn das Programm technisch korrekt läuft.

✅ Checkpoint 31: Clean Code angewendet

Teil 5 geschafft — der ganze Kurs steht! 🎉🎉

Werkzeugkiste, Grundlagen, Kontrollstrukturen, Objektorientierung und die fortgeschrittenen IHK-Themen sind vollständig durch, inklusive Pseudocode zu jedem Baustein und 31 Checkpoints. Direkt im Anschluss findest du das Begriffslexikon mit allen Fachbegriffen auf einen Blick. Danach folgt das XXL-Quiz mit 400 Fragen (80 pro Teil).

NACHSCHLAGEWERK

Begriffslexikon

Alle Fachbegriffe aus Teil 1–5 an einem Ort, sortiert nach Kapitel. Tippe oben in die Suche, um gezielt nach einem Begriff zu filtern — praktisch als Wiederholung vor der Prüfung.

TEIL 1 — WERKZEUGKISTE EINRICHTEN

JVM (Java Virtual Machine)
Virtuelle Maschine, die auf dem echten Computer läuft und Bytecode Zeile für Zeile ausführt. Jedes Betriebssystem hat seine eigene JVM, der ausgeführte Bytecode ist aber immer identisch — Grundlage der Plattformunabhängigkeit.
Bytecode
Plattformunabhängige Zwischensprache in .class-Dateien, die aus .java-Quellcode kompiliert und von jeder JVM verstanden wird.
JDK vs. JRE vs. JVM
JVM führt Bytecode aus. JRE = JVM + Standardbibliotheken (zum Ausführen). JDK = JRE + Compiler + Entwicklerwerkzeuge (zum Entwickeln).
Compiler
Übersetzt menschenlesbaren Quellcode in eine andere Form — bei Java in Bytecode. Der Java-Compiler heißt javac.
LTS (Long Term Support)
Java-Version, die besonders lange mit Sicherheitsupdates versorgt wird (z. B. 17, 21) — Standard in Ausbildungsbetrieben.
Umgebungsvariable
Ein benannter, systemweiter Wert, den alle Programme auslesen können, ohne dass er jedes Mal neu eingegeben werden muss.
JAVA_HOME
Umgebungsvariable, die auf den Installationsordner des JDK zeigt. Wird u. a. von Eclipse, Maven und Gradle genutzt.
PATH
Liste von Ordnern, die das Betriebssystem bei Kommandozeilenbefehlen automatisch durchsucht — muss den bin-Ordner des JDK enthalten, damit java/javac überall aufrufbar sind.
IDE (Integrated Development Environment)
Bündelt Editor, Compiler-Anbindung, Debugger und Projektverwaltung in einer Anwendung, z. B. Eclipse.
Workspace
Ordner auf der Festplatte, in dem Eclipse alle Projekte, Einstellungen und Metadaten eines Arbeitsbereichs sammelt.
Package
„Ordner“ für verwandte Java-Klassen, vermeidet Namenskonflikte zwischen gleichnamigen Klassen in unterschiedlichen Packages.

TEIL 2 — JAVA-GRUNDLAGEN

Variable
Benannter Speicherplatz im RAM für einen Wert eines bestimmten Datentyps, dessen Inhalt sich zur Laufzeit ändern kann.
Deklaration
Ankündigung einer neuen Variable (Name + Typ) gegenüber dem Compiler, z. B. int alter; — reserviert Speicher, ohne einen sinnvollen Wert zu setzen.
Initialisierung
Erste Wertzuweisung an eine Variable. Lokale Variablen müssen vor Nutzung zwingend initialisiert werden.
Primitiver Datentyp
Einer der 8 elementaren Java-Typen (byte, short, int, long, float, double, char, boolean), speichert den Wert direkt im Stack.
Type Casting
Implizit (Widening, automatisch, z. B. int→double) oder explizit (Narrowing, erzwungen per (typ), kann Werte abschneiden, z. B. (int) 9.7 → 9).
Referenztyp
Speichert im Stack nur eine Referenz (Adresse) auf ein Objekt im Heap-Speicher — z. B. String, Arrays, eigene Klassen.
String-Pool
Spezieller Speicherbereich für String-Literale; identisch geschriebene Literale zeigen oft auf dasselbe Objekt. new String(...) erzeugt dagegen immer ein neues Heap-Objekt.
null
Spezieller Wert für Referenztypen: „zeigt auf kein Objekt“. Primitive Typen können niemals null sein.
Scanner
Klasse aus java.util zum Einlesen von Eingabequellen wie der Tastatur (System.in).
import
Teilt dem Compiler mit, welche Klasse aus welchem Package genutzt werden soll, ohne den vollen Namen jedes Mal auszuschreiben.
Pseudocode
Informelle, sprachunabhängige Notation zur Beschreibung von Algorithmen ohne exakte Programmiersprachen-Syntax.
Programmablaufplan (PAP)
Genormte grafische Algorithmus-Darstellung nach DIN 66001 mit festen Symbolen (Raute = Entscheidung, Rechteck = Verarbeitung, …).
Struktogramm (Nassi-Shneiderman)
Blockorientierte Alternative zum PAP ohne Pfeile — Ablauf ergibt sich aus der Anordnung von oben nach unten.

TEIL 3 — KONTROLLSTRUKTUREN

Boolescher Ausdruck
Ausdruck, der zu genau true oder false ausgewertet wird — einzig gültige Form einer if-Bedingung in Java.
Block
Mehrere Anweisungen, durch { } zu einer logischen Einheit zusammengefasst.
case
Sprungmarke in einem switch-Block, verglichen mit einem konkreten, konstanten Wert.
break (im switch)
Beendet den switch-Block sofort. Ohne break läuft die Ausführung in den nächsten case-Block durch (Fallthrough).
Fallthrough
Durchfallen in den nächsten case-Block wegen fehlendem break — manchmal absichtlich genutzt, meist ein Fehler.
default
Auffangzweig eines switch-Blocks, vergleichbar mit else bei if.
Schleifenkopf
Die drei Teile einer for-Schleife: Initialisierung; Bedingung; Inkrement/Update.
Zählschleife
Schleife, deren Anzahl an Durchläufen von vornherein feststeht — klassischer Fall für for.
Kopfgesteuerte Schleife
Bedingung wird vor jedem Durchlauf geprüft (while, for) — der Körper kann 0-mal laufen.
Fußgesteuerte Schleife
Bedingung wird nach jedem Durchlauf geprüft (do-while) — der Körper läuft garantiert mindestens 1-mal.
Endlosschleife
Schleife, deren Abbruchbedingung nie false wird — Programm „hängt“.
break (in Schleifen)
Beendet die gesamte umschließende Schleife sofort.
continue
Bricht nur den aktuellen Durchlauf ab und springt zur nächsten Bedingungsprüfung.

TEIL 4 — OBJEKTORIENTIERTE PROGRAMMIERUNG

Klasse
Bauplan, der Attribute und Methoden von Objekten dieses Typs beschreibt.
Objekt (Instanz)
Konkretes, im Heap erzeugtes Exemplar einer Klasse mit eigenen Attributwerten.
Attribut
Variable innerhalb einer Klasse, außerhalb jeder Methode — beschreibt den Zustand eines Objekts.
new-Operator
Erzeugt ein neues Objekt auf dem Heap und ruft dessen Konstruktor auf.
Methode
Benannter, wiederverwendbarer Codeblock innerhalb einer Klasse, der eine Fähigkeit kapselt.
Parameter vs. Argument
Parameter = Platzhalter-Name in der Methodendefinition. Argument = konkreter Wert beim tatsächlichen Aufruf.
Methodensignatur
Name + Anzahl/Typ/Reihenfolge der Parameter (Rückgabetyp zählt nicht dazu) — Basis für Overloading.
Overloading
Mehrere Methoden gleichen Namens mit unterschiedlicher Parameterliste in derselben Klasse — vom Compiler zur Kompilierzeit aufgelöst.
Konstruktor
Spezielle Struktur, die beim new-Aufruf automatisch läuft; trägt den Klassennamen, hat keinen Rückgabetyp.
Standardkonstruktor
Vom Compiler automatisch erzeugter, parameterloser Konstruktor — entfällt, sobald die Klasse einen eigenen Konstruktor definiert.
this
Verweist innerhalb einer Instanzmethode/eines Konstruktors auf das aktuelle Objekt — löst Namensgleichheit mit Parametern auf.
Kapselung (Encapsulation)
Schützt Attribute vor direktem Zugriff (meist private) und macht sie nur über kontrollierte Methoden erreichbar.
Zugriffsmodifizierer
private (nur eigene Klasse), package-private (Package), protected (Package + Unterklassen), public (überall).
Getter & Setter
Kontrolliertes Lesen (Getter) bzw. Schreiben (Setter, ggf. mit Validierung) eines privaten Attributs.
Vererbung (Inheritance)
Eine Unterklasse übernimmt Attribute/Methoden einer Oberklasse via extends — in Java nur Einfachvererbung.
super
Verweist auf die Oberklasse; super(...) ruft deren Konstruktor, super.methode() deren Methode auf.
Overriding & @Override
Unterklasse definiert eine geerbte Methode mit identischer Signatur neu. @Override lässt den Compiler die Korrektheit prüfen.
Polymorphie
Ein Objekt wird über den Oberklassen-/Interface-Typ angesprochen, zur Laufzeit läuft aber die Methode der tatsächlichen Unterklasse (dynamische Bindung).
Abstrakte Klasse
Mit abstract markierte, nicht instanziierbare Klasse als Basis für Unterklassen; kann abstrakte und fertige Methoden mischen.
Abstrakte Methode
Methode ohne Implementierung, nur Signatur — jede konkrete Unterklasse muss sie überschreiben.
Interface
Rein abstrakter Vertrag aus Methodensignaturen ohne eigenen Objektzustand; eine Klasse kann mehrere gleichzeitig implementieren.
implements
Schlüsselwort, mit dem eine Klasse angibt, ein Interface zu erfüllen — beliebig viele gleichzeitig möglich.

TEIL 5 — FORTGESCHRITTENE THEMEN

Array
Datenstruktur fester Länge für mehrere Werte desselben Typs; Referenztyp, liegt im Heap.
Index
Position eines Elements im Array, beginnend bei 0. Ungültiger Zugriff wirft ArrayIndexOutOfBoundsException.
.length
Attribut (ohne Klammern) jedes Arrays für dessen feste Länge — nicht zu verwechseln mit .length() bei Strings.
ArrayList
Dynamisch wachsende Listen-Klasse aus java.util, verwaltet intern ein automatisch vergrößerbares Array.
Generics (<T>)
Legen fest, welchen Datentyp eine Sammlung ausschließlich aufnehmen darf — Typfehler werden zur Kompilierzeit erkannt.
Wrapper-Klassen & Autoboxing
Wrapper-Klassen (Integer, Double, …) kapseln primitive Typen als Objekte; Autoboxing wandelt automatisch zwischen beiden Formen um.
Exception
Objekt, das einen Ausnahmefall zur Laufzeit repräsentiert und den normalen Ablauf unterbricht.
try / catch / finally
try umschließt riskanten Code, catch fängt eine passende Exception ab, finally läuft immer — Exception hin oder her.
Checked vs. Unchecked Exception
Checked muss der Compiler zwingend behandelt sehen (throws oder try-catch). Unchecked (RuntimeException-Familie) ist syntaktisch optional.
throw vs. throws
throw löst eine konkrete Exception aus. throws kündigt in der Signatur eine mögliche Exception nur an.
Stack (LIFO)
Last In, First Out — das zuletzt hinzugefügte Element wird zuerst entfernt.
Queue (FIFO)
First In, First Out — das zuerst hinzugefügte Element wird zuerst entfernt.
HashMap
Schlüssel-Wert-Datenstruktur mit Zugriff über einen eindeutigen Key statt über einen numerischen Index.
Magic Number
Unbenannte Zahl im Code ohne erklärenden Namen — besser als benannte Konstante auslagern.
DRY-Prinzip
„Don't Repeat Yourself“ — wiederholter Code gehört in eine eigene Methode/Klasse ausgelagert.
Single-Responsibility-Prinzip
Eine Methode/Klasse sollte genau eine klar abgegrenzte Aufgabe gut erfüllen.
ABSCHLUSS

Das XXL-Quiz — 400 Fragen (80 pro Teil)

Klicke direkt auf eine Antwort — du bekommst sofort Rückmeldung, ob sie richtig oder falsch war, die korrekte Antwort wird bei einem Fehltipp automatisch grün markiert, und die ausführliche Erklärung klappt automatisch auf (kann jederzeit manuell ein-/ausgeklappt werden). Die richtige Antwort steht bewusst nicht immer an derselben Stelle. Baufortschritt: Teil 1 bis 4 sind mit je 80 Fragen komplett — Teil 5 folgt als letzter Baustein, bis alle 400 stehen.

Frage 1 · Teil 1
Was erzeugt der Befehl javac HalloWelt.java bei erfolgreicher Kompilierung?
Ausführliche Erklärung

Richtig: B. javac übersetzt den Quellcode in plattformunabhängigen Bytecode, gespeichert in einer .class-Datei. Diese enthält noch keine für ein bestimmtes Betriebssystem fertige Maschinensprache — das übernimmt erst die JVM zur Laufzeit.

Frage 2 · Teil 1
Welche Aussage zu "Write once, run anywhere" ist korrekt?
Ausführliche Erklärung

Richtig: C. Der Bytecode selbst ist plattformunabhängig — nur die JVM unterscheidet sich je Betriebssystem, nicht der Bytecode, den sie ausführt.

Frage 3 · Teil 1
Was ist die Kernaufgabe der JVM?
Ausführliche Erklärung

Richtig: C. Die JVM interpretiert (und beschleunigt per JIT-Compiler) den vorher von javac erzeugten Bytecode und führt ihn Zeile für Zeile aus.

Frage 4 · Teil 1
Welche Komponente brauchst du zwingend, wenn du selbst Java-Code schreiben und kompilieren willst?
Ausführliche Erklärung

Richtig: D. Nur das JDK enthält den Compiler javac. Die JRE reicht ausschließlich zum Ausführen fertiger Programme, nicht zum Entwickeln.

Frage 5 · Teil 1
Was unterscheidet JRE und JDK am treffendsten?
Ausführliche Erklärung

Richtig: A. Das JDK ist ein Obermenge der JRE: alles, was die JRE kann, plus die Entwicklerwerkzeuge wie javac.

Frage 6 · Teil 1
Wofür steht LTS bei Java-Versionen?
Ausführliche Erklärung

Richtig: B. LTS-Versionen (z. B. 17, 21) werden besonders lange mit Sicherheitsupdates versorgt und sind deshalb Standard in Ausbildungsbetrieben.

Frage 7 · Teil 1
Ein Kollege tippt java -version ein und bekommt 'java' is not recognized as an internal or external command. Was ist die wahrscheinlichste Ursache?
Ausführliche Erklärung

Richtig: C. Diese Fehlermeldung ist der Klassiker für einen fehlenden oder falschen PATH-Eintrag — nicht für ein fehlendes JDK an sich.

Frage 8 · Teil 1
Wofür wird die Umgebungsvariable JAVA_HOME typischerweise genutzt?
Ausführliche Erklärung

Richtig: B. JAVA_HOME zeigt auf den JDK-Installationsordner selbst; viele Werkzeuge lesen diese Variable gezielt aus, besonders wichtig bei mehreren parallel installierten Java-Versionen.

Frage 9 · Teil 1
Nachdem du JAVA_HOME und PATH unter Windows neu gesetzt hast, testest du sofort im bereits geöffneten Terminal — es funktioniert nicht. Warum?
Ausführliche Erklärung

Richtig: C. Bereits laufende Prozesse (inklusive offener Terminals) übernehmen Änderungen an Umgebungsvariablen nicht automatisch — ein neues Fenster muss geöffnet werden.

Frage 10 · Teil 1
In welcher Datei trägst du unter macOS/Linux typischerweise export JAVA_HOME=... ein?
Ausführliche Erklärung

Richtig: B. Diese Dateien werden beim Start einer neuen Shell-Sitzung eingelesen und sind der Standardort für persönliche Umgebungsvariablen unter macOS/Linux.

Frage 11 · Teil 1
Was ist eine IDE wie Eclipse im Kern?
Ausführliche Erklärung

Richtig: C. Genau das steckt hinter "Integrated Development Environment" — alle wichtigen Entwicklerwerkzeuge an einem Ort.

Frage 12 · Teil 1
Was ist ein Eclipse-Workspace?
Ausführliche Erklärung

Richtig: B. Der Workspace ist ein lokaler Ordner; Eclipse kann verschiedene Workspaces verwalten, arbeitet aber immer nur mit einem gleichzeitig geöffneten.

Frage 13 · Teil 1
Wozu dienen Packages in Java?
Ausführliche Erklärung

Richtig: C. Zwei gleichnamige Klassen können in unterschiedlichen Packages koexistieren, ähnlich wie gleichnamige Dokumente in unterschiedlichen Aktenordnern.

Frage 14 · Teil 1
Fehlersuche: Deine Datei heißt Hallowelt.java (kleines "w"), die Klasse darin ist aber als public class HalloWelt (großes "W") definiert. Was passiert beim Kompilieren?
Ausführliche Erklärung

Richtig: B. Für eine public-Klasse ist exakte Übereinstimmung (inklusive Groß-/Kleinschreibung) zwischen Dateiname und Klassenname eine feste Regel, kein Stilvorschlag.

Frage 15 · Teil 1
Warum ist die main-Methode als static deklariert?
Ausführliche Erklärung

Richtig: B. static bindet die Methode an die Klasse selbst statt an ein Objekt — die JVM kann main so als festen Startpunkt aufrufen, bevor überhaupt irgendein Objekt existiert.

Frage 16 · Teil 1
Was bedeutet void in public static void main(String[] args)?
Ausführliche Erklärung

Richtig: C. void heißt lediglich "kein Rückgabewert" — die Methode kann trotzdem beliebig viel Code enthalten und ausführen.

Frage 17 · Teil 1
Wofür ist der Parameter String[] args der main-Methode gedacht?
Ausführliche Erklärung

Richtig: B. Startet man das Programm z. B. mit java HalloWelt Servus, landet "Servus" als Element in args.

Frage 18 · Teil 1
Was ist der Unterschied zwischen System.out.print(...) und System.out.println(...)?
Ausführliche Erklärung

Richtig: B. Beide geben Text auf der Konsole aus; nur println hängt danach einen Zeilenumbruch an.

Frage 19 · Teil 1
Fehlersuche: Du tippst versehentlich java HalloWelt.java statt java HalloWelt ein (nach erfolgreichem javac). Was ist die Folge (moderne Java-Versionen ignoriert)?
Ausführliche Erklärung

Richtig: C. Der klassische Aufruf verlangt bei java den Klassennamen ohne .java/.class-Endung — die Verwechslung mit dem javac-Aufruf ist ein Standard-Anfängerfehler.

Frage 20 · Teil 1
Praxisszenario: Ein Nutzer hat nur die JRE installiert (kein JDK) und versucht, ein fertiges, bereits kompiliertes HalloWelt.class auszuführen. Funktioniert das?
Ausführliche Erklärung

Richtig: B. Das JDK wird nur zum Entwickeln/Kompilieren gebraucht (javac). Fertigen Bytecode auszuführen ist genau der Zweck der JRE.

Frage 21 · Teil 1
Was macht der JIT-Compiler (Just-In-Time-Compiler) der JVM?
Ausführliche Erklärung

Richtig: C. Der JIT-Compiler beschleunigt die Ausführung, indem er "heiße", oft durchlaufene Codeabschnitte zur Laufzeit gezielt in Maschinencode übersetzt statt sie immer neu zu interpretieren.

Frage 22 · Teil 1
In Eclipse: Welcher Menüpfad prüft, welches JDK als Standard-JRE hinterlegt ist?
Ausführliche Erklärung

Richtig: B. Dort erscheinen alle von Eclipse erkannten JDK/JRE-Installationen, mit Häkchen bei der aktuell verwendeten Standardversion.

Frage 23 · Teil 1
Welche Aussage über Java-Klassennamen ist laut Konvention korrekt?
Ausführliche Erklärung

Richtig: B. PascalCase (jedes Wort groß, keine Unterstriche) ist die Java-Konvention für Klassennamen — im Gegensatz zu camelCase bei Variablen und Methoden.

Frage 24 · Teil 1
Was passiert korrekterweise mit dem Terminal-Befehl echo %PATH% unter Windows?
Ausführliche Erklärung

Richtig: B. Das ist ein einfacher, erster Diagnoseschritt, um zu prüfen, ob der JDK-bin-Ordner überhaupt im PATH enthalten ist.

Frage 25 · Teil 1
Was gilt für Bytecode im Vergleich zu klassischem, plattformspezifischem Maschinencode (wie bei C erzeugt)?
Ausführliche Erklärung

Richtig: C. Genau dieser Unterschied zu z. B. einer .exe-Datei macht die Plattformunabhängigkeit von Java aus.

Frage 26 · Teil 1
Welches Adoptium-Paket solltest du zum Entwickeln herunterladen?
Ausführliche Erklärung

Richtig: C. Nur das JDK enthält den Compiler und die Entwicklerwerkzeuge, die zum Schreiben und Kompilieren eigener Programme notwendig sind.

Frage 27 · Teil 1
Was zeigt der Package Explorer in Eclipse in erster Linie an?
Ausführliche Erklärung

Richtig: B. Der Package Explorer ist die zentrale Navigationsansicht für alle Projekte, Packages und Dateien im aktuellen Workspace.

Frage 28 · Teil 1
Warum meldet Eclipse Fehler oft schon, bevor du das Programm überhaupt ausführst?
Ausführliche Erklärung

Richtig: A. Diese Voreinstellung sorgt für sofortiges Feedback bei Syntaxfehlern, direkt als rote Unterschlängelung im Editor.

Frage 29 · Teil 1
Was ist beim Erstellen einer neuen Klasse in Eclipse über den Dialog "New → Class" zu beachten, wenn du sofort ein lauffähiges Programm willst?
Ausführliche Erklärung

Richtig: A. Dieses Häkchen lässt Eclipse das komplette main-Gerüst direkt mit erzeugen, statt es von Hand abzutippen.

Frage 30 · Teil 1
Zusammenfassend: In welcher Reihenfolge läuft der klassische Kommandozeilen-Workflow ab?
Ausführliche Erklärung

Richtig: B. Erst schreiben (.java), dann kompilieren (javac → .class), dann erst ausführen (java, ohne Endung) — dieser Dreischritt ist die Grundlage jedes Java-Programms.

Frage 31 · Teil 1
Welche Aussage zur Natur der Sprache Java trifft zu?
Ausführliche Erklärung

Richtig: C. Java kombiniert Kompilierung (Quellcode → Bytecode) und Interpretation (Bytecode → Ausführung durch die JVM), zusätzlich beschleunigt durch den JIT-Compiler.

Frage 32 · Teil 1
Was passiert, wenn ein Java-Programm auf einem Rechner ohne installierte JVM gestartet werden soll?
Ausführliche Erklärung

Richtig: A. Ohne JVM kann kein Bytecode ausgeführt werden — die JVM ist die zwingende Laufzeitumgebung.

Frage 33 · Teil 1
Welche Datei-Endung trägt für Menschen lesbarer Java-Quellcode?
Ausführliche Erklärung

Richtig: D. .java-Dateien enthalten den Quellcode; .class entsteht erst danach durch Kompilierung.

Frage 34 · Teil 1
Warum kann dieselbe .class-Datei unverändert auf Windows, macOS und Linux laufen?
Ausführliche Erklärung

Richtig: B. Der Bytecode selbst bleibt gleich, nur die JVM-Implementierung unterscheidet sich je Plattform — das ist der Kern der Plattformunabhängigkeit.

Frage 35 · Teil 1
Wie nennt man den Vorgang, bei dem häufig ausgeführter Bytecode zusätzlich zur Laufzeit in Maschinencode übersetzt wird?
Ausführliche Erklärung

Richtig: C. Der JIT-Compiler übersetzt "heiße", oft durchlaufene Bytecode-Abschnitte zur Laufzeit gezielt in schnelleren Maschinencode.

Frage 36 · Teil 1
Warum wird in der Ausbildung meist eine LTS-Version statt der allerneuesten Java-Version empfohlen?
Ausführliche Erklärung

Richtig: A. LTS-Versionen werden besonders lange gepflegt, was für Ausbildungsbetriebe und produktive Projekte Planungssicherheit gibt.

Frage 37 · Teil 1
Was ist Eclipse Temurin?
Ausführliche Erklärung

Richtig: D. Temurin ist die von der Eclipse Foundation gepflegte, freie JDK-Distribution und in Ausbildungsbetrieben weit verbreitet.

Frage 38 · Teil 1
Welcher Befehl installiert unter Ubuntu/Debian Temurin per Paketmanager (nach Einbindung der Paketquelle)?
Ausführliche Erklärung

Richtig: B. apt install ist der Standardweg, um Pakete unter Debian-basierten Linux-Distributionen zu installieren.

Frage 39 · Teil 1
Woran erkennst du zuverlässig, dass wirklich ein vollständiges JDK (nicht nur eine JRE) installiert wurde?
Ausführliche Erklärung

Richtig: C. Da javac ausschließlich Teil des JDK ist, beweist eine erfolgreiche Ausgabe von javac -version, dass wirklich ein JDK vorliegt.

Frage 40 · Teil 1
Welche Option im Windows-JDK-Installer solltest du aktiviert lassen, damit PATH/JAVA_HOME automatisch gesetzt werden?
Ausführliche Erklärung

Richtig: B. Diese Häkchen lassen den Installer die Umgebungsvariablen selbstständig konfigurieren, statt sie später von Hand nachzutragen.

Frage 41 · Teil 1
Auf welcher Webseite lädst du Eclipse Temurin offiziell herunter?
Ausführliche Erklärung

Richtig: D. adoptium.net ist die offizielle Bezugsquelle für Eclipse Temurin-Builds.

Frage 42 · Teil 1
Warum reicht der Download des "JRE"-Installers NICHT aus, wenn du Java-Entwickler werden willst?
Ausführliche Erklärung

Richtig: C. Ohne Compiler kannst du zwar fertige Programme ausführen, aber keinen eigenen Code kompilieren.

Frage 43 · Teil 1
Welche Datei-Endung hat der Windows-JDK-Installer typischerweise?
Ausführliche Erklärung

Richtig: C. .msi ist das Standard-Installer-Format für Windows; .dmg gehört zu macOS, .deb zu Debian/Ubuntu, .apk zu Android.

Frage 44 · Teil 1
Unter welchem Pfad-Muster registriert macOS ein installiertes JDK typischerweise?
Ausführliche Erklärung

Richtig: A. Dieser Systemordner ist der macOS-Standardspeicherort für installierte Java-Versionen.

Frage 45 · Teil 1
Was durchsucht das Betriebssystem, wenn du in der Kommandozeile nur "java" ohne vollen Pfad eintippst?
Ausführliche Erklärung

Richtig: D. Ohne vollen Pfad sucht das Betriebssystem in genau den im PATH hinterlegten Ordnern nach einem passenden ausführbaren Programm.

Frage 46 · Teil 1
Wie lässt sich der Unterschied zwischen JAVA_HOME und PATH am treffendsten zusammenfassen?
Ausführliche Erklärung

Richtig: A. JAVA_HOME ist ein einzelner Verweis auf die Installation, PATH eine ganze Liste durchsuchter Verzeichnisse.

Frage 47 · Teil 1
Welcher Eintrag gehört typischerweise in den Windows-PATH, damit java/javac von überall aus funktionieren?
Ausführliche Erklärung

Richtig: D. Erst der bin-Unterordner enthält die tatsächlichen ausführbaren Programme java.exe und javac.exe.

Frage 48 · Teil 1
Wie lädst du unter macOS/Linux eine geänderte ~/.zshrc sofort neu, ohne das Terminal zu schließen?
Ausführliche Erklärung

Richtig: D. source führt die Konfigurationsdatei erneut in der aktuellen Shell-Sitzung aus, ohne neu zu starten.

Frage 49 · Teil 1
Welcher Befehl zeigt unter macOS/Linux den aktuellen Inhalt der PATH-Variable an?
Ausführliche Erklärung

Richtig: A. echo $PATH gibt den kompletten, aktuell geltenden Inhalt der Umgebungsvariable aus.

Frage 50 · Teil 1
Ein Azubi setzt PATH korrekt, testet aber im selben, bereits offenen Terminal weiter erfolglos. Was ist der richtige nächste Schritt?
Ausführliche Erklärung

Richtig: B. Bereits laufende Terminal-Sitzungen lesen Umgebungsvariablen nur bei ihrem eigenen Start ein.

Frage 51 · Teil 1
Warum fragen Werkzeuge wie Maven oder Gradle gezielt JAVA_HOME ab, statt sich nur auf PATH zu verlassen?
Ausführliche Erklärung

Richtig: D. Gerade in professionellen Umgebungen mit mehreren JDK-Versionen ist JAVA_HOME der eindeutige, gezielte Verweis.

Frage 52 · Teil 1
Welche Fehlermeldung deutet typischerweise auf ein PATH-Problem hin?
Ausführliche Erklärung

Richtig: C. Diese Meldung ist der klassische Hinweis, dass der Befehl im PATH nicht gefunden werden konnte — die anderen drei sind typische Laufzeitfehler innerhalb eines laufenden Java-Programms.

Frage 53 · Teil 1
Welches Eclipse-Paket ist für den Einstieg in reine Java-Entwicklung am passendsten?
Ausführliche Erklärung

Richtig: A. Dieses Paket ist schlank genug für den Einstieg, ohne unnötige Enterprise-/Web-Werkzeuge mitzuschleppen.

Frage 54 · Teil 1
Was tust du, wenn beim ersten Eclipse-Start der Dialog "Open Associated Perspective?" erscheint?
Ausführliche Erklärung

Richtig: B. Die "Java Perspective" bündelt die für die Entwicklung nötigen Ansichten wie Package Explorer und Konsole.

Frage 55 · Teil 1
Wo prüfst/änderst du in Eclipse, welches JDK als Standard verwendet wird?
Ausführliche Erklärung

Richtig: C. Dort listet Eclipse alle erkannten JDK/JRE-Installationen mit Häkchen bei der Standardversion.

Frage 56 · Teil 1
Was passiert im Hintergrund, sobald "Build automatically" in Eclipse aktiv ist und du eine Datei speicherst?
Ausführliche Erklärung

Richtig: A. Genau dieses automatische Hintergrund-Kompilieren sorgt dafür, dass Fehler sofort als rote Unterschlängelung sichtbar werden.

Frage 57 · Teil 1
Wie nennt sich die Eclipse-Seitenleiste, die Projekte, Packages und Klassen als Baumstruktur zeigt?
Ausführliche Erklärung

Richtig: D. Der Package Explorer ist die zentrale Navigationsansicht für alle Projekte im aktuellen Workspace.

Frage 58 · Teil 1
Kann ein Eclipse-Workspace mehrere unabhängige Java-Projekte gleichzeitig enthalten?
Ausführliche Erklärung

Richtig: B. Ein Workspace ist ein Container für beliebig viele Projekte — praktisch, um mehrere Übungen zu bündeln.

Frage 59 · Teil 1
Was ist im Package Explorer der Standard-Quellordner für neue Klassen?
Ausführliche Erklärung

Richtig: D. src ("source") ist die Standardkonvention für den Quellcode-Ordner eines Java-Projekts.

Frage 60 · Teil 1
Welche Regel gilt zwingend für den Namen einer public-Klasse und ihre Datei?
Ausführliche Erklärung

Richtig: B. Diese Übereinstimmung ist eine feste Java-Sprachregel, kein Stilvorschlag — sonst gibt es einen Kompilierfehler.

Frage 61 · Teil 1
Welche der folgenden Zeichenfolgen ist als gültiger Klassenname in Java erlaubt?
Ausführliche Erklärung

Richtig: D. Bezeichner dürfen nicht mit einer Ziffer beginnen (A), keine Bindestriche enthalten (B), und reservierte Schlüsselwörter wie class sind verboten (C).

Frage 62 · Teil 1
Was ist das "Default Package" in Java/Eclipse?
Ausführliche Erklärung

Richtig: C. Ohne eigene package-Deklaration landet eine Klasse automatisch im namenlosen Default Package — für größere Projekte unüblich, für Übungszwecke aber unproblematisch.

Frage 63 · Teil 1
Wie viele öffentliche (public) Top-Level-Klassen darf eine einzelne .java-Datei maximal enthalten?
Ausführliche Erklärung

Richtig: C. Pro Datei ist maximal eine public-Klasse erlaubt, und ihr Name muss dem Dateinamen entsprechen.

Frage 64 · Teil 1
Was passiert, wenn du in HalloWelt.java das schließende } der main-Methode vergisst?
Ausführliche Erklärung

Richtig: D. Jede öffnende geschweifte Klammer benötigt zwingend ihr schließendes Gegenstück, sonst bricht javac mit einem Syntaxfehler ab.

Frage 65 · Teil 1
Welches Zeichen muss in Java grundsätzlich am Ende jeder einfachen Anweisung stehen?
Ausführliche Erklärung

Richtig: D. Das Semikolon markiert in Java das Ende einer einfachen Anweisung — ein häufig vergessenes Zeichen bei Einsteigern.

Frage 66 · Teil 1
Ist Java case-sensitive (unterscheidet Groß-/Kleinschreibung bei Bezeichnern)?
Ausführliche Erklärung

Richtig: B. Java unterscheidet konsequent zwischen Groß- und Kleinschreibung — bei allen Bezeichnern, nicht nur bei Klassennamen.

Frage 67 · Teil 1
Welche Ausgabe erzeugt System.out.println("A"); System.out.println("B");?
Ausführliche Erklärung

Richtig: D. println hängt nach jeder Ausgabe einen Zeilenumbruch an, deshalb erscheinen beide Werte untereinander.

Frage 68 · Teil 1
Was bewirkt es, wenn du beim Anlegen einer neuen Klasse in Eclipse das Häkchen bei "public static void main" NICHT setzt?
Ausführliche Erklärung

Richtig: C. Das Häkchen ist nur eine Komfortfunktion, die dir das manuelle Abtippen des main-Gerüsts erspart.

Frage 69 · Teil 1
Welcher Befehl startet die JVM und führt eine bereits kompilierte Klasse aus?
Ausführliche Erklärung

Richtig: D. java startet die JVM und übergibt ihr den Klassennamen ohne jede Datei-Endung.

Frage 70 · Teil 1
Was passiert, wenn du java HalloWelt ausführst, ohne vorher javac HalloWelt.java ausgeführt zu haben und noch keine .class-Datei existiert?
Ausführliche Erklärung

Richtig: B. Der java-Befehl kompiliert klassisch selbst nicht — er benötigt zwingend eine bereits vorhandene .class-Datei.

Frage 71 · Teil 1
Welcher Menüpfad startet in Eclipse ein Java-Programm klassisch per Rechtsklick?
Ausführliche Erklärung

Richtig: C. Diese Option kompiliert (falls nötig) und startet die ausgewählte Klasse als Standard-Java-Anwendung.

Frage 72 · Teil 1
Wo erscheint in Eclipse die Textausgabe eines laufenden Programms?
Ausführliche Erklärung

Richtig: D. Die Console-View unten in Eclipse zeigt sämtliche System.out-Ausgaben eines laufenden Programms.

Frage 73 · Teil 1
Welche Aussage zum Zusammenspiel von javac und java ist korrekt?
Ausführliche Erklärung

Richtig: B. Die beiden Befehle decken die zwei getrennten Schritte Kompilierung und Ausführung ab.

Frage 74 · Teil 1
Warum entsteht KEINE .class-Datei, wenn dein Quellcode einen Syntaxfehler enthält?
Ausführliche Erklärung

Richtig: B. Der Compiler erzeugt bewusst keinen halbfertigen, potenziell fehlerhaften Bytecode — lieber ein klarer Kompilierfehler als ein kaputtes Programm.

Frage 75 · Teil 1
HalloWelt.java liegt im Ordner C:\projekte\test. Wo muss dein Terminal stehen, damit javac HalloWelt.java ohne vollen Pfad funktioniert?
Ausführliche Erklärung

Richtig: C. Ohne vollen Pfadangabe sucht javac die Datei relativ zum aktuellen Arbeitsverzeichnis des Terminals.

Frage 76 · Teil 1
Was beweist eine erfolgreiche Ausführung von sowohl java -version ALS AUCH javac -version?
Ausführliche Erklärung

Richtig: A. Da javac nur im JDK enthalten ist, beweist seine erfolgreiche Ausgabe eine vollständige, korrekte Installation.

Frage 77 · Teil 1
Welche Aussage zum javac-Aufruf ist korrekt?
Ausführliche Erklärung

Richtig: A. Im Gegensatz zu java erwartet javac den vollständigen Dateinamen inklusive .java-Endung.

Frage 78 · Teil 1
Welche Aussage zum java-Aufruf ist korrekt?
Ausführliche Erklärung

Richtig: D. Anders als javac ruft man bei java den reinen Klassennamen auf, ganz ohne Datei-Endung.

Frage 79 · Teil 1
Wie lautet die korrekte Reihenfolge des kompletten Java-Workflows von Quellcode bis Ausgabe?
Ausführliche Erklärung

Richtig: C. Erst schreiben, dann kompilieren, dann erst ausführen — dieser feste Dreischritt ist die Grundlage jedes Java-Programms.

Frage 80 · Teil 1
Zum Abschluss von Teil 1: Welche drei Kernkomponenten hast du in diesem Teil erfolgreich eingerichtet?
Ausführliche Erklärung

Richtig: C. Genau diese drei Bausteine bilden zusammen die komplette Werkzeugkiste für die weitere Java-Entwicklung.

Frage 1 · Teil 2
Was ist eine Variable am treffendsten beschrieben?
Ausführliche Erklärung

Richtig: A. Eine Variable ist ein benannter Speicherplatz für einen veränderlichen Wert — genau das unterscheidet sie von einer Konstante.

Frage 2 · Teil 2
Was passiert bei int alter; (nur Deklaration, keine Zuweisung)?
Ausführliche Erklärung

Richtig: C. Die Deklaration allein reserviert nur Speicher; ein sinnvoller Wert muss erst per Zuweisung folgen.

Frage 3 · Teil 2
Welche Regel gilt für lokale Variablen in einer Methode bezüglich ihres Startwerts?
Ausführliche Erklärung

Richtig: D. Anders als Attribute haben lokale Variablen keinen automatischen Default-Wert — der Compiler verlangt eine explizite Initialisierung vor Gebrauch.

Frage 4 · Teil 2
Welcher Bezeichner folgt korrekt der camelCase-Konvention für Variablen?
Ausführliche Erklärung

Richtig: B. camelCase beginnt klein, jedes weitere Wort startet groß, ohne Unterstriche oder Bindestriche.

Frage 5 · Teil 2
Welcher Bezeichner ist als Variablenname VERBOTEN, weil er ein reserviertes Schlüsselwort ist?
Ausführliche Erklärung

Richtig: D. class ist ein Java-Schlüsselwort und deshalb als Bezeichner tabu — kleingeschriebene Varianten wie "klasse" sind dagegen erlaubt.

Frage 6 · Teil 2
Was bewirkt int schuljahr = 11; in einem einzigen Schritt?
Ausführliche Erklärung

Richtig: B. Diese Kurzschreibweise ist der übliche Praxisweg: Typ, Name und Startwert in einer Zeile.

Frage 7 · Teil 2
Darf ein Variablenname mit einer Ziffer beginnen?
Ausführliche Erklärung

Richtig: A. Java-Bezeichner müssen mit einem Buchstaben, Unterstrich oder Dollarzeichen beginnen — niemals mit einer Ziffer.

Frage 8 · Teil 2
Was bedeutet das = in alter = 16; in Java?
Ausführliche Erklärung

Richtig: C. Für Gleichheitsvergleiche gibt es das eigene Zeichen == — Verwechslung ist ein Klassiker.

Frage 9 · Teil 2
Welche Zeichen sind zusätzlich zu Buchstaben und Ziffern in Java-Bezeichnern erlaubt?
Ausführliche Erklärung

Richtig: B. Nur Buchstaben, Ziffern (nicht am Anfang), Unterstrich und Dollarzeichen sind in Bezeichnern zulässig.

Frage 10 · Teil 2
Wie lautet die Ausgabe von: int x = 5; System.out.println("Wert: " + x);?
Ausführliche Erklärung

Richtig: D. Der +-Operator verkettet den Text mit dem aktuellen Wert von x zu einem neuen String.

Frage 11 · Teil 2
Was passiert, wenn du versuchst, eine lokale Variable zu nutzen, bevor sie initialisiert wurde?
Ausführliche Erklärung

Richtig: C. Der Compiler verweigert die Kompilierung, statt mit einem unklaren Wert weiterzuarbeiten — ein Sicherheitsmechanismus von Java.

Frage 12 · Teil 2
Warum kombinieren Java-Entwickler Deklaration und Initialisierung meist in einer Zeile?
Ausführliche Erklärung

Richtig: A. Getrennte Deklaration ist technisch erlaubt, aber die kombinierte Schreibweise ist übersichtlicher und fehlerärmer.

Frage 13 · Teil 2
Wie viele primitive Datentypen gibt es fest in Java?
Ausführliche Erklärung

Richtig: C. byte, short, int, long, float, double, char und boolean — genau acht Stück.

Frage 14 · Teil 2
Welcher Datentyp hat die größte Speichergröße?
Ausführliche Erklärung

Richtig: A. long belegt 64 Bit und deckt damit den größten Wertebereich der ganzzahligen Typen ab.

Frage 15 · Teil 2
Welcher Datentyp speichert Wahrheitswerte?
Ausführliche Erklärung

Richtig: B. boolean kennt ausschließlich die zwei Werte true und false.

Frage 16 · Teil 2
Was ist der Standardwert eines nicht initialisierten int-Attributs (Instanzvariable, nicht lokal)?
Ausführliche Erklärung

Richtig: D. Anders als lokale Variablen bekommen Attribute automatisch einen Default-Wert — bei int ist das 0.

Frage 17 · Teil 2
Welches Suffix benötigt ein float-Literal zwingend?
Ausführliche Erklärung

Richtig: A. Ohne f interpretiert der Compiler Kommazahlen-Literale standardmäßig als double.

Frage 18 · Teil 2
Was ergibt (int) 9.99 in Java?
Ausführliche Erklärung

Richtig: C. Ein Narrowing-Cast von double zu int schneidet Nachkommastellen ab, statt zu runden.

Frage 19 · Teil 2
Was beschreibt "implizites Casting" (Widening)?
Ausführliche Erklärung

Richtig: D. Widening passiert automatisch, weil der Zieltyp den Wertebereich des Ausgangstyps vollständig abdeckt.

Frage 20 · Teil 2
Welche Umwandlung erfordert zwingend ein explizites Cast?
Ausführliche Erklärung

Richtig: B. Nur der Weg vom größeren zum kleineren Typ (hier möglicher Datenverlust) verlangt ein explizites Narrowing-Cast.

Frage 21 · Teil 2
Welches char-Literal ist syntaktisch korrekt?
Ausführliche Erklärung

Richtig: D. char-Literale stehen in einfachen Anführungszeichen — doppelte Anführungszeichen sind für String reserviert.

Frage 22 · Teil 2
Welcher Wertebereich passt zu byte?
Ausführliche Erklärung

Richtig: B. byte belegt nur 8 Bit, was genau diesen kleinen, vorzeichenbehafteten Bereich ergibt.

Frage 23 · Teil 2
Ein Programmierer möchte eine Kommazahl mit rund 15 Nachkommastellen Genauigkeit speichern. Welcher Typ passt am besten?
Ausführliche Erklärung

Richtig: A. double bietet mit 64 Bit deutlich mehr Genauigkeit als float (32 Bit, ~7 Nachkommastellen).

Frage 24 · Teil 2
Was passiert bei float f = 3.5; (ohne Suffix)?
Ausführliche Erklärung

Richtig: C. Ein double-Wert passt ohne explizites Cast nicht automatisch in eine float-Variable — Narrowing ist hier nötig.

Frage 25 · Teil 2
Welche Aussage zu primitiven Typen ist korrekt?
Ausführliche Erklärung

Richtig: B. Genau das unterscheidet primitive Typen grundlegend von Referenztypen wie String.

Frage 26 · Teil 2
Wofür wird explizites Narrowing-Casting typischerweise genutzt?
Ausführliche Erklärung

Richtig: D. Der Programmierer muss diesen potenziell verlustbehafteten Schritt bewusst mit (typ) erzwingen.

Frage 27 · Teil 2
Welchen Standardwert hat ein nicht initialisiertes boolean-Attribut?
Ausführliche Erklärung

Richtig: C. Der Default-Wert für boolean-Attribute ist stets false.

Frage 28 · Teil 2
Was passiert grob bei: int zahl = 130; byte b = (byte) zahl;?
Ausführliche Erklärung

Richtig: A. 130 liegt außerhalb des byte-Bereichs (−128 bis 127) — ein explizites Cast erzwingt die Umwandlung trotzdem, mit einem "übergelaufenen" Ergebnis statt einem Fehler.

Frage 29 · Teil 2
Wo speichert eine Referenzvariable wie String name eigentlich ihren "Wert"?
Ausführliche Erklärung

Richtig: C. Der eigentliche String-Inhalt liegt als Objekt im Heap; die Variable selbst enthält nur den Verweis darauf.

Frage 30 · Teil 2
Welche Aussage zum String-Pool ist korrekt?
Ausführliche Erklärung

Richtig: A. new String(...) umgeht bewusst den Pool und erzeugt immer ein frisches, separates Objekt.

Frage 31 · Teil 2
Wie vergleicht man den INHALT zweier Strings korrekt?
Ausführliche Erklärung

Richtig: B. .equals() vergleicht den tatsächlichen Zeicheninhalt, unabhängig davon, ob es sich um dasselbe Objekt handelt.

Frage 32 · Teil 2
Was passiert bei String s = null; s.equals("x");?
Ausführliche Erklärung

Richtig: D. Ein Methodenaufruf auf einer null-Referenz führt immer zur berüchtigten NullPointerException.

Frage 33 · Teil 2
Kann eine int-Variable den Wert null annehmen?
Ausführliche Erklärung

Richtig: A. null ist ausschließlich für Referenztypen definiert — int hat immer einen konkreten Zahlenwert.

Frage 34 · Teil 2
Welche der folgenden Variablen ist ein Referenztyp?
Ausführliche Erklärung

Richtig: C. String ist eine Klasse und damit ein Referenztyp — die anderen drei sind primitiv.

Frage 35 · Teil 2
Was bedeutet es, wenn zwei Referenzvariablen "auf dasselbe Objekt zeigen"?
Ausführliche Erklärung

Richtig: D. Beide Variablen sind nur zwei verschiedene "Wegweiser" zum selben tatsächlichen Objekt.

Frage 36 · Teil 2
Warum liefert == bei zwei inhaltlich identischen, aber mit new String(...) erzeugten Strings oft false?
Ausführliche Erklärung

Richtig: B. Zwei separat mit new erzeugte Objekte liegen an unterschiedlichen Heap-Adressen, selbst bei gleichem Inhalt.

Frage 37 · Teil 2
Was speichert eine primitive Variable im Gegensatz zu einer Referenzvariable?
Ausführliche Erklärung

Richtig: D. Primitive Variablen enthalten den Wert direkt, ohne den Umweg über eine Heap-Referenz.

Frage 38 · Teil 2
Fehlersuche: String a = "Hallo"; String b = "Hallo"; if (a == b) { ... } — was ist hier zu beachten?
Ausführliche Erklärung

Richtig: B. Beide Literale kommen zufällig aus demselben String-Pool-Objekt — verlässlich ist das aber nicht, deshalb gilt .equals() als Standard.

Frage 39 · Teil 2
Was ist der Hauptunterschied zwischen primitiven und Referenztypen bezüglich des Speicherorts?
Ausführliche Erklärung

Richtig: A. Dieses Zwei-Speicherbereiche-Modell (Stack für Werte/Referenzen, Heap für Objekte) ist grundlegend für das Verständnis von Java.

Frage 40 · Teil 2
Welche Aussage zu null ist korrekt?
Ausführliche Erklärung

Richtig: C. null ist der "leere Wegweiser" für Referenztypen — kein Zahlenwert und kein boolean-Äquivalent.

Frage 41 · Teil 2
Was ergibt 7 / 2 in Java, wenn beide Operanden vom Typ int sind?
Ausführliche Erklärung

Richtig: B. Ganzzahlige Division schneidet den Nachkommaanteil komplett ab, ohne zu runden.

Frage 42 · Teil 2
Was ergibt 7 % 2?
Ausführliche Erklärung

Richtig: D. 7 geteilt durch 2 ergibt 3 Rest 1 — der Modulo-Operator liefert genau diesen Rest.

Frage 43 · Teil 2
Wie erhältst du bei 7 / 2 ein Ergebnis mit Nachkommastellen?
Ausführliche Erklärung

Richtig: C. Sobald ein Operand eine Kommazahl ist, wird die gesamte Division als Gleitkomma-Division ausgeführt.

Frage 44 · Teil 2
Was macht der Operator += in x += 5;?
Ausführliche Erklärung

Richtig: A. Kombinierte Zuweisungsoperatoren wie += sind eine Kurzschreibweise für "Wert nehmen, verändern, zurückschreiben".

Frage 45 · Teil 2
Welcher Operator prüft auf Ungleichheit?
Ausführliche Erklärung

Richtig: C. != ist in Java der Operator für "ungleich" — <> gibt es in Java nicht.

Frage 46 · Teil 2
Was gibt der Ausdruck (5 > 3) && (2 > 4) zurück?
Ausführliche Erklärung

Richtig: A. && verlangt, dass BEIDE Teilausdrücke wahr sind — da 2 > 4 falsch ist, ist das Gesamtergebnis false.

Frage 47 · Teil 2
Was gibt der Ausdruck (5 > 3) || (2 > 4) zurück?
Ausführliche Erklärung

Richtig: B. || reicht ein einziger wahrer Teilausdruck — 5 > 3 ist wahr, also ist das Gesamtergebnis true.

Frage 48 · Teil 2
Was bewirkt der Operator ! vor einem boolean-Ausdruck?
Ausführliche Erklärung

Richtig: D. !true wird zu false und umgekehrt — der logische Negationsoperator.

Frage 49 · Teil 2
Was macht a++ in einer eigenständigen Zeile wie a++;?
Ausführliche Erklärung

Richtig: A. Der Inkrement-Operator erhöht den Wert der Variable um genau 1.

Frage 50 · Teil 2
Was ist "Kurzschlussauswertung" (Short-Circuit) bei &&?
Ausführliche Erklärung

Richtig: C. Da das Gesamtergebnis bei linkem false schon feststeht, spart Java sich die Auswertung der rechten Seite — nützlich, um z. B. NullPointerExceptions zu vermeiden.

Frage 51 · Teil 2
Welcher Operator hat in a + b * c laut Punkt-vor-Strich-Regel Vorrang?
Ausführliche Erklärung

Richtig: D. Wie in der Mathematik gilt auch in Java Punkt-vor-Strich — b * c wird zuerst berechnet.

Frage 52 · Teil 2
Wie liest man 10 % 3 korrekt?
Ausführliche Erklärung

Richtig: B. 10 = 3×3 + 1, also bleibt als Rest genau 1.

Frage 53 · Teil 2
Welcher Ausdruck prüft korrekt, ob eine Person mindestens 18 Jahre alt ist?
Ausführliche Erklärung

Richtig: D. >= ist der korrekte Vergleichsoperator für "größer oder gleich" — die anderen Schreibweisen existieren in Java so nicht.

Frage 54 · Teil 2
Warum sind Kombinationen wie a += a++; in der Praxis zu vermeiden, auch wenn sie syntaktisch gültig sind?
Ausführliche Erklärung

Richtig: B. Solche Kombinationen sind ein Paradebeispiel für unnötig kryptischen Code — klare, getrennte Anweisungen sind lesbarer.

Frage 55 · Teil 2
Welche Aussage zum Modulo-Operator % ist korrekt?
Ausführliche Erklärung

Richtig: A. Zum Beispiel ist zahl % 2 == 0 die Standardprüfung, ob eine Zahl gerade ist.

Frage 56 · Teil 2
Was gibt folgender Ausdruck zurück: 10 == 10.0?
Ausführliche Erklärung

Richtig: C. Bei gemischten numerischen Vergleichen wandelt Java den kleineren Typ automatisch (implizites Widening) um, bevor verglichen wird.

Frage 57 · Teil 2
Welches Package muss importiert werden, um Scanner zu nutzen?
Ausführliche Erklärung

Richtig: B. Scanner gehört zum Utility-Package java.util.

Frage 58 · Teil 2
Wie erzeugt man ein Scanner-Objekt, das von der Tastatur liest?
Ausführliche Erklärung

Richtig: D. System.in ist der Standard-Eingabestrom, an den der Scanner gekoppelt wird.

Frage 59 · Teil 2
Welche Scanner-Methode liest eine komplette Textzeile als String ein?
Ausführliche Erklärung

Richtig: C. nextLine() liest bis zum nächsten Zeilenumbruch, egal wie viele Wörter oder Leerzeichen enthalten sind.

Frage 60 · Teil 2
Was ist die berühmte "Scanner-Falle" bei aufeinanderfolgenden nextInt() und nextLine()?
Ausführliche Erklärung

Richtig: A. nextInt() lässt den Zeilenumbruch nach der Zahl im Puffer stehen — das folgende nextLine() "isst" nur diesen Rest und wirkt übersprungen.

Frage 61 · Teil 2
Wie löst man die Scanner-Falle typischerweise?
Ausführliche Erklärung

Richtig: C. Dieses zusätzliche, ungenutzte nextLine() "schluckt" den übrig gebliebenen Zeilenumbruch, bevor die eigentliche Texteingabe folgt.

Frage 62 · Teil 2
Wofür wird eingabe.close() am Ende eines Scanner-Programms verwendet?
Ausführliche Erklärung

Richtig: A. Guter Stil, sobald keine weitere Eingabe mehr folgt — vergleichbar mit dem Schließen einer geöffneten Datei.

Frage 63 · Teil 2
Was ist der Unterschied zwischen System.out.print(...) und System.out.println(...) bei einer Eingabeaufforderung wie "Wie heißt du? "?
Ausführliche Erklärung

Richtig: B. Genau deshalb wird für Eingabeaufforderungen meist print statt println verwendet.

Frage 64 · Teil 2
Welche Exception kann bei eingabe.nextInt() auftreten, wenn der Nutzer Buchstaben statt einer Zahl eingibt?
Ausführliche Erklärung

Richtig: D. nextInt() erwartet eine gültige Ganzzahl — passt die Eingabe nicht, wirft es eine InputMismatchException.

Frage 65 · Teil 2
Wozu dient die import-Zeile am Kopf einer Java-Datei?
Ausführliche Erklärung

Richtig: A. Ohne import java.util.Scanner; müsste man jedes Mal java.util.Scanner voll ausschreiben.

Frage 66 · Teil 2
In welcher Reihenfolge liest man sinnvoll zuerst den Namen (Text), dann das Alter (Zahl) ein?
Ausführliche Erklärung

Richtig: C. So bleibt die Reihenfolge logisch nachvollziehbar — Achtung ist trotzdem beim Wechsel zwischen nextInt() und nextLine() geboten (siehe Scanner-Falle).

Frage 67 · Teil 2
Was liefert eingabe.nextDouble() zurück?
Ausführliche Erklärung

Richtig: D. Der Methodenname verrät bereits den Rückgabetyp — analog zu nextInt() für int.

Frage 68 · Teil 2
Welche Aussage zu Scanner ist korrekt?
Ausführliche Erklärung

Richtig: B. Scanner kann neben der Tastatur z. B. auch Dateien oder Strings als Eingabequelle einlesen.

Frage 69 · Teil 2
Fehlersuche: Ein Programm bleibt nach dem Start einfach "hängen", ohne etwas auszugeben. Was ist eine wahrscheinliche Ursache im Scanner-Kontext?
Ausführliche Erklärung

Richtig: D. Solange keine Eingabe erfolgt, blockiert der Scanner-Aufruf das Programm an genau dieser Stelle — kein Fehler, sondern erwartetes Warten.

Frage 70 · Teil 2
Was passiert, wenn du eingabe.nextInt() aufrufst und der Nutzer stattdessen Enter ohne Eingabe drückt?
Ausführliche Erklärung

Richtig: B. nextInt() blockiert weiter, bis eine gültige Ganzzahl im Eingabestrom vorliegt.

Frage 71 · Teil 2
Was ist der Hauptzweck von Pseudocode?
Ausführliche Erklärung

Richtig: A. Pseudocode dient der klaren Beschreibung von Programmlogik, unabhängig von konkreter Syntax irgendeiner Sprache.

Frage 72 · Teil 2
Wofür steht die Abkürzung PAP?
Ausführliche Erklärung

Richtig: C. Der PAP ist eine genormte, grafische Darstellungsform von Algorithmen.

Frage 73 · Teil 2
Welche Norm regelt die Symbole eines Programmablaufplans?
Ausführliche Erklärung

Richtig: B. DIN 66001 legt die genormten Symbole (Raute, Rechteck, Parallelogramm, …) für Programmablaufpläne fest.

Frage 74 · Teil 2
Welches PAP-Symbol steht typischerweise für eine Entscheidung/Verzweigung?
Ausführliche Erklärung

Richtig: D. Die Raute markiert im PAP eine Verzweigung mit Ja/Nein-Ausgängen; Rechteck steht für Verarbeitung, Parallelogramm für Ein-/Ausgabe.

Frage 75 · Teil 2
Was ist ein Struktogramm (Nassi-Shneiderman-Diagramm)?
Ausführliche Erklärung

Richtig: C. Struktogramme verzichten bewusst auf Pfeile und sind dadurch besonders übersichtlich bei verschachtelten Schleifen und Verzweigungen.

Frage 76 · Teil 2
Wie würde man int alter = 16; in gängigem Pseudocode sinnvoll ausdrücken?
Ausführliche Erklärung

Richtig: A. Deklaration und Wertzuweisung werden in Pseudocode meist als zwei klar benannte Schritte formuliert.

Frage 77 · Teil 2
Welcher Pseudocode-Befehl entspricht am ehesten System.out.println(...)?
Ausführliche Erklärung

Richtig: C. "GIB AUS" ist das gängige Pseudocode-Pendant zu einer Konsolenausgabe.

Frage 78 · Teil 2
Welcher Pseudocode-Befehl entspricht am ehesten eingabe.nextInt()?
Ausführliche Erklärung

Richtig: A. "LIES" markiert im Pseudocode das Einlesen einer Nutzereingabe.

Frage 79 · Teil 2
Warum gibt es für Pseudocode keine einzige "offizielle" Norm, anders als beim PAP?
Ausführliche Erklärung

Richtig: B. Anders als beim PAP (DIN 66001) zählt bei Pseudocode nur, dass Start/Ende, Ein-/Ausgabe, Verarbeitung und Entscheidungen klar erkennbar sind.

Frage 80 · Teil 2
Was ist der praktische Nutzen, VOR dem eigentlichen Java-Code zunächst Pseudocode zu schreiben?
Ausführliche Erklärung

Richtig: D. Pseudocode trennt das Denken über die Logik vom Kampf mit exakter Syntax — ein bewährter Zwischenschritt, auch in der echten Praxis.

Frage 1 · Teil 3
Was ist ein boolescher Ausdruck?
Ausführliche Erklärung

Richtig: A. Nur ein echter true/false-Wert erfüllt die Definition eines booleschen Ausdrucks.

Frage 2 · Teil 3
Wie viele Zweige einer else if-Kette werden pro Durchlauf maximal ausgeführt?
Ausführliche Erklärung

Richtig: C. Sobald ein Zweig zutrifft, werden alle folgenden automatisch übersprungen.

Frage 3 · Teil 3
Akzeptiert Java in einer if-Bedingung Ganzzahlen wie 0/1 als Ersatz für true/false (wie z. B. in C)?
Ausführliche Erklärung

Richtig: D. Anders als in C führt if (1) in Java zu einem Kompilierfehler.

Frage 4 · Teil 3
Was passiert, wenn bei einer else if-Kette die allgemeinste Bedingung versehentlich zuerst steht?
Ausführliche Erklärung

Richtig: B. Die Reihenfolge in einer else-if-Kette ist entscheidend — genau der Fehler aus der Notenprüfung in Teil 3.1.

Frage 5 · Teil 3
Sind geschweifte Klammern bei genau einer Anweisung nach if zwingend vorgeschrieben?
Ausführliche Erklärung

Richtig: D. Bei genau einer Anweisung sind Klammern technisch optional, werden in der Praxis aber fast immer gesetzt.

Frage 6 · Teil 3
Wie viele Zweige einer if-else-Kette können bei einem einzelnen Durchlauf höchstens betreten werden?
Ausführliche Erklärung

Richtig: B. Genau das ist der Kern einer Verzweigung: nur ein Pfad wird verfolgt.

Frage 7 · Teil 3
Welcher Ausdruck prüft korrekt "punkte mindestens 50 und höchstens 100"?
Ausführliche Erklärung

Richtig: A. Beide Grenzen müssen gleichzeitig erfüllt sein — dafür ist && nötig, nicht ||, und = allein wäre eine Zuweisung, kein Vergleich.

Frage 8 · Teil 3
Was passiert bei einem else ohne eigene Bedingung?
Ausführliche Erklärung

Richtig: C. else ist der Auffangzweig für alle Fälle, die keine vorherige Bedingung abgedeckt hat.

Frage 9 · Teil 3
Code: int x=5; if(x>10){...} else if(x>3){...} else{...} — welcher Zweig läuft?
Ausführliche Erklärung

Richtig: B. 5>10 ist falsch, 5>3 ist wahr — der zweite Zweig wird betreten, der Rest übersprungen.

Frage 10 · Teil 3
Welcher Datentyp MUSS der Ausdruck in den Klammern von if(...) zwingend sein?
Ausführliche Erklärung

Richtig: D. Nur ein echter boolean-Wert wird von if akzeptiert.

Frage 11 · Teil 3
Fehlersuche: if (x = 5) { ... } statt == — was passiert in Java?
Ausführliche Erklärung

Richtig: C. Diese strikte Typprüfung schützt Java-Entwickler vor einem klassischen C-Fehler.

Frage 12 · Teil 3
Warum sind geschachtelte if-Anweisungen manchmal sinnvoll?
Ausführliche Erklärung

Richtig: A. Verschachtelung erlaubt feingranulare, voneinander abhängige Prüfungen.

Frage 13 · Teil 3
Was gibt folgender Code aus: int n=0; if(n>0){print("positiv");} else if(n<0){print("negativ");} else{print("null");}
Ausführliche Erklärung

Richtig: C. Weder n>0 noch n<0 trifft bei n=0 zu — der else-Zweig greift.

Frage 14 · Teil 3
Welche Aussage zu verschachtelten if-Blöcken ist korrekt?
Ausführliche Erklärung

Richtig: A. Der Programmfluss muss zuerst den äußeren Block betreten, bevor der innere überhaupt geprüft wird.

Frage 15 · Teil 3
Welche Aussage über die Reihenfolge von Bedingungen in einer else if-Kette ist grundsätzlich korrekt?
Ausführliche Erklärung

Richtig: B. Überlappende Bedingungen (z. B. Notenbereiche) verlangen die richtige, meist absteigende oder aufsteigende Reihenfolge.

Frage 16 · Teil 3
Was passiert, wenn keine der if/else-if-Bedingungen zutrifft UND kein abschließendes else vorhanden ist?
Ausführliche Erklärung

Richtig: D. Ein else ist optional — fehlt ein zutreffender Zweig, wird einfach kein Block ausgeführt.

Frage 17 · Teil 3
Wofür eignet sich switch-case besonders gut im Vergleich zu einer langen if-else-Kette?
Ausführliche Erklärung

Richtig: A. Bereiche wie "größer als 10" kann switch nicht direkt prüfen — dafür bleibt if/else zuständig.

Frage 18 · Teil 3
Welcher Datentyp ist als switch-Ausdruck NICHT zulässig?
Ausführliche Erklärung

Richtig: C. Gleitkommazahlen sind wegen möglicher Rundungsungenauigkeiten als switch-Typ nicht erlaubt.

Frage 19 · Teil 3
Was bewirkt ein fehlendes break in einem case-Zweig?
Ausführliche Erklärung

Richtig: D. Ohne break "fällt" die Ausführung einfach weiter in den nächsten Zweig, egal ob dessen Bedingung passt.

Frage 20 · Teil 3
Was macht default in einem switch-Block?
Ausführliche Erklärung

Richtig: B. default ist optional, aber guter Stil zur Behandlung unerwarteter Werte.

Frage 21 · Teil 3
Code: int tag=3; switch(tag){case 1: print("Mo"); break; case 2: case 3: print("Di/Mi"); break; default: print("Andere");} — Ausgabe?
Ausführliche Erklärung

Richtig: D. tag=3 trifft auf case 3, das zusammen mit case 2 (Fallthrough ohne break dazwischen) zu "Di/Mi" führt.

Frage 22 · Teil 3
Warum kann absichtlicher Fallthrough (case-Werte direkt hintereinander ohne break) nützlich sein?
Ausführliche Erklärung

Richtig: B. Genau wie im Wochenend-Beispiel aus Teil 3.2, wo case 6 und 7 dieselbe Ausgabe teilen.

Frage 23 · Teil 3
Was ist bei case-Werten in Java zwingend erforderlich?
Ausführliche Erklärung

Richtig: A. case-Werte müssen konstant und eindeutig sein — eine Variable als case-Wert ist nicht erlaubt.

Frage 24 · Teil 3
Ein switch-Block hat vor jedem case ein break, außer vor dem allerletzten case. Was passiert, wenn genau dieser letzte Wert zutrifft?
Ausführliche Erklärung

Richtig: C. Ohne weiteren case-Block danach gibt es nichts mehr, in das "durchgefallen" werden könnte.

Frage 25 · Teil 3
Wo darf default innerhalb eines switch-Blocks syntaktisch stehen?
Ausführliche Erklärung

Richtig: B. Syntaktisch frei platzierbar, aber übliche Konvention ist die letzte Position.

Frage 26 · Teil 3
Was gibt folgender Code aus: int x=5; switch(x){case 5: print("fünf"); case 6: print("sechs"); break; default: print("andere");}
Ausführliche Erklärung

Richtig: D. Erst nach "sechs" folgt ein break — beide Ausgaben laufen nacheinander.

Frage 27 · Teil 3
Welche Aussage zum Vergleich if-else-Kette vs. switch-case ist korrekt?
Ausführliche Erklärung

Richtig: C. Für viele diskrete Werte spart switch wiederholte Variablennamen und ist übersichtlicher.

Frage 28 · Teil 3
Was passiert, wenn der switch-Ausdruck keinem case-Wert entspricht und kein default vorhanden ist?
Ausführliche Erklärung

Richtig: A. Ähnlich wie ein fehlendes else bei if passiert einfach nichts, das Programm läuft weiter.

Frage 29 · Teil 3
Kann ein switch-Ausdruck vom Typ String sein?
Ausführliche Erklärung

Richtig: C. Seit Java 7 sind auch String-Werte als switch-Ausdruck erlaubt.

Frage 30 · Teil 3
Was ist der Hauptunterschied zwischen case in switch und den Bedingungen in if?
Ausführliche Erklärung

Richtig: A. Dieser Unterschied entscheidet, welches Konstrukt für eine bestimmte Aufgabe passender ist.

Frage 31 · Teil 3
Was passiert bei switch(zahl){case 1: case 2: case 3: print("klein"); break;}, wenn zahl den Wert 2 hat?
Ausführliche Erklärung

Richtig: B. case 1, 2 und 3 teilen sich durch den absichtlichen Fallthrough dieselbe Ausgabe.

Frage 32 · Teil 3
Warum ist vergessenes break einer der häufigsten Java-Fehler in Prüfungsaufgaben?
Ausführliche Erklärung

Richtig: D. Gerade weil der Code trotzdem kompiliert, fällt das fehlende break oft erst bei der Ausgabe auf.

Frage 33 · Teil 3
Aus welchen drei Teilen besteht der Kopf einer klassischen for-Schleife?
Ausführliche Erklärung

Richtig: A. Diese drei, durch Semikolons getrennten Teile bilden den festen Schleifenkopf.

Frage 34 · Teil 3
Wie oft läuft for(int i=0; i<5; i++) durch?
Ausführliche Erklärung

Richtig: C. Bei Start 0 und Bedingung i<5 sind das die Werte 0,1,2,3,4 — fünf Durchläufe.

Frage 35 · Teil 3
Wie oft läuft for(int i=1; i<=5; i++) durch?
Ausführliche Erklärung

Richtig: D. <= schließt den letzten Wert (hier 5) noch mit ein — 1,2,3,4,5 sind fünf Durchläufe.

Frage 36 · Teil 3
Wann wird die Bedingung einer for-Schleife geprüft?
Ausführliche Erklärung

Richtig: B. for ist kopfgesteuert — die Bedingung entscheidet vor jeder Runde, ob es weitergeht.

Frage 37 · Teil 3
Was passiert beim Update-Teil (z. B. i++) einer for-Schleife?
Ausführliche Erklärung

Richtig: D. Erst läuft der Körper, dann das Update, dann erneut die Bedingung.

Frage 38 · Teil 3
Was ist ein "Off-by-one"-Fehler bei Schleifen?
Ausführliche Erklärung

Richtig: B. Ein Laufzeitfehler entsteht dabei meist nicht — nur ein falsches, um eins verschobenes Ergebnis.

Frage 39 · Teil 3
Wofür eignet sich eine for-Schleife besonders gut?
Ausführliche Erklärung

Richtig: A. Der klassische Anwendungsfall: eine bekannte, feste Anzahl an Wiederholungen.

Frage 40 · Teil 3
Was gibt folgender Code aus: for(int i=3; i>0; i--){print(i+" ");}
Ausführliche Erklärung

Richtig: C. Mit i-- zählt die Schleife rückwärts von 3 bis 1 (bei i=0 ist die Bedingung i>0 falsch).

Frage 41 · Teil 3
Welche Variante der for-Schleife wird "erweiterte for-Schleife" oder "for-each" genannt?
Ausführliche Erklärung

Richtig: B. Die Doppelpunkt-Syntax ist das Kennzeichen der erweiterten for-Schleife.

Frage 42 · Teil 3
Wofür eignet sich die erweiterte for-Schleife (for-each) besonders?
Ausführliche Erklärung

Richtig: D. Genau dort, wo der Index selbst nicht gebraucht wird, ist for-each die lesbarere Wahl.

Frage 43 · Teil 3
Fehlersuche: for(int i=0; i<10; i--) — was passiert hier?
Ausführliche Erklärung

Richtig: C. Update und Bedingung passen hier nicht zusammen — ein klassischer Endlosschleifen-Fehler.

Frage 44 · Teil 3
Was gibt folgender Code aus: int summe=0; for(int i=1;i<=3;i++){summe += i;} print(summe);
Ausführliche Erklärung

Richtig: A. 1+2+3 = 6 — die Schleife summiert alle Werte von 1 bis 3 auf.

Frage 45 · Teil 3
Kann der Initialisierungsteil einer for-Schleife leer bleiben, z. B. for(; i<10; i++)?
Ausführliche Erklärung

Richtig: C. Alle drei Teile des Schleifenkopfs sind optional, solange die Semikolons als Trenner stehen bleiben.

Frage 46 · Teil 3
Was passiert, wenn die Bedingung einer for-Schleife von Anfang an false ist, z. B. for(int i=5;i<3;i++)?
Ausführliche Erklärung

Richtig: A. Da for kopfgesteuert ist, wird die Bedingung schon vor der ersten Runde geprüft.

Frage 47 · Teil 3
Wann wird die Bedingung einer while-Schleife geprüft?
Ausführliche Erklärung

Richtig: B. while ist ebenso wie for kopfgesteuert.

Frage 48 · Teil 3
Wann wird die Bedingung einer do-while-Schleife geprüft?
Ausführliche Erklärung

Richtig: D. do-while ist fußgesteuert — die Prüfung erfolgt erst nach dem bereits ausgeführten Körper.

Frage 49 · Teil 3
Wie oft läuft der Körper einer while-Schleife mindestens, wenn die Bedingung von Anfang an false ist?
Ausführliche Erklärung

Richtig: A. Kopfgesteuerte Schleifen können komplett übersprungen werden.

Frage 50 · Teil 3
Wie oft läuft der Körper einer do-while-Schleife mindestens, selbst wenn die Bedingung von Anfang an false ist?
Ausführliche Erklärung

Richtig: C. Der Körper läuft in jedem Fall zuerst, die Bedingung wird erst danach geprüft.

Frage 51 · Teil 3
Was ist eine Endlosschleife?
Ausführliche Erklärung

Richtig: D. Das Programm "hängt" dann dauerhaft in der Schleife fest.

Frage 52 · Teil 3
Was ist eine typische Ursache für eine ungewollte Endlosschleife?
Ausführliche Erklärung

Richtig: B. Ohne Veränderung der geprüften Variable bleibt die Bedingung dauerhaft wahr.

Frage 53 · Teil 3
Welche Schleifenarten nennt man "kopfgesteuert"?
Ausführliche Erklärung

Richtig: D. Beide prüfen ihre Bedingung, bevor der Körper überhaupt betreten wird.

Frage 54 · Teil 3
Welche Schleifenart nennt man "fußgesteuert"?
Ausführliche Erklärung

Richtig: B. Die Prüfung steht syntaktisch am "Fuß" der Schleife, nach dem Körper.

Frage 55 · Teil 3
Ein Programm soll den Nutzer so lange nach einer Zahl fragen, bis eine gültige Eingabe (0–100) erfolgt, wobei mindestens einmal gefragt werden MUSS. Welche Schleife passt am besten?
Ausführliche Erklärung

Richtig: A. Genau dieses Muster wurde in Teil 3.4 als "Eingabeprüfung" mit while gezeigt — do-while passt ebenso, wenn mindestens ein Versuch garantiert sein soll.

Frage 56 · Teil 3
Was gibt folgender Code aus: int i=0; while(i<3){print(i+" "); i++;}
Ausführliche Erklärung

Richtig: C. Bei i=3 wird die Bedingung 3<3 false, die Schleife endet — 0,1,2 wurden ausgegeben.

Frage 57 · Teil 3
Was gibt folgender Code aus: int i=5; do{print(i+" "); i++;} while(i<3);
Ausführliche Erklärung

Richtig: B. do-while führt den Körper immer zuerst aus, unabhängig vom Ausgangswert der Bedingung.

Frage 58 · Teil 3
Warum steht die Bedingung bei do-while ans Ende geschrieben, als while(...);?
Ausführliche Erklärung

Richtig: D. Die Position der Bedingung im Code spiegelt exakt wider, wann sie tatsächlich geprüft wird.

Frage 59 · Teil 3
Welche der folgenden Aussagen zu while-Schleifen ist korrekt?
Ausführliche Erklärung

Richtig: C. Genau das ist der typische Einsatzfall — z. B. Eingabeprüfung, bis eine gültige Zahl kommt.

Frage 60 · Teil 3
Was unterscheidet eine while-Schleife strukturell grundlegend von einer for-Schleife?
Ausführliche Erklärung

Richtig: A. for bündelt alle drei Teile im Kopf, while überlässt Init und Update dem umgebenden Code.

Frage 61 · Teil 3
Fehlersuche: int i=0; while(i<5); {i++;} — was ist hier das Problem?
Ausführliche Erklärung

Richtig: C. Ein verirrtes Semikolon nach der while-Bedingung ist ein tückischer, schwer zu findender Fehler.

Frage 62 · Teil 3
Was ist der wichtigste Unterschied zwischen while und do-while bei der Frage "Wie oft läuft der Körper mindestens?"
Ausführliche Erklärung

Richtig: D. Dieses Vergleichspaar ist ein IHK-Standard-Prüfungsthema.

Frage 63 · Teil 3
Was bewirkt break innerhalb einer Schleife?
Ausführliche Erklärung

Richtig: B. break ist der "Notausstieg" — sofort raus aus der gesamten Schleife.

Frage 64 · Teil 3
Was bewirkt continue innerhalb einer Schleife?
Ausführliche Erklärung

Richtig: D. continue überspringt nur den Rest der aktuellen Runde, die Schleife läuft danach normal weiter.

Frage 65 · Teil 3
Was gibt folgender Code aus: for(int i=1;i<=5;i++){ if(i==3) break; print(i+" ");}
Ausführliche Erklärung

Richtig: A. Bei i=3 beendet break die Schleife komplett, bevor die 3 ausgegeben wird.

Frage 66 · Teil 3
Was gibt folgender Code aus: for(int i=1;i<=5;i++){ if(i==3) continue; print(i+" ");}
Ausführliche Erklärung

Richtig: C. Nur die Ausgabe bei i=3 wird übersprungen, die Schleife läuft aber bis zum Ende weiter.

Frage 67 · Teil 3
Wird bei for(int i=0;i<5;i++){ if(...) continue; ... } der Update-Teil (i++) trotz continue noch ausgeführt?
Ausführliche Erklärung

Richtig: D. continue springt direkt zum Update-Teil der for-Schleife, nicht komplett aus ihr heraus.

Frage 68 · Teil 3
Wofür wird break typischerweise genutzt, wenn ein gesuchtes Element in einer Schleife gefunden wurde?
Ausführliche Erklärung

Richtig: B. Ein häufiges Muster: sobald das Gesuchte gefunden ist, spart break unnötige weitere Durchläufe.

Frage 69 · Teil 3
Welche Aussage zum Unterschied break vs. continue ist korrekt?
Ausführliche Erklärung

Richtig: D. Das ist die zentrale Unterscheidung zwischen beiden Sprunganweisungen.

Frage 70 · Teil 3
Was passiert, wenn break außerhalb einer Schleife oder eines switch-Blocks verwendet wird?
Ausführliche Erklärung

Richtig: B. break ist nur innerhalb einer Schleife oder eines switch-Blocks syntaktisch gültig.

Frage 71 · Teil 3
In einer verschachtelten Schleife (Schleife in Schleife): Welche Schleife beendet ein einfaches break normalerweise?
Ausführliche Erklärung

Richtig: A. break bezieht sich immer nur auf die direkt umschließende Schleife — äußere Schleifen laufen normal weiter.

Frage 72 · Teil 3
Was gibt folgender Code aus: int summe=0; for(int i=1;i<=10;i++){ if(i>3) break; summe+=i;} print(summe);
Ausführliche Erklärung

Richtig: C. Sobald i=4 erreicht ist, bricht break die Schleife ab — nur 1, 2 und 3 wurden zuvor summiert.

Frage 73 · Teil 3
Beim FizzBuzz-Programm: Warum muss die Prüfung "durch 3 UND 5 teilbar" zuerst stehen?
Ausführliche Erklärung

Richtig: B. Derselbe Reihenfolge-Fallstrick wie bei der else-if-Kette in 3.1 — die speziellste Bedingung gehört immer zuerst.

Frage 74 · Teil 3
Was gibt folgender FizzBuzz-Ausschnitt für i=15 aus: if(i%3==0 && i%5==0){print("FizzBuzz");} else if(i%3==0){print("Fizz");} else if(i%5==0){print("Buzz");} else{print(i);}
Ausführliche Erklärung

Richtig: D. 15 ist sowohl durch 3 als auch durch 5 teilbar — die erste, speziellste Bedingung trifft zu.

Frage 75 · Teil 3
Welcher Operator wird typischerweise genutzt, um Teilbarkeit durch eine Zahl zu prüfen?
Ausführliche Erklärung

Richtig: C. Ist der Rest einer Division 0, ist die Zahl restlos teilbar — das Grundprinzip hinter FizzBuzz.

Frage 76 · Teil 3
Was passiert bei einer verschachtelten Struktur (for-Schleife mit if darin), wenn die if-Bedingung in einer bestimmten Runde false ist?
Ausführliche Erklärung

Richtig: A. Die Schleife selbst kümmert sich nicht darum, ob ein innerer if-Zweig zutraf oder nicht — sie läuft unabhängig weiter.

Frage 77 · Teil 3
Warum ist die Kombination aus Schleifen UND Verzweigungen (wie bei FizzBuzz) so mächtig?
Ausführliche Erklärung

Richtig: C. Genau diese Kombination macht Wiederholung UND Entscheidung pro Runde möglich — der Kern praktisch jedes komplexeren Programms.

Frage 78 · Teil 3
Welche der folgenden Aussagen zu verschachtelten Kontrollstrukturen ist korrekt?
Ausführliche Erklärung

Richtig: A. Java setzt hier praktisch keine künstliche Grenze — Verschachtelungstiefe ist nur eine Frage der Lesbarkeit.

Frage 79 · Teil 3
Was ist bei tief verschachtelten if/for-Strukturen aus Clean-Code-Sicht zu beachten?
Ausführliche Erklärung

Richtig: B. Diese Brücke zu Clean Code (Teil 5.5) zeigt: technisch erlaubt heißt nicht automatisch gut lesbar.

Frage 80 · Teil 3
Zusammenfassend: Welche drei Kontrollstruktur-Kategorien hast du in Teil 3 kennengelernt?
Ausführliche Erklärung

Richtig: D. Diese drei Kategorien bilden zusammen das komplette Werkzeug, um den Kontrollfluss eines Java-Programms zu steuern.

Frage 1 · Teil 4
Was ist eine Klasse am treffendsten beschrieben?
Ausführliche Erklärung

Richtig: A. Wie ein Keksausstecher legt die Klasse Form und Eigenschaften fest, ohne selbst ein konkretes Exemplar zu sein.

Frage 2 · Teil 4
Was ist ein Objekt (Instanz)?
Ausführliche Erklärung

Richtig: C. Das Objekt ist der tatsächlich "gebackene Keks" aus dem Klassen-Bauplan.

Frage 3 · Teil 4
Wofür wird der new-Operator verwendet?
Ausführliche Erklärung

Richtig: D. new ist der feste Startpunkt jeder Objekterzeugung in Java.

Frage 4 · Teil 4
Was ist ein Attribut (Instanzvariable)?
Ausführliche Erklärung

Richtig: B. Attribute beschreiben, WAS ein Objekt ist — im Gegensatz zu Methoden, die beschreiben, was es kann.

Frage 5 · Teil 4
Code: Hund a = new Hund(); Hund b = new Hund(); a.name="Rex"; — beeinflusst das b.name?
Ausführliche Erklärung

Richtig: D. Jedes new-Objekt erhält seinen eigenen, unabhängigen Speicherbereich im Heap.

Frage 6 · Teil 4
Wo liegt ein mit new erzeugtes Objekt im Speicher?
Ausführliche Erklärung

Richtig: B. Objekte leben im Heap; nur die Referenz darauf liegt im Stack.

Frage 7 · Teil 4
Was speichert eine Objektvariable wie Hund bello?
Ausführliche Erklärung

Richtig: A. Objekttypen sind Referenztypen — die Variable ist nur der "Wegweiser".

Frage 8 · Teil 4
Was passiert, wenn eine Klasse selbst keinen expliziten Startwert für ein int-Attribut setzt?
Ausführliche Erklärung

Richtig: C. Attribute bekommen — anders als lokale Variablen — automatisch einen Default-Wert.

Frage 9 · Teil 4
Was beschreibt am besten die Beziehung zwischen Klasse und Objekt?
Ausführliche Erklärung

Richtig: B. Bauplan und Ausprägung — genau dieses Verhältnis ist der Kern der OOP.

Frage 10 · Teil 4
Wie viele unabhängige Objekte können von einer einzigen Klasse erzeugt werden?
Ausführliche Erklärung

Richtig: D. Eine Klasse kann beliebig oft instanziiert werden, jedes Mal mit eigenem Zustand.

Frage 11 · Teil 4
Was passiert beim Aufruf von new Hund(), bezogen auf den Konstruktor?
Ausführliche Erklärung

Richtig: C. new und Konstruktoraufruf gehören untrennbar zusammen.

Frage 12 · Teil 4
Warum belegt die Klasse selbst zur Laufzeit nur einmal Speicher, während Objekte mehrfach existieren können?
Ausführliche Erklärung

Richtig: A. Der Bauplan wird einmal geladen, jedes Objekt bekommt aber seinen eigenen Speicherbereich.

Frage 13 · Teil 4
Was ist eine Methode?
Ausführliche Erklärung

Richtig: C. Methoden beschreiben das Verhalten, das ein Objekt zeigen kann.

Frage 14 · Teil 4
Was ist der Unterschied zwischen Parameter und Argument?
Ausführliche Erklärung

Richtig: A. Der Parameter steht in der Methodendefinition, das Argument beim tatsächlichen Aufruf.

Frage 15 · Teil 4
Was zählt NICHT zur Methodensignatur?
Ausführliche Erklärung

Richtig: B. Der Rückgabetyp zählt bewusst nicht zur Signatur — wichtig für die genaue Overloading-Regel.

Frage 16 · Teil 4
Was ist Method Overloading?
Ausführliche Erklärung

Richtig: D. Nicht zu verwechseln mit Overriding — Overloading bleibt innerhalb derselben Klasse.

Frage 17 · Teil 4
Was bedeutet void als Rückgabetyp einer Methode?
Ausführliche Erklärung

Richtig: A. void-Methoden können trotzdem beliebig viel Code ausführen — sie liefern nur keinen Wert an den Aufrufer zurück.

Frage 18 · Teil 4
Was verlangt Java zwingend, wenn eine Methode einen Rückgabetyp wie int hat (nicht void)?
Ausführliche Erklärung

Richtig: C. Ohne return-Anweisung mit passendem Typ meldet der Compiler einen Fehler.

Frage 19 · Teil 4
Wann werden zwei Overloading-Varianten vom Compiler unterschieden?
Ausführliche Erklärung

Richtig: D. Genau das ist die Definition der Methodensignatur, auf der Overloading beruht.

Frage 20 · Teil 4
Code: void bellen(){...} int jahreAlsMensch(){return alter*7;} — welche Aussage stimmt?
Ausführliche Erklärung

Richtig: B. Nur ein nicht-void-Rückgabetyp verlangt zwingend ein return.

Frage 21 · Teil 4
Was ist ein "Seiteneffekt" einer void-Methode wie bellen()?
Ausführliche Erklärung

Richtig: D. Ausgaben, Zustandsänderungen etc. sind typische Seiteneffekte ohne echten Rückgabewert.

Frage 22 · Teil 4
Was passiert, wenn eine Methode mit Rückgabetyp int kein return enthält?
Ausführliche Erklärung

Richtig: B. Der Compiler verlangt für jeden Codepfad ein passendes return.

Frage 23 · Teil 4
Was ist ein Konstruktor?
Ausführliche Erklärung

Richtig: A. Die "Gussform", die ein Objekt direkt bei der Erzeugung befüllt.

Frage 24 · Teil 4
Welchen Namen MUSS ein Konstruktor tragen?
Ausführliche Erklärung

Richtig: C. Nur so erkennt Java den Konstruktor als solchen.

Frage 25 · Teil 4
Welchen Rückgabetyp hat ein Konstruktor?
Ausführliche Erklärung

Richtig: B. Selbst void ist bei einem echten Konstruktor nicht erlaubt — genau das unterscheidet ihn syntaktisch von einer Methode.

Frage 26 · Teil 4
Was passiert, wenn eine Klasse KEINEN eigenen Konstruktor definiert?
Ausführliche Erklärung

Richtig: D. Dieser automatische Standardkonstruktor lässt alle Attribute auf ihrem Default-Wert.

Frage 27 · Teil 4
Was passiert mit dem automatischen Standardkonstruktor, sobald die Klasse einen eigenen Konstruktor definiert?
Ausführliche Erklärung

Richtig: C. Ein häufiger Fehler: new Klasse() erwarten, obwohl nur ein parametrisierter Konstruktor existiert.

Frage 28 · Teil 4
Wofür wird das Schlüsselwort this innerhalb eines Konstruktors typischerweise gebraucht?
Ausführliche Erklärung

Richtig: A. this.name = name; unterscheidet klar Attribut (links) und Parameter (rechts).

Frage 29 · Teil 4
Was bewirkt this(name, 0); als erste Zeile in einem Konstruktor?
Ausführliche Erklärung

Richtig: C. So lässt sich Code zwischen überladenen Konstruktoren wiederverwenden.

Frage 30 · Teil 4
Wo in einem Konstruktor MUSS ein this(...)-Aufruf zwingend stehen, falls verwendet?
Ausführliche Erklärung

Richtig: A. Genau wie super(...) muss auch this(...) die erste Anweisung im Konstruktor sein.

Frage 31 · Teil 4
Kann eine Klasse mehrere, unterschiedlich parametrisierte Konstruktoren besitzen (Overloading)?
Ausführliche Erklärung

Richtig: B. Überladene Konstruktoren bieten flexible Erzeugungswege für dieselbe Klasse.

Frage 32 · Teil 4
Eine Klasse definiert nur einen Konstruktor mit zwei Parametern. Was passiert bei new Hund() (ohne Argumente)?
Ausführliche Erklärung

Richtig: D. Genau der Fall aus Kapitel 4.3 — der Standardkonstruktor entfällt, sobald ein eigener existiert.

Frage 33 · Teil 4
Was ist das Ziel von Kapselung (Encapsulation)?
Ausführliche Erklärung

Richtig: A. Der "abgeschlossene Medizinschrank" aus Kapitel 4.4 — Zugriff nur über kontrollierte Türen.

Frage 34 · Teil 4
Welcher Zugriffsmodifizierer macht ein Attribut nur innerhalb derselben Klasse sichtbar?
Ausführliche Erklärung

Richtig: C. private ist der striktestte der vier Zugriffsmodifizierer.

Frage 35 · Teil 4
Welcher Zugriffsmodifizierer erlaubt Sichtbarkeit von überall im Programm?
Ausführliche Erklärung

Richtig: D. public ist der offenste der vier Zugriffsmodifizierer.

Frage 36 · Teil 4
Was ist ein Getter?
Ausführliche Erklärung

Richtig: B. Getter erlauben Lesezugriff, ohne das Attribut komplett offenzulegen.

Frage 37 · Teil 4
Was ist ein Setter?
Ausführliche Erklärung

Richtig: D. Der große Vorteil eines Setters gegenüber direktem Zugriff: eingebaute Prüfungen.

Frage 38 · Teil 4
Code: private double kontostand; public void einzahlen(double betrag){ if(betrag>0){kontostand+=betrag;} } — warum ist das besser als ein öffentliches Attribut?
Ausführliche Erklärung

Richtig: B. Genau das Konto-Beispiel aus Kapitel 4.4 zeigt diesen Vorteil.

Frage 39 · Teil 4
Kann von außerhalb der Klasse direkt auf ein private-Attribut zugegriffen werden, z. B. objekt.attribut = wert;?
Ausführliche Erklärung

Richtig: A. Genau diese Abschottung ist der ganze Sinn von private.

Frage 40 · Teil 4
Welche vier Grundprinzipien der OOP gehören laut IHK-Standard zusammen?
Ausführliche Erklärung

Richtig: C. Dieses Quartett ist DER Kern jeder OOP-Prüfungsfrage.

Frage 41 · Teil 4
Was ist protected im Vergleich zu private?
Ausführliche Erklärung

Richtig: B. protected ist eine "mittlere" Sichtbarkeitsstufe zwischen private und public.

Frage 42 · Teil 4
Was bedeutet "package-private" (kein explizites Schlüsselwort)?
Ausführliche Erklärung

Richtig: D. Ohne jedes Schlüsselwort gilt automatisch diese mittlere Sichtbarkeitsstufe.

Frage 43 · Teil 4
Warum liest man ein privates Attribut typischerweise über einen Getter statt es public zu machen?
Ausführliche Erklärung

Richtig: C. Das ist der eigentliche, langfristige Nutzen von Kapselung.

Frage 44 · Teil 4
Was zählt zu den typischen Vorteilen von Kapselung?
Ausführliche Erklärung

Richtig: A. Genau diese beiden Punkte sind die zentralen Vorteile — nichts mit Performance oder Speicher.

Frage 45 · Teil 4
Was bewirkt das Schlüsselwort extends?
Ausführliche Erklärung

Richtig: C. extends ist das Schlüsselwort für Vererbung in Java.

Frage 46 · Teil 4
Wie viele direkte Oberklassen darf eine Java-Klasse mit extends höchstens haben?
Ausführliche Erklärung

Richtig: A. Java erlaubt bewusst nur Einfachvererbung — Mehrfachvererbung gibt es nur über Interfaces.

Frage 47 · Teil 4
Wofür wird super(...) in einem Unterklassen-Konstruktor verwendet?
Ausführliche Erklärung

Richtig: B. So wird sichergestellt, dass die Oberklasse ihre eigenen Attribute korrekt initialisiert.

Frage 48 · Teil 4
Wofür wird @Override typischerweise verwendet?
Ausführliche Erklärung

Richtig: D. @Override schützt vor Tippfehlern, die sonst versehentlich eine neue, eigenständige Methode erzeugen würden.

Frage 49 · Teil 4
Was passiert, wenn eine Unterklasse eine Methode der Oberklasse mit identischer Signatur neu definiert?
Ausführliche Erklärung

Richtig: A. Overriding ist die Grundlage für Polymorphie in Kapitel 4.6.

Frage 50 · Teil 4
Was erbt eine Unterklasse standardmäßig von ihrer Oberklasse?
Ausführliche Erklärung

Richtig: C. Genau das erspart Code-Duplizierung — der eigentliche Sinn der Vererbung.

Frage 51 · Teil 4
Wo im Unterklassen-Konstruktor MUSS ein expliziter super(...)-Aufruf stehen, falls verwendet?
Ausführliche Erklärung

Richtig: D. Die Oberklasse muss zuerst initialisiert sein, bevor die Unterklasse eigene Schritte ergänzt.

Frage 52 · Teil 4
Code: class Tier{void lautGeben(){...}} class Hund extends Tier{@Override void lautGeben(){...}} — was passiert bei einem Hund-Objekt beim Aufruf von lautGeben()?
Ausführliche Erklärung

Richtig: B. Die überschriebene Version der konkreten Klasse hat Vorrang vor der geerbten.

Frage 53 · Teil 4
Warum sollte man ein private-Attribut oder eine private-Methode NICHT automatisch als "vererbt nutzbar" annehmen?
Ausführliche Erklärung

Richtig: D. Für Zugriff aus Unterklassen wird typischerweise protected statt private verwendet.

Frage 54 · Teil 4
Was passiert beim Aufruf von super.methode() innerhalb einer überschreibenden Methode?
Ausführliche Erklärung

Richtig: B. super.methode() erlaubt gezielten Zugriff auf das ursprüngliche, überschriebene Verhalten.

Frage 55 · Teil 4
Welche Beziehung beschreibt Vererbung typischerweise, z. B. Hund extends Tier?
Ausführliche Erklärung

Richtig: A. Diese "Ist-ein"-Beziehung ist auch die Grundlage für die Polymorphie in Kapitel 4.6.

Frage 56 · Teil 4
Was passiert, wenn eine Unterklasse KEINE Methode der Oberklasse überschreibt?
Ausführliche Erklärung

Richtig: C. Overriding ist optional — ohne eigene Version gilt einfach die geerbte.

Frage 57 · Teil 4
Was ist Polymorphie?
Ausführliche Erklärung

Richtig: B. Der "Play-Knopf", der je nach Gerät etwas anderes tut — die Analogie aus Kapitel 4.6.

Frage 58 · Teil 4
Was bedeutet "dynamische Bindung"?
Ausführliche Erklärung

Richtig: D. Dynamische Bindung ist der technische Mechanismus hinter Polymorphie.

Frage 59 · Teil 4
Code: Tier[] tiere = new Tier[2]; tiere[0]=new Hund("Bello"); — ist das erlaubt?
Ausführliche Erklärung

Richtig: C. Genau die "Ist-ein"-Beziehung erlaubt diese Zuweisung ohne Cast.

Frage 60 · Teil 4
Was passiert beim Aufruf t.lautGeben(), wenn t vom deklarierten Typ Tier ist, aber tatsächlich ein Hund-Objekt referenziert (mit überschriebener Methode)?
Ausführliche Erklärung

Richtig: A. Entscheidend ist der tatsächliche Objekttyp, nicht der deklarierte Variablentyp.

Frage 61 · Teil 4
Was ist der Hauptunterschied zwischen Overloading und Overriding bezüglich des Zeitpunkts der Entscheidung?
Ausführliche Erklärung

Richtig: C. Ein IHK-Prüfungsklassiker: die Unterscheidung statische vs. dynamische Bindung.

Frage 62 · Teil 4
Welche Voraussetzung muss erfüllt sein, damit Polymorphie über Vererbung funktioniert?
Ausführliche Erklärung

Richtig: D. Ohne Overriding gäbe es nichts, zwischen dem zur Laufzeit unterschieden werden könnte.

Frage 63 · Teil 4
Warum ist Polymorphie praktisch nützlich, z. B. bei einem Array von Tier-Objekten unterschiedlicher Unterklassen?
Ausführliche Erklärung

Richtig: B. Genau das zeigte das Tierheim-Beispiel aus Kapitel 4.6.

Frage 64 · Teil 4
Was passiert, wenn eine Unterklasse eine Methode NICHT überschreibt, ein Objekt dieser Unterklasse aber über eine Oberklassen-Referenz aufgerufen wird?
Ausführliche Erklärung

Richtig: D. Ohne eigene Überschreibung greift automatisch das geerbte Verhalten.

Frage 65 · Teil 4
Was ist "statische Bindung"?
Ausführliche Erklärung

Richtig: A. Das Gegenstück zur dynamischen Bindung bei Polymorphie.

Frage 66 · Teil 4
Fasse zusammen: Was ist der praktische Kern von Polymorphie?
Ausführliche Erklärung

Richtig: C. "Ein Aufruf, viele Verhalten" — die Kurzformel für Polymorphie.

Frage 67 · Teil 4
Was ist eine abstrakte Klasse?
Ausführliche Erklärung

Richtig: D. Der "unvollständige Bauplan" aus Kapitel 4.7.

Frage 68 · Teil 4
Was ist eine abstrakte Methode?
Ausführliche Erklärung

Richtig: B. Nur Signatur und Semikolon statt geschweifter Klammern.

Frage 69 · Teil 4
Was passiert beim Versuch new Form();, wenn Form eine abstract class ist?
Ausführliche Erklärung

Richtig: D. Bereits der Compiler verweigert die direkte Instanziierung.

Frage 70 · Teil 4
Was MUSS eine konkrete (nicht-abstrakte) Unterklasse einer abstrakten Klasse tun?
Ausführliche Erklärung

Richtig: B. Erst durch vollständige Implementierung wird die Unterklasse instanziierbar.

Frage 71 · Teil 4
Können abstrakte Klassen auch fertig implementierte (nicht-abstrakte) Methoden enthalten?
Ausführliche Erklärung

Richtig: A. Genau diese Mischung macht abstrakte Klassen flexibel — anders als klassische Interfaces.

Frage 72 · Teil 4
Code: abstract class Form{ abstract double flaeche(); void beschreiben(){print("Fläche: "+flaeche());} } — funktioniert beschreiben(), obwohl flaeche() abstrakt ist?
Ausführliche Erklärung

Richtig: C. Genau das Muster aus dem Kreis-Beispiel in Kapitel 4.7.

Frage 73 · Teil 4
Wofür werden abstrakte Klassen typischerweise genutzt?
Ausführliche Erklärung

Richtig: B. Genau dieses Mischverhalten unterscheidet abstrakte Klassen von reinen Interfaces.

Frage 74 · Teil 4
Was passiert, wenn eine Unterklasse einer abstrakten Klasse NICHT alle abstrakten Methoden implementiert?
Ausführliche Erklärung

Richtig: D. Ein "unvollständiger" Bauplan kann sich weitervererben, bis irgendeine Unterklasse ihn komplettiert.

Frage 75 · Teil 4
Was ist ein Interface?
Ausführliche Erklärung

Richtig: C. Der "Vertrag" aus Kapitel 4.8 — wer unterschreibt, verspricht bestimmte Fähigkeiten.

Frage 76 · Teil 4
Wie viele Interfaces kann eine einzelne Klasse mit implements gleichzeitig umsetzen?
Ausführliche Erklärung

Richtig: A. Genau darin liegt der Vorteil gegenüber der Einfachvererbung mit extends.

Frage 77 · Teil 4
Was MUSS eine Klasse tun, die implements Fliegbar deklariert?
Ausführliche Erklärung

Richtig: C. Der "Vertrag" muss vollständig erfüllt werden, sonst meldet der Compiler einen Fehler.

Frage 78 · Teil 4
Was ist der Hauptunterschied zwischen abstrakter Klasse und Interface bezüglich Mehrfachnutzung?
Ausführliche Erklärung

Richtig: A. Ein zentraler Entscheidungspunkt: abstrakte Klasse (mit Zustand, aber nur einmal erbbar) vs. Interface (mehrfach implementierbar).

Frage 79 · Teil 4
Seit welcher Java-Version dürfen Interfaces zusätzlich default-Methoden mit fertigem Methodenkörper enthalten?
Ausführliche Erklärung

Richtig: B. Java 8 führte default-Methoden ein und verwischte damit die einst strikte Trennung zu abstrakten Klassen etwas.

Frage 80 · Teil 4
Zusammenfassend: Welche vier Säulen der Objektorientierung hast du in Teil 4 komplett kennengelernt?
Ausführliche Erklärung

Richtig: D. Das komplette OOP-Quartett — die Basis für jede weiterführende Java-Prüfungsfrage.

Die 80 Fragen zu Teil 5 folgen in der nächsten Ausbaustufe.