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 :

destruction d'objet


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut destruction d'objet
    Bonjour tt le monde

    Est ce qu'il existe une methode (surchargeable) appelée lorsqu'un objet
    (et en particulier ceux de SWING) est détruit, une sorte de destructeur?

    D'ailleurs au passage, c'est possible d'avoir une sorte de destructeur pour les objets en java?

    merci

  2. #2
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    marrant que tu demande ça .. je me posais justement la question avec 1 copain de classe si le Garbage Collector appelait la méthode 'dispose()' pour les composants grahiques ... dans ce cas on pourrait la redéfinir.
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  3. #3
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par NeptuS
    si le Garbage Collector appelait la méthode 'dispose()' pour les composants grahiques ...
    Normalement non... ce serait plutôt toi qui indique au Garbage Collector qu'il peut faire son boulot en faisant un dispose sur ton composant graphique.

    D'ailleurs, à partir du moment où c'est le programmeur qui indique le "dispose" sur un objet, il peut faire ce qu'il veut avant la "destruction" de son objet... par exemple, comme tu le proposes, en surchargeant la méthode dispose().
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  4. #4
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Il existe une methode finalize() mais il n'est pas possible de predire quand (et meme si) elle sera appelee. Il ne faut donc pas reposer la dessus.

    Pourquoi veux-tu faire un destructeur ? Tu n'en as pas besoin avec le GC.
    Romain Guy
    Android - Mon livre - Mon blog

  5. #5
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    plegat : à moins que je ne me trompe, il me semble que dispose() n'appelle pas le Garbage collector : elle "libère les ressources" .... mais peut-être que System.gc() fait plus ....
    Si Gfx (ou quelqu'un d'aussi compétent) pouvait répondre là dessus.
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  6. #6
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    System.gc() permet de demander un passage force du Garbage Collector mais rien n'indique que ce sera le cas. Cet appel est totalement imprevisible et est aujourd'hui fortement deconseille.
    Romain Guy
    Android - Mon livre - Mon blog

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    En résumé et si je ne dis pas de betise la seule chose à faire quand tu n'en a plus besoin est de supprimer toutes references à ton objet et puis d'attendre....

  8. #8
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Tu n'as souvent meme pas besoin de supprimer les references a ton objet car c'est automatique dans bien des cas. Par exemple si j'ecris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void maMethode(UnObjet o) {
      UnObjet ref1 = o;
      // ...
    }
    Apres l'execution de la methode, la reference, appelee ici ref1, sera automatiquement supprimee car elle n'appartient plus au flot d'execution du programme.

    Il reste tout de meme des cas ou il faut effectivement supprimer les references pour pouvoir liberer la memoire. C'est souvent le cas avec des listes declarees comme membres d'instance et contenant des objets.

    Il y a plusieurs types de references en Java : les references normales (ou hard references), les soft references et les weak references. Un objet reference par une soft reference peut etre libere par le GC s'il n'y a plus assez de memoire et que seules des soft references pointent dessue. Un objet reference par une weak reference est libere par le GC quand il n'a que des weak references pointant dessus. Les weak references sont par exemple tres utiles dans Swing.
    Romain Guy
    Android - Mon livre - Mon blog

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    merci pour vos reponse

    en fait ce que je voulais, c'est qu'un jpanel (en l'oocurrence) sauvegarde differente info a sa destruction, mais bon c pas grave au pire j'appelle la fonction de sauvegarde du panel.
    Ayant fait du c++ je me demandais si il y avait un mecanisme semblable en java.
    Encore merci pour vos reponse

Discussions similaires

  1. [POO] destruction d'objet ?
    Par karibouk dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 21/01/2009, 11h36
  2. [VB.NET 2.0] Destruction d'objet
    Par Torkan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2006, 02h02
  3. Destruction d'objet (.free) >> EAccessViolation
    Par monstroplante dans le forum Langage
    Réponses: 7
    Dernier message: 08/11/2005, 20h19
  4. destruction d'objets dans un vecteur
    Par titouille dans le forum C++
    Réponses: 12
    Dernier message: 28/07/2005, 19h20
  5. [débutante][Concept] Destruction d'objet, mode d'emploi?
    Par skea dans le forum Général Java
    Réponses: 4
    Dernier message: 12/06/2004, 21h48

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