© saicle/Shutterstock.com
Die Fortsetzung unseres Elefantenzugs durch die Java-Welt

Dickhäuter beim Dreisprung


Der eine oder andere Elefant hat inzwischen sicherlich einen Fuß auf Java-Boden gesetzt. Da die Dickhäuter aber bekanntlich schlecht auf einem Bein stehen können, wollen wir etwas weiter gehen und für mehr Standsicherheit sorgen.

Wir setzen unsere Reise sportlich fort und beginnen mit einem Dreisprung durch mehrere verwandte Themen. Dabei begegnen uns kuriose Namensschöpfungen wie „Collections“ oder „Autoboxing“. Wir werden sehen, dass sich dahinter recht einfache Dinge verbergen. Textfunktionen benötigt man ja eigentlich immer, und neben einem kurzen Blick auf Entwicklungsumgebungen gibt es auch noch eine kurze Empfehlung gedruckter und teilweise auch digital verfügbarer Bücher.

Elefanten beim Dreisprung: Arrays, foreach, Import-Anweisungen

Elefanten sind bekanntlich sehr sportliche Tiere. Wir beginnen deshalb mit der Disziplin Dreisprung, in unserem Fall: Arrays, erweiterte for-Schleifen – unter PHP besser bekannt als „foreach“ – und der Import-Anweisung. Manchmal passen die unterschiedlichsten Dinge zusammen, wie wir sehen werden.

Der erste Sprung des Elefanten: das Array

Genau genommen ist das Array unter PHP viel mehr als nur ein ordinäres Array, wie man es vielleicht aus anderen Sprachen kennt. Es handelt es sich um eine so genannte geordnete Map mit Schlüsseln und zugehörigen Werten. Unter PHP ist beim täglichen Arbeiten mit Arrays vieles selbstverständlich: die variable Länge des Arrays, die Möglichkeit, unterschiedliche Datentypen aufzunehmen und zu den Werten fast beliebige Schlüssel zu verwenden, also nicht nur fortlaufende Zahlen. Und zu „Mehrdimensionalität“ sind Arrays in PHP sowieso auch fähig. Ein Array können wir auf zwei Arten definieren: auf eine kurze, bei der die Werte sofort zum Zeitpunkt der Deklaration zugewiesen werden, und eine eben nicht ganz so kurze.

Die zuletzt genannte Möglichkeit würde vermutlich niemand in dieser strengen Form verwenden; sie ist aber natürlich sinnvoll, wenn die Daten erst zur Laufzeit bekannt werden und ein Array erst nach und nach in einer Schleife gefüllt werden kann. Die einzelnen Elemente von Arrays stellen immer Schlüssel-Wert-Paare dar, egal, ob wir die Schlüssel bewusst vergeben oder ob sie als fortlaufender Index automatisch erzeugt werden. Ein Array kann jederzeit um weitere Elemente erweitert und vergrößert werden. Genauso können Elemente auch mit unset($meinArray[SCHLÜSSEL]); vollständig aus dem Array entfernt werden. Nur wenn man das Array mit einer normalen Schleife durchlaufen will, muss man beachten, dass dadurch möglicherweise etwas unschöne Lücken entstehen.

Es gibt eine Vielzahl an Funktionen, die die Arbeit mit Arrays unterstützen. Zwei der wohl wichtigsten sind sort() und rsort() für Sortierung und umgekehrte Sortierung eines Arrays. Interessant dabei ist, dass diese Funktionen das Array direkt verändern, also keine erneute Zuweisung zu dem Array in der Form $meinArray = sort($meinArray); notwendig oder überhaupt möglich wäre. Die Funktion sort() liefert als Rückgabewert selbst nur „true“ oder „false“ über den Erfolg der Sortierung.

Zu erwähnen wäre vielleicht noch die Funktion count(), mit der die Anzahl der Elemente eines Array ausgegeben werden kann – die unzähligen anderen Funktionen lassen wir an dieser Stelle getrost außer Acht (Listing 1).

Listing 1

//Die kurze Form mit sofortiger Zuweisung der Werte $irgendeinWert = 42; $meinArray = array( $irgendeinWert, 0, "Elefant"); $meinArray[1] = 5; //eine einfache Änderung eines Wertes //Alternativ $meinArray = array(); $meinArray[0] = 42; $meinArray[1] = 0; $meinArray[] = "Elefant";

Der zweite Sprung des Elefanten: foreach

Wollen wir durch ein Array laufen, bietet sich die foreach-Schleife an, mit der jedes Element für einen Durchlauf sorgt und der jeweils aktuelle Wert zur weiteren Bearbeitung an eine festgelegte Variable übergeben wird (Listing 2).

Listing 2

echo count($meinArray); sort($meinArray); foreach ($meinArray as $wert) { printf("Mein Wert %s\n", $wert); }

Der dritte Sprung des Elefanten, der eigentlich gar keiner ist

Den dritten Sprung braucht unser Elefant, zumindest unter PHP, gar nicht zu machen, da er bereits mit zwei Sprüngen die notwendige Weite erreicht hat. Alle notwendigen Funktionen stehen in PHP direkt zur Verfügung. PHP ist an dieser Stelle für den Entwickler so etwas wie ein Rundum-sorglos-Paket. Einen import wie in Java benötigen wir in dieser Form nicht. Wenn Sie sich in PHP bereits mit Namespaces beschäftigt haben, dann behalten Sie das vielleicht etwas im Hinterkopf, zumindest bis zum nächsten Teil über Packages und Namespaces. Aber sehen wir uns den Dreisprung einmal in Java an. Dann werden Sie wissen, was ich meine.

Der erste Sprung auf Java: das Array

In der einfachsten Form ist ein Array in Java dem Array von PHP recht ähnlich. Wir müssen uns in Java aber auf eine feste Größe des Arrays festlegen. Auch muss ein Array auf einen einzigen Datentyp festgelegt werden, der für alle Werte des Arrays bindend und immer gleich ist:

byte meinByte = 42; int[] einArray = { meinByte, 0 , 'a'}; // 42, 0, 97 einArray[1] = 5; // 42, 5, 97

Der Versuch, einen Wert eines unpassenden Typs in das Array zu schmuggeln, scheitert mit einer Fehlermeldung, es sei denn, es handelt sich um Werte, die Java in bekannter Weise selbst konvertiert, also implizit casten kann: Werte von niederwertigeren Datentypen können auch hier höherwertigen Datentypen zugewiesen werden. Unser char a wird aber nicht als Typ char, sondern von Java als Integer 97 im Array gespeichert. Die Information, dass es sich jemals um einen anderen Datentypen mit einer anderen Bedeutung gehandelt hat, geht für immer verloren.

Der Vollständigkeit halber sei auch noch die korrektere Schreibweise eines Arrays aufgeführt. Auch wenn es sich bei den primitiven Datentypen wie int selbst nicht um Objekte handelt, ist das Array als solches sehr wohl ein Objekt und kann deshalb mit dem auch unter PHP bekannten Befehl new angelegt werden:

int[] einArray = new int[] { 42, 0, 97 };

Die Größe eines Arrays kann jederzeit mit meinArray.length ausgegeben werden. Da ein Array aber immer seine anfangs festgelegte Größe behält, gibt es hier im Normalfall weniger Überraschungen als bei PHP. Genauso wie in PHP können wir ein Array erst deklarieren und nachträglich mit Werten füllen. An dieser Stelle können wir auch noch einmal sehen, dass ein Array in Java bereits bei der Deklaration auf eine fixe Größe festgelegt wird, eben stillschweigend über die zugeordneten Werte oder über die Angabe einer absoluten Größe. Eine nachträgliche Änderung ist nicht mehr möglich. Der lesende oder schreibende Zugriff auf die einzelnen Elemente erfolgt freundlicherweise in ähnlicher Form wie bei PHP. Bei dem Array in Java sind die Schlüssel immer numerisch und eindeutig festgelegt, beginnend bei 0. Lücken gibt es nicht:

String[] meinArray = new String[3]; meinArray[0] = "Elefant"; meinArray[1] = "Hallo"; meinArray[2] = "42";

Der zweite Sprung: foreach heißt „erweiterte for-Schleife“

Das aus PHP bekannte foreach heißt in Java „erweiterte for-Schleife“ und bietet genauso die Möglichkeit, über die Elemente eines beliebigen Objekts zu laufen. Die Syntax in Java ist dabei tatsächlich eher der einfachen for-Schleife angepasst. In jedem Durchlauf wird das nächste Element des Arrays einer angegebenen Variablen übergeben. Der Typ der Laufvariablen muss natürlich dem Datentyp des Arrays entsprechen – oder zumindest durch implizites Casting die Werte aufnehmen können. Wer übrigens auf den Gedanken kommen sollte, in der erweiterten for-Schleife einfach immer mit einem String zu arbeiten, wird enttäuscht. Wie wir gesehen hatten, können einem String zwar im Rahmen einer Textoperation mit „+“ die verschiedensten Werte problemlos zugeordnet werden, eine direkte Zuweisung eines anderen Datentyps wie int oder char funktioniert aber leider nicht. Ein dunkles Geheimnis von String ist nämlich, dass in Wirklichkeit der Textoperator „+“ die ganze Arbeit bei dem notwendigen Casting macht – String selbst ist als Objekt eher etwas einfach gestrickt und kann mit anderen Datentypen nur wenig anfangen. Das Ende der Schleife ist übrigens auch wieder da...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang