Comment avoir touts les méthodes invoquées dans une classe? [Résolu]

Messages postés
45
Date d'inscription
vendredi 13 mars 2009
Statut
Membre
Dernière intervention
3 février 2014
-
Bonjour,
je veux avoir, pour une classe donnée, toutes les méthodes invoquées dans cette classe, y comprises celles d'autres classes. par exemple:

public class Class1 {

public void aff8(){
 System.out.println("8");
}
public void aff9(){
 System.out.println("9");
}
}

public class Class2 {
public void aff1(){
 System.out.println("1");
}
public void aff2(){
 System.out.println("2");
 
       Class1 jjj = new Class1();
 jjj.aff8();
}

public void aff3(){
 System.out.println("3");
}
}



Dans ce cas, si je cherche les méthodes invoquées dans la classe Class2, je dois avoir:aff1, aff2, aff8, aff3.
Si j'utilise Class2.getMethods j'aurai seulement aff1, aff2, aff3.
Aidez moi SVP. Merci.
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
15965
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 avril 2019
97
1
Merci
De manière standard tu ne peux pas faire ça, parce qu'à la compilation un certain nombre d'informations "disparaissent" et qu'il n'est pas possible de les récupérer par introspection.

Ce qu'il faudrait faire c'est du désassemblage puis un traitement d'analyse derrière, ça se fait, mais c'est une autre paire de manches. Voici par exemple comment utiliser la commande javap :

javap -c Class1
Compiled from "Class1.java"
public class Class1 {
  public Class1();
    Code:
       0: aload_0
       1: invokespecial #8    // Method java/lang/Object."<init>":()V
       4: return

  public void aff8();
    Code:
       0: getstatic     #15   // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #21   // String 8
       5: invokevirtual #23   // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return

  public void aff9();
    Code:
       0: getstatic     #15   // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #30   // String 9
       5: invokevirtual #23   // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
}


javap -c Class2
Compiled from "Class2.java"
public class Class2 {
  public Class2();
    Code:
       0: aload_0
       1: invokespecial #8    // Method java/lang/Object."<init>":()V
       4: return

  public void aff1();
    Code:
       0: getstatic     #15   // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #21   // String 1
       5: invokevirtual #23   // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return

  public void aff2();
    Code:
       0: getstatic     #15   // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #30   // String 2
       5: invokevirtual #23   // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: new           #32   // class Class1
      11: dup
      12: invokespecial #34   // Method Class1."<init>":()V
      15: astore_1
      16: aload_1
      17: invokevirtual #35   // Method Class1.aff8:()V
      20: return

  public void aff3();
    Code:
       0: getstatic     #15   // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #41   // String 3
       5: invokevirtual #23   // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
}

Au vu de ta question, ce qui t'intéresse ce sont les
invokevirtual
qui te permettent d'obtenir les méthodes appelées à l'intérieur d'une méthode.
On a bien par exemple Class1.aff8() appelée par Class2.aff2(), sans oublier tous les System.out.println qui sont également des méthodes appelées par tes différentes méthodes.

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de KX
Messages postés
6449
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
278
0
Merci
salut,

J'ai édité ton message pour ajouter des balises permettant de coloriser le code. Essayes de le faire la prochaine fois.

a+
Commenter la réponse de cs_Julien39
Messages postés
6449
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
278
0
Merci
Salut,

Faute de retour de l'auteur, je marque le sujet comme résolut et je met +1 à ta réponse KX qui me semble tout à fait adaptée.

a+
Commenter la réponse de cs_Julien39

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.