Ich bin neu in Java und habe für die Zeit eine Reihe von Objekten in Java erstellt.
Ich habe zum Beispiel eine Klasse A -
A[] arr = new A[4];
Dies erzeugt jedoch nur Zeiger (Verweise) auf A
und nicht auf 4 Objekte. Ist das richtig? Ich sehe, dass ich beim Versuch, auf Funktionen / Variablen in den erstellten Objekten zuzugreifen, eine Nullzeigerausnahme erhalte. Um die Objekte manipulieren / darauf zugreifen zu können, musste ich Folgendes tun:
A[] arr = new A[4];
for (int i = 0; i < 4; i++) {
arr[i] = new A();
}
Ist das richtig oder mache ich etwas falsch? Wenn dies richtig ist, ist es wirklich seltsam.
EDIT: Ich finde das seltsam, weil man in C ++ einfach neu sagt A[4]
und es die vier Objekte erstellt.
Antworten:
Das ist richtig.
... erstellt 4
A
Referenzen, ähnlich wie hier:Jetzt könnten Sie nicht mehr
a1.someMethod()
auf Folgendes verzichtena1
:In ähnlicher Weise müssen Sie mit dem Array Folgendes tun:
... bevor Sie es benutzen.
quelle
new
Schlüsselwort von Java wie in C ++ auch den Konstruktor aufruft und den I-Speicher zuweist. Ich denke, in Java werdennew
nur die Referenzen erstellt, nicht das eigentliche Objekt im Vergleich zu C ++. Danke für die Antwort.new
erstellt ein Array-Objekt. Dies sind dynamisch zugewiesene Objekte ("Heap"). Der analoge C ++ - Code wäre alsoA **a = new A*[4]; for (int i = 0; i < 4; ++i) { a[i] = new A(); }
.Das ist richtig. Sie können auch tun:
Diese Syntax kann auch verwendet werden, um ein Array an einer beliebigen Stelle zu erstellen und zu initialisieren, z. B. in einem Methodenargument:
quelle
Ja, es werden nur Referenzen erstellt, die auf den Standardwert null gesetzt sind. Aus diesem Grund erhalten Sie eine NullPointerException. Sie müssen Objekte separat erstellen und die Referenz zuweisen. Es gibt 3 Schritte zum Erstellen von Arrays in Java:
Bis wir instanziieren, bleiben die Referenzen also null. Ich hoffe meine Antwort hat dir geholfen ..! :) :)
Quelle - Arrays in Java
quelle
Hier ist das klare Beispiel für das Erstellen eines Arrays von 10 Mitarbeiterobjekten mit einem Konstruktor, der Parameter akzeptiert:
quelle
Du hast Recht. Abgesehen davon können wir diesen Einzeiler verwenden, wenn wir ein Array mit einer bestimmten Größe erstellen möchten, das mit Elementen gefüllt ist, die von einer "Fabrik" bereitgestellt werden, da Java 8 (das die Stream-API einführt ):
Stream.generate(() -> new A())
ist wie eine Fabrik für separate A-Elemente, die auf eine von Lambda beschriebene Weise erstellt wurde. Dies ist() -> new A()
die Implementierung vonSupplier<A>
- es beschreibt, wie jede neue A-Instanz erstellt werden soll.limit(4)
Legt die Anzahl der Elemente fest, die der Stream generierttoArray(A[]::new)
(kann auch umgeschrieben werden alstoArray(size -> new A[size])
) - damit können wir den Typ des Arrays bestimmen / beschreiben, der zurückgegeben werden soll.Für einige primitive Typen , die Sie verwenden können
DoubleStream
,IntStream
,LongStream
die zusätzlich Generatoren liefern wierange
rangeClosed
und einige andere.quelle
Ja, es ist richtig, in Java gibt es mehrere Schritte, um ein Array von Objekten zu erstellen:
Deklarieren und dann instanziieren (Speicher zum Speichern von '4'-Objekten erstellen):
Initialisieren der Objekte (In diesem Fall können Sie 4 Objekte der Klasse A initialisieren.)
oder
Jetzt können Sie vorhandene Methoden von den gerade erstellten Objekten usw. aufrufen.
Beispielsweise:
oder
quelle
Für generische Klassen muss eine Wrapper-Klasse erstellt werden. Beispielsweise:
führt zu: "Generisches Array kann nicht erstellt werden"
Verwenden Sie stattdessen:
quelle
Die allgemeine Form zum Deklarieren eines neuen Arrays in Java lautet wie folgt:
type arrayName[] = new type[numberOfElements];
Wobei Typ ein primitiver Typ oder ein Objekt ist.
numberOfElements
ist die Anzahl der Elemente, die Sie im Array speichern, und dieser Wert kann sich nicht ändern da Java keine dynamischen Arrays unterstützt (wenn Sie eine flexible und dynamische Struktur zum Objekten benötigen, möchten Sie möglicherweise einige der Java-Sammlungen verwenden).Initialisieren Sie ein Array, um die Gehälter aller Mitarbeiter in einem kleinen Unternehmen mit 5 Mitarbeitern zu speichern:
int salaries[] = new int[5];
Der Typ des Arrays (in diesem Fall
int
) gilt für alle Werte in dem Array. Sie können keine Typen in einem Array mischen.Nachdem wir unser Gehaltsarray initialisiert haben, möchten wir einige Werte hinzufügen. Wir können dies entweder während der Initialisierung wie folgt tun:
int salaries[] = {50000, 75340, 110500, 98270, 39400};
Oder um es zu einem späteren Zeitpunkt so zu machen:
Visuelleres Beispiel für die Array-Erstellung:
Weitere Informationen zu Arrays finden Sie in der Anleitung .
quelle