68 votes

Quelle est la différence entre une méthode statique et une méthode non statique ?

Voir les extraits de code ci-dessous :

Code 1

public class A {
    static int add(int i, int j) {
        return(i + j);
    }
}

public class B extends A {
    public static void main(String args[]) {
        short s = 9;
        System.out.println(add(s, 6));
    }
}

Code 2

public class A {
    int add(int i, int j) {
        return(i + j);
    }
}

public class B extends A {
    public static void main(String args[]) {
    A a = new A();
        short s = 9;
        System.out.println(a.add(s, 6));
    }
}

Quelle est la différence entre ces extraits de code ? Les deux produisent 15 comme réponse.

3 votes

Ici, Comprendre les membres des instances et des classes C'est très bien expliqué.

4voto

Rahul Saxena Points 161

Une méthode statique appartient à la classe et une méthode non statique appartient à un objet d'une classe. Je donne un exemple de la façon dont cela crée une différence entre les sorties.

public class DifferenceBetweenStaticAndNonStatic {

  static int count = 0;
  private int count1 = 0;

  public DifferenceBetweenStaticAndNonStatic(){
    count1 = count1+1;
  }

  public int getCount1() {
    return count1;
  }

  public void setCount1(int count1) {
    this.count1 = count1;
  }

  public static int countStaticPosition() {
    count = count+1; 
    return count;
    /*
     * one can not use non static variables in static method.so if we will
     * return count1 it will give compilation error. return count1;
     */
  }
}

public class StaticNonStaticCheck {

  public static void main(String[] args){
    for(int i=0;i<4;i++) {
      DifferenceBetweenStaticAndNonStatic p =new DifferenceBetweenStaticAndNonStatic();
      System.out.println("static count position is " +DifferenceBetweenStaticAndNonStatic.count);
        System.out.println("static count position is " +p.getCount1());
        System.out.println("static count position is " +DifferenceBetweenStaticAndNonStatic.countStaticPosition());

        System.out.println("next case: ");
        System.out.println(" ");

    }
}

}

Maintenant, la sortie sera:: :

static count position is 0
static count position is 1
static count position is 1
next case: 

static count position is 1
static count position is 1
static count position is 2
next case: 

static count position is 2
static count position is 1
static count position is 3
next case:

3voto

EngineerEngin Points 115

Si votre méthode est liée aux caractéristiques de l'objet, vous devez la définir comme une méthode non statique. Sinon, vous pouvez définir votre méthode comme statique, et vous pouvez l'utiliser indépendamment de l'objet.

3voto

geetha Points 59

Exemple de méthode statique

class StaticDemo
{

 public static void copyArg(String str1, String str2)
    {
       str2 = str1;
       System.out.println("First String arg is: "+str1);
       System.out.println("Second String arg is: "+str2);
    }
    public static void main(String agrs[])
    {
      //StaticDemo.copyArg("XYZ", "ABC");
      copyArg("XYZ", "ABC");
    }
}

Sortie :

First String arg is: XYZ

Second String arg is: XYZ

Comme vous pouvez le voir dans l'exemple ci-dessus, pour appeler une méthode statique, je n'ai même pas utilisé d'objet. Elle peut être appelée directement dans un programme ou en utilisant le nom de la classe.

Exemple de méthode non statique

class Test
{
    public void display()
    {
       System.out.println("I'm non-static method");
    }
    public static void main(String agrs[])
    {
       Test obj=new Test();
       obj.display();
    }
}

Sortie :

I'm non-static method

Une méthode non statique est toujours appelée en utilisant l'objet de la classe comme le montre l'exemple ci-dessus.

Points clés :

Comment appeler les méthodes statiques : directement ou en utilisant le nom de la classe :

StaticDemo.copyArg(s1, s2);

o

copyArg(s1, s2);

Comment appeler une méthode non statique : en utilisant un objet de la classe :

Test obj = new Test();

2voto

Musaffir Points 21

La différence fondamentale est que les membres non statiques sont déclarés sans utiliser le mot clé "static".

Tous les membres statiques (variables et méthodes) sont référencés à l'aide du nom de la classe. Par conséquent, les membres statiques d'une classe sont également appelés membres de référence de la classe ou membres de la classe.

Afin d'accéder aux membres non statiques d'une classe, nous devons créer une variable de référence. La variable de référence stocke un objet

2voto

Ujjaval Moradiya Points 152

Un autre scénario pour la méthode statique.

Oui, la méthode statique est de la classe et non de l'objet. Et lorsque vous ne voulez pas que quelqu'un initialise l'objet de la classe ou que vous ne voulez pas plus d'un objet, vous devez utiliser la méthode Constructeur privé et donc la méthode statique.

Ici, nous avons un constructeur privé et en utilisant la méthode statique nous créons un objet.

Ex: :

public class Demo {

        private static Demo obj = null;         
        private Demo() {
        }

        public static Demo createObj() {

            if(obj == null) {
               obj = new Demo();
            }
            return obj;
        }
}

Demo obj1 = Demo.createObj() ;

Ici, une seule instance sera en vie à la fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X