Rechercher : dans
Par :

JAVA static et non static (

Dernière réponse le 11 déc 2007 à 21:05:02 Chester, le 10 déc 2007 à 10:27:46 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « JAVA static et non static ( » dans :
Le mot-clé static ou les attributs et méthodes de classe en POO Voir(NOTE: Cet article explique la signification du mot-clé static au sein d'une classe. La signification de "static" en C n'a par exemple rien à voir.) Vous êtes débutant en programmation orientée objet. En Java, en C++...ou que sais-je encore,...
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...
Java - Caractéristiques du langage VoirFichier source, compilation et machine virtuelle Le fichier source d'un programme écrit en Java est un simple fichier texte dont l'extension est par convention .java. Ce fichier source doit être un fichier texte non formatté, c'est-à-dire un...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...

1

le père, le 10 déc 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

Papanoel, le 10 déc 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

Mycki, le 10 déc 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

le père, le 10 déc 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

Mycki, le 10 déc 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

le père, le 10 déc 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

 Chester, le 11 déc 2007 à 21:05:02

Salut à tous,

Merci franchement, ca m'a bien aidé et les conseils viennent bien à propos!!!!!

Répondre à Chester