IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

[debutant] pourquoi ca ne marche pas


Sujet :

avec Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut [debutant] pourquoi ca ne marche pas
    Salut à tous!
    Je ne comprends pas. Quand j'ecris le code ci-dessous ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Affectation{
    static int i=4;
     
    static public void main(String[] args){
    System.out.println("la valeur de i est:"+i);
    }
    }

    par contre quand j'écris ce qui suit ça ne compile pas mais ca s'execute bien.Alors que je pense que c'est la même chose qui le code ci-dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Affectation{
    int i;
    i=4; // c'est comme ci pour le compilateur c'est une nouvelle variable???
     
    static public void main(String[] args){
    System.out.println("la valeur de i est:"+i);
    }
    }

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 75
    Points : 138
    Points
    138
    Par défaut
    C'est normal car tu ne peux initialiser comme cela.

    Si tu veux initialiser il faut que tu le fasse dans la fonction main.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Affectation{
    int i;
     
     
    static public void main(String[] args){
    i=4; //ICI
    System.out.println("la valeur de i est:"+i);
    }
    }

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Citation Envoyé par JamesBond002 Voir le message
    par contre quand j'écris ce qui suit ça ne compile pas mais ca s'execute bien.Alors que je pense que c'est la même chose qui le code ci-dessus
    Si ça ne compile pas, ça ne s'exécute pas non plus. Logique -_-°.

    Ce n'est pas la même chose, parce que la ligne i=4; est une instruction, et qu'on ne met pas des instructions où on veut. On doit les mettre dans des méthodes ou des constructeurs.
    (Ça marche aussi dans des blocs d'initialisation mais tu verras ça plus tard. Peut-être. C'est pas courant.)

    Ce n'est pas la même chose que int i=4; qui est une déclaration de variable. Ce qui n'est pas n'importe quelle instruction. Pour déclarer des variables de classe, il est normal de le faire à cet endroit.

    Citation Envoyé par Catsoumoto Voir le message
    C'est normal car tu ne peux initialiser comme cela.

    Si tu veux initialiser il faut que tu le fasse dans la fonction main.
    Ça compile pas ton affaire. La variable n'est pas static, elle ne peut pas être initialisée dans main().

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Si ça ne compile pas, ça ne s'exécute pas non plus. Logique -_-°.

    Ce n'est pas la même chose, parce que la ligne i=4; est une instruction, et qu'on ne met pas des instructions où on veut. On doit les mettre dans des méthodes ou des constructeurs.
    (Ça marche aussi dans des blocs d'initialisation mais tu verras ça plus tard. Peut-être. C'est pas courant.)

    Ce n'est pas la même chose que int i=4; qui est une déclaration de variable. Ce qui n'est pas n'importe quelle instruction. Pour déclarer des variables de classe, il est normal de le faire à cet endroit.





    Ça compile pas ton affaire. La variable n'est pas static, elle ne peut pas être initialisée dans main().

    Merci Thelvin pour ces explications claires. Ca m'a longtemps bloqué

    La seule chose que je ne comprends pas très bien c'est quand la variable n'est pas static, pourquoi est-ce qu'il n'est pas possible de l'initialiser dans main? il y a certainement une règle.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Les champs d'instance (par opposition aux champs statique) appartiennent à une instance de la classe Affectation. Hors, le main est une méthode statique, il n'y a donc pas d'instance associée au main et donc aucune variable d'instance n'existe (et pour cause, de quelle instance on parlerais?). Pour accéder / initialiser des variables d'instance, il faut le faire dans des méthodes associées à l'instance ou en utilisant une instance précise.

    Exemple1 :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Affectation{
    int i;
     
     
    static public void main(String[] args){
    Affectation a = new Affectation();
    a.i=4; //i sur l'instance a
    System.out.println("la valeur de i est:"+a.i);
    }
    }
    Exemple 2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Affectation{
    int i;
     public void test(){
       i = 4;
       System.out.println("i vaut maintenant "+i);
     }
     
    static public void main(String[] args){
    Affectation a = new Affectation();
    a.test();
    }
    }

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup tchize_ , vraiment je suis satisfait de vos réponses. Ce sont des points clés. Avec toutes ces explications que j'ai reçues aujourd'hui, c'est sûr que j'irai loin.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    1) Quand on écrit:
    int i; avec i variable d'instance.
    Ca veut dire que chaque objet a sa variable d'instance i?
    Pour éviter la confusion avec les variables (qui sont locales à un bloc de données), on utilise le terme "champ", mais oui, chaque instance à son propre champ "i", c'est le but du language objet en même temps


    finalement pour le compilateur " a.i " n'est pas une variable?
    a.i réprésente le champ "i" de l'instance "a"

Discussions similaires

  1. [Debutant] self.puts qui marche pas
    Par DavidDeTroyes dans le forum Ruby
    Réponses: 5
    Dernier message: 13/12/2006, 11h32
  2. [Débutante] Pourquoi ça ne marche pas...?
    Par Tootsi dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 12/02/2006, 16h58
  3. Pourquoi ce code marche pas sous FF?
    Par Death83 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/09/2005, 10h04
  4. [W3C] Pourquoi ça ne marche pas sous IE
    Par polo-j dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 16/02/2005, 16h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo