web-dev-qa-db-fra.com

Comment appeler une méthode en java?

Comment appeler une méthode qui est dans une autre classe du même paquet in java? appeler une méthode de classe différente?

8
user405398

Créez une instance de classe B:

B b=new B();
b.method();

ou définir une méthode statique en classe B:

class B
{
 static void staticMethod();
}

et appelez ça comme ça:

B.staticMethod();
10
Gustavo Puma

Les méthodes sont méthodes d'objet ou méthodes de classe.

Méthodes d'objet: il s'applique sur un objet. Vous devez utiliser une instance:

instance.method(args...);

Méthodes de classe: il s'applique sur une classe. Il n'a pas d'instance implicite. Vous devez utiliser la classe elle-même. Cela ressemble plus à une programmation procédurale.

ClassWithStaticMethod.method(args...);

Réflexion

Avec réflexion, vous disposez d'une API pour accéder par programme aux méthodes, qu'elles soient méthodes d'objet ou méthodes de classe.

Méthodes d'instance: methodRef.invoke(instance, args...); Méthodes de classe: methodRef.invoke(null, args...);

4
helios

Si vous définissez la méthode comme statique, vous pouvez l'utiliser sans instancier la classe, mais vous ne disposez pas non plus des variables d'objet disponibles.

public class Foo {
   public static String Bar() {
      return "bla";
   }
}

Dans ce cas, vous pouvez l'appeler avec Foo.Bar().

3
halfdan

Des notes de Fred Swartz (fredosaurus)

Il existe deux types de méthodes.

  • Les méthodes d'instance sont associées à un objet et utilisent les variables d'instance de cet objet. C'est la valeur par défaut.

  • Méthodes statiques n'utilise aucune variable d'instance d'aucun objet de la classe dans laquelle elles sont définies. Si vous définissez une méthode comme statique, le compilateur vous donnera un message grossier si vous essayez d'accéder à des variables d'instance. Vous pouvez accéder aux variables statiques, mais à l'exception des constantes, cela est inhabituel. Les méthodes statiques prennent généralement toutes les données à partir de paramètres et en calculent quelque chose, sans référence à des variables. Ceci est typique des méthodes qui font des calculs génériques. Les nombreuses méthodes utilitaires de la classe Math prédéfinie en sont un bon exemple.

Qualifier un appel statique

En dehors de la classe de définition, une méthode d'instance est appelée en la préfixant avec un objet, qui est ensuite transmis en tant que paramètre implicite à la méthode d'instance, par exemple, inputTF.setText("");.

Une méthode statique est appelée en la préfixant avec un nom de classe, par exemple, Math.max(i,j);. Curieusement, il peut aussi être qualifié avec un objet, qui sera ignoré, mais la classe de l’objet sera utilisée. 

Exemple

Voici une méthode statique typique:

class MyUtils {
    . . .
    //================================================= mean
    public static double mean(int[] p) {
        int sum = 0;  // sum of all the elements
        for (int i=0; i<p.length; i++) {
            sum += p[i];
        }
        return ((double)sum) / p.length;
    }//endmethod mean
    . . .
}

Les seules données utilisées ou modifiées par cette méthode proviennent de paramètres (ou de variables locales bien sûr).

Pourquoi déclarer une méthode static

La méthode mean() ci-dessus fonctionnerait aussi bien si elle n'était pas déclarée statique, tant qu'elle était appelée à partir de la même classe. Si elle est appelée de l'extérieur de la classe et qu'elle n'est pas déclarée statique, elle devra être qualifiée (inutilement) avec un objet. Même utilisé dans la classe, il y a de bonnes raisons de définir une méthode comme statique alors qu'elle pourrait l'être. 

  • Documentation. Quiconque verra qu'une méthode est statique saura l'appeler (voir ci-dessous). De même, tout programmeur consultant le code saura qu'une méthode statique ne peut pas interagir avec des variables d'instance, ce qui facilite la lecture et le débogage. 
  • Efficacité. Un compilateur produira généralement un code légèrement plus efficace car aucun paramètre d'objet implicite ne doit être transmis à la méthode. 

Appeler des méthodes statiques

Il y a deux cas.

Appelé de la même classe

Il suffit d'écrire le nom de la méthode statique. Par exemple:

// Called from inside the MyUtils class
double avgAtt = mean(attendance);

Appelé de l'extérieur de la classe

Si une méthode (statique ou instance) est appelée depuis une autre classe, vous devez indiquer un nom avant le nom de la méthode pour spécifier la classe dans laquelle la méthode est définie. Pour les méthodes d'instance, il s'agit de l'objet auquel la méthode accédera. Pour les méthodes statiques, le nom de la classe doit être spécifié. Par exemple:

// Called from outside the MyUtils class.
double avgAtt = MyUtils.mean(attendance); 

Si un objet est spécifié avant, sa valeur sera ignorée et la classe de l'objet sera utilisée. 

Accéder aux variables statiques

Bien qu'une méthode static ne puisse pas accéder aux variables d'instance, elle peut accéder aux variables static. Une utilisation courante des variables statiques consiste à définir des "constantes". Les exemples tirés de la bibliothèque Java sont Math.PI ou Color.RED. Ils sont qualifiés avec le nom de la classe, donc vous savez qu'ils sont static. Toute méthode, static ou non, peut accéder aux variables static. Les variables d'instance ne sont accessibles que par des méthodes d'instance. 

Autre appel

Ce qui est un peu particulier, et non recommandé, est qu'un objet d'une classe puisse être utilisé à la place du nom de la classe pour accéder à des méthodes statiques. C'est mauvais car cela donne l'impression que certaines variables d'instance de l'objet sont utilisées, mais ce n'est pas le cas. 

2
Jaken Herman

S'il s'agit d'une méthode statique, vous pouvez l'appeler en utilisant le nom de la classe à la place d'un objet.

1
AaronM

Vous pouvez créer une méthode statique ou utiliser l'autre classe en tant que membre de votre classe en appelant la fonction dans le constructeur. 

public class aClass {
      private SomeOtherClass oc;
      public class aClass( SomeOtherClass otherClass) {
         oc = otherClass;
      }

      public callOtherClassMethod() {
         oc.otherClassMethod();
       }
    }
1
It Grunt