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 :

[Java] méthode static et passage de paramètre


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 82
    Points : 43
    Points
    43
    Par défaut [Java] méthode static et passage de paramètre
    bonjour,

    une petite question toute bete:
    quand je passe des paramètres à une méthode static, est ce que ces paramètres sont tjrs passés par référence?

    car je passe un objet de mon cru à une méthode static d'une classe static, la méthode modifie bien mon objet (j'ai vérifié ), mais au retour de la méthode mon objet est vide...

    merci d'avance!

  2. #2
    Membre régulier Avatar de zozolh2
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 128
    Points : 106
    Points
    106
    Par défaut
    salut

    je crois à mes souvenirs que java = passage en référence pour tout objet.

    d'ailleur c'est bien un gros avantage par rapport aux pointeurs du C !!! beeeeeeerk

  3. #3
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Oui en Java le passage d'objet est toujours par reference..

    Est ce que tu peux mettre ton code... pour que l'on puisse jeter un coup d'oeil?
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  4. #4
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Hello.
    Il est possible, à l'intérieur d'une méthode, de "modifier" les valeurs passées en paramètre. Mais, une fois que l'on ressort de la méthode, les paramètres sont remis à leur valeur d'avant la méthode.

    En fait, les objets sont transmis par copies de références... (sauf si on les déclare final, je suppose...)

    A+
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Glob
    Il est possible, à l'intérieur d'une méthode, de "modifier" les valeurs passées en paramètre. Mais, une fois que l'on ressort de la méthode, les paramètres sont remis à leur valeur d'avant la méthode.
    C'est vrai pour les types primitifs seulement... pas pour les objets !

    En fait, les objets sont transmis par copies de références... (sauf si on les déclare final, je suppose...)
    Les objets sont transmis par références.
    Les types primitifs par copies.

    Qu'est-ce que tu veux dire par "copies de références" ?

    Enfin si tu déclares un argument final tu ne pourra tout simplement pas lui affecter une autre référence (pour les objets) ou une autre valeur (pour les types primitifs)


    tomburn >> Comment est-ce que tu modifie ton objet ? Si tu utilises une affectation c'est normal car tu obtiens alors une autre références différentes de ton objet initial...

    Sinon montre nous le code de ta méthode statique...

    a++

  6. #6
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Comme le dit glob, les parametres sont transmis par copie de reference. Cela implique qu'il faut faire attention a la maniere de modifier tes parametres ...

    Voici un exemple tout bete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public ObjetTest{
     
      public void maMethodeTest(ObjetA a)
      {
         a = new ObjetA() ; //point (2bis)
      }
     
      public static void main(String [] args)
      {
        ObjetTest t = new ObjetTest() ; //point (0)
        ObjetA b = new ObjetA() ;  //point (1)
        t.maMethodeTest(b) ;        //point (2)
        // point (3)
      }
    }
    Voici comment on peut comment ce passe l'execution :
    (0) on cree un ObjetTest O1 et la variable t pointe dessus, je note ca t->O1

    (1) on cree un ObjetA A1, b->A1
    (2), on appele la methode maMethodeTest, a ce moment, on a b->A1 et a->A1
    (2bis) on cree un nouvel ObjetA A2. On a donc a->A2 et comme on n'a pas touche a b, on a aussi b->A1
    (3) on est sortie de la methode maMethodeTest, donc ses variables locales sont oublies. Donc il nous reste les deux pointeurs que l'on avait precedement, c'est a dire t->O1 et b->A1

    Ce petit exemple montre le fonctionnement du passage par copie de reference. Si tu veux modifier l'objet passe en parametre dans notre exemple, il faut que tu te debrouille pour modifier l'objet A1 et non la valeur du pointeur a.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 82
    Points : 43
    Points
    43
    Par défaut
    oula que de reponses

    bon j'ai pas mal bidouillé, plus rien ne marchait.
    donc j'ai tout remis comme je pensais que c'était avant, et mtnt ca marche...
    donc j'avais du faire une betise.

    en tt cas il semblerait bon que je me penche un peu sur la gestion de la memoire en java, car j'ai l'impression qu'il y a des trucs louches...

    merci à tous en tt cas!

  8. #8
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Citation Envoyé par adiGuba
    Citation Envoyé par Glob
    Il est possible, à l'intérieur d'une méthode, de "modifier" les valeurs passées en paramètre. Mais, une fois que l'on ressort de la méthode, les paramètres sont remis à leur valeur d'avant la méthode.
    C'est vrai pour les types primitifs seulement... pas pour les objets !
    Si. Voir l'exemple de benratti. Par contre, le contenu de l'objet n'est pas affecté par cela (c'est ce que tu veux dire, je parie ).

    Citation Envoyé par adiGuba
    Qu'est-ce que tu veux dire par "copies de références" ?
    Encore une fois, voir l'exemple de benratti. Cela signifie que l'on peut, à 'intérieur d'une méthode, modifier les références passées en paramètre. Mais que, ensuite, ces références (objets) apparaitront inaltérées au niveau au dessus. Je parle bien de la référence et non de l'objet référencé. Voir le forum C++

    Citation Envoyé par adiGuba
    Enfin si tu déclares un argument final tu ne pourra tout simplement pas lui affecter une autre référence (pour les objets) ou une autre valeur (pour les types primitifs)
    Tout à fait. Je me permettait de spéculer sur le fait que, avec un mot clé "final", la jvm pouvait se permettre de passer la référence et non une copie lors d'un appel de méthode... (et donc de gagner un chouia de temps)
    A+
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  9. #9
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Citation Envoyé par Glob
    Citation Envoyé par adiGuba
    Enfin si tu déclares un argument final tu ne pourra tout simplement pas lui affecter une autre référence (pour les objets) ou une autre valeur (pour les types primitifs)
    Tout à fait. Je me permettait de spéculer sur le fait que, avec un mot clé "final", la jvm pouvait se permettre de passer la référence et non une copie lors d'un appel de méthode... (et donc de gagner un chouia de temps)
    A+
    Tiens, je ne savais pas que l'on pouvait mettre des mots clefs pour les arguments d'une methode. Est ce qu'il existe d'autre mots clefs que final que peuvent s'utiliser pour les arguments d'une methode ?

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Glob : on est bien d'accord on ne parlais pas exactement de la même chose

    Mais en Java, une affectation ne modifie pas un objet mais crée une autre référence...
    Donc on ne peut pas vraiment parler de "modifier" un objet avec le code suivant :
    On utilise une nouvelle référence vers un nouvel objet.

    En C++ il me semble que ce n'est pas le cas car on utilise alors le constructeur de copie...
    (Nota : je ne suis pas sûr de ca...)

    Au passage je ne savais pas non plus que l'on pouvait utiliser le mot-clef final pour des paramètres...
    Mais il semblerais plutôt que cela indiquerais que le paramètre ne changera pas (pas nouvelle d'affectation) :
    http://java.sun.com/docs/books/tutorial/post1.0/converting/languageChanges.html (en bas de la page)

    a++

  11. #11
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Citation Envoyé par benratti
    Tiens, je ne savais pas que l'on pouvait mettre des mots clefs pour les arguments d'une methode. Est ce qu'il existe d'autre mots clefs que final que peuvent s'utiliser pour les arguments d'une methode ?
    Pas à ma connaissance.
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. javascript vers java (méthodes avec paramètres)
    Par knice dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 16/08/2008, 21h42
  2. Action - passage de paramètres à une méthode
    Par burhud dans le forum Struts 2
    Réponses: 3
    Dernier message: 16/10/2007, 10h12
  3. Réponses: 3
    Dernier message: 28/06/2006, 15h17
  4. [STRUTS]Méthode Reset passage de paramètre
    Par Scheutman dans le forum Struts 1
    Réponses: 1
    Dernier message: 13/03/2006, 00h42
  5. [CR][Java] Passage de paramètres
    Par ista9im dans le forum SDK
    Réponses: 1
    Dernier message: 16/01/2006, 08h26

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