.01 – Einführung

 

Einführung in die Programmiersprache Java

Java ist eine von der Firma Sun Microsystems entwickelte objektorientierte Programmiersprache. Die Besonderheit von Java gegenüber vielen anderen Programmiersprachen ist, dass Java Programme ohne weitere Anpassungen auf verschiedenen Computern und Betriebssysteman laufen. Es muss auf diesen Systemen lediglich eine “Java Virtual Machine” vorhanden sein, die die Programme interpretiert und kompiliert.
Sun selbst bietet Java-VMs für die Betriebssysteme Linux, Solaris und Windows an. Andere Hersteller lassen ihre Java-VM für ihre Plattform zertifizieren, zum Beispiel die Firma Apple für Mac OS X.

Die fünf Grundsätze von Java:

  • Objektorientierung
  • Unabhängigkeit von verschiedener Hardware und Betriebssystemen
  • Integrierte Unterstützung für Computernetzwerke
  • Sichere Ausführung von Code über Netzwerke (mehrschichtiges Sicherheitskonzept)
  • Übernahme erfolgreicher Aspekte bereits etablierter Programmiersprachen wie C++

Unterschiede zu ähnlichen Sprachen

JavaScript:
Java ist nur entfernt mit der Programmiersprache JavaScript verwandt, welche vor allem in HTML-Seiten zur integrierten Programmierung und nur selten für größere Projekte verwendet wird. Auch die Syntax unterscheidet sich in vielerlei Hinsicht.

C++:
Java ist aus C++ entstanden und hat somit fast alle Vorteile dieser Programmiersprache. Die Syntax ist fast identisch. Allerdings hat der Benutzer von Java insofern weniger Möglichkeiten, dass vor allem in der Speicherverwaltung viele Funktionen von C++ nicht zur Verfügung stehen. Auf diese wurde aber bewusst verzichtet, damit Java leichter zu handhaben ist und der Code nicht mit komplexer Semantik überladen wird.

Arten von Javaprogrammen

Mit Java erstellt man im Gegensatz zu vielen anderen Programmiersprachen im Normalfall keine ausführbaren Dateien (z.B. “.exe” unter Windows), sondern der Code wird direkt von der Java VM interpretiert. Das hat den Nachteil, dass der Endnutzer der Programme immer erst Java installieren muss, um die Anwendungen ausführen zu können. Der Vorteil ist aber eine weitgehende Plattform-Unabhängigkeit und außerdem ein geringerer Speicherbedarf für die Anwendungen. So sind simple Anwendung in Java nur wenige kb groß.

Bei den Anwendungen unterscheidet man zwischen Applications und Applets. Applications sind dafür gedacht, als normale Programme auf Computern zu laufen, wohingegen Applets in Internetseiten integriert werden können. Die Vorgehensweise zum Schreiben der beiden Anwendungstypen ist aber weitgehend identisch.

Was ist Objektorientierung?

Die Grundidee der objektorientierten Programmierung ist die softwaretechnische Abbildung in einer Art und Weise, wie wir Menschen auch Dinge der realen Welt erfahren.
Die Programmiersprache Java unterscheidet zwischen Objekten und Klassen.
Eine Klasse ist eine Verallgemeinerung eines bestimmten Schemas. Eine mögliche Klasse wäre zum Beispiel:

Student[/code]

Hier ist kein bestimmter Student gemeint, sondern quasi ein verallgemeinerter "Prototyp" für alle Studenten.
Die Klasse "Student" hat verschiedene Eigenschaften.
Beispiele:

1
Alter
Matrikelnummer
Studiengang

Ein Objekt ist nun eine Ausprägung der verallgemeinerten Klasse, also in unserem Fall EIN konkreter Student, zum Beispiel

Student maier
Student mueller

Diese speziellen Studenten können nun genauer Definiert werden, indem die Eigenschaften, die in der Klasse "Student" definiert sind, mit Werten gefüllt werden. Dies tut man in Java mit den folgenden Befehlen:

Student maier;
Student mueller;

maier.Alter = 20;
maier.Matrikelnummer = 581723;
maier.Studiengang = "Mathematical Engineering-LRT";

maier.Alter = 21;
maier.Matrikelnummer = 581724;
maier.Studiengang = "Mathematical Engineering-LRT";

Mit den ersten beiden Zeilen werden die Studenten Maier und Müller "erschaffen". Aus einer Klasse können so beliebig viele Objekte definiert werden. In den übrigen Zeilen werden ihnen Eigenschaften zugewiesen. Die Syntax hierfür ist in Java die folgende:

Objekt.Eigenschaft = Wert;

Der Punkt trennt das Objekt von der Eigenschaft und zeigt, dass es sich bei der Eigenschaft um eine Eigenschaft VON dem Objekt handelt. Mit dem = wird ein Wert zugewiesen, wobei Text in Anführungsstriche gesetzt wird und Zahlen nicht. Das Semikolon beendet den Befehl. Als Mensch würde man natürlich auch ohne das Semikolon erkennen, dass mit der Zeile auch der Befehl zu Ende ist, aber die Java-VM akzeptiert auch Programme, die komplett in eine Zeile geschrieben sind. Um dort noch die Befehle auseinanderhalten zu können, benutzt man das Semikolon.

Nun kann ein Objekt aber mehr, als nur Eigenschaften besitzen. Es kann auch Aktionen ausführen. Dies wird in Java mit sogenannten "Methoden" verwirklicht. Eine mögliche Methode des Objektes Student wäre:

Student.anmelden(String Fach)

Hier trennt der Punkt das Objekt von seiner Methode. In den Klammern steht, welche Informationen man der Methode mitgeben muss, damit sie ausgeführt werden kann. Wenn einem Studenten nur gesagt wird "melde dich an!", dann weiß er wohl nicht, was zu tun ist. Wenn man ihm aber sagt: "melde dich an, für mathe!", dann wird er damit schon mehr anfangen können. Das "String" bedeutet, dass man das gewünschte Fach als Zeichenkette in Anführungsstrichen angeben soll (Die Aufforderung "melde dich an, für 23" wäre auch nicht sehr sinnvoll...).
Um die so geschaffene Methode zu verwenden schreibt man in Java:

maier.anmelden("Analysis I");
maier.anmelden("Programmieren");

Beim Schreiben eines Programmes kommt man nicht an Objekten vorbei, allerdings ist Java nicht vollständig objektorientiert: Die Grunddatentypen (int, boolean usw.) sind keine Objekte.

Endlich-Das erste Programm sagt "Hello World!"

Wir wollen nun unser erstes komplettes Programm in Java schreiben. Hierfür benötigen wir noch ein paar Grundlagen.

Da Java Objektorientiert ist, besteht das komplette Programm aus einer Klasse. Alles was man mit dem Programm tut, geschieht in dieser Klasse. Wir nennen unsere Programm-Klasse "HelloWorld":

public class HelloWorld
{
	// Inhalt der Klasse
}

Mit dem Befehl "class HelloWorld" wird die Klasse erschaffen, mit dem "public" entscheiden wir, dass diese Klasse von jedermann und nicht nur von uns selbst genutzt werden kann.
Unter dieser Definition befinden sich geschweifte Klammern. Diese umfassen den Bereich, in dem die Eigenschaften und Methoden der Klasse definiert werden. Für eine bessere Lesbarkeit sollte man alles, was man in solche geschweifte Klammern schreibt, um einen Tabulator nach rechts einrücken. Dies hat keinen Einfluss auf das Programm und dient ausschließlich der Übersichtlichkeit.
Im Beispiel sehen wir auch gleich, wie man in Java einen Kommentar schreibt. Alles was hinter "//" steht, wird von der Java-VM nicht beachtet und dient nur dem Programmierer (oder anderen Programmierern, wenn er seinen Code weitergibt).

Es können auch weitere Klassen benutzt werden, daher muss die "Hauptklasse" gesondert gekennzeichnet werden. Diese Kennzeichnung besteht darin, dass die Hauptklasse die Funktion "main" enthält:

public class HelloWorld
{
	public static void main(String[] args)
	{
		// Hier steht, was die Funktion tun soll.
	}
}

Die vielen neuen Begriffe sind schnell erklärt:

"public" beschreibt erneut die "Öffentlichkeit" der Funktion main. Sie kann also auch von anderen genutzt werden.

"static" ist eine Möglichkeit, Eigenschaften für alle Objekte, die aus einer Klasse entstanden sind, einheitlich zu halten. So könnte zum Beispiel in einer Klasse "BWL-Student" die Eigenschaft "Stundenplan" statisch definiert werden, da alle BWL-Studenten den gleichen Stundenplan haben.
Im Zusammenhang mit der main-Funktion nehmen wir das static erst mal hin.

"void" steht für "nichts". Es bezeichnet den Rückgabewert der Funktion. Dies ist auch gleich der Unterschied zwischen einer Funktion und einer Methode. Einer Methode sagen wir, was sie tun soll und anschließend tut sie es, wir erhalten aber keine Informationen darüber, ob sie möglicherweise gescheitert ist. Ein Beispiel für eine Funktion, die uns etwas "zurückgibt", ist die Funktion: "Zahl quadrieren(Zahl)" Wir geben der Funktion eine Zahl und bekommen die quadrierte Zahl zurück.
das "void" in der main-Funktion steht also dafür, dass die Hauptfunktion uns nichts zurückgibt. Ein Rückgabewert wäre hier auch nicht sinnvoll, denn wenn die main-Funktion durchlaufen wurde, wird das Programm beendet und nach Beenden des Programmes wollen wir ja nicht mehr mit irgend einem Rückgabewert genervt werden.

"String[] args" Der Ausdruck in den Klammern ist wieder der Wert, der der Funktion übergeben wird. Er ist offensichtlich wieder vom Typ "Zeichenkette". Die eckigen Klammern bedeuten, dass wir beliebig viele Zeichenketten übergeben dürfen. Das args ist nur die Bezeichnung für die übergebenen Zeichenketten, es steht für "arguments".
Ein besseres Verständnis hierfür haben Computerspieler. Wer früher mal Counterstrike gespielt hat, erinnert sich vielleicht, dass man in den Eigenschaften einer Verknüpfung zu Half-Life bei "Ziel" einfach "-game cstrike" angefügt hat, und schon wusste Half-Life gleich bei Programmstart, dass man Counterstrike spielen wollte. Dies wäre genau solch ein Argument, das der main-Funktion übergeben wird.

Zur Besseren Übersicht wird das, was in der main-Funktion steht, noch weiter eingerückt, als der Rest der Klasse HelloWorld. So werden die { } Blöcke immer weiter ineinander verschachtelt.

Als letzter Schritt fehlt nun nur noch die Hauptaufgabe des Programmes, nämlich die Textausgabe:

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

Es gibt bei Java zahlreiche Ausgabefunktionen und natürlich auch die Möglichkeit, selber welche zu schreiben. Wir nutzen hier einfach die schon vorhandene Funktion println(String Text), die für "print line" steht und sich in System.out befindet. Das System.out akzeptieren wir an dieser Stelle einfach und registrieren nur, dass auch hier wieder Objekte und Methoden mit einem Punkt voneinander getrennt werden. Der Befehl wird mit einem Semikolon abgeschlossen.