<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Quand N@t communique... &#187; certification</title>
	<atom:link href="http://www.richand.info/blog/tag/certification/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.richand.info/blog</link>
	<description>Développement personnel, personal MBA et tout ce qui touche à la vie d'un consultant logiciel.</description>
	<lastBuildDate>Sat, 29 Oct 2011 11:07:07 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Sun certification et pièges java.</title>
		<link>http://www.richand.info/blog/2008/08/sun-certification-et-pieges-java/</link>
		<comments>http://www.richand.info/blog/2008/08/sun-certification-et-pieges-java/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 20:16:00 +0000</pubDate>
		<dc:creator>Nathaniel Richand</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[scjp]]></category>

		<guid isPermaLink="false">http://www.richand.info/blog/?p=15</guid>
		<description><![CDATA[Voila un petit moment que mon blog est resté au point mort. L&#8217;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 [...]]]></description>
			<content:encoded><![CDATA[<p>Voila un petit moment que mon blog est resté au point mort. L&#8217;explication à  cela est du à :</p>
<ul>
<li> la fin de ma mission chez Groupama début juillet.</li>
<li> le passage de la certification SCJP dans la foulée.</li>
</ul>
<p>Je vais faire le bilan de la certification SCJP dans mon prochain post donc je ne vais pas plus m&#8217;attarder sur celle-ci maintenant. Par contre le fait d&#8217;avoir travailler la certification m&#8217;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&#8217;est bon, la certif SCJP est dans votre poche, sinon au boulot&#8230;</p>
<p><span id="more-15"></span></p>
<ol>
<h3>
<li><strong>Override &amp; Overload</strong></li>
</h3>
<p>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 :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Animal<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> <span class="kw4">void</span> mange<span class="br0">&#40;</span>Animal a<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;un&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Chat &nbsp;<span class="kw2">extends</span> Animal<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> <span class="kw4">void</span> mange<span class="br0">&#40;</span>Animal a<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;deux&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">public</span> <span class="kw4">void</span> mange<span class="br0">&#40;</span>Chat a<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;trois&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Animal animal = <span class="kw2">new</span> Chat<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; animal.<span class="me1">mange</span><span class="br0">&#40;</span>animal<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>
<li><strong>Interface</strong></li>
</h3>
<p>Ce bout de code est plus que trivial. Il n&#8217;y a aucun problème naturellement&#8230;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">interface</span> MyInterface<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw4">void</span> myMethod<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> MyClass <span class="kw2">implements</span> MyInterface<span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw4">void</span> myMethod<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>
<li><strong>Constructeurs</strong></li>
</h3>
<p>Toujours trivial, toujours sans problème ?</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Constructeur <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> Constructeur<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a> s<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Const2 <span class="kw2">extends</span> Constructeur<span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">public</span> Const2<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a> s<span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>
<li><strong>float</strong></li>
</h3>
<p>Enrobé dans 10 lignes de codes, ce code bidon peut se révéler très piégeur :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">float</span> f = <span class="nu0">1</span>/<span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Mon QI : &quot;</span>+ f*<span class="nu0">2</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>
<li><strong>Autoboxing et widening</strong></li>
</h3>
<p>Tout s&#8217;explique, même ceci. Comment justifierez-vous le choix de la méthode à appeler ?</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> coucou<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AFloat+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">Float</span></a> f<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Float&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> coucou<span class="br0">&#40;</span><span class="kw4">double</span> f<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;double&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw4">float</span> f = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; coucou<span class="br0">&#40;</span>f<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Il y en a bien d&#8217;autres, mais celles-ci sont déjà représentatives de l&#8217;esprit de la certification.</ol>
<h2><strong>Réponses :</strong></h2>
<p>1) le résultat est &#8230; « deux » !<br />
Le principe est : Overload est définit à la compilation, Override à l&#8217;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&#8217;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&#8217;est aussi simple que cela.</p>
<p>2) Ca ne compile pas bien évidemment.<br />
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&#8217;une méthode est public. Donc quand on l&#8217;implémente en ne mettant rien on lui attribut le typage défault qui est plus restrictif que public est donc interdit&#8230;<br />
Merci à Eclipse de l&#8217;avoir fait pour nous depuis tant d&#8217;années.<br />
Le type des variables est par défaut lui public static final.3) Idem, ça compile pas.</p>
<p>3) Idem, ça compile pas.<br />
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.<br />
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() ; »<br />
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.</p>
<p>4) Le résultat est évidemment 0.<br />
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.</p>
<p>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…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richand.info/blog/2008/08/sun-certification-et-pieges-java/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

