Zum Hauptinhalt

Grundlegendende Programmierkonzepte in Java

Hier lernst du die grundlegenden Konzepte kennen und hast die Möglichkeit, dies als Tagebuch festzuhalten.

Ein- und Ausgabe

Noch haben wir kein wirklich dynamisches Programm. Es erzeugt noch immer eine Ausgabe, die sich nur während der Programmierung und nicht während der Laufzeit ändern lässt. Das wollen wir jetzt ändern. Ziel ist es einen Dialog zur Ein- und Ausgabe von Daten zu erstellen.

Hierfür bietet Java unter anderem sogenannte Scanner an. Ein Scanner kann aus sogenannten InputStreams zeilenweise lesen. Für unser Beispiel wollen wir den InputStream System.in verwenden. Dieser nimmt die Eingaben aus der Konsole entgegen, in der das Programm ausgeführt wird. Das Gegenstück zu System.in ist System.out. System.out ist ein sogenannter OutputStream. Genau genommen der OutputStream, der in die Konsole führt in der das Programm gestartet wurde.

Um den Scanner verwenden zu können, müssen wir ihn wieder als erstes als Variable deklarieren und danach initialisieren. Zur Initialisierung von Objekten wird in Java das Schlüsselwort “new” verwendet und danach eine Methode aufgerufen, die genau wie der Typ heißt. Wir schreiben also Scanner scanner = new Scanner(System.in);

Nach der Initialisierung ist der Scanner bereit zur Verwendung. Mit der Methode scanner.next() kann jetzt eine Zeile von der Konsole gelesen werden. Wird die Methode aufgerufen, so wartet das Programm auf Eingaben des Benutzers und wird erst fortfahren, wenn der Benutzer die Eingabe mit Enter bestätigt. Die Methode gibt die Zeile als String zurück.

Als vollständiges Beispiel ergibt sich:


import java.util.Scanner; public class Tagebuch { public static void main(String[] args) { System.out.println("Wie heißt du?"); Scanner scanner = new Scanner(System.in); String name = scanner.next(); scanner.close(); System.out.println("Hallo " + name + "!"); } }
Das Schlüsselwort new

Durch das Schlüsselwort new wird Java angewiesen ein neues Objekt zu erstellen. Man spricht auch davon, dass eine Instanz erzeugt wird. Durch den new Aufruf reserviert Java den nötigen Speicherbereich für das Objekt. Es bekommt jedes Objekt immer seinen eigenen Speicherbereich. So kann man z.B. zwei Objekte vom Typ String erzeugen. Auch wenn diese das gleiche Wort speichern, liegen diese an zwei unterschiedlichen Stellen im Speicher und könnten unabhängig von einander verändert werden.

Objekte gehören immer einem Typ an. Der Name des Types muss daher schon bei der Instanziierung benötigt.

Die Erzeugung von Strings ist hier eine Besonderheit. Die kurze Schreibweise "Hallo" wird vom Compiler verstanden als


new String ("Hallo")

Es wird also jedes Mal ein eigener Speicherbereich für die Zeichenkette reserviert.

Der Scanner

Scanner bieten die Möglichkeit Text zeilenweise einzulesen. Um einen Scanner zu initialisieren muss muss ein eine neue Instanz erzeugt werden. Zusätzlich muss ein InputStream (z.B. System.in) als Datenquelle übergeben werden.

Durch die Methode next() wird der Programmablauf blockiert bis eine Zeile eingegeben wurde. Die eingegebene Zeile wird dann zurück gegeben.

Die Methode close() teilt Java mit, dass aus dem Scanner nicht mehr gelesen werden soll und dieser geschlossen werden kann.

Das Schließen des Scanners ist in unserem Beispiel eigentlich nicht erforderlich. Es ändert nichts. Dennoch ist es eine gute Praxis die close-Methoden zu verwenden, wenn ein Datentyp diese anbietet und das jeweilige Objekt ausgebraucht ist. Erst hierdurch wird Java mitgeteilt, dass die verwendete Eingabe-Ressource nicht mehr gebraucht wird. Java gibt dann die Ressource frei und entlastet damit das Betriebssystem, welches die Ressource sonst weiter bereitstellen müsste. In unserem Beispiel ist das noch nicht kritisch, da mit dem Beenden des Programms ohnehin alle Ressourcen freigegeben werden.