Static ou non ?

Résolu
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 7 mars 2009 à 15:24
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 7 mars 2009 à 17:06
Voilà, ma question est très simple, quand est ce que je dois déclarer une fontion en static ? J'ai cherché sur internet et j'ai trouvé qu'il ne fallait déclarer en static que les méthodes qui n'avaient pas besoin d'êtres instanciées, je ne comprends pas bien.
Est ce que l'un d'entre vous aurais un exemple pour me faire comprendre.

Le probleme est que pour une meme fonction, on peut la déclarer en static ou non et, on peut faire tourner le code et qu'il fonctionne, avec quelques petites modification seulement, je ne vois donc pas trop a quoi ca sert...

Merci

3 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
7 mars 2009 à 16:22
salut

c'est une question d'objet : une fonction static ne peut pas faire reference a l'objet courrant : elle n'accede pas a this, ni aux attributs non static, ni aux autres fonctions non static.
3
benmor Messages postés 49 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 27 novembre 2011 9
7 mars 2009 à 16:46
Bonjour,

Peut-être devrais-tu te tourner vers des cours de programmation orienté objet.

Si tu déclare un méthode en static, celle-ci ne sera pas rattaché à une instance de ta classe, tu ne peut donc ni utiliser les attributs ou les méthodes de la classe qui ne sont pas static.
Quelle que chose static est unique et toutes tes objets auront la même réfence.

Exemple:
public class Test
{
    private static int s_id = 0;

    private int id = 0;
   
   public void inc()

   {

       s_id++;
       id++;

   }

   public static void s_inc()


   {


       s_id++;

       // id++;         ===> Impossible, car s_inc() n'appartient pas à un objet Test puisque comme tu l'as dit, elle n'est pas insrancié.


   }
}

Et le code suivant:
Test test1 = new Test();
Test test2 = new Test();
System.out.println("test1.id = " + test1.id);

System.out.println("test2.id = " + test2.id);

System.out.println("test1.s_id = " + test1.s_id);


System.out.println("test2.s_id = " + test2.s_id);
test1.inc();

System.out.println("test1.id = " + test1.id);


System.out.println("test2.id = " + test2.id);

System.out.println("test1.s_id = " + test1.s_id);


System.out.println("test2.s_id = " + test2.s_id);

Donnera:
test1.id = 0
test2.id = 0

test1.s_id = 0

test2.s_id = 0

test1.id = 1

test2.id 0              > Incrémenté que dans test1
test1.s_id = 1test2.s_id 1           > Car "s_id" est static, il n'y en a donc qu'une seule référence

J'espère avoir été assez claire et t'avoir aidé.
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
7 mars 2009 à 17:06
Parfait, merci pour vos réponses.
Je vais regarder plus précisement ce que tu as écris benmor, c'était exactement ce que je recherchais
0
Rejoignez-nous