177 votes

Quelles sont les différentes façons de créer un objet en Java?

Eu une conversation avec un collègue l'autre jour à ce sujet.

Il y a d'évident, qui est d'utiliser un constructeur, mais par quels moyens?

284voto

kamaci Points 10526

Il existe quatre façons différentes de créer des objets en java:

Un. À l'aide de new mot-clé
C'est la façon la plus courante pour créer un objet en java. Près de 99% des objets sont créés de cette manière.

 MyObject object = new MyObject();

B. À l'aide de Class.forName()
Si nous connaissons le nom de la classe et si elle a un public de constructeur par défaut, nous pouvons créer un objet de cette manière.

MyObject object = (MyObject) Class.forName("subin.rnd.MyObject").newInstance();

C. À l'aide de clone()
Le clone() peut être utilisée pour créer une copie d'un objet existant.

MyObject anotherObject = new MyObject();
MyObject object = anotherObject.clone();

D. À l'aide de object deserialization
Désérialisation des objets n'en est rien, mais la création d'un objet à partir de sa forme sérialisée.

ObjectInputStream inStream = new ObjectInputStream(anInputStream );
MyObject object = (MyObject) inStream.readObject();

Vous pouvez lire ici

67voto

Il existe différents moyens:

  • Par le biais Class.newInstance.
  • Par le biais Constructor.newInstance.
  • Par deserialisation (utilise le n-args constructeur de la plupart des dérivés non-serialisable de la classe de base).
  • Par le biais Object.clone (ne pas appeler un constructeur).
  • Par le biais de JNI (faut appeler un constructeur).
  • Au moyen de toute autre méthode qui appelle une new pour vous.
  • Je suppose qu'on pourrait décrire de chargement de classe que la création de nouveaux objets (tels que les internés Strings).
  • Un littéral de tableau dans le cadre de l'initialisation d'une déclaration (pas de constructeur pour les tableaux).
  • Le tableau dans une "varargs" (...) de l'appel de méthode (pas de constructeur pour les tableaux).
  • Non-compiler constante de temps de concaténation de chaîne (qui arrive à produire au moins quatre objets, sur un typique de mise en œuvre).
  • Provoquant une exception à être créé et lancé par le runtime. Par exemple, throw null; ou "".toCharArray()[0].
  • Oh, et la boxe de primitives (sauf en cache), bien sûr.
  • JDK8 devrait avoir lambdas (essentiellement concis anonymous inner classes), qui sont implicitement converti à objets.
  • Pour être complet (et Paŭlo Ebermann), il y a un peu de syntaxe avec l' new mot-clé aussi bien.

25voto

Confusion Points 6056

Dans le langage Java, la seule façon de créer un objet en appelant son constructeur, que ce soit explicitement ou implicitement. L'utilisation de la réflexion résultats dans un appel à la méthode constructeur de la désérialisation utilise la réflexion pour appeler le constructeur, l'usine de méthodes d'encapsuler l'appel au constructeur de la classe abstraites de la construction et du clonage est de même enveloppé d'un appel de constructeur.

13voto

Thomas Lötzer Points 8388

Oui, vous pouvez créer des objets à l'aide de la réflexion. Par exemple, String.class.newInstance() vous donnera une nouvelle Chaîne vide d'objet.

9voto

Bill the Lizard Points 147311

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X