1. Java‑Compiler
Übrigens werden Sie noch oft hören, dass der unbestreitbare Vorteil von Java gegenüber anderen Sprachen die Plattformunabhängigkeit ist. Was ist das eigentlich und wozu braucht man sie? Fangen wir etwas weiter vorne an.
Tatsache ist: Ein Computer kann nur die einfachsten Befehle ausführen.
Für Hunde gibt es Kommandos wie „Bei Fuß“, „Pfote“ und andere, auf die hin der Hund etwas Wichtiges tut. Beim Computer übernehmen Zahlen diese Rolle: jeder Befehl ist durch eine Zahl kodiert (auch Maschinencode genannt).
Programme als Zahlen zu schreiben ist sehr schwierig, daher haben Menschen Programmiersprachen und Compiler erfunden. Eine solche Sprache ist einerseits für Menschen verständlich, andererseits – für den Compiler. Ein Compiler ist ein spezielles Programm, das den in einer Programmiersprache geschriebenen Programmtext in eine Folge von Maschinencode übersetzt.
Normalerweise schreibt ein Programmierer ein Programm in einer Programmiersprache und startet anschließend den Compiler, der auf Basis der vom Programmierer geschriebenen Quelldateien eine Datei mit Maschinencode erzeugt – das endgültige (kompilierte) Programm.
- Programm in C++
-
Compiler
- Programm, bestehend aus Maschinencode
Das resultierende Programm kann sofort auf dem Computer ausgeführt werden. Der Nachteil dieses Ansatzes ist, dass der erzeugte Code stark vom Prozessor und Betriebssystem abhängt. Ein unter Windows kompiliertes Programm wird auf einem Android‑Telefon nicht laufen.
Wenn Sie ein Programm für Android geschrieben haben, wird es unter Windows nicht starten!
Java verfolgt allerdings einen deutlich innovativeren Ansatz.
- Programm in Java
-
Java‑Compiler
- Programm, bestehend aus speziellen Codes (Bytecode)
-
Java VM
- Programm, bestehend aus Maschinencode
Der Java‑Compiler kompiliert nicht alle Klassen zu einem einzigen Programm aus Maschinencode. Stattdessen kompiliert er jede Klasse separat – und zwar nicht in Maschinencode, sondern in einen speziellen Zwischencode (Bytecode). Die Übersetzung in Maschinencode erfolgt beim Start des Programms.
Wer kompiliert das Programm dann beim Start in Maschinencode?
Dafür gibt es ein spezielles Programm namens JVM (Java Virtual Machine) – die Virtuelle Java‑Maschine. Zuerst startet man sie und danach das aus Bytecode bestehende Programm. Die JVM kompiliert dann vor der Ausführung des gewünschten Programms dieses in Maschinencode.
Wenn Sie einen leistungsfähigen Prozessor haben, der einen größeren Satz von Maschinenbefehlen unterstützt, wird während der „zweiten Kompilierung“ Maschinencode erzeugt, der genau Ihren Prozessor und Ihr Betriebssystem berücksichtigt. Genau deshalb ist Java mitunter schneller als C++, das sofort in Maschinencode kompiliert wird und nur die am weitesten verbreiteten Prozessorbefehle nutzen kann.
2. Typische Fehler beim Kompilieren
Geschwindigkeit und Codeoptimierung sind uns vorerst nicht so wichtig, aber wichtig ist, dass der Compiler Ihr Programm auf Fehler prüft. Er prüft den Code auf Korrektheit und lässt ihn nicht weiter, wenn er auch nur einen kleinen Fehler findet.
Fehlerbeispiel:
Sie versuchen, einer Variablen, die nur Text speichern kann, eine Zahl zuzuweisen.
String userName = 42; // Ups! So geht das nicht.
Der Compiler meldet sofort, dass die Typen nicht übereinstimmen: Cannot implicitly convert type 'int' to 'string'.
Ein anderes Beispiel – ein Tippfehler im Aufruf println:
System.out.printline("Hallo!"); // Fehler im Methodennamen
Der Compiler wird sagen: „Es gibt keine solche Methode – überprüfe die Syntax!“
Wie liest man Fehlermeldungen?
Die meisten Compiler zeigen an, wo der Fehler im Code liegt, und schlagen manchmal sogar Korrekturen vor. Haben Sie keine Angst vor Fehlern: Jeder von ihnen ist ein Schritt zur Erleuchtung und zum Besiegen Ihres inneren „Bosses“.
3. Kommentare
Stellen Sie sich vor: Sie schreiben ein komplexes Programm. Alles funktioniert, Sie sind ein Genie! Doch einen Monat später öffnen Sie genau diesen Code und … verstehen nichts mehr. Ein paar Zeilen Code hier, eine seltsame Variable dort. Im Kopf nur: „Das hat ganz sicher irgendjemand geschrieben, aber nicht ich!“ Genau hier retten Kommentare die Lage.
Kommentare sind wie Randnotizen im Schulbuch oder Zettel am Kühlschrank („Bier. Nicht trinken. Für morgen!“). Der Compiler ignoriert sie, Menschen dagegen nicht. Kommentare erlauben, die Bedeutung des Codes zu erklären, wichtige Details zu markieren und sogar Codeabschnitte „auszuschalten“, ohne sie zu löschen.
Wichtig: Kein Compiler liest Ihre Kommentare – sie werden vollständig ignoriert!
Einzeilige Kommentare
In Java gibt es zwei Arten von Kommentaren – einzeilige und mehrzeilige. Einzeilige beginnen mit zwei Schrägstrichen // und gehen bis zum Zeilenende. Alles, was nach // kommt, gilt als Kommentar und wird vom Compiler vollständig ignoriert.
Beispiel:
System.out.println("Hallo, Welt!"); // Gibt die Begrüßung auf dem Bildschirm aus
Hier ist // Gibt die Begrüßung auf dem Bildschirm aus – ein Kommentar. Wenn im Code unklar ist, warum eine Zeile nötig ist, schreiben Sie es einfach dazu!
Noch ein Beispiel:
int x = 42; // Alter des Programmierers
Einzeilige Kommentare können auch in eigenen Zeilen stehen:
// Initialisierung der Variablen mit dem Benutzernamen
String userName = "Vasya";
Fast wie Regieanweisungen im Drehbuch: Der Kommentar erklärt das Wozu und Warum.
Mehrzeilige Kommentare
Was, wenn Sie viel zu erzählen haben? Eine richtige Geschichte? Dafür gibt es mehrzeilige Kommentare, die mit /* beginnen und mit */ enden. Alles zwischen diesen Zeichen wird vom Compiler ignoriert – auch wenn es mehrere Zeilen sind.
Beispiel:
/*
Hier geben wir den Benutzernamen auf dem Bildschirm aus.
Falls der Name fehlt, schreiben wir "Gast".
*/
System.out.println("Geben Sie Ihren Namen ein:");
Oder so:
int age = 18; /* Anfangswert des Alters
für einen neuen Benutzer */
Achtung: Sie können keine mehrzeiligen Kommentare ineinander verschachteln. Versuchen Sie nicht, schlauer zu sein als der Compiler – das funktioniert nicht.
Illustration:
| Art | Syntax | Beispiel |
|---|---|---|
| Einzeilig | |
|
| Mehrzeilig | |
|
4. Beispiele aus dem Alltag
„Deaktivieren“ einer Codezeile:
Manchmal möchten Sie einen Codeabschnitt vorübergehend nicht ausführen. Kommentare sind hier genau richtig:
// System.out.println("Text, der vorübergehend nicht benötigt wird");
Die Zeile bleibt, aber der Compiler „sieht“ sie nicht.
TODO- und FIXME-Hinweise
Programmierer sind auch nur Menschen, und manchmal muss man sich selbst daran erinnern, dass der Code noch nicht fertig ist oder dass es hier einen Bug gibt. Dafür schreibt man oft:
// TODO: Prüfung auf leere Eingabe implementieren
// FIXME: Diese Funktion berechnet die Summe falsch
Viele Editoren und IDEs heben solche Wörter sogar hervor!
Programmierer scherzen
// Für diesen Code übernehme ich keine Verantwortung. Man hat mich gezwungen, ihn gegen meinen Willen zu schreiben.
// Lieber ich_aus_der_Zukunft! Bitte verzeih mir diesen Code.
// Wenn ich so etwas noch einmal sehe, muss ich anfangen, zur Arbeit eine Waffe mitzunehmen.
// Falls diese Bedingung jemals erfüllt wird, informieren Sie mich bitte unter Tel. xxx-xxx-xxx gegen Belohnung.
// Lieber Programmierer:
//
// Wenn du mit dem "Optimieren" dieser Unterroutine fertig bist
// und erkennst, wie groß der Fehler war,
// erhöhe bitte den Zähler unten als Warnung
// für den nächsten Kollegen:
//
// kolichestvo_chasov_potrachennykh_zdes' = 42
// Als ich damit anfing, wussten nur Gott und ich, was ich tue.
// Jetzt weiß es nur noch Gott
// Manchmal habe ich das Gefühl, der Compiler ignoriert all meine Kommentare
// Ich widme meinen gesamten Code, meine ganze Arbeit meiner Frau Darlin, die
// mich, unsere drei Kinder und den Hund ernähren muss, wenn
// das in den Produktivbetrieb geht.
Ja, Kommentare können sehr witzig sein. Schließlich werden sie von echten Menschen geschrieben.
GO TO FULL VERSION