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 :

Erreur de compilation et erreur d'exécution


Sujet :

avec Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par défaut Erreur de compilation et erreur d'exécution
    Bonjour,

    Dans le cadre de cours java , j'ai des exercices du genre voici deux codes lequel fait une erreur à la compilation , lequel fait une erreur à l'execution.
    J'ai pas encore totalement pigé le truc .
    Pouvez vous me corriger.

    Pour la compilation :

    Seule la syntaxe est vérifiée,quand la syntaxe est bonne le programme passe l'étape de la compilation.
    C'est bien ça ou bien il y a d'autres critères à prendre en compte.

    Pour l'execution :
    En écrivant je me rends compte que je ne connais pas les motifs d'erreur à l'execution,comme si une fois compilé le programme devait pouvoir s'executer.

    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    A la compilation, la syntaxe est vérifiée mais aussi le type des objets.
    Par exemple tu as 3 classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class A {...}
    class B extends A {...}
    class C {...}
    Le code suivant génère une erreur de compilation car on tente de caster a en C alors que a est déclaré en tant qu'objet de type A, et C n'est pas une classe héritant de A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A a = new A();
    C c = (C)a
    Le code suivant compile car B hérite de A, donc on peut en thérorie le caster (le compilateur ne regarde que la déclaration des objets, pas leur instanciation). Par contre à l'exécution, une ClassCastException sera levée car a est une instance de A qu'on tente de caster en B.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A a = new A();
    B b = (B)a

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par défaut
    Merci beaucoup ,
    C'est exactement ce que je n'arrivais pas à comprendre je vois ça à tête reposé et j'aurai surement des éclaircissements à te demander.

    Merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par défaut
    Bonjour,
    je remonte cette discussion.
    Par contre à l'exécution, une ClassCastException sera levée car a est une instance de A qu'on tente de caster en B.
    Dans quel cas donc est ce que le cast compile et s'éxecute.
    Parce ce que j'ai compris pour que le cast compile il faut une relation d'héritage entre les deux classes mais ça ne s'éxécute pas.
    Donc que faut il en plus pour que ça s' éxecute.

    Merci

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,
    Il faut que ta relation d'héritage soit dans le bon sens. Je veux dire par là :
    Dans l'exemple de CheryBen, B hérite de A. Ce qui veut dire qu'un objet de type B est un objet de type A, mais le contraire n'est pas forcément vrai.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class A {...}
    class B extends A {...}
    class C extends B {...}
     
    A a = new A();
    B b = (B)a; // ne passe pas car a est de type A et pas de type B
     
    A a = new B();
    B b = (B)a; // ok car a est de type B en vrai
    En espèrant avoir été clair...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut
    Si j'ai bien compris.

    Type véhicule.

    Voiture est de type véhicule.
    Camion est du type véhicule.

    Class véhicule : une plaque d'immatriculation, un pois a vide, un pois max en charge,...
    Class voiture : 4 roues, 3 ou 5 portières, de 2 a 8 passages, ...
    Class camion : 6 a x roues, 2 portières, 2 a 5 passages, avec remorque ou pas.
    Effectivement un véhicul peut être caster en voiture car avec la commande "super(plaque,pois_v ,pois_max) il peut stoker les variables dans la classe mère, mais la classe mère ne reconnait pas les variables des classe filles, et ne serait a quel enfant fourguer ses données.



    Janosor

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Janosor Voir le message
    Effectivement un véhicula peut être caster en voiture car avec la commande "super(plaque,pois_v ,pois_max)
    Pas toujours justement.
    Si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Vehicule c = new Camion(...);
    Voiture v = (Voiture)c;
    Tu obtiendras une erreur de cast à l'exécution. En théorie ce cast peut être possible, mais dans ce cas il ne l'est pas. Comme a dit CheryBen :
    Citation Envoyé par CheryBen
    le compilateur ne regarde que la déclaration des objets, pas leur instanciation

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Par défaut
    ça y est je pense avoir enregistré ça dans ma petite tête.
    En tout cas merci beaucoup CherryBen et Georges7 pour votre patience.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. cross compil arm erreur de compilation kernel bzimage
    Par vlotho dans le forum Administration système
    Réponses: 1
    Dernier message: 13/10/2014, 07h51
  2. Erreur de compilation/exécution
    Par V4Vendetta dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 15/08/2012, 02h15
  3. Réponses: 1
    Dernier message: 14/10/2011, 18h29
  4. Erreurs de compilation et d'exécution
    Par sonia5 dans le forum Langage
    Réponses: 1
    Dernier message: 14/12/2010, 13h28
  5. Réponses: 2
    Dernier message: 23/09/2003, 14h32

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