Heim  >  Artikel  >  Java  >  array[]: eine spezielle Klasse, die intern von der JVM selbst verwaltet wird

array[]: eine spezielle Klasse, die intern von der JVM selbst verwaltet wird

DDD
DDDOriginal
2024-09-12 20:16:10733Durchsuche

Der erste Weg, wie wir alle in das Studium von Datenstrukturen in Java (und anderen Sprachen) eingeführt werden, sind Arrays. In Java ist ein Array eine Klasse, ein Objekt, ein untergeordnetes Element von Object (wie alle Klassen). Es handelt sich jedoch um einen Kurs mit besonderer Behandlung der Sprache.

Im Gegensatz zu herkömmlichen Klassen und Objekten wird die Syntax von Arrays und ihre Behandlung direkt vom Compiler und der JVM (Java Virtual Machine) verwaltet. Dazu gehört, wie Arrays zugewiesen, manipuliert und darauf zugegriffen wird. Diese Klasse ist nicht direkt im Quellcode zu finden.

Java behandelt Arrays automatisch als Instanzen dieser speziellen Klasse.

Wenn Sie den folgenden Code ausführen, werden die folgenden Ausgaben angezeigt:

public class Main
{
    public static void main(String[] args) {
        int[] intArray = new int[5];
        System.out.println(intArray.getClass().getName());
        System.out.println(intArray.getClass().getSuperclass());
    }
}

[ICH
Klasse java.lang.Object

Dieser Klassenname „[I““ ist lediglich ein automatisch generierter symbolischer Name, den die JVM verwendet, um ein Array von Ganzzahlen (int[]) darzustellen. Jeder Typ hat seinen eigenen symbolischen Namen:

array[]: uma classe especial gerenciada internamente pela própria JVM

Die Klammern „[“ geben Abmessungen an. Ein eindimensionales Array wird durch [ dargestellt, während ein zweidimensionales Array durch [[ dargestellt wird, ein dreidimensionales Array wird durch [[[... usw.

dargestellt

Erklärung

Um ein Array zu deklarieren und zu initialisieren, ist es wichtig, den Datentyp und die Größe des Objekts anzugeben:

int[] intArray = new int[5]; //array de tamanho 5
char[] charArray = new char[]{'a', 'b', 'c'}; //o compilador entende que é um array de tamanho 3
double[] doubleArray = {1.2, 1.3, 1.4, 1.5}; //o compilador entende que é um array de tamanho 4

In Java können Sie anstelle des Typs eckige Klammern in den Variablennamen einfügen, zum Beispiel: int intArray[] = new int[5]. Dies wird jedoch nicht empfohlen, da es von der Konvention abweicht.

In Arrays gespeicherte Daten können von der JVM „zusammenhängend“, also sequentiell, im Speicher zugewiesen werden. Für den Zugriff auf Daten werden Indizes verwendet und der erste Index eines Arrays ist in Java immer 0.

Um beispielsweise auf den Buchstaben „a“ des obigen charArray zuzugreifen, müssen Sie nach charArray[0] suchen. Der Buchstabe „b“ wiederum befindet sich in charArray[1] und der Buchstabe „c“ in charArray[2]. Wenn Sie versuchen, auf einen Index zuzugreifen, der nicht im Array vorhanden ist, erhalten Sie die Fehlermeldung „IndexOutOfBounce“. Zum Beispiel für den Fall, dass ich versuche, auf den Wert in charArray[3] zuzugreifen.

Die Größe eines Arrays kann, sobald sie in der Deklaration definiert wurde, nie mehr geändert werden. Wenn ich deklariere, dass charArray 3 Elemente hätte, würde es nicht mehr enthalten. Weniger ja... mehr nein.

Und hier ein Nachtrag. Nicht ausgefüllte Werte in einem Array nehmen denselben Standardwert an wie der Typ des Arrays. Beispielsweise werden in einem ganzzahligen Array leere Werte mit 0 aufgefüllt. In einem booleschen Array mit false. In einem String-Array mit null.

Genau wie die Größe kann auch der Typ eines Arrays nicht geändert werden. Es ist jedoch möglich, Arrays mit unterschiedlichen Typen zu kopieren, wenn es sich um Untertypen desselben Typs handelt. Verwirrend, oder? Ein Beispiel hilft: Integer und Double sind Untertypen von Number. Also...

Integer[] integerArray = {1, 2, 3};
Number[] numberArray = intgerArray;

Dieser Code wird vom Compiler akzeptiert. Allerdings ist Vorsicht geboten. Wenn wir dies hier tun, erzeugen wir einen Kompilierungsfehler:

numberArray[0] = 1.2;

Dies liegt daran, dass integerArray und numberArray auf denselben Speicherplatz verweisen. Auch wenn „numberArray“ ein Double als erstes Element unterstützt, ist dies beim „IntegerArray“ nicht der Fall und daher ist es dem „NumberArray“ nicht „erlaubt“, den Indexwert 0 zu ändern.

Erinnerung

Ein Array kann immer Daten desselben Typs speichern und Primitive und Objekte akzeptieren. Wenn das Array aus Ganzzahlen besteht, akzeptiert es keine Werte vom Typ char, double, float, String... sondern nur ganzzahlige Werte.

Das Array selbst ist eine Klasse (wenn auch eine besondere) und wird daher auf dem Heap gespeichert. Auf diese Weise speichert das Array eine Speicheradresse, die wiederum die in das Array eingegebenen Werte enthält.

Ein primitives Array weist zusammenhängende Speicherblöcke zu, um Werte direkt zu speichern, während ein Objektarray Verweise (Zeiger) auf Objekte speichert, die sich an anderer Stelle im Speicher befinden.

Das bedeutet, dass sowohl Arrays primitiver Typen (wie int[]) als auch Arrays von Objekten (wie String[]) auf dem Heap gespeichert werden. Bei Arrays primitiver Typen werden die Werte der Array-Elemente auch direkt auf dem Heap gespeichert, angrenzend an das Array selbst. Im Fall des Objektarrays können die Objekte, auf die diese Referenzen verweisen, an verschiedenen Stellen auf dem Heap zugewiesen werden.

Methoden

Alle Array-Klassen verfügen über Längen- und Klonmethoden. Der erste gibt die Größe des Arrays zurück und der zweite erstellt eine Kopie des Arrays in ein anderes Array (in diesem Fall den Zeiger auf dieselbe Speicheradresse).

Als untergeordnetes Element der Object-Klasse (sowie aller Klassen in Java) verfügt das Array jedoch auch über die Methoden der Oberklasse: toString, equal und hashCode.

Der Einsatz von Arrays im Hintergrund ist jedoch das, was im wirklichen Leben am häufigsten vorkommt. Obwohl Arrays performant sind, ist es viel komplizierter, ihre Elemente zu iterieren, und es gibt Klassen, die Abstraktionen auf Arrays erstellen, was das Leben des Programmierers viel einfacher macht.

Dies ist bei der Klasse Arrays (mit Großbuchstaben) der Fall. Es packt im Wesentlichen Arrays in eine Standard-Java-Klasse und stellt eine Reihe sehr einfach zu implementierender Methoden für die Arbeit mit den Daten bereit. Die Arrays-Klasse hat einen weiteren großen Vorteil: Sie arbeitet mit dynamischer Zuordnung, sodass der Umgang mit Sammlungen einfacher ist – schließlich kennen wir selten die genaue Größe des Arrays, das wir möglicherweise benötigen. Die Arrays-Klasse kann die Größe der Sammlung bei Bedarf erweitern, ohne dass der Programmierer neue Arrays (mit Kleinbuchstaben) größerer Größe erstellen und Daten aus dem vorherigen Array kopieren muss, das plötzlich zu klein wurde.

Arrays sind auch die Grundlage für Klassen wie List, Stack und Queue (die im Grunde ein Wrap sind und sehr gute Methoden für den Umgang mit Daten enthalten).

Haben Sie jemals darüber nachgedacht, dass String eine Klasse ist, die ein char-Array abstrahiert?

array[]: uma classe especial gerenciada internamente pela própria JVM

Das obige ist der detaillierte Inhalt vonarray[]: eine spezielle Klasse, die intern von der JVM selbst verwaltet wird. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn