Quelle difference entre static et non static dans une classe
linoufra
Messages postés3Date d'inscriptionmardi 30 octobre 2007StatutMembreDernière intervention11 mars 2008
-
10 mars 2008 à 16:58
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 2013
-
11 mars 2008 à 19:34
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
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 10 mars 2008 à 18:46
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);
}
}
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 10 mars 2008 à 21:44
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.
linoufra
Messages postés3Date d'inscriptionmardi 30 octobre 2007StatutMembreDernière intervention11 mars 2008 11 mars 2008 à 03:39
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.
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 11 mars 2008 à 14:14
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);.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 11 mars 2008 à 19:34
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
}
}