Mon arrière-plan est C ++ et en C ++, nous pouvons facilement créer une éventail d'objet à l'aide de la syntaxe simple. Mais lorsque j'ai essayé de créer un tableau d'objet dans Java Maintenant, je veux juste demander pourquoi Java faire cela? Y a-t-il une raison même c ++ permettant que Java ne permet pas de créer de la même manière d'objets de la même manière?
Je cherchais ceci mais je n'ai toujours pas eu la réponse exacte. P> classname obj [n]; code> et également constructeur appellera n code> heure. p>
Nom de classe [] obj = nouveau nom de classe [n]; code> Aucun appel constructeur. Après avoir recherché, j'ai trouvé la réponse de cette question sur Stackoverflow que c'est juste Créer n code> référence qui peut pointer vers les objets n code> et j'ai besoin de créer des objets à nouveau pour chaque référence comme. obj [0] = nouveau nom de classe (); code> p>
4 Réponses :
Qu'est-ce qui est autorisé ou non est à la hauteur des concepteurs de langue.
Si vous souhaitez initialiser tous les éléments d'un tableau avec une référence au même objet dans Java, vous pouvez utiliser: p> ou pour créer des objets différents et transmettre différents arguments à chaque constructeur p> Nom de classe [] obj = nouveau nom de classe [] {nouveau nom de classe (), nouveau nom de classe ()}; code> p> p> p> p> P> P> P>
Alors pourquoi nous sélectionnons différentes langues? Il y a des raisons que chaque langue ait une différence de performance, de sécurité, etc. et de toutes les concepteurs de la langue Sélectionnez Syntaxe / Logic pour une raison désolé pour le pauvre anglais -_-
Notez que la solution RABRAYS.LEJEILLEZ -LUBLE Créer un objet et l'attribuez à chaque élément de tableau. Un tel résultat est rarement attendu. Habituellement, vous avez besoin d'objets distincts pour chaque élément de tableau.
"Alors pourquoi nous sélectionnons différentes langues? Il y a une raison pour que chaque langue ait une différence de performance" i> ... souvent, la raison de sélectionner une langue n'a rien à voir avec la performance. Par exemple, vous travaillez sur un système de construction complexe. C'est multi-module et a de nombreuses exigences personnalisées. Vous finissez par choisir Gradle / Groovy car c'est le bon outil pour le travail ... et certainement pas i> pour sa performance.
La simplicité de la syntaxe n'est pas un point fort de Java. Loin de là! Néanmoins, je suis étonnamment plus productif avec Java par rapport à C ++ à cause des bibliothèques disponibles et le support que je reçois de mon IDE (Intellij)
@scottb La question de mon commentaire était la même que votre réponse. Mais cela juste dû à un mauvais anglais. De toute façon j'ai eu la raison. Merci.
@Manosnikolaidis merci et désolé j'oublie de mentionner en question que je connais la solution mais pas la raison. Code>
en C ++, vous avez une flexibilité pour choisir une mémoire dans laquelle vous créez l'objet. Vous pouvez créer des objets dans une zone automatique (sur la pile), dans la zone statique ou dans la zone dynamique. Dans le dernier cas, vous obtenez un pointeur d'objet et deviens responsable de la libérer une fois que vous avez terminé.
En revanche, tout Java est l'option Dynamic Zone, car tous les objets sont des objets de référence. En C ++, ce serait équivalent à l'utilisation d'objets uniquement via des pointeurs et de les créer toujours avec permettant de créer des tableaux d'objet dans C ++ a été un choix dicté par besoin de laisser les programmeurs allouer des tableaux d'objets dans la zone automatique. Il est venu avec un compromis, car des objets à partir de laquelle vous faites des tableaux doivent avoir un constructeur par défaut. Ce n'est pas idéal, car l'exigence du constructeur par défaut semble arbitraire. P> Java, d'autre part, était libre de la mémoire automatique requise, de sorte qu'elles sont devenues une solution simple qui vous oblige à initialiser les objets individuellement . p> p> nouveau code>. Lorsque vous faites cela en C ++, vous devez également remplir votre éventail de pointeurs avec nouveaux objets code>: p>
Pas si souvent que vous avez besoin de vous créer des objets du même type que la matrice avec le constructeur par défaut. Parfois, vous voulez appeler le constructeur personnalisé. Parfois, vous voulez instancier les sous-classes et les stocker dans la matrice.
Notez que Java Array classname [] obj code> est plus équivalent à C ++ Array className * obj [n] code >, pas seulement classname obj [n] code>, car il s'agit d'une gamme de références aux objets, pas de la matrice d'objets eux-mêmes. À partir de Java-8, vous ne pouvez pas créer un tableau d'objets eux-mêmes (ils sont discutés dans le cadre de Projet Valhalla a>, mais n'apparaîtra pas même en Java-9). Lorsque les objets eux-mêmes sont stockés dans le tableau en C ++, vous devez em> Initialiser le tableau. Vous ne pouvez pas garder "NULLS" ou quelque chose comme celui-ci là-bas, car NULL n'est pas un objet, c'est la référence (ou le pointeur). Lorsque vous créez classname * obj [n] code> tableau en C ++ (plus similaire à Java classname [] obj code> tableau), il est également inaitalisé. P> < P> Enfin note que, dans Java-8, vous pouvez facilement créer tous les objets les instanciant avec un constructeur par défaut comme celui-ci: p>
@Tiger Si nous avons besoin d'un peu de temps no-argu-constructeur et parfois argu-constructeur, alors pourquoi nous créons des références? Nous pouvons créer un objet lorsque nous avons besoin d'un constructeur différent. Nom de classe obj = nouveau nom de classe (5); code> ou parfois classname obj2 = nouveau nom de classe ("A"); code> comme je l'attends pourrait être juste pour la lisibilité du code et moins de codage. Y a-t-il une autre raison? (Désolé pour le pauvre anglais)
@Tagir n'est pas votre faute bien sûr, mais je n'irais pas aussi loin que d'appeler la solution Java-8 "facile"
@Letdoit, désolé je ne comprends pas votre question. Essayez de le reformuler. Si la zone de commentaire ne suffit pas, envisagez de poster une nouvelle question en ajoutant tous les exemples nécessaires.
@Tagirvaleev comme première ligne de réponse, tableau de référence de référence pour différents constructeurs, mais nous pouvons créer différents objets sur notre exigence de constructeur. Alors pourquoi nous choisissons un tableau de référence?
@Letdoit, vous voudrez peut-être créer une array comme classname [] obj = {nouveau nom de classe (0), nouveau nom de classe (1), nouveau nom de classe (2), nouvel enfanceClassName (3)}; code> Initialisation de tous les éléments de la matrice de manière différente. Mais les stocker dans des variables distinctes pourrait être inappropriée si nous voulons les traiter uniformément après la création.
@Tagirvaleev merci.
En Java, chaque fois que vous déclarez une variable, qu'il s'agisse d'un membre d'un objet ou d'une variable locale, il est soit de type primitif ( En C ++, vous avez la liberté et la responsabilité de choisir le nombre d'indirections que vous faites, comment allouer, libérer, construire et détruire des objets, en ajoutant beaucoup de complexité: P>
octet code>, char code> .. .) ou de type de référence (pointeur à un objet de type).
Ainsi, il n'y a pas de tableaux d'objets, uniquement des tableaux de références. P>
* pointeur code>) li>
Pointer-> Membre Code>) Li>
et objet code>) li>
type * var code>). LI>
Supprimer le pointeur CODE>) LI>