Kurzeinstieg Java: Erste Schritte

Aus Wikibooks

Erste Schritte[Bearbeiten]

Hier kommen wir direkt zu unserem ersten Programm. Wir werden ein Programm schreiben, das auf der Eingabeaufforderung (oder Konsole, wenn Sie Linux verwenden sowie Terminal unter Mac) eine Textmeldung ausgibt und sich danach einfach wieder beendet.

  • Unter Windows erreichen sie die Eingabeaufforderung - auch als DOS-Fenster bekannt - indem Sie das Windows Menü öffnen und cmd eingeben und Return drücken bzw. wählen Sie das Programm cmd aus den Suchergebnissen aus.
  • Unter Linux können Sie über das Menü die Konsole auswählen oder mit ALT + Funktionstasten zu einer freien Konsole wechseln.
  • Unter BSD sind sie bereits in der Eingabeaufforderung oder führen die Befehle analog Linux aus.
  • Unter macOS finden sie das Programm "Terminal" im Launchpad.

Hello Java World![Bearbeiten]

Jetzt starten Sie bitte Ihren Editor oder Ihre IDE. Dort geben Sie das folgende Programm ein. Achten Sie dabei genau auf die Groß- und Kleinschreibung! Alternativ können Sie das Programm auch einfach aus dieser Webseite kopieren und in den Editor einfügen, so sind Sie ein paar Sekunden schneller und müssen sich nicht um die Groß-/Kleinschreibung kümmern.

Machen Sie sich jetzt noch keine Gedanken darüber, was die einzelnen Befehle zu bedeuten haben, die Erklärung folgt ein wenig weiter unten.

public class HelloWorld {
      public static void main(String[] args) {
          System.out.println("Hello Java World");
          System.exit(0);
      }
}

Speichern Sie das Programm jetzt in einem Verzeichnis Ihrer Wahl unter dem Namen HelloWorld.java. Beachten Sie bitte genau auch hier die Groß- und Kleinschreibung des Dateinamens und ändern Sie den Namen nicht. Es muss unbedingt der Name sein, den Sie in der Programmzeile public class HelloWorld verwendet haben, ergänzt um die Dateinamensendung .java.

Gehen Sie jetzt in der Eingabeaufforderung in dieses Verzeichnis und übersetzen Sie das Programm mit folgendem Befehl:

javac HelloWorld.java

Ein möglicher Fehler ist error: cannot read: HelloWorld.java. Schreiben Sie dann einfach den Pfad davor (~/meineJavaProgramme/HelloWord.java unter MacOS und Linux, C:\Pfad\HelloWorld.java unter Windows). Ein kurzer Pfad ist empfehlenswert. Wenn die Übersetzung fehlerfrei durchgelaufen ist, können Sie das Programm mit der folgenden Eingabe ausführen:

java HelloWorld

Fallen Ihnen zwei kleine, aber wichtige Unterschiede bei den beiden Befehlen auf? Richtig:

  1. Im ersten Fall (zum Compilieren) wird das Programm javac (mit einem 'c' am Ende) verwendet. Im zweiten Fall (zum Ausführen) aber das Programm java (ohne 'c' am Ende).
  2. Beim Compilieren mit javac mussten Sie die Dateinamensendung .java mitangeben. Bei der Programmausführung mit java dürfen Sie diese Endung nicht mitangeben.

Falls eine Fehlermeldung wie

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld

auftritt, müssen Sie nachschauen, ob der aktuelle Pfad auch im CLASSPATH enthalten ist. Ebenso sollten Sie genau prüfen, ob Sie der Java-Datei wie oben beschrieben den richtigen Namen gegeben haben, und ob Sie versehentlich die Endung des Dateinamens beim Aufruf von java angegeben haben.

Wenn das Programm fehlerfrei durchgelaufen ist, dann müsste auf der Konsole der folgende Text erscheinen:

Hello Java World

Hello Java![Bearbeiten]

An dieser Stelle haben Sie bereits Ihr erstes Java-Programm geschrieben und wollen nun wissen, was denn nun diese einzelnen Befehle und kryptischen Zeichen bedeuten.

Hier ist nochmals das Quelltext unseres Hello-World-Programms:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello Java World");
        System.exit(0);
    }
}

Wir haben die Zeilen durchnummeriert, um so die Bestandteile des Programms besser erklären zu können.

In der ersten Zeile definieren wir die Klasse HelloWorld. Dabei ist zu beachten, dass die Klasse wie der Dateiname heißen muss, also in unserem Beispiel muss die Datei "HelloWorld.java" heißen. Jeder kann auf unsere Klasse zugreifen, deshalb ist sie auch public. Man kann die Rechte von Klassen auch einschränken, aber dazu kommen wir später.

In Zeile zwei wird die main()-Methode definiert. Diese finden Sie bei jeder Java-Anwendung (Applikationen). Diese ist sozusagen das Herz jeder Java-Anwendung. Von dieser Methode ausgehend können Sie sich die komplette Funktionsweise eines Programms erschließen.

In der Zeile 3 geben wir unsere Meldung, bei uns "Hello Java World", aus, was nicht allzu viel zu sagen hat, aber der Zweck unseres Programms ist. Nebenbei bemerkt ist es ein kultureller Aspekt, in einem Buch zur Programmierung ein "Hello World"-Programm zu zeigen. Man ehrt damit die Erfinder der Sprache C, Brian Kernighan und Dennis Ritchie. Sie finden in fast jedem Buch zu Programmiersprachen ein solches "Hello-World"-Programm.

Die vierte Zeile heißt, dass wir die Anwendung beenden wollen und zwar mit einem Rückgabewert von 0. Dies beendet auch gleichzeitig die Java Virtual Machine (JVM), sodass wir wieder auf der Eingabeaufforderung landen. Auch hierbei gilt, dass nur Java-Anwendungen mit diesem Befehl beendet werden. In der Eingabeaufforderung kann man diesen Wert auch auswerten, so dass man z.B. ein Java-Programm schreiben kann, das durch verschiedene Rückgabewerte den Ablauf eines Batch-Programmes oder Shellskripts steuern kann.

Pakete[Bearbeiten]

Java-Klassen und auch Schnittstellen (Interface) können und werden in so genannte Pakete (Packages) gruppiert. Ein Paket ist dabei einfach eine Sammlung von Klassen. Pakete werden in den geläufigen Betriebssystemen in Form von Verzeichnissen abgebildet. Klassen und Schnittstellen, welche in einem Paket liegen, beginnen dabei mit der package-Anweisung, gefolgt von den Paketnamen und dem Semikolon. Zum Beispiel:

 package org.wikibooks.de.java;

Üblicherweise gruppiert man thematisch verwandte Klassen in einem Paket.

Oft ist der Domainname des Herstellers oder Autors Teil des Paketnamens, so dass ein Programmierer schnell die Herkunft des Pakets ermitteln und auf der zugehörigen Webseite weitere Informationen zu dem Paket finden kann. Hierbei wird zudem eine Eindeutigkeit der Pakete und somit der Java Klassen / Schnittstellen erreicht. Beispiel: org.apache.log4j → www.apache.org

Ob man in seine eigenen Quelltexte eine package-Anweisung schreibt oder nicht ist abhängig vom Umfang seines Programmes, gehört jedoch zum guten Ton unter Java Entwicklern. Schreibt man keine package-Anweisung hinein, dann gehören automatisch alle Klassen zu einem gemeinsamen Paket. Arbeitet man mit anderen Paketen von Drittherstellern, dann kann es zu Namenskollisionen kommen. Hat man beispielsweise eine Klasse Auto geschrieben und importiert nun von einem Hersteller eine Klasse Auto, dann kommt es zu Konflikten. Gruppiert man seine Klassen in Paketen, dann ist immer klar, welche Auto-Klasse gemeint ist. Ein Paket stellt also einen eigenen Namensraum dar.

Klassenbibliothek[Bearbeiten]

Java enthält eine sehr umfangreiche Klassenbibliothek. Es ist dringend zu empfehlen, bei der Installation von Java auch die zugehörige Klassenbibliotheksdokumentation (API Documentation) herunterzuladen und lokal zu installieren, bzw. in die IDE zu integrieren. Die Klassenbibliothek ist dabei in Module zerlegt.

Die beim Java Standard Edition mitgelieferte Klassenbibliothek ist in Pakete (packages) und Module eingeteilt. Es lohnt sich, sich im Laufe der Zeit zumindest einen Überblick über die vorhandenen Pakete und deren grundsätzliche Bedeutung zu verschaffen. Einige Pakete werden bei jeder Art von Java-Programmierung so häufig gebraucht, dass deren Inhalt früher oder später in Fleisch und Blut übergehen sollte.

Dabei ist es ist nicht unbedingt notwendig, jeden einzelnen Methodenparameter auswendig zu lernen (Ausnahme: Einige gerade im US-amerikanischen Raum beliebte Programmierer-Zertifizierungen fragen solches "Wissen" in ihren Zertifizierungstests ab). Methodenparameter kann man immer schnell in der API-Dokumentation nachschlagen, oder sie werden von modernen IDEs sogar direkt angezeigt. Eine grundsätzliche Vorstellung davon, was wo und wofür in der Klassenbibliothek zu finden ist, sollte man allerdings schon haben, um zügig arbeiten zu können und halbwegs effiziente Programme zu schreiben.

Zu Anfang lohnt es sich einen Blick auf die Dokumentation der Klassen in den folgenden Paketen zu werfen:

  • java.lang, Basis-Klassen wie Object. Quasi das Rückgrat der Sprache (lang meint Language, auf Deutsch also Sprache),
  • java.io und java.nio, Einfache Ein- und Ausgabeklassen für Text- und Binärdaten, Dateizugriffe und Kodierung und Enkodierung von Daten,
  • java.util, sehr nützliche Hilfsklassen. Insbesondere finden sich hier die sog. Collection classes. Dies ist eine Sammlung von Klassen, die gängige Datenstrukturen zur Verknüpfung von Objekten bereitstellen. Dank dieser Klassen ist es für einen Java-Programmierer in den allermeisten Fällen unnötig z.B. selber Listen, Mengen oder eine Hashtable zu implementieren.

Je nach dem, welche Art von Programmen man entwickeln möchte, sollte ein Blick in folgende Pakete folgen:

  • java.net, Basisklassen für Netzwerkkommunikation,
  • java.awt und javax.swing, Klassen zur Programmierung grafischer Benutzeroberflächen

Der Aufbau von Java-Quelltexten[Bearbeiten]

Java Quelltexte bestehen aus höchstens einer package-Anweisung. Es folgen einige Klassen, den Aufbau von Klassen besprechen wir in einem späteren Kapitel. Jede Klasse besteht aus einer optionalen Menge von Konstanten und Variablen sowie Methoden.

Bezeichner[Bearbeiten]

Bezeichner sind alle Worte, die einer Klasse, Methode, Variablen oder Konstanten und so fort einen Namen geben. Hierbei haben sich einige Regeln eingebürgert, die im Rahmen der Java-Coding-Standards definiert sind. Weitere Hinweise dazu im Kapitel Programmierstil. Grundsätzlich dürfen Sie alle Zeichen verwenden. Bezeichner dürfen nur mit Buchstaben, "$" und dem Unterstrich "_" beginnen. Buchstaben dürfen aus der Menge aller Unicode-Letter gebildet werden. Anschließend dürfen Buchstaben, Ziffern, "$" und "_" folgen. Bezeichner dürfen keine reservierten Schlüsselwörter sein. Tiefergehende Details dazu finden Sie unter http://docs.oracle.com/cd/E19798-01/821-1841/bnbuk/index.html.

Variablen[Bearbeiten]

Variablen sind benannte Speicherorte. Variablen haben in Java grundsätzlich einen Typ, der vom Programmierer festgelegt wird. Die Ausnahme wird mit var eingeleitet. Die Gültigkeit einer Variable hängt davon ab, wo sie deklariert wurde. Variablen, die in Klassen außerhalb von Methoden deklariert wurden sind allen Methoden der Klasse bekannt. Variablen, die innerhalb von Methoden deklariert wurden, sind innerhalb der Methode bekannt. Methodenparameter sind in der gesamten Methode bekannt. Innerhalb eines Gültigkeitsbereiches darf es keine zwei Variablen mit demselben Namen geben. Als Merkregel reicht zumeist aus: "Die Gültigkeit einer Variablen reicht von "{" bis "}" der gleichen Tiefe." auch Block genannt. Auf Besonderheiten weisen wir an passender Stelle hin.

Probieren Sie es aus:

public class Testklasse {

  public static void main(String[] args) {

    int v = 33;
  
    {     // neuer Block
        int v = 99;
        System.out.println(v);
    }
    System.out.println(v);
  }  
     
}

Hier wird die Variable "v" in einem neuen Block, bestehend aus einem geschweiften Klammerpaar, neu deklariert. Ist das erlaubt? Finden Sie es heraus.