Je suis novice en Java et pour l'instant créé un tableau d'objets en Java.
J'ai une classe A par exemple -
A[] arr = new A[4];
Mais cela ne fait que créer des pointeurs (références) vers A
et non 4 objets. Est-ce correct? Je vois que lorsque j'essaie d'accéder aux fonctions / variables dans les objets créés, j'obtiens une exception de pointeur nul. Pour pouvoir manipuler / accéder aux objets, je devais faire ceci:
A[] arr = new A[4];
for (int i = 0; i < 4; i++) {
arr[i] = new A();
}
Est-ce correct ou est-ce que je fais quelque chose de mal? Si c'est correct, c'est vraiment bizarre.
EDIT: Je trouve cela étrange parce qu'en C ++, vous dites juste nouveau A[4]
et cela crée les quatre objets.
Réponses:
C'est correct.
... crée 4
A
références, similaires à cela:Maintenant, vous ne pouvez pas vous
a1.someMethod()
passer de l'allocationa1
comme ceci:De même, avec le tableau, vous devez faire ceci:
... avant de l'utiliser.
la source
new
mot clé C ++, Java appelle également le constructeur et alloue la mémoire I. Je suppose qu'en Javanew
ne crée que les références et non l'objet réel par rapport à C ++. Merci de répondre.new
crée un objet tableau. Ce sont des objets alloués dynamiquement ("tas"). Ainsi, le code C ++ analogue seraitA **a = new A*[4]; for (int i = 0; i < 4; ++i) { a[i] = new A(); }
.C'est correct. Vous pouvez également faire:
Cette syntaxe peut également être utilisée pour créer et initialiser un tableau n'importe où, comme dans un argument de méthode:
la source
Oui, il crée uniquement des références, dont la valeur par défaut est null. C'est pourquoi vous obtenez une NullPointerException. Vous devez créer des objets séparément et attribuer la référence. Il y a 3 étapes pour créer des tableaux en Java -
Donc, jusqu'à ce que nous instancions les références restent nulles. J'espère que ma réponse vous a aidé..! :)
Source - Tableaux en Java
la source
Voici l'exemple clair de la création d'un tableau de 10 objets employés, avec un constructeur qui prend un paramètre:
la source
Vous avez raison. En plus de cela, si nous voulons créer un tableau de taille spécifique rempli d'éléments fournis par une certaine «usine», depuis Java 8 (qui introduit l' API de flux ), nous pouvons utiliser ce one-liner:
Stream.generate(() -> new A())
est comme une usine pour les éléments A séparés créés d'une manière décrite par lambda,() -> new A()
qui est l'implémentation deSupplier<A>
- il décrit comment chaque nouvelle instance A doit être créée.limit(4)
définit la quantité d'éléments que le flux va générertoArray(A[]::new)
(peut également être réécrit commetoArray(size -> new A[size])
) - il nous permet de décider / décrire le type de tableau qui doit être retourné.Pour certains types primitifs que vous pouvez utiliser
DoubleStream
,IntStream
,LongStream
qui fournissent en outre des générateurs commerange
rangeClosed
et quelques autres.la source
Oui c'est correct en Java il y a plusieurs étapes pour faire un tableau d'objets:
Déclarer puis instancier (créer de la mémoire pour stocker des objets «4»):
Initialisation des objets (dans ce cas, vous pouvez initialiser 4 objets de classe A)
ou
Vous pouvez maintenant commencer à appeler des méthodes existantes à partir des objets que vous venez de créer, etc.
Par exemple:
ou
la source
Pour la classe générique, il est nécessaire de créer une classe wrapper. Par exemple:
résulte en: "Impossible de créer un tableau générique"
Utilisez plutôt:
la source
La forme générale pour déclarer un nouveau tableau en java est la suivante:
type arrayName[] = new type[numberOfElements];
Où type est un type ou un objet primitif.
numberOfElements
est le nombre d'éléments que vous stockerez dans le tableau et cette valeur ne peut pas changer car Java ne prend pas en charge les tableaux dynamiques (si vous avez besoin d'une structure flexible et dynamique pour contenir des objets, vous souhaiterez peut-être utiliser certaines des collections Java).Permet d'initialiser un tableau pour stocker les salaires de tous les employés dans une petite entreprise de 5 personnes:
int salaries[] = new int[5];
Le type du tableau (dans ce cas
int
) s'applique à toutes les valeurs du tableau. Vous ne pouvez pas mélanger les types dans un seul tableau.Maintenant que notre tableau des salaires est initialisé, nous voulons y ajouter des valeurs. Nous pouvons le faire soit lors de l'initialisation comme ceci:
int salaries[] = {50000, 75340, 110500, 98270, 39400};
Ou pour le faire plus tard, comme ceci:
Exemple plus visuel de création de tableau:
Pour en savoir plus sur les tableaux, consultez le guide .
la source