rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

JAVA static et non static (

Posté par Chester, le lundi 10 décembre 2007 à 10:27:46
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,
Configuration: Windows XP
Internet Explorer 6.0
Répondre à Chester  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
le père, le lundi 10 décembre 2007 à 10:33:05
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.
Répondre à le père

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Papanoel, le lundi 10 décembre 2007 à 10:38:02
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.
@+
Répondre à Papanoel

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Mycki, le lundi 10 décembre 2007 à 11:24:06
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 ;)
Nécessairement, le hasard a beaucoup de pouvoir sur nous, puisque c'est par hasard que nous vivons.
Répondre à Mycki

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
le père, le lundi 10 décembre 2007 à 11:41:39
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
Répondre à le père

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Mycki, le lundi 10 décembre 2007 à 11:58:19
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...

Nécessairement, le hasard a beaucoup de pouvoir sur nous, puisque c'est par hasard que nous vivons.
Répondre à Mycki

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
le père, le lundi 10 décembre 2007 à 13:29:22
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...
Répondre à le père

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Chester, le mardi 11 décembre 2007 à 21:05:02
Salut à tous,

Merci franchement, ca m'a bien aidé et les conseils viennent bien à propos!!!!!
Répondre à Chester
Logiciels pertinents trouvés dans les téléchargements
Télécharger Java Runtime Environment 6 Update 7Java Runtime Environment - Java Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des...Catégorie: Java
Licence: Open Source
Télécharger Azureus 3.0.5.2bAzureus - Azureus est un client BitTorrent multiplateformes développé en Java, c'est-à-dire un gestionnaire de téléchargement de...Catégorie: Téléchargement
Licence: Open Source
Télécharger Delphi 6 Edition personnelle 6.0Delphi 6 Edition personnelle - La société Borland (Inprise) a mis à disposition gratuitement, pour un usage non-commercial, la version 6 de son...Catégorie: Delphi
Licence: Freeware/gratuit
Télécharger TMPGEnc 2.521TMPGEnc - TMPGEnc est un encodeur, c'est-à-dire qu'il convertit un fichier vidéo, en général de type AVI en fichier de type MPEG ...Catégorie: Copie/Extraction
Licence: Open Source
Plus de logiciels gratuits sur « JAVA static et non static ( »