Quelle difference entre static et non static dans une classe

Signaler
Messages postés
3
Date d'inscription
mardi 30 octobre 2007
Statut
Membre
Dernière intervention
11 mars 2008
-
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
-
Bonjour ,

j ' aimerai connaitre la difference entre staic et non static dans une classe permettante d instancier des objets ( sans main).
d ' apres ce que j' ai pu lire , on parle de methode ou de variable static lorsque celle ci est propre à la classe et non à un objet?

Mais cela n' est pas très clair pour moi , cela veux dire que lorsque j ' instancie la classe , un objet est créé mais avec une seule case mémoire pour cette variable static

merci

6 réponses

Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
1
Slt
Lorsque que tu définis une variable de type "staitc", cela signifi, qu'elle sera accessible par les autres classe du programme (même si celles-ci ne possède pas d'instance de la classe concernée).

public class TStatic {
   /**
    *On déclare un objet de type static (et de type final, ce qui veux dire qu'il ne peut pas être modifié).
    *
    **/ 
   public static final int VARIABLE_STATIC_1 = 0;

   /**
    *On déclare un objet de type static (objet modifiable).
    *
    **/ 
   public static int VARIABLE_STATIC_2 = 1;
}

public class Teste {
   /**
    *Affiche la valeur de l'objet static demandé.
    *
    **/ 
   public static void main (String arg[]) {
      System.out.println(TStatic.VARIABLE_STATIC_1);
      TStatic.VARIABLE_STATIC_2 = 36;
      System.out.println(TStatic.VARIABLE_STATIC_2);
   }
}

voila. j'espère avoir répondu à ta question.
+
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Le mot clé [static] indique qu'une méthode ou attribut n'est pas lié(e) à une instance donnée de cette classe.

C'est pourquoi on les appelle les attributs/méthodes de classe [Class Data & Class Methods].

Même si tu n'as pas encore créer aucune instance de la classe concernée tu peux utiliser ces membres statiques.

Contrairement aux attributs/méthodes d'instance qui sont lié(e)s à une instance donnée.
Messages postés
3
Date d'inscription
mardi 30 octobre 2007
Statut
Membre
Dernière intervention
11 mars 2008

Bonjour

je vous remercie de votre apport .
cependant je suis encore perdu , je comprends bien qu on peut acceder a une methode static en dehors de la classe (à laquelle elle appartient)sans instancier cette meme classe.
Cependant peut on alors parler d ' objet si on a pas besoin d ' instancier la classe?
Je me suis dirigé sur le calcul d ' un pgcd en essayant d ' utiliser une classe à part.

Voici un extrait de mon code en 2 versions  :

Premiere classe methode calcul pgcd sans static

public class Pgcdite{
    //variables d' instances
   private int a ;
    private int b ;
   
//constructeur  
public Pgcdite ( ){
    System.out.print (" a =  ");
    a = Lire.entierInt();
    System.out.print (" b =  ");
    b=Lire.entierInt();
   
    this.a = a ;
    this.b = b ;
}

//methode d instance
public int pgcdIte (){
    while (a !=b){
        if (a>b){
            a = a - b;
        }else {
            b = b- a ;
        }
    }
    return a;
}
}

Deuxieme  classe methode calcul pgcd avec  static

public class Pgcdite{

    //variables d' instances

   private int a ;

    private int b ;

//methodes de classe
public static int pgcdIte (int a , int b ){
    while (a !=b){
        if (a>b){
            a = a - b;
        }else {
            b = b- a ;
        }
    }
    return a;

}

Donc pour la deuxiéme classe je n ' ai pas besoin d instancier des objets , les valeurs entieres seront saisies dans la procédure main.

On arrive pourtant au meme résultat .

je vous remercie
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
1
Slt.
Heureusement que le résultat est identiqe ! (La fonction réalisée est la même).
La seul chose qui diffère c'est que dans le premier code (le non static) tu es obligé de créer une instance de ta classe pour pouvoir utiliser la méthode demandé (comme l'a dis Ombitious_Developper, la méthode est liée à la classe) => new Pgcdite().pgcdite();. Dans l'autre cas, il te suffit juste de préciser dans quelle classe se trouve la méthode => Pgcdite().pgcdlte(12, 256);.
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
1
j'oubliais, si par exemple tu voulais passer directement les paramètres à ta m"thode, il te suffit de faire :

public class Pgcdite{

//constructeur  
public Pgcdite ( ){
}

//methode d instance
public int pgcdIte (int a, int b){
    while (a !=b){
        if (a>b){
            a = a - b;
        }else {
            b = b- a ;
        }
    }
    return a;
}
}

Pour y avoir accèss, tu devrais faire new Pgcdite().pgcdlte(12, 265);
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Pourquoi utiliser toute une classe pour faire un simple calcul de PGCD, en fait une simple méthode utilitaire suffira.

public class Arithmetic {
    // Rendre cette classe non-instanciable
    private Arithmetic() {}

    public static int pgcd(int a, int b) {
       // Corps de la méthode
    }
}

Appel de la méthode pgcd():

int ret = Arithmetic.pgcd(13, 65);


Cordialement ...