Blank Twitter
Home
xfactor
août
3
xfactor

Voila un petit moment que mon blog est resté au point mort. L’explication à cela est du à :

  • la fin de ma mission chez Groupama début juillet.
  • le passage de la certification SCJP dans la foulée.

Je vais faire le bilan de la certification SCJP dans mon prochain post donc je ne vais pas plus m’attarder sur celle-ci maintenant. Par contre le fait d’avoir travailler la certification m’a permis de découvrir certaines subtilités du langage java. Si vous trouvez la réponse tout de suite aux questions ci-dessous c’est bon, la certif SCJP est dans votre poche, sinon au boulot…

  1. Override & Overload
  2. Connaissez-vous bien le fonctionnement de la surcharge (Override) et de la redéfinition (Overload) ? Quel est donc le résultat de ce bout de code :

    1. class Animal{
    2.   public void mange(Animal a){
    3.     System.out.println("un");
    4.   }
    5. }
    6. class Chat  extends Animal{
    7.   public void mange(Animal a){
    8.     System.out.println("deux");
    9.   }
    10.   public void mange(Chat a){
    11.     System.out.println("trois");
    12.   }
    13.   public static void main(String[] args) {
    14.     Animal animal = new Chat();
    15.     animal.mange(animal);
    16.   }
    17. }

  3. Interface
  4. Ce bout de code est plus que trivial. Il n’y a aucun problème naturellement…

    1. interface MyInterface{
    2.   void myMethod();
    3. }
    4. class MyClass implements MyInterface{
    5.   void myMethod() {}
    6. }

  5. Constructeurs
  6. Toujours trivial, toujours sans problème ?

    1. class Constructeur {
    2.   public Constructeur(String s) {}
    3. }
    4. class Const2 extends Constructeur{
    5.   public Const2(String s){}
    6. }

  7. float
  8. Enrobé dans 10 lignes de codes, ce code bidon peut se révéler très piégeur :

    1. float f = 1/2;
    2. System.out.println("Mon QI : "+ f*2);

  9. Autoboxing et widening
  10. Tout s’explique, même ceci. Comment justifierez-vous le choix de la méthode à appeler ?

    1. public static void coucou(Float f){
    2.   System.out.println("Float");
    3. }
    4. public static void coucou(double f){
    5.   System.out.println("double");
    6. }
    7. public static void main(String[] args) {
    8.   float f = 0;
    9.   coucou(f);
    10. }

    Il y en a bien d’autres, mais celles-ci sont déjà représentatives de l’esprit de la certification.

Réponses :

1) le résultat est … « deux » !
Le principe est : Overload est définit à la compilation, Override à l’exécution. Donc lors de la compilation le compilateur ne sait uniquement que notre « animal » est un Animal mais sans en savoir plus. Donc suivant le principe il va éliminer du choix des méthodes la numéro trois car elle prend en paramètre un Chat. Lors de l’exécution par contre la JVM sait que notre variable est un Chat, donc elle va choisir la méthode numéro deux qui est définit dans la classe Chat. C’est aussi simple que cela.

2) Ca ne compile pas bien évidemment.
Le problème vient du fait que les méthodes est variables dans une interface sont typées par défaut, même si vous ne le mettez pas. Le type par défaut d’une méthode est public. Donc quand on l’implémente en ne mettant rien on lui attribut le typage défault qui est plus restrictif que public est donc interdit…
Merci à Eclipse de l’avoir fait pour nous depuis tant d’années.
Le type des variables est par défaut lui public static final.3) Idem, ça compile pas.

3) Idem, ça compile pas.
Le problème vient de l’appel au constructeur par défaut. Ce qu’on appelle un constructeur par défaut est un constructeur sans argument qui est automatiquement rajouté à la compilation … si la classe ne définit pas déjà un autre constructeur. Ici donc, aucun constructeur par défaut n’est inséré car on en définit un dans chaque classe.
Le problème provient du fait que la première ligne de chaque constructeur doit contenir une référence vers un autre constructeur de la classe (this(…)) ou de la classe mère (super(…)). Si aucun appel de ce style n’est positionné sur la première ligne alors le compilateur ajoute tout seul : « super() ; »
C’est ce qui se passe sur l’exemple ci-dessus et qui provoque donc une erreur de compilation car le constructeur sans paramètres n’existe pas.

4) Le résultat est évidemment 0.
Un chiffre est considéré par le compilateur comme un int. Le résultat d’un int divisé par un int produit donc un int, le résultat est donc 0.

5) Le résultat est bien sûre « double ». On peut en effet utiliser en java la technique du « widening » qui permet ici de transformer notre float en double (no problem : un double peut contenir un float). On peut aussi depuis java 1.5 utiliser l’autoboxing, l’appel utilisant un « Float » est donc parfaitement valable également donc. L’autoboxing paraitrait plus logique, cependant c’est bien la méthode avec un double qui est appelé pour des besoins de compatibilité avec les versions de java antérieur. Too bad…

xfactor
21:16
xfactor

7 Responses to “Sun certification et pièges java.”

  1. Pierre dit :

    « Connaissez-vous bien le fonctionnement de la surcharge (Override) et de la redéfinition (Overload) ? »
    Sauf erreur de ma part, tu as inversé la traduction de « override » (qui correspond à la redéfinition) et « overload » (la surcharge)

  2. I would like to thank you for the efforts you’ve put in writing this site. I am hoping the same high-grade website post from you in the upcoming also. In fact your creative writing abilities has encouraged me to get my own site now. Actually the blogging is spreading its wings quickly. Your write up is a great example of it.

  3. Pellet Stoves dit :

    Hello there, You’ve done a fantastic job. I’ll definitely digg it and personally recommend to my friends. I’m confident they will be benefited from this site.

  4. Elliot dit :

    Helpful knowledge! I have already been trying to find something like this for some time now. Thanks for the tips!

  5. eliizabeth dit :

    Thanks for your submission. I would like to say that the first thing you will need to accomplish is to see if you really need credit repair. To do that you will have to get your hands on a duplicate of your credit score. That should really not be difficult, since the government necessitates that you are allowed to be issued one free copy of your actual credit report yearly. You just have to inquire the right people. You can either read the website for the Federal Trade Commission or even contact one of the major credit agencies specifically.

  6. Christen dit :

    Decent posting, I will be viewing back again frequent to look around for posts.

Leave a Reply

Subscribe RSSxfactor
 
xfactor
profile
About
Je suis Nathaniel Richand.
Vous trouverez dans ce blog tout ce qui touche au développement personnel, à mon personal MBA ainsi que diverses choses ayant trait à mon travail de consultant logiciel.

Si vous souhaitez voir mes articles techniques ceux-ci sont désormais publiés sur le blog de Xebia.

A noter, mes propos sont tenus à titre purement personnel et n'engage en aucun cas mon entreprise.
xfactor
In collaboration with Jackpotjoy Bingo, Virgin Bingo and 32Red Casino.
Designed by
 
Virgin Casino