Créer un tableau d’objects en Java

Je suis nouveau sur Java et pour le moment créé un tableau d’objects en Java.

J’ai une classe A par exemple –

A[] arr = new A[4]; 

Mais cela ne crée que des pointeurs (références) vers A et non 4 objects. Est-ce correct? Je vois que lorsque j’essaie d’accéder à des fonctions / variables dans les objects créés, j’obtiens une exception de pointeur nul. Pour pouvoir manipuler / accéder aux objects, je devais le faire –

 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 étrange.

EDIT: Je trouve cela étrange car en C ++, il suffit de dire new A [4] et il crée les quatre objects.

C’est correct.

 A[] a = new A[4]; 

crée 4 références A, similaire à cela

 A a1; A a2; A a3; A a4; 

maintenant vous ne pouvez pas faire a1.someMethod () sans allouer a1 comme

 a1 = new A(); 

de même, avec le tableau que vous devez faire

 a[0] = new A(); 

avant de l’utiliser.

C’est correct. Vous pouvez aussi faire:

 A[] a = new A[] { new A("args"), new A("other args"), .. }; 

Cette syntaxe peut également être utilisée pour créer et initialiser un tableau n’importe où, comme dans un argument de méthode:

 someMethod( new A[] { new A("args"), new A("other args"), . . } ) 

Oui, il ne crée que des références dont la valeur par défaut est null. C’est pourquoi vous obtenez une NullPointerException. Vous devez créer des objects séparément et atsortingbuer la référence. Il y a 3 étapes pour créer des tableaux en Java –

Déclaration – Dans cette étape, nous spécifions le type de données et les dimensions du tableau que nous allons créer. Mais souvenez-vous, nous ne mentionnons pas encore les dimensions des dimensions. Ils sont laissés vides.

Instanciation – Dans cette étape, nous créons le tableau ou allouons de la mémoire pour le tableau en utilisant le nouveau mot-clé. C’est dans cette étape que nous mentionnons les dimensions des dimensions du tableau.

Initialisation – Le tableau est toujours initialisé à la valeur par défaut du type de données. Mais nous pouvons faire nos propres initialisations.

Déclaration de tableaux en Java

Voici comment nous déclarons un tableau à une dimension en Java –

 int[] array; int array[]; 

Oracle recommande d’utiliser l’ancienne syntaxe pour déclarer des tableaux. Voici quelques autres exemples de déclarations juridiques –

 // One Dimensional Arrays int[] intArray; // Good double[] doubleArray; // One Dimensional Arrays byte byteArray[]; // Ugly! long longArray[]; // Two Dimensional Arrays int[][] int2DArray; // Good double[][] double2DArray; // Two Dimensional Arrays byte[] byte2DArray[]; // Ugly long[] long2DArray[]; 

Et ce sont quelques exemples de déclarations illégales –

 int[5] intArray; // Don't mention size! double{} doubleArray; // Square Brackets please! 

Instanciation

Voici comment nous «instancions» ou allouons de la mémoire pour un tableau –

 int[] array = new int[5]; 

Lorsque la machine virtuelle Java rencontre le new mot-clé, elle comprend qu’il doit allouer de la mémoire pour quelque chose. Et en spécifiant int[5] , nous voulons dire que nous voulons un tableau de int s, de taille 5. Ainsi, la JVM crée la mémoire et assigne la référence de la mémoire nouvellement allouée au tableau qu’une «référence» de type int[]

Initialisation

Utilisation d’une boucle – L’utilisation d’une boucle for pour initialiser des éléments d’un tableau est la méthode la plus courante pour obtenir le tableau. Il n’est pas nécessaire d’exécuter une boucle for si vous souhaitez atsortingbuer la valeur par défaut, car JVM le fait pour vous.

Tout en un..! – Nous pouvons déclarer, instancier et initialiser notre tableau en une seule fois. Voici la syntaxe –

 int[] arr = {1, 2, 3, 4, 5}; 

Ici, nous ne mentionnons pas la taille, car JVM peut voir que nous donnons 5 valeurs.

Donc, jusqu’à ce que nous instancions les références restnt nulles. J’espère que ma réponse vous a aidé..! 🙂

Source – Tableaux en Java

Voici l’exemple clair de la création d’un tableau de 10 objects employés, avec un constructeur qui prend le paramètre:

 public class MainClass { public static void main(Ssortingng args[]) { System.out.println("Hello, World!"); //step1 : first create array of 10 elements that holds object addresses. Emp[] employees = new Emp[10]; //step2 : now create objects in a loop. for(int i=0; i 

Vous avez raison. En dehors de cela, si nous voulons créer un tableau de taille spécifique rempli d’éléments fournis par des “fabriques”, depuis Java 8 (qui introduit l’ API de stream ), nous pouvons utiliser cette ligne unique:

 A[] a = Stream.generate(() -> new A()).limit(4).toArray(A[]::new); 
  • Stream.generate(() -> new A()) est comme une usine pour les éléments A séparés créés de la manière décrite par lambda, () -> new A() qui est l’implémentation du Supplier – il décrit comment chaque nouveau Une instance doit être créée.
  • limit(4) définit la quantité d’éléments que le stream va générer
  • toArray(A[]::new) (peut également être réécrit comme toArray(size -> new A[size]) ) – il nous permet de décider / décrire le type de tableau à renvoyer.

Pour certains types primitifs, vous pouvez utiliser DoubleStream , IntStream , LongStream qui fournissent en outre des générateurs tels que range rangeClosed et quelques autres.

Oui, il est correct en Java il y a plusieurs étapes pour faire un tableau d’objects:

  1. Déclarer puis instancier (Créer une mémoire pour stocker des objects “4”):

     A[ ] arr = new A[4]; 
  2. Initialisation des objects (Dans ce cas, vous pouvez initialiser 4 objects de classe A)

     arr[0] = new A(); arr[1] = new A(); arr[2] = new A(); arr[3] = new A(); 

    ou

     for( int i=0; i<4; i++ ) arr[i] = new A(); 

Maintenant, vous pouvez commencer à appeler les méthodes existantes à partir des objects que vous venez de créer, etc.

Par exemple:

  int x = arr[1].getNumber(); 

ou

  arr[1].setNumber(x); 

Pour la classe générique, il est nécessaire de créer une classe wrapper. Par exemple:

 Set[] sets = new HashSet<>[10] 

entraîne: “Impossible de créer un tableau générique”

Utilisez plutôt:

  class SetOfS{public Set set = new HashSet<>();} SetOfS[] sets = new SetOfS[10];