Java-Arrays: Erstellung und sichere Nutzung in der Programmierung
Einleitung: Java-Arrays
Java-Arrays ermöglichen es, mehrere Elemente zu gruppieren und zu speichern. Mit einem Array können Sie jeden Datentyp speichern – sei es ein Referenz- oder ein primitiver Typ. Allerdings müssen alle Elemente innerhalb eines Java-Arrays denselben Datentyp haben. Der Datentyp des Arrays wird bei der Erstellung des Arrays festgelegt und kann nicht geändert werden. Ebenso wird die Länge des Arrays, die definiert, wie viele Elemente es speichern kann, zu Beginn festgelegt und bleibt unveränderlich.
Arrays spielen in Java eine grundlegende Rolle, da viele Kern-Datentypen auf ihnen basieren. Zum Beispiel ist der häufig verwendete Referenztyp String
tatsächlich als Array von char
-Elementen implementiert. Selbst wenn Sie es bisher nicht bewusst bemerkt haben, haben Sie wahrscheinlich bereits Arrays verwendet.
In diesem Tutorial verwenden Sie ein char
-Array, um ein Passwort sicher zu speichern, da dies ein häufiger Anwendungsfall für Arrays ist. Ein char
-Array ist eine bessere Wahl als ein String
, um ein Passwort zu speichern, da ein String
-Objekt unveränderlich ist – und daher nicht überschrieben werden kann. Auch wenn Sie ein Passwort-String
-Objekt nicht mehr benötigen, können Sie es nicht einfach entsorgen. Das bedeutet, dass das Objekt im Speicher verbleibt und ein Angreifer theoretisch auf diesen Speicherbereich zugreifen und das Passwort lesen könnte. Im Gegensatz dazu können Sie ein Passwort, das als char
-Array gespeichert ist, leicht überschreiben und unbrauchbar machen. Dadurch ist es unmöglich, dass ein Angreifer ein Passwort durch Inspektion des Speichers erfährt.
Voraussetzungen für die Arbeit mit Java-Arrays
Um dieses Tutorial zu folgen, benötigen Sie:
- Eine Umgebung, in der Sie Java-Programme ausführen können, um den Beispielen zu folgen. Dafür benötigen Sie:
- Java (Version 11 oder höher), das auf Ihrem Computer installiert ist, zusammen mit dem Compiler des Java Development Kit (JDK). Für Ubuntu und Debian folgen Sie den Schritten in Option 1 unseres Tutorials Wie man Java mit Apt auf Ubuntu 22.04 installiert. Für andere Betriebssysteme wie macOS und Windows folgen Sie den Java-Installationsoptionen.
- Die Fähigkeit, die Codebeispiele zu kompilieren und auszuführen. Dieses Tutorial verwendet die Java Shell (JShell), eine Read-Evaluate-Print-Loop (REPL), die über die Befehlszeile ausgeführt wird. Um mit JShell zu beginnen, sehen Sie sich unseren Leitfaden Einführung in JShell an. Alle Beispiele werden in einer JShell-Sitzung ausgeführt und verwenden dieselben Variablen.
- Grundkenntnisse in Java und objektorientierter Programmierung, die Sie in unserem Tutorial Wie man sein erstes Programm in Java schreibt finden können.
- Ein Verständnis von Java-Datentypen, wie in unserem Tutorial Verständnis von Datentypen in Java behandelt.
Erstellen von Java-Arrays
Um Java-Arrays zu verwenden, müssen Sie sie zuerst erstellen. Es gibt verschiedene Möglichkeiten, ein Array zu erstellen. Die Wahl hängt davon ab, ob Sie bereits wissen, welche Elemente das Array enthalten wird.
Info: Um den Beispielcode in diesem Tutorial nachzuvollziehen, öffnen Sie das Java-Shell-Tool auf Ihrem lokalen System, indem Sie den Befehl jshell
ausführen. Dann können Sie die Beispiele kopieren, einfügen oder bearbeiten, indem Sie sie nach der Eingabeaufforderung jshell>
hinzufügen und ENTER drücken. Um JShell zu verlassen, geben Sie /exit
ein.
Wenn Sie die Elemente des Java Arrays nicht kennen, können Sie ein leeres Array erstellen und dessen Größe definieren, wie hier:
char[] password = new char[6];
Die Kombination []
nach dem Schlüsselwort char
definiert die Variable password
als Array. Das Schlüsselwort char
bedeutet, dass die Variable char
-Primitive enthält. Um das Array-Objekt zu erstellen, verwenden Sie das Schlüsselwort new
mit dem Array, das als char[6]
definiert ist. Dies bedeutet, dass es sich um ein Array handelt, das char
-Primitive enthält und sechs Elemente speichert.
Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe:
password ==> char[6] { '\000', '\000', '\000', '\000', '\000', '\000' }
Die Ausgabe bestätigt, dass ein neues char
-Array unter dem Namen password
erstellt wurde. Es kann sechs Elemente speichern ([6]
), die derzeit leer (\000
) sind.
Ändern von Array-Elementen
Sie werden nicht immer alle Elemente eines Java Arrays im Voraus kennen, daher ist es möglicherweise keine Option, sie beim Erstellen des Arrays zu definieren. Unabhängig davon, ob Sie die Array-Elemente von Anfang an spezifiziert haben oder nicht, können Sie diese jederzeit festlegen oder ändern.
Zum Beispiel können Sie ein Element des password
-Arrays ändern, indem Sie sich auf seinen Index beziehen – das heißt, seine Position im Array – wie folgt:
password[0] = 'n';
Durch die Verwendung von password[0]
beziehen Sie sich auf das erste Element des password
-Arrays. Array-Elemente werden ab 0 nummeriert, sodass das erste Element den Index 0 hat. Die Indexnummer des Array-Elements wird immer in eckigen Klammern ([]
) angegeben. Sie definieren das Array-Element neu und weisen ihm einen neuen Wert zu – das Zeichen 'n'
.
Nachdem Sie die obige Anweisung in JShell ausgeführt haben, erhalten Sie eine Ausgabe wie diese:
Output $8 ==> 'n'
Die temporäre Variable $8
wird intern in JShell verwendet. Sie kann bei Ihnen eine andere Nummer haben.
In JShell können Sie die Änderung bestätigen, indem Sie den Array-Namen einfügen:
password
Sie erhalten folgende Ausgabe:
password ==> char[6] { 'n', '\000', '\000', '\000', '\000', '\000' }
Diese Ausgabe bestätigt, dass Sie erfolgreich das erste Element des password
-Arrays geändert haben. Die restlichen Elemente bleiben leer (\000
).
Java Arrays-Elemente abrufen
Beim Abrufen eines bestimmten Array-Elements arbeiten Sie ebenfalls mit seinem Index. Um zum Beispiel das zweite Element des password
-Arrays zu erhalten, können Sie den folgenden Code verwenden:
System.out.println(password[1]);
In diesem Code verwenden Sie die Methode println()
, um das zweite Element des password
-Arrays auszugeben. Das zweite Element hat den Index 1, da die Array-Elemente wie erwähnt ab 0 nummeriert werden.
Dieser Code ergibt die folgende Ausgabe:
e
Die Ausgabe gibt das zweite Array-Element e
aus. Ebenso könnten Sie das Element für andere Zwecke verwenden, bei denen ein char
-Wert erforderlich ist.
Verwendung von Array-Methoden
Java bietet die hilfreiche Klasse Arrays
, die sich im Paket java.util
befindet. Diese Klasse stellt nützliche Methoden für die Arbeit mit Java Arrays bereit, sodass Sie häufige Aufgaben effizient erledigen können, ohne das Rad neu erfinden zu müssen. Hier sind einige der am häufigsten verwendeten Methoden:
equals()
-Methode
Die Methode equals()
vergleicht zwei Java Arrays, um festzustellen, ob sie gleich sind. Damit zwei Java Arrays gleich sind, müssen sie die gleiche Länge, die gleichen Elemente und die gleiche Reihenfolge haben. Setzen wir das Beispiel mit dem password
-Array fort: Sie erstellen ein zweites Array namens password2
, das die Zeichen n
, o
, n
und e
enthält:
char[] password2 = new char[] {'n', 'o', 'n', 'e'};
Nachdem Sie diesen Code in JShell ausgeführt haben, erhalten Sie folgende Bestätigung:
password2 ==> char[4] { 'n', 'o', 'n', 'e' }
Die Ausgabe bestätigt, dass Sie das Array password2
erstellt haben. Es hat vier Elemente, die ebenfalls in der Ausgabe angezeigt werden. Wenn Sie die vorherige JShell-Sitzung nicht verlassen haben, haben Sie auch noch das ursprüngliche password
-Array. Wenn Sie die Sitzung verlassen haben, müssen Sie das password
-Array mit den Schritten aus dem Abschnitt „Erstellen von Java Arrays“ erneut erstellen, damit Sie zwei Java Arrays zum Vergleichen haben.
sort()
-Methode
Die Methode sort()
sortiert die Elemente eines Java Arrays in aufsteigender Reihenfolge. Mit dieser Methode können Sie die Zeichen im password
-Array in alphabetischer Reihenfolge anordnen, indem Sie den folgenden Code ausführen:
Arrays.sort(password);
Anschließend können Sie das Array erneut ausgeben, indem Sie einfach dessen Namen in JShell eingeben, um die Änderungen zu überprüfen:
password;
Die Ausgabe von JShell wird wie folgt aussehen:
password ==> char[6] { 'c', 'e', 'e', 'r', 's', 't' }
Dies bestätigt, dass das Array weiterhin dieselben Elemente enthält, jedoch in geänderter Reihenfolge. Die Array-Elemente wurden von 's'
, 'e'
, 'c'
, 'r'
, 'e'
, 't'
in 'c'
, 'e'
, 'e'
, 'r'
, 's'
, 't'
umsortiert. Es könnte jedoch keine gute Idee sein, die Reihenfolge eines Arrays wie dieses zu ändern, da die ursprüngliche Reihenfolge wichtig sein könnte. Im Fall eines Passworts würde die Änderung der Reihenfolge bedeuten, dass das Passwort von seinem ursprünglichen Wert abweicht und daher nicht mehr funktioniert. In anderen Anwendungsfällen, bei denen die Reihenfolge der Array-Elemente keine Rolle spielt, könnte jedoch eine Sortierung erforderlich sein.
binarySearch()
-Methode
Die Methode binarySearch()
durchsucht die Elemente eines Java Arrays nach einem bestimmten Wert. Eine Besonderheit dieser Methode ist, dass die Array-Elemente zuvor sortiert sein müssen, sonst erhalten Sie unerwartete Ergebnisse. Sobald das password
-Array sortiert ist, können Sie den Index eines Elements ermitteln. Zum Beispiel können Sie herausfinden, an welchem Index das Zeichen 'c'
im password
-Array steht und diesen Index ausgeben, wie folgt:
System.out.println(Arrays.binarySearch(password, 'c'));
Dies ergibt die folgende Ausgabe:
Output 0
Da das password
-Array jetzt sortiert ist und so aussieht: 'c'
, 'e'
, 'e'
, 'r'
, 's'
, 't'
, bedeutet die Ausgabe 0
, dass das Zeichen 'c'
den Index 0 hat, da es das erste Array-Element ist.
copyOf()
-Methode
Die Methode copyOf()
kopiert ein gegebenes Array in ein neues Array, wenn Sie die Größe des Arrays ändern möchten. Da die Länge eines Arrays nach seiner Erstellung nicht geändert werden kann, können Sie mit dieser Methode ein neues Array mit der erforderlichen Größe erstellen, das den Inhalt des alten Arrays enthält.
Zum Beispiel kann das password
-Array nur sechs Elemente speichern, was für moderne Sicherheitsanforderungen nicht ausreicht. Um seine Größe zu erhöhen, können Sie ein neues, größeres Array mit copyOf()
erstellen, wie hier:
password = Arrays.copyOf(password, 10);
In diesem Beispiel weisen Sie password
ein neues Array zu. Dieses neue Array wird erstellt, indem das alte password
-Array in ein neues Array mit 10 Elementen kopiert wird. Die Methode Arrays.copyOf()
nimmt zwei Argumente entgegen: das zu kopierende Array und die Länge des neuen Arrays.
Nach dem Ausführen dieses Codes in JShell wird die Ausgabe wie folgt aussehen:
password ==> char[10] { 'c', 'e', 'e', 'r', 's', 't', '\000', '\000', '\000', '\000' }
Die Ausgabe zeigt, dass das password
-Array jetzt 10 Elemente hat. Die ersten sechs stammen aus dem ursprünglichen Array, das nach der Sortierung zu 'c'
, 'e'
, 'e'
, 'r'
, 's'
, 't'
wurde. Die Methode Arrays.copyOf()
füllt die neuen Elemente mit leeren Werten.
Fazit: Java-Arrays für effiziente Datenverarbeitung meistern
In diesem Tutorial haben Sie gelernt, wie Sie Java-Arrays verwenden, um verwandte Elemente zu gruppieren. Sie haben erfahren, wie Sie Java-Arrays erstellen, deren Inhalte anzeigen und ändern können. Außerdem haben Sie Best Practices und nützliche Methoden für die Arbeit mit Arrays kennengelernt.