Programmieren in Java: Einführung


Kapitel 1: Einführung


Inhaltsverzeichnis

Dieses Buch ist unter einer Creative Commons-Lizenz lizensiert.


1.1 Java heute

Modernes und zuverlässiges Arbeitspferd

Java gehört zu den drei großen Programmiersprachen, die zu erlernen nie falsch ist. So handelt es sich wie bei C++ und C# um eine moderne objektorientierte Programmiersprache, die sich in der Praxis bewährt hat. Es wurden und werden nicht nur unzählige Programme in Java entwickelt. Kenntnisse in Java verbessern auch die Chancen auf dem Arbeitsmarkt, auf dem eine große Nachfrage nach Java-Entwicklern herrscht.

Java wird heute von vielen Unternehmen als Softwareplattform ausgewählt. Während andere Programmiersprachen wie C++ und C# ebenfalls sehr verbreitet sind, entscheiden sich dennoch viele Unternehmen für Java. Das liegt zum einen daran, dass Java weniger komplex ist als C++ und daher leichter zu erlernen und anzuwenden ist. Zum anderen können Java-Programme auf jedem beliebigen Computer mit jedem beliebigen Betriebssystem ausgeführt werden. Unternehmen können somit ihre Produkte nicht nur auf einem größeren Markt verkaufen - schließlich müssen Kunden kein bestimmtes Betriebssystem verwenden. Sie sind auch intern nicht an Produkte bestimmter Hersteller gebunden, sondern könnten jederzeit im Unternehmen verwendete Java-Anwendungen auf Computern mit anderen Betriebssystemen laufen lassen.

Man bezeichnet die Eigenschaft, Programme möglichst einfach in anderen Systemumgebungen laufen lassen zu können, als Portabilität. Java-Programme sind demnach äußerst portabel, da sie ohne Änderungen auf völlig unterschiedlichen Betriebssystemen laufen können. Diese Fähigkeit teilen sie mit Programmen, die in C# für die .NET-Plattform entwickelt sind. Denn auch die .NET-Plattform ist ähnlich portabel - jedenfalls in der Theorie. Da sowohl C# als auch die .NET-Plattform aus dem Hause Microsoft stammen und für Microsoft das eigene Betriebssystem Windows im Vordergrund steht, ist die Portabilität bei Java in der Praxis höher als bei C#.

Java wurde von Sun Microsystems entwickelt und 1995 in der Version 1.0 veröffentlicht. Zum damaligen Zeitpunkt war Java für Unternehmen weniger interessant. Java wurde in den 90er Jahren aus ganz anderen Gründen populär: Java ermöglichte die Entwicklung von Programmen, die in Webseiten eingebettet und somit über das Web verteilt werden konnten. Derartige Programme werden Applets genannt und verwandelten das zum damaligen Zeitpunkt eher statische Web in eine dynamische Spielwiese. So konnten mit Java zum Beispiel erstmals Chat-Anwendungen entwickelt werden, die eingebettet in Webseiten direkt im Browser verwendet werden konnten.

Seit den 90er Jahren hat sich viel getan, und Applets sind mittlerweile aus dem Web verschwunden. Das liegt zum einen daran, dass Microsoft - ursprünglich ein großer Fan von Java - Java seit vielen Jahren nicht mehr unterstützt. Die aktuellen Versionen des Internet Explorers können Java-Applets standardmäßig nicht ausführen, und Betreiber von Websites würden die große Schar an Internet Explorer-Nutzern ausschließen und als Besucher verlieren, wenn sie Java-Applets einsetzen würden. Außerdem ist heute im Browser mit Javascript vieles möglich, was damals ausschließlich mit Java möglich war. So basieren heutige dynamische Web-Anwendungen, wie sie vor mehr als zehn Jahren in Java entwickelt werden mussten, auf neuen Technologien, die unter dem Stichwort Ajax zusammengefasst werden.

Während der Erfolg von Java in den 90er Jahren eng mit dem Siegeszug des Webs verbunden war, hat sich mittlerweile der Schwerpunkt zur Anwendungsentwicklung verschoben. Anstatt in Java Applets zu entwickeln und diese eingebettet in Webseiten über das Internet zur Verfügung zu stellen, werden heute herkömliche Programme in Java entwickelt, die installiert und lokal ausgeführt werden müssen. Java hat sich in gewisser Weise von einer trendigen Internet-Programmiersprache zu einem Arbeitspferd gewandelt, das in der Softwareentwicklung kompliziertere Programmiersprachen wie C++ verdrängt hat und heute in vielen Unternehmen treue Dienste leistet.

In diesem Buch werden Ihnen dennoch zahlreiche Applets begegnen. Fast alle Beispiele sind als Applet entwickelt, damit Sie - wenn Ihr Browser Java unterstützt - diese direkt im Browser ausführen können. Sie müssen also nicht erst selbst den Quellcode kompilieren, um Beispielcode in Aktion zu sehen.


1.2 Sprachabgrenzung

Was Java ist und was nicht

Java ist nicht einfach nur der Name einer Programmiersprache. Um zum Beispiel Java-Programme auf jedem beliebigen Computer mit jedem beliebigen Betriebssystem ausführen zu können, muss Java mehr sein als eine Programmiersprache. Java ist eigentlich ein System aus Programmiersprache, virtueller Maschine und Bibliothek.

Die Programmiersprache Java definiert wie bei Programmiersprachen üblich Syntax und Semantik. Das heißt, Java legt eine Reihe von Schlüsselwörtern fest, die in dieser Programmiersprache verwendet werden können, und definiert für jedes dieser Schlüsselwörter eine Bedeutung. Die Schlüsselwörter in Java ähneln sehr denen in C++, so dass C++-Programmierer grundsätzlich sehr schnell Java lernen können. Für den Programmierneuling ist es selbstverständlich von entscheidender Bedeutung, die Syntax und Semantik von Java eingehend zu erlernen.

Man unterscheidet bei einer Programmiersprache wie Java mehrere Bestandteile: Variablen werden benötigt, um Informationen in Programmen zu speichern. Operatoren ermöglichen die Verarbeitung von Informationen, die zum Beispiel in Variablen gespeichert sind. Während mit Variablen und Operatoren bereits linear ablaufende Programme erstellt werden können, können durch Kontrollstrukturen Bedingungen überprüft werden und davon abhängig unterschiedliche Verarbeitungen vorgenommen werden. Das Zusammenstellen von Variablen, Operatoren und Kontrollstrukturen in Funktionen ermöglicht eine bessere Strukturierung von Quellcode. Durch das Zusammenfassen von Funktionen und Variablen zu Klassen steigt man in die objektorientierte Programmierung ein, die in Java zwingend vorgeschrieben ist.

Neben der Programmiersprache an sich stellt die virtuelle Maschine, abgekürzt auch Java-VM genannt, den entscheidenden Baustein dar, der die hohe Portabilität von Java ermöglicht. Wie die Java-VM funktioniert und warum sie überhaupt benötigt wird, wird nachfolgend im Kapitel beschrieben.

Mit der Bibliothek wird Java komplett. Man versteht unter der Bibliothek eine große Ansammlung an Klassen - eine Klassenhierarchie - auf die der Java-Programmierer zugreifen kann. In dieser Klassenhierarchie werden eine Menge an Hilfsmitteln zur Verfügung gestellt, mit denen der Java-Programmierer seine Anwendungen entwickeln kann. Nachdem diese Klassenhierarchie ein fester Bestandteil von Java ist, trägt sie ebenfalls zu hoher Portabilität bei. Denn jeder Entwickler kann sich sicher sein, wenn er eine der Klassen in seinem Projekt verwendet, dass die Klasse auch bei anderen Anwendern zur Verfügung steht und sein Programm auch auf fremden Computern funktioniert.


1.3 Vom Quellcode zum Programm

Kompilieren und Interpretieren

Um ein Java-Programm zu erstellen, wird der Quellcode in einer einfachen Textdatei gespeichert. Damit das Java-Programm auch ausgeführt werden kann, muss der Quellcode in Maschinencode umgewandelt werden. Denn während der Programmierer Quellcode versteht, versteht die Maschine nur Maschinencode.

Die Umwandlung von Quellcode in Maschinencode führt ein Compiler durch. Der Compiler schaut sich die Textdatei mit dem Quellcode an und übersetzt den Quellcode Schritt für Schritt in Maschinencode.

Der Maschinencode, den der Java-Compiler erstellt, unterscheidet sich jedoch erheblich von Maschinencode, wie ihn beispielsweise ein C++-Compiler erstellt. Denn der Java-Compiler erstellt keinen Maschinencode für einen bestimmten Prozessor wie beispielsweise einem Intel-Chip, sondern Maschinencode für einen nicht existierenden Java-Prozessor. Man nennt diesen Code, der von gar keinem real existierenden Prozessor ausgeführt werden kann, auch nicht Maschinencode, sondern Bytecode. Wie kann aber ein Java-Programm, das nun in Bytecode vorliegt, ausgeführt werden, wenn es gar keinen Chip geht, der diesen Code versteht?

Die Antwort liegt in der Java-VM. Die virtuelle Maschine ahmt einen echten Prozessor nach, der in der Lage ist, Bytecode auszuführen. Diese virtuelle Maschine ist dabei nichts anderes als ein ganz gewöhnliches Programm, das Dateien mit Bytecode liest und die Anweisungen im Bytecode ausführt. Die Java-VM tut also so als wäre sie ein echter Java-Prozessor und gaukelt einem Java-Programm eine Hardwareumgebung vor, die in Wirklichkeit gar nicht existiert.

Jetzt sollte auch klar sein, warum Java-Programme im Gegensatz zu Programmen in anderen Programmiersprachen auf jedem Betriebssystem und auf jedem Prozessortyp laufen: Das Betriebssystem und der Prozessor haben mit der Ausführung des Java-Programms gar nichts zu tun. Es kommt nur darauf an, dass eine Software auf dem betreffenden Betriebssystem zur Verfügung steht, die den Bytecode interpretieren kann. Und diese Software - also die Java-VM - existiert quasi für jedes erdenkliche Betriebssystem - von Windows über Linux bis hin zu Betriebssystemen, wie sie beispielsweise in Mobiltelefonen zum Einsatz kommen.


1.4 Java Development Kits im Internet

Compiler und sonstige Entwicklungswerkzeuge

Im Internet stehen verschiedene sogenannte Development Kits zur Verfügung, mit denen in Java programmiert werden kann. Diese Development Kits beinhalten mindestens einen Compiler, eine virtuelle Maschine und die Java-Bibliothek.

Das wichtigste Paket stammt von Sun Microsystems und nennt sich Java Development Kit - abgekürzt als JDK. Die aktuelle Version JDK 6 steht wie alle Vorgängerversionen kostenlos zum Download zur Verfügung.

Neben dem JDK des Java-Erfinders gibt es weitere Development Kits wie beispielsweise Harmony von Apache oder Developer Kits von IBM. Mit allen Development Kits ist es grundsätzlich möglich, Java-Programme zu entwickeln. Die Development Kits können sich jedoch in Entwicklungswerkzeugen, der Dokumentation oder auch der Implementierung der Java-VM oder Klassenbibliothek unterscheiden.

Wenn Sie keinen guten Grund haben, ein anderes Development Kit einzusetzen, sollten Sie sich für das JDK von Sun Microsystems entscheiden. In diesem Buch wird davon ausgegangen, dass Sie genau dieses JDK einsetzen.

Beachten Sie, dass Sun Microsystems verschiedene Editionen des JDK anbietet. Unter obigem Link finden Sie die Standard Edition, die Sie immer vorziehen sollten, wenn Sie keinen guten Grund haben, eine andere Edition einzusetzen. Neben der Standard Edition gibt es von Sun Microsystems auch ein JDK in einer Enterprise Edition und Micro Edition. Diese Editionen unterscheiden sich von der Standard Edition derart, dass sie für spezielle Systemumgebungen optimiert sind - wie Unternehmen oder mobile Geräte. So beinhaltet zum Beispiel die Enterprise Edition Komponenten, mit denen Serveranwendungen in Java entwickelt werden können - etwas, was mit der Standard Edition nicht möglich ist.


1.5 Mein erstes Java-Programm

Hallo, Welt!

Sie werden nun Ihr erstes Java-Programm entwickeln und dabei den kompletten Ablauf vom Schreiben des Quellcodes über die Kompilierung bis hin zur Ausführung durchlaufen. Geben Sie folgenden Quellcode in einen Text-Editor ein und speichern Sie die Datei dann als MyApplet.java.

import java.applet.*; 
import java.awt.*; 

public class MyApplet extends Applet 
{ 
  private Label MyLabel = new Label(); 

  public void init() 
  { 
    MyLabel.setText("Hallo, Welt!"); 
    add(MyLabel); 
  } 
} 

Obiges Beispielprogramm ist ein Applet. Ein Applet ist eine Java-Anwendung, die innerhalb eines Browsers läuft. Während ein Applet also nur im Browser läuft, können mit Java auch Anwendungen erstellt werden, die ohne Browser laufen (nicht aber ohne virtuelle Maschine). Man spricht dann nicht von einem Applet, sondern von einer gewöhnlichen Application, also Anwendung. Applet meint ein Code-Schnippsel, das sozusagen in den Browser eingefügt wird. Im zweiten Kapitel wird Ihnen ein Beispiel-Code für eine Application vorgestellt, die ohne Browser läuft.

Sie haben nun Ihren Quellcode erstellt und ihn in einer Datei namens MyApplet.java gespeichert. Achten Sie darauf, dass die Datei auch tatsächlich so heißt. Der Dateiname muß mit dem Namen der Klasse übereinstimmen, den Sie im Quellcode angegeben haben. Die Endung der Datei sollte bei Java-Quellcodes java lauten.

Nun geht es darum, den Quellcode zu übersetzen. Sie benötigen hierfür einen Compiler, den Sie wie beschrieben beispielsweise auf der Website von Sun Microsystems herunterladen können. Der Compiler für Java-Programme heißt bei Sun javac. Um nun Ihren Quellcode mit dem Compiler von Sun zu kompilieren, geben Sie in der MS-DOS-Eingabebox folgendes ein: javac MyApplet.java.

Gegebenenfalls müssen Sie explizit angeben, wo sich javac und die Datei MyApplet.java befinden, damit der Befehl ausgeführt werden kann.

Hat javac den Quellcode kompiliert, befindet sich im gleichen Verzeichnis wie die java-Datei nun eine Datei namens MyApplet.class. In dieser Datei befindet sich der Bytecode für die virtuelle Maschine.

Nachdem es sich um ein Java-Applet handelt, das innerhalb des Browsers ausgeführt werden muss, müssen wir es irgendwie in den Browser laden. Das Java-Applet direkt in den Browser laden funktioniert nicht. Es muss über eine Webseite eingebunden werden. Geben Sie hierzu folgenden HTML-Code in einen Text-Editor ein und speichern Sie die Datei unter MyApplet.htm im gleichen Verzeichnis wie Ihren Java-Quellcode und die class-Datei. Wichtig ist vor allem die Dateiendung htm.

<html>
  <head>
    <title>Programmieren in Java: Einführung</title>
  </head>
  <body>
    <applet code="MyApplet.class" width="200" height="30">
    </applet>
  </body>
</html>

Laden Sie nun die HTML-Seite in Ihren Browser. Unterstützt Ihr Browser Java und ist Java aktiviert, sollten Sie im Browser ein Java-Applet sehen, das die Meldung Hallo, Welt! ausgibt.

Die Einbindung von Java-Applets in Webseiten findet über den HTML-Tag <applet> statt. Hinter dem Attribut code wird der Name der Datei angegeben, in der sich der Bytecode befindet. Die Attribute width und height definieren, wieviel Platz das Java-Applet in der Webseite einnehmen soll. Die Maßeinheit ist Pixel.


1.6 Batch-Dateien

Hilfe für den geplagten Java-Programmierer

Ohne komfortable Entwicklungsumgebung bleibt dem Java-Entwickler nichts anderes übrig, als Quellcodes jeweils mit Hilfe der freiverfügbaren Konsolenanwendungen zu kompilieren. Um sich die Arbeit unter Windows ein wenig einfacher zu machen, legen Sie folgende Datei an und speichern Sie sie als compile.bat in dem Verzeichnis, in dem sich Ihr Quellcode befindet.

@echo off 
echo Java-Kompilierung gestartet ... 
"C:\Programme\Java\jdk1.6.0\bin\javac" *.java 
cls 

Wann immer Sie nun Ihren Quellcode kompilieren möchten, machen Sie in Windows einfach einen Doppelklick auf diese Datei. Es handelt sich hierbei um eine Batch-Datei, mit denen ursprünglich unter MS-DOS und heute auch unter Windows Aufgaben automatisiert werden können. In diesem Fall wird der Compiler von Sun, nämlich das Programm javac im angegebenen Verzeichnis gestartet und auf alle Dateien angewandt, die auf die Endung java lauten. Wenn Sie die Batch-Datei auf Ihrem System verwenden wollen, müssen Sie gegebenenfalls den Pfad zu javac anpassen.

Wenn Sie die letzte Zeile aus der Batch-Datei entfernen und cls löschen, bleibt das Fenster, das bei Doppelklick auf die Batch-Datei erscheint, offen und schließt sich nicht automatisch. Das ist besonders dann wichtig, wenn der Compiler Fehler meldet und sie im Fenster ausgibt. Diese Fehlermeldungen helfen Ihnen, Fehler in Ihrem Code zu finden. Daher sollte das Fenster in diesem Fall nicht automatisch geschlossen werden.


1.7 Java-Versionen

Weiter, höher, schneller

Die aktuelle Java-Version ist 6 - jedenfalls ist das die Versionsnummer, die Sun nach außen kommuniziert. Intern ist die aktuelle Versionsnummer 1.6. Diese Versionsnummer wird zum Beispiel von den Entwicklungswerkzeugen im JDK 6 ausgegeben, wenn Sie ihnen den Kommandozeilenparameter -version übergeben.

Dass die interne Versionsnummer 1.6 lautet, ist historisch bedingt. Die ersten Java-Versionen hießen schlichtweg 1.0 und 1.1. Mit der Version 1.2 wurde eine neue Bezeichnung namens Java 2 Plattform eingeführt: Die 2 hinter dem Punkt wurde hervorgeben, weil die neue Version große Änderungen im Vergleich zu 1.0 und 1.1 brachte. Da die Bezeichnung beibehalten wurde, hatten die nachfolgenden Versionen die etwas merkwürdige Bezeichnung Java 2 Plattform 1.3 und Java 2 Plattform 1.4. Mit dem Nachfolger hat man dann wieder für mehr Klarheit gesorgt: Dieser hieß einfach Java 5.

Mit jeder neuen Version wurden Änderungen vorgenommen, um Java besser zu machen. Zwei Versionssprünge führten zu sehr einschneidenden Änderungen:

  • In Java 1.2 wurde eine neue Klassenhierarchie namens Swing eingeführt, um grafische Benutzerschnittstellen zu entwickeln. Swing ersetzt die seit der ersten Version existierende Klassenhierarchie AWT, mit der in Java 1.0 und Java 1.1 grafische Benutzerschnittstellen entwickelt wurden. Wie bereits erwähnt drückt sich dieser Sprung auch im Namen aus, da Java seit der Version 1.2 als Java 2 Plattform bezeichnet wurde.

  • Seit Java 5 (intern als 1.5 bezeichnet) wird die sogenannte generische Programmierung unterstützt, die die Wiederverwendung von Code vereinfacht. Es handelte sich hierbei insofern um einen großen Einschnitt, weil nicht einfach nur die Klassenbibliothek erweitert wurde, sondern tatsächlich die Programmiersprache Java selbst verändert wurde. Derartige Änderungen sind insofern problematisch als dass sichergestellt werden muss, dass bisher geschriebener Java-Quellcode durch die Einführung neuer Regeln nicht ungültig wird.

Abgesehen von diesen einschneidenden Änderungen führte jede neue Java-Version grundsätzlich dazu, dass die Klassenbibliothek anwuchs. Gab es in Java 1.0 lediglich etwas mehr als 200 Klassen, besteht die Bibliothek von Java 6 aus mehr als 2000 Klassen. Sie werden noch sehen, was Klassen genau sind und wie Sie sie anwenden. Die Zahlen verdeutlichen aber bereits, dass es inzwischen unmöglich ist, sich mit der gesamten Klassenbibliothek vertraut zu machen. Je nachdem, welche Anwendungen Sie später in Java entwickeln, werden Sie sich auf bestimmte Teile der Klassenbibliothek konzentrieren - wie beispielsweise Swing, wenn Sie grafische Benutzeroberflächen erstellen wollen. Mit anderen Teilen der Klassenbibliothek werden Sie nie in Berührung kommen, weil Sie die dort zur Verfügung stehenden Klassen in Ihren Projekten nicht benötigen.

In diesem Buch wird Ihnen die Klassenbibliothek nicht explizit vorgestellt. Dieses Buch dreht sich vorwiegend um die Merkmale der Programmiersprache Java. Erst dann, wenn Sie diese beherrschen, macht es Sinn, sich die Klassenbibliothek näher anzusehen. Dies geschieht im Buch Programmieren in Java: Aufbau.