web-dev-qa-db-fra.com

Que renvoie un constructeur en Java?

Après avoir lu le post sur ce sujet, je me suis trouvé un peu confus . Je pose donc à nouveau la question suivante:

"Le constructeur Java renvoie-t-il une valeur?"

Mes livres disent qu'ils ne peuvent pas restituer une valeur, mais mon professeur dit qu'ils peuvent le faire et qu'ils le font toujours.

Comme le contrôle doit être transféré à une personne ayant une valeur, elle est nulle ou non? 

26
user2040824

C'est un peu déroutant: les constructeurs ne renvoient en effet pas de valeur; c'est l'opérateur new qui le fait. Cependant, les constructeurs sont toujours utilisés avec un new*, donc on dirait qu'ils toujours retournent une valeur .


* Ceci est une légère simplification: vous pouvez utiliser un constructeur sans new si vous passez par réflexion . Cependant, les mêmes mécanismes seront en jeu.

31
dasblinkenlight

Un constructeur retourne une nouvelle instance de la classe à laquelle il appartient, même s'il n'a pas d'instruction de retour explicite.

8
Óscar López

Je pense que la confusion est purement de notation. Lorsque vous déclarez un constructeur, vous le faites comme suit:

public class Foo {
    public Foo() {}
}

Ici, il n'y a pas de valeur de retour explicite.

Cependant, lorsque vous instanciez un objet, la syntaxe est la suivante:

Foo foo = new Foo();

Cela crée un nouvel objet en allouant de la mémoire et en appelant le constructeur. Ici, le résultat est clairement une instance de Foo.

Une façon de réconcilier la notation apparemment conflictuelle consiste à penser qu'un constructeur renvoie l'objet en cours de construction, mais de manière implicite.

6
NPE

Les constructeurs sont des méthodes spéciales ... La différence de base entre constructeurs et méthodes est que

Constructeur

  • Avoir le même nom que celui de la classe
  • n'a pas de type de retour
  • Peut être surchargé mais pas surchargé.

tandis que

Méthodes  

  • Peut ou peut ne pas avoir le même nom que celui de classe.
  • avoir le type de retour
  • Peut être surchargé et surchargé.

Syntaxe pour les méthodes:
AccessModifier ReturnType Class (...)
EG: public static void main (String [] args)

Syntaxe pour les constructeurs:
AccessModifier No ReturnType Class (...)
EG: public static main (String [] args)

Notez s'il vous plaît:

Java est un langage fortement typé, chaque fonction a donc son type de retour et le constructeur renvoie toujours une instance de la classe.

4
Ashraf.Shk786

Je suis d'accord avec l'explication ci-dessus deux, et veux ajouter quelques déclarations pour être plus clair:

Question: Qu'est-ce qu'un constructeur: Réponses: C'est une méthode portant le même nom que Class.

Question: Le constructeur retourne-t-il quelque chose? Réponse: Non, même pas VOID.

Question: Comment appeler un constructeur? OR comment un constructeur est-il appelé? Réponse: En créant un objet avec le mot-clé NEW.

Question: comment créer un objet? Réponse: Une des façons de créer un objet consiste à utiliser l'opérateur NEW, qui renvoie une instance d'objet.

0
prateek

Par définition, il n’est pas possible de retourner une valeur à partir d’un constructeur. Un constructeur ne supporte aucun type de retour.

0
chandresh

donc, jusqu'ici, je suis le constructeur concerné retourne l'id de référence à la variable de référence de cette classe. Prenons un exemple:

class demo
{
    demo{}
}
class demo1
{
    public static void main(String as[])
    {
        demo d = new demo();
        System.out.println(d);
    }
}

output: demo@7d4991adit est l'ID de référence de l'objet 'd' de la classe demo qui est renvoyé par le constructeur. si vous ne définissez pas votre constructeur, jvm obtiendra cet identifiant du constructeur par défaut.

vous pouvez le vérifier par la ligne suivante: System.out.println (new demo ()); chaque objet varie également.

0
Gaurav