JAVA static et non static (

Résolu/Fermé
Chester - 10 déc. 2007 à 10:27
 BIBA - 20 juin 2010 à 21:34
Bonjour,

Je suis un débutant. Dsl de vous poser une question qui paraitra bête. Pourquoi quand je tape ce code:


public class CompteEnBanque {
public String NuméroDeCompte="004-33321322-32";
protected int Solde=1000000000;
int NbrDeRetraits=23;
private double Taux=(0.04);

public static void AfficheToi (String [] args) {
System.out.println (NuméroDeCompte);
System.out.println (Solde);
System.out.println (NbrDeRetraits);
System.out.println (Taux);
}
}


Le message d'erreur: cannot make a static reference to the non-static field "NuméroDeCompte" apparaît ?????
Merci à vous,
A voir également:

6 réponses

Salut,

Je suis pas un pro du JAVA non plus mais j'en ai fait pas mal quand même.
La fonction "AfficheToi" est déclarée static ce qui signifie qu'elle peut être appellée sans avoir crée d'instance de la classe à laquelle elle appartient. Or, si aucune instance de la classe n'est créee, les objets de la classe, tel "NuméroDeCompte", n'existent pas non plus.
Donc, tu ne peux faire appel à un objet qui est susceptible de ne pas exister.
Tu dois donc enlever le terme "static" de l'en-tête de la fonction.

Si tu dois la garder pour une raison quelconque, il faut que tu revois ta classe et ta fonction. Surement en les dissociant.
@+
7
Bonjour

Quand tu mets static devant un nom de fonction, ça veut dire que tu définis une fonction qui n'est liée à aucune instance particulière de la classe, c'est à dire qu'on peut l'appeler sans qu'aucun objet CompteEnBanque n'ait été défini ("instancié").
Or les membres NumérodeCompte, Solde, etc.. ne sont pas définis comme static et n'existent donc que quand un objet est défini.
2
Si tout est static, tous les comptes auront le même numéro, le même solde, etc... Je ne pense pas que ce soit l'effet recherché.
Le seule chose qui me semble logique à faire dans ce cas, c'est de retirer static de la définition de AfficheToi, comme l'a dit PapaNoel
2
Mycki Messages postés 113 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 17 décembre 2007 46
10 déc. 2007 à 11:24
Personnellement, je te conseillerais de mettre tes variables membres (qui sont accessoirement des constantes) en static...

Tu peux faire comme ca ca marchera je pense :

public class CompteEnBanque {
   public static String NuméroDeCompte="004-33321322-32";
   protected static int Solde=1000000000;
   static int NbrDeRetraits=23;
   private static double Taux=(0.04);

   public static void AfficheToi (String [] args)
   {
      System.out.println (NuméroDeCompte);
      System.out.println (Solde);
      System.out.println (NbrDeRetraits);
      System.out.println (Taux);
   }
} 


Comme tu es débutant en Java, comme moi il y a quelques mois, je vais te donner deux trois conseils utiles. D'abord, concernant tes noms de variables, ne mets jamais d'accents comme il y en a pour NuméroDeCompte.
Ensuite, pour mieux te repérer, tu peux utiliser la notation hongroise (pour voir en détail vas sur Wikipedia et tapes notation hongroise). En gros, tes noms de variables sont directement identifiables par la première lettre qui correspond au type de ta variable, exemple : private static int iNumber, ou encore String sSQL. Ca permet de te repérer plus vite.
Enfin, toujours concernant tes noms de variables, utilise des majuscules pour les constantes et des minuscules pour les variables.
Exemple : private static String sCONSTANTE_NOM = "Chaine de caractere";
ou
protected int iNumber;

Voila, j'espère que mes conseils t'aideront à l'avenir. ;)

EDIT : Ah! J'allais oublier. Dernier conseil, tes variables membres, qui sont aussi appelées Attributs de classe, doivent être précédées d'un préfixe pour savoir au premier coup d'oeil si elles sont variables membres ou pas (en gros, si tu peux les utiliser dans toute la classe ou pas). Pour les variables membres qui ne sont pas statiques, tu mets un m_ et pour celles qui sont statiques, tu mets s_.

Exemple :

public class CompteEnBanque
{
     private static int s_iNumeroCompte;
     private String    m_sChaineDeCaracteres;
     private static String s_sCHAINE_DE_CARACTERE;
}


Bien sur, tout ca, ca ne reste que des conseils, mais moi qui m'y suis mis récemment, avec des gens qui codent depuis longtemps, je vois à quel point c'est utile ;)
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut à tous,

Merci franchement, ca m'a bien aidé et les conseils viennent bien à propos!!!!!
1
J'ai une question a propos , si nous avons un seul objet dans notre programme , alors et si j'ai utilisé cet objet dans une autre classe comment désigne que l'objet déclarer dans le programme principal et le même objet déclarer dans la classe ,,,,????

HELP PLEASE
0
Mycki Messages postés 113 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 17 décembre 2007 46
10 déc. 2007 à 11:58
Dans ce cas, pourquoi ne pas instancier un objet de la classe CompteEnBanque ?

Directement dans la méthode AfficheToi(), il n'a qu'à faire CompteEnBanque objetCompteEnBanque = new CompteEnBanque(); et après il instancie son objet chaque fois qu'il veut afficher ses variables membres.

System.out.println( objetCompteEnBanque.NuméroDeCompte );
System.out.println( objetCompteEnBanque.Solde );

Etc...
0
Il peut instancier tout ce qu'il veut... N'empêche que les champs static n'existant qu'en un seul exemplaire pour toutes les instances de la classe ( et non pas un par instance ) tout le monde aura le même numéro de compte, etc...
0