IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Instanciation dans le constructeur


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur Java EE
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Java EE

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Par défaut Instanciation dans le constructeur
    Bonjour;

    une simple question pour l'instanciation d'un objet :

    Quelle est la différence entre l'instanciation d'un objet dans la zone de déclaration des variable d'instance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Set<Compte> comptes=new HashSet<>();
    et dans le constructeur de l'objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public Client() {
    		super();
    		this.comptes=new HashSet<>();
    	}
    Pour le constructeur, j'ai compris que pour chaque objet, un objet de type Set sera crée, mais pour l'autre cas ?

    Une autre question :
    A quoi sert la déclaration de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final long serialVersionUID = 1L;
    pour chaque classe, et est ce qu'il est conseilé de le déclaré ?

    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par wadi3 Voir le message
    Quelle est la différence entre l'instanciation d'un objet dans la zone de déclaration des variable d'instance :

    Pour le constructeur, j'ai compris que pour chaque objet, un objet de type Set sera crée, mais pour l'autre cas ?
    Pareil. Il n'y a pas spécialement de différence entre l'un et l'autre.
    C'est juste que ce qui se fait à la déclaration des variables, est exécuté avant le constructeur. On dit que c'est le code d'initialisation, noté <init> dans la stacktrace, et donc exécuté avant le constructeur.

    Disons que si une variable peut être facilement instanciée là où elle est déclarée, il est plus propre de le faire. Ça évite les oublis, et ça indique plus clairement sa nature.

    Citation Envoyé par wadi3 Voir le message
    A quoi sert la déclaration de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final long serialVersionUID = 1L;
    pour chaque classe, et est ce qu'il est conseilé de le déclaré ?
    serialVersionUID est abordé dans la FAQ.

    Comme son nom l'indique, c'est en rapport avec la Sérialisation Java. Si une classe n'est pas sérialisable, ce champ ne lui sert à rien.

    Il y a un article qui décrit en détail la raison d'être de serialVersionUID.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pas vraiment. En fait c'est du code rajouté dans le constructeur par le compilation. Après l'appel à super, et avant toutes les autres lignes de code du constructeur

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ah, oui. Je viens de me rendre compte que tout ce qui est constructeur est noté <init> dans la stacktrace. Du coup, ça peut aussi se dire comme ça.

    Enfin, moi j'ai tendance à penser que super() est déplacé avant tout le reste, plutôt que penser que les initialisations sont déplacées dans les constructeurs après super().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Instancier une classe dans un constructeur d'une autre classe ?
    Par ctobini dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/12/2012, 11h11
  2. Réponses: 2
    Dernier message: 09/12/2008, 09h57
  3. Réponses: 3
    Dernier message: 27/04/2007, 14h51
  4. Réponses: 3
    Dernier message: 02/05/2006, 15h12
  5. Capture d'exception dans un constructeur
    Par declencher dans le forum Composants VCL
    Réponses: 8
    Dernier message: 03/02/2004, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo