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 :

Le mot clé class


Sujet :

Langage Java

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Le mot clé class
    Bonsoir,

    Quelle est donc cette syntaxe où l'on trouve le mot class dans une hierarchie de classe ??

    Merci de me pointer vers les bonnes info, car c'est un peu dur à trouver avec Google... :-/

    Cela apparaît dans le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        protected static ImageIcon createImageIcon(String path, String description)
        {
            java.net.URL imgURL = CelsiusConverter2.class.getResource(path);
            if (imgURL != null)
            {
                return new ImageIcon(imgURL, description);
            }
            else
            {
                System.err.println("Ne peut pas trouver le fichier " + path);
                return null;
            }
        }
    Je comprend le but de la fonction, mais je voudrais comprendre la fameuse ligne avec le .class.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Apparemment, CelsiusConverter2.class.getResource(path) est équivalent à CelsiusConverter2.this.getClass().getResource(path).

    Mais en ce cas, pourquoi utiliser this ?
    Et à quoi sert getClass ? La doc me dit que cela renvoit la classe d'éxécution, mais ça ne m'aide pas beaucoup...

    Je finis apr arriver aux "chargeurs de classe", et là, je suis paumé...

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    La syntaxe UneClasse.this est utilisee dans les classes internes quand tu veux utiliser le this qui correspond a l'instance courante de la classe englobante. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class A {
      private String chose;
      class B {
        private int truc;
        B() {
          this.truc = 2;
          A.this.chose = "machin";
        }
      }
    }
    class ou getClass() te renvoie une instance de la classe java.lang.Class qui definit la classe de la classe ou de l'instance (si tu es paume, c'est normal .

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String chose;
    String machin;
     
    Class a = chose.getClass();
    Class b = String.class;
    Class c = machin.getClass();
    Les variables a, b et c ont la meme valeur car a chaque fois on demande quelle est la classe qui represente le type "String". La classe Class contient des tas d'informations sur la classe qu'elle represente : ses methodes, son nom, ses champs, ses constructeurs, etc.

    Une classe est toujours chargee par un chargeur de classe, ou ClassLoader. Par exemple par defaut Java utilise un ClassLoader systeme pour charger les classes de ton applications. Mais si tu crees un logiciel qui a des plugins, le ClassLoader pourra etre different pour certaines classes. Le ClassLoader permet entre autre d'acceder a des ressources qui appartiennent a le meme source que la classe chargee par ledit ClassLoader.

    Par exemple si je veux lire le fichier file.txt qui se trouve dans le repertoire de MaClass.class, je taperai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaClass.class.getResource("file.txt");
    Si MaClass est sur ton disque dur, cette ligne renvoie une URL du type file://C:/file.txt. Mais si tu as charge MaClass depuis une autre source, par exemple un plugin dans un jar situe sur un serveur web, l'URL sera de la sorte : http://www.site.web/fichier.jar!/file.txt

    L'interet d'utiliser la methode Class.getResource() est qu'elle renvoie toujours une URL relative a ta classe. Cela permet donc de s'assurer que ton code marchera ou que soit ta classe : dans un dossier sur le disque, dans un JAR, en memoire, etc.

    CelsiusConverter2.class.getResource(path) est équivalent à CelsiusConverter2.this.getClass().getResource(path).
    CelsiusConverter2.class te renvoie une instance de Class qui decrit la classe CelsiusConverter2.

    CelsiusConverter2.this te renvoie l'instance courante de la classe CelsiusConverter2. Donc, quand tu appelle CelsiusConverter2.this.getClass() tu demandes quelle est la classe de l'instance courante de la classe CelsiusConverter2. Et la reponse est bien evidemment la meme que pour CelsiusConverter2.class.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Merci beaucoup pour le temps que tu as passé à rédiger cette réponse.

    Elle n'est pas encore pour moi hyper claire, mais j'ai le sentiment qu'il eût été difficile de faire plus clair.

    Je relis ça trois fois, et j'aurai peut-être quelques questions. :-)

    La première : cette histoire de classe Class peut-elle être rapprochée des templates de classes en C++ ?

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Je sais que ce n'est pas tres clair mais le fait que la classe Class decrive la classe des... etc. Le mieux est de faire des essais et tu comprendras.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Ces notions de classes de classes ne sont-elles pas liées au concept de templates de classe en C++ ?

    La classe Class permettrait ainsi une certaine généricité...

    On ne sait pas à l'avance quelle classe elle va représenter, mais on fait une sorte de transtypage à la volée... ??

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Non pas du tout. La classe Class *decrit* une classe, ce que ne font pas les templates du C++. Avec Class tu peux connaitre le nom, les methodes, les parents, etc.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    OK, merci beaucoup. J'ai compris le code à présent !

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

Discussions similaires

  1. Recherche d'un mot dans une colonne classée
    Par RéviAT dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/03/2008, 14h20
  2. Mot clef virtual, classes filles
    Par NiamorH dans le forum C++
    Réponses: 6
    Dernier message: 13/10/2007, 13h34
  3. Mot clé classe abstraite.
    Par Aurazed dans le forum VB.NET
    Réponses: 7
    Dernier message: 13/08/2007, 14h10
  4. Réponses: 2
    Dernier message: 27/09/2006, 10h37
  5. question théorique sur le mot class
    Par stgi02 dans le forum C++
    Réponses: 3
    Dernier message: 01/05/2006, 15h11

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