Informatik · Klasse 11–13 · aktualisiert
Java lernen: Grundlagen und Objektorientierung
Du lernst, wie aus Java-Quellcode eine Ausgabe wird, erkennst Variablen, Schleifen und Klassen und unterscheidest Syntaxfehler von logischen Fehlern.
0 von 9 Aufgaben gelöst
Kurz gesagt
Java-Quellcode steht in einer .java-Datei. Der Compiler javac übersetzt ihn in Bytecode (.class), den die JVM ausführt. Syntaxfehler verhindern in der Regel das Kompilieren; logische Fehler wie plus statt minus liefern falsche Ergebnisse.
Ein Java-Programm ist zuerst nur Text. Damit daraus eine Ausgabe auf dem Bildschirm wird, braucht es mehrere Schritte. Du lernst diese Schritte kennen und liest kleine Programme. Außerdem lernst du Klassen und die zwei wichtigsten Fehlerarten kennen.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
4 Abschnitte
Du schreibst ein Java-Programm als Text. Diesen Text nennt man Quellcode. Er ist für Menschen lesbar, aber nicht direkt ausführbar. Du speicherst ihn in einer Datei mit der Endung .java, zum Beispiel HelloWorld.java. Der Dateiname muss genau so heißen wie die Klasse in der Zeile public class HelloWorld, auch in Groß- und Kleinschreibung.
Erst der Java-Compiler übersetzt den Quellcode. Im Normalfall entsteht dabei Bytecode (Dateiendung .class). Auch Bytecode ist nicht direkt ausführbar. Du übersetzt in der Eingabeaufforderung mit javac HelloWorld.java, hier gibst du die Endung .java an.
Ausgeführt wird der Bytecode von der Java Virtual Machine, kurz JVM. Sie liegt zwischen dem Java-Programm und dem Betriebssystem. Man kann sie sich als Blackbox um das Programm vorstellen, die die Interaktion mit dem Betriebssystem übernimmt. Du startest sie mit java HelloWorld, hier gibst du die Endung nicht an. Der Bytecode wird meist nicht direkt von der Hardware ausgeführt, sondern durch Software auf der Zielplattform. So soll dasselbe Programm ohne Änderung auf jeder Rechnerarchitektur laufen können, sofern dort eine passende Laufzeitumgebung installiert ist.
So liest du das kleine Programm im Beispiel: Zeile 1 (public class HelloWorld {) definiert die Klasse HelloWorld. Zeile 2 definiert die Main-Methode. Du findest sie bei jeder Java-Anwendung, und von ihr aus erschließt du dir die Funktionsweise des Programms. Zeile 3 (System.out.println) gibt den Text in den Anführungszeichen aus. Zeile 4 (System.exit(0);) beendet die Anwendung mit dem Rückgabewert 0 und damit auch die JVM.
Definition
Bytecode
Bytecode ist der Code, den der Java-Compiler aus dem Quellcode erzeugt. Er steht im Normalfall in einer Datei mit der Endung .class und wird von der JVM ausgeführt.
Beispiel: Von HelloWorld.java bis zur Ausgabe
- 1public class HelloWorld {
- 2 public static void main(String[] args) {
- 3 System.out.println("Hello Java World");
- 4 System.exit(0);
- 5 }
- 6}
- 7Übersetzen: javac HelloWorld.java (Quellcode wird zu Bytecode in HelloWorld.class)
- 8Ausführen: java HelloWorld (ohne .java)
- 9Ausgabe auf der Konsole: Hello Java World
Merke: Der Weg lautet: Quellcode in .java, mit javac in Bytecode übersetzen, mit java über die JVM ausführen.
Teste dich
Variablen sind Speicherorte für Daten wie Zahlen, Texte oder Adressen. Java ist statisch typisiert: Schon wenn das Programm erstellt wird, muss bekannt sein, welchen Typ eine Variable hat. Darum steht bei der Deklaration immer ein Datentyp, zum Beispiel int. Vor der Verwendung muss der Variablen ein Wert zugewiesen werden, der zum Typ passt. Einem int kannst du also nicht den String „Hallo“ zuweisen (zumindest nicht ohne vorherige Umwandlung). In int c = a + b; speichert die Variable c die Summe von a und b.
Eine boolean-Variable hat entweder den Wert true oder false. Sie steht meist dafür, dass eine Bedingung erfüllt ist oder eben nicht. Bedingungen verwendest du in der Verzweigung: if (Ausdruck) { Anweisungen 1 } else { Anweisungen 2 }. Der Teil mit else ist optional. Sollen mehrere Anweisungen ausgeführt werden, fasst du sie in einem Block mit geschweiften Klammern zusammen.
Schleifen wiederholen Anweisungen. Die for-Schleife (Zählschleife) zählt von einem Startwert zu einem Endwert und führt für jeden Schritt alle Anweisungen im Schleifenkörper aus. Bei for (int i = 0; i < 10; i++) zählt i von 0 bis 9, weil die Bedingung „i kleiner als 10“ lautet und nicht „kleiner gleich 10“. Die while-Schleife prüft ihre Bedingung vor dem Betreten der Schleife. Die do-Schleife prüft nach dem ersten Durchlauf.
Methoden bestehen aus einem Methodenkopf und einem Methodenrumpf. Im Kopf stehen der Rückgabetyp, der Name und die Parameterliste. Gibt es keine Rückgabe, ist der Rückgabetyp void. Der Rumpf steht in geschweiften Klammern. In public static void main(String[] args) ist void der Rückgabetyp und main der Name.
Definition
Variable
Eine Variable ist ein Speicherort für Daten wie Zahlen, Texte oder Adressen. Bei der Deklaration gibst du den Datentyp an, zum Beispiel int.
Beispiel: Die for-Schleife mit i < 3 (aus dem Code lesen)
- 1for (int i = 0; i < 3; i++) { System.out.println(i); }
- 2Start: i = 0
- 3Prüfung: 0 < 3 ist true → Ausgabe 0, dann i = 1
- 4Prüfung: 1 < 3 ist true → Ausgabe 1, dann i = 2
- 5Prüfung: 2 < 3 ist true → Ausgabe 2, dann i = 3
- 6Prüfung: 3 < 3 ist false → die Schleife endet
| Baustein | Beispiel im Code | Was er bewirkt |
|---|---|---|
| Variable | int c = a + b; | speichert die Summe von a und b in c |
| Bedingung | if (beenden) { … } | je nach true oder false läuft der if-Teil oder der else-Teil |
| Schleife | for (int i = 0; i < 3; i++) | führt den Schleifenkörper mehrmals aus |
| Methode | void main(String[] args) | hat einen Kopf mit dem Namen und einen Rumpf in { } |
Teste dich
Eine Klasse beschreibt die allgemeine Definition. Ein Objekt, auch Instanz genannt, ist ein bestimmtes Exemplar einer Klasse. Es wird zur Laufzeit des Programms erzeugt. Klasse und Objekt sind also zwei verschiedene Dinge. Im Beispiel steht in der Variablen a ein Objekt der Klasse AndereKlasse.
Um eine Instanz zu erschaffen, wird der Konstruktor benutzt. Er heißt wie die Klasse. Seine Schreibweise ähnelt einer Methode, aber er gibt keinen Wert zurück, auch kein void. Mit new AndereKlasse(42) wird der Konstruktor aufgerufen und ein Objekt erzeugt.
Die Grundidee der objektorientierten Programmierung ist, Daten und zugehörige Funktionen möglichst eng in einem Objekt zusammenzufassen und nach außen zu kapseln. Dabei hilft private. Es ist der restriktivste Zugriffsmodifizierer und verbietet jeglichen Zugriff von außerhalb der Klasse. Auf eine private Variable kann nur die Klasse selbst zugreifen. Du schreibst zum Beispiel private int x, y; in die Klasse.
Klassenvariablen werden üblicherweise als private deklariert. Von außen verändert man sie meist über passende Methoden, die Getter und Setter heißen. Als bewährte Regel gilt „so streng wie möglich, so freizügig wie nötig“. Im einfachsten Fall verwendest du private für Variablen und public für Methoden und Konstruktoren.
Definition
Konstruktor
Der Konstruktor erzeugt eine Instanz einer Klasse. Er heißt wie die Klasse und gibt keinen Wert zurück, auch kein void.
Beispiel: Klasse, Objekt und Konstruktor im Code
- 1class AndereKlasse {
- 2 public int eineVariable;
- 3 public AndereKlasse(int eingabe) { eineVariable = eingabe; }
- 4}
- 5In main: AndereKlasse a = new AndereKlasse(42);
- 6Klasse: AndereKlasse · Objekt: das Exemplar, das in a gespeichert ist
- 7Konstruktor: AndereKlasse(int eingabe)
Merke: Mit private kann nur die Klasse selbst auf die Variable zugreifen, zum Beispiel bei private int x;
Teste dich
Syntaxfehler sind Verstöße gegen die grammatischen Regeln der Programmiersprache. Beispiele sind fehlende Klammern, Typkonflikte, eine falsche Anzahl von Parametern oder ein vergessenes Semikolon. Syntaxfehler verhindern in der Regel die Kompilierung des Programms. Darum werden sie frühzeitig erkannt.
Logische Fehler bestehen in einem im Detail falschen Problemlösungsansatz. Ursache kann ein Fehlschluss, eine falsch verstandene Aufgabe oder einfach ein Versehen oder Schreibfehler sein. Beispiele sind plus statt minus oder kleiner statt kleiner/gleich. Bei plus statt minus ist die Grammatik in Ordnung, nur die Idee dahinter stimmt nicht. Das Programm liefert dann fehlerhafte Ergebnisse.
Ein typischer Fehler bei if zeigt, wie genau du lesen musst: Ohne geschweifte Klammern gehört nur eine Anweisung zum if. Im Beispiel unten wird System.exit(0); deshalb immer ausgeführt, weil kein Block gebildet wurde.
Bei der Suche nach den Ursachen von Fehlern helfen Debugger. Mit ihnen kannst du ein Programm Schritt für Schritt ausführen und kontrollieren.
Beispiel: if ohne Block
- 1boolean beenden = false;
- 2if (beenden)
- 3 System.out.println("Oh ich soll mich beenden");
- 4System.exit(0);
- 5Es wurde kein Block mit geschweiften Klammern gebildet.
- 6Darum wird System.exit(0); immer ausgeführt.
Merke: Syntaxfehler verhindern in der Regel die Kompilierung. Logische Fehler wie plus statt minus liefern fehlerhafte Ergebnisse.
Teste dich
Alles auf einen Blick
Java
Weg
Quellcode (.java) → javac → Bytecode (.class) → die JVM führt ihn aus
Bausteine
Variablen speichern Daten, if prüft eine Bedingung, Schleifen wiederholen Anweisungen, Methoden haben Kopf und Rumpf
Klasse und Objekt
Die Klasse ist die allgemeine Definition, das Objekt ein bestimmtes Exemplar davon
Konstruktor
Er erzeugt eine Instanz, heißt wie die Klasse und gibt keinen Wert zurück
private
Auf eine private Variable kann nur die Klasse selbst zugreifen
Fehlerarten
Syntaxfehler verhindern in der Regel die Kompilierung, logische Fehler liefern fehlerhafte Ergebnisse
Musteraufgabe · Schritt für Schritt
Eine Schleife nachverfolgen (ausgedachtes Beispiel)
- 1Programm: int zaehler = 0; for (int i = 0; i < 5; i++) { zaehler = zaehler + 3; } System.out.println(zaehler);
- 2Start: zaehler = 0 und i = 0
- 3i = 0: 0 < 5 ist true → zaehler = 0 + 3 = 3
- 4i = 1: 1 < 5 ist true → zaehler = 3 + 3 = 6
- 5i = 2: 2 < 5 ist true → zaehler = 6 + 3 = 9
- 6i = 3: 3 < 5 ist true → zaehler = 9 + 3 = 12
- 7i = 4: 4 < 5 ist true → zaehler = 12 + 3 = 15
- 8i = 5: 5 < 5 ist false → die Schleife endet
- 9Ausgabe: 15 (die Schleife läuft 5-mal, 5 · 3 = 15)
Fehler finden
Prüfe die Aussagen zu einer Rechnung mit a und b (ausgedachtes Beispiel) In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 4Die Fehlerart ist verwechselt: Plus statt minus ist ein logischer Fehler. Richtig: Syntaxfehler verstoßen gegen grammatische Regeln und verhindern in der Regel die Kompilierung; plus statt minus liefert ein falsches Ergebnis, hier 10 statt 4.
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Der Bytecode steht in einer Datei mit der Endung . Eine for-Schleife mit Start i = 0 und der Bedingung i < 10 zählt bis . Auf eine Variable, die mit deklariert ist, kann nur die Klasse selbst zugreifen.
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback