<?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>Blogul lui Alex Chiri &#187; Java</title>
	<atom:link href="http://alexchiri.ro/index.php/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://alexchiri.ro</link>
	<description>Mai puţină programare, mai multă dezvoltare personală</description>
	<lastBuildDate>Wed, 08 Sep 2010 09:36:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
	<atom:link rel="hub" href="http://superfeedr.com/hubbub" />
			<item>
		<title>Ciudățenii cu colecții și generice</title>
		<link>http://alexchiri.ro/index.php/2010/09/04/ciuda%c8%9benii-cu-colec%c8%9bii-%c8%99i-generice/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ciuda%25c8%259benii-cu-colec%25c8%259bii-%25c8%2599i-generice</link>
		<comments>http://alexchiri.ro/index.php/2010/09/04/ciuda%c8%9benii-cu-colec%c8%9bii-%c8%99i-generice/#comments</comments>
		<pubDate>Sat, 04 Sep 2010 12:38:04 +0000</pubDate>
		<dc:creator>Alex Chiri</dc:creator>
				<category><![CDATA[D'ale SCJP-ului]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[collections]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[scjp]]></category>

		<guid isPermaLink="false">http://alexchiri.ro/?p=647</guid>
		<description><![CDATA[Sunt multe "lucrușoare" din Java pe care chiar și cei care programează zilnic în Java nu le (mai) știu și mai ales pentru că nu le folosesc. Pentru asta există cărțile de Java, să ne mai aducă aminte de multe astfel de secrete. Recunosc, spre rușinea mea, că nu am folosit până în prezent prea [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://alexchiri.ro/wp-content/plugins/wordpress-code-snippet/scripts/shBrushJava.js"></script>
<p>Sunt multe "lucrușoare" din Java pe care chiar și cei care programează zilnic în Java nu le (mai) știu și mai ales pentru că nu le folosesc. Pentru asta există cărțile de Java, să ne mai aducă aminte de multe astfel de secrete. Recunosc, spre rușinea mea, că nu am folosit până în prezent prea mult (în mod voit) avantajele polimorfismului, cel puțin în cazul apelurilor de metode.</p>
<p>Și astfel ajungem la subiect. Eu nu știam sau nu mi-am pus niciodată problema că ceea ce pot face astfel cu vectori: <pre class="brush: java">public class PoliArrayExample {
    public static void main(String[] args) {
        Integer[] ints = new Integer[3];
        Arrays arrs = new Arrays();
        arrs.doSomethingWithArrays(ints);
    }
}

class Arrays {
    public void doSomethingWithArrays(Object[] arr) {
        arr[0] = new String(&quot;test&quot;);
    }
}</pre></p>
<p>cu colecții nu este posibil, mai exact acest lucru nu se poate face:<pre class="brush: java">public class PoliArrayExample {
    public static void main(String[] args) {
        ArrayList&lt;Integer&gt; ints = new ArrayList&lt;Integer&gt;();
        Arrays arrs = new Arrays();
        arrs.doSomethingWithArrays(ints);
    }
}

class Arrays {
    public void doSomethingWithArrays(ArrayList&lt;Object&gt; arr) {
        arr.add(&quot;&quot;);
    }
}</pre></p>
<p>Se pare că în cazul colecțiilor în momentul în care semnătura metodei <code>public</code> <code>void</code> <code>doSomethingWithArrays(ArrayList&lt;Object&gt; arr)</code> va arăta astfel, nu vom putea apela decât cu un ArrayList de tip Object, fără subclase sau superclase (nu că Object ar avea super clase, dar putem extrapola). Prin urmare, în codul anterior vom avea probleme la linia 5. Acest lucru poate fi oarecum păcălit: <pre class="brush: java">public class PoliArrayExample {
    public static void main(String[] args) {
        ArrayList&lt;Integer&gt; ints = new ArrayList&lt;Integer&gt;();
        Arrays arrs = new Arrays();
        arrs.doSomethingWithArrays(ints);
    }
}

class Arrays {
    public void doSomethingWithArrays(ArrayList&lt;? extends Object&gt; arr) {
        arr.add(&quot;&quot;);
    }
}</pre></p>
<p>spunându-i compilatorului să accepte și clase care au extins sau implementat clasa/interfața de după <strong>extends, <span style="color: #ff0000;">cu condiția să nu adăugam nimic în colecția primită ca și parametru</span></strong>. Astfel, nu scăpăm, primind o eroare de compilare la linia 11, spunându-ne că nu există metoda <strong>add </strong>cu parametru de tip String. Putem folosi șmecheria de mai sus, atât timp cât nu adăugăm în acea colecție nimic. Și așa cum cu <strong>extends </strong>am permis accesul subclaselor, cu <strong>super </strong>putem permite accesul superclaselor:<pre class="brush: java">public class PoliArrayExample {
    public static void main(String[] args) {
        ArrayList&lt;Object&gt; ints = new ArrayList&lt;Object&gt;();
        Arrays arrs = new Arrays();
        arrs.doSomethingWithArrays(ints);        
    }
}

class Arrays {
    public void doSomethingWithArrays(ArrayList&lt;? super Integer&gt; arr) {
        arr.add(new Integer(1));
    }
}</pre></p>
<p>Și în acest caz nu vom avea nicio problemă să și adăugăm elemente în colecție, atât timp cât sunt de tipul specificat sau <strong><span style="color: #ff0000;">subclase</span></strong> ale tipului specificat. <em>(mulțumesc Ducu pentru corectură!)</em></p>
<p>Toate acestea se întâmplă datorită modului în care au fost implementate genericele în Java. Cei care au făcut genericele în Java au dorit ca odată cu apariția genericelor să poată fi folosit și codul de dinainte de Java 5 și generice. Prin urmare, genericele sunt doar la nivel de compilator și la runtime un obiect de tip <strong>List&lt;String&gt;</strong> devine un simplu obiect <strong>List</strong> și Java nu mai are niciun control asupra ceea ce pui în lista respectivă. La vectori treaba stă altfel și un String[] chiar și la runtime tot String[] rămâne și când vom încerca să adăugăm altceva decât tipul permis vom primi o excepție (<a href="http://download-llnw.oracle.com/javase/6/docs/api/java/lang/ArrayStoreException.html" target="_blank">ArrayStoreException</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://alexchiri.ro/index.php/2010/09/04/ciuda%c8%9benii-cu-colec%c8%9bii-%c8%99i-generice/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Scurte pentru SCJP</title>
		<link>http://alexchiri.ro/index.php/2010/09/02/scurte-pentru-scjp/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=scurte-pentru-scjp</link>
		<comments>http://alexchiri.ro/index.php/2010/09/02/scurte-pentru-scjp/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 12:44:07 +0000</pubDate>
		<dc:creator>Alex Chiri</dc:creator>
				<category><![CDATA[D'ale SCJP-ului]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[scjp]]></category>

		<guid isPermaLink="false">http://alexchiri.ro/?p=643</guid>
		<description><![CDATA[În questul iniţiatic de pregătire pentru susţinerea examenului de certificare SCJP 6, am întâłnit tot felul de noţiuni pe care nu le ştiam/foloseam, unele utile, altele nu (din punctul meu de vedere) şi am zis să le înşir undeva în funcţie de cum am chef să fac asta! Şi ce loc mai bun decât blogul [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://alexchiri.ro/wp-content/plugins/wordpress-code-snippet/scripts/shBrushJava.js"></script>
<p>În questul iniţiatic de pregătire pentru susţinerea examenului de certificare SCJP 6, am întâłnit tot felul de noţiuni pe care nu le ştiam/foloseam, unele utile, altele nu (din punctul meu de vedere) şi am zis să le înşir undeva în funcţie de cum am chef să fac asta! <img src='http://alexchiri.ro/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Şi ce loc mai bun decât blogul personal? Iată o serie din ele:</p>
<ul>
<li>metoda <a href="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#finalize%28%29" target="_blank"><strong>Object.finalize()</strong></a> marchează obiectul că-l poate lua garbage collectorul, când va crede de cuviinţă Măria sa! Evident este o metodă de instanţă, am expus-o astfel pentru a fi mai scurt in exprimare;</li>
<li>diferenţa dintre <strong><a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html" target="_blank">StringBuilder</a> </strong>şi <strong><a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html" target="_blank">StringBuffer</a> </strong>este că <strong>StringBuffer </strong>este thread-safe, adică are metodele <em>synchronized </em>şi din cauza asta metodele lui vor rula mai greu, deci dacă nu aveţi o aplicaţie multi-thread, folosiţi <strong>StringBuilder</strong>;</li>
<li>putem folosi clasa <a href="http://download-llnw.oracle.com/javase/6/docs/api/java/util/Scanner.html" target="_blank"><strong>Scanner</strong></a><strong> </strong>pentru a face nişte splituri ceva mai şmechere. Clasa are ca separator implicit spaţiu "  " şi cu ajutorul metodelor nextXxx() putem sări la următorul token de tipul Xxx (prin token se înţelege informaţia utilă splituită de separator);</li>
<li>dacă încercăm să compilăm un cod în care serializăm o clasă care nu a implementat interfaţa <a href="http://download-llnw.oracle.com/javase/6/docs/api/java/io/Serializable.html" target="_blank">Serializable</a> sau are un atribut care nu este primitivă şi nu a implementat interfaţa Serializable, ne vom trezi cu excepţie;</li>
<li>dacă încercăm să serializăm o clasă care implementează interfaţa Serializable dar extinde o clasă neserializabilă, la deserializarea clasei se va apela constructorul super clasei extinsă de clasa serializată;</li>
<li>putem folosi modificatorul <em>transient </em>pentru a marca o variabilă să nu fie serializată; la deserializare ea va fi iniţializată cu valoarea implicită pentru acel tip;</li>
<li>există interfeţe "marker", adică nu au niciun fel de metode; acestea sunt folosite ca nişte etichete aplicate clasei ce le implementează, pentru a scoate în evidenţă nişte capacităţi ale acelei clase;</li>
</ul>
<p>Vor mai urma...</p>
]]></content:encoded>
			<wfw:commentRss>http://alexchiri.ro/index.php/2010/09/02/scurte-pentru-scjp/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Call-by-reference sau call-by-value &#238;n Java?</title>
		<link>http://alexchiri.ro/index.php/2009/08/23/call-by-reference-sau-call-by-value-n-java/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=call-by-reference-sau-call-by-value-n-java</link>
		<comments>http://alexchiri.ro/index.php/2009/08/23/call-by-reference-sau-call-by-value-n-java/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 13:41:24 +0000</pubDate>
		<dc:creator>Alex Chiri</dc:creator>
				<category><![CDATA[D'ale SCJP-ului]]></category>
		<category><![CDATA[call-by-reference]]></category>
		<category><![CDATA[call-by-value]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://alexchiri.wordpress.com/?p=112</guid>
		<description><![CDATA[Cei care ați făcut C sau C++ vă aduceți aminte de așa numitele transmiteri de parametri prin valoare sau prin referință. În Java nu există ‘sau’ ci doar call-by-value, indiferent de tipul parametrului. În momentul în care apelăm o metodă cu parametrii primitivi atunci valoarea lor este transmisă parametrilor formali din metodă. În cazul unor [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://alexchiri.ro/wp-content/plugins/wordpress-code-snippet/scripts/shBrushJava.js"></script>
<p>Cei care ați făcut C sau C++ vă aduceți aminte de așa numitele transmiteri de parametri prin valoare sau prin referință. În Java nu există ‘sau’ ci doar call-by-value, indiferent de tipul parametrului.</p>
<p>În momentul în care apelăm o metodă cu parametrii primitivi atunci valoarea lor este transmisă parametrilor formali din metodă. În cazul unor obiecte, valoarea referință este transmisă parametrilor formali și nu obiectul cu totul. Ceea ce înseamnă că și parametrul formal, dar și parametrul inițial din apel vor referenția același obiect din memorie. Acest lucru are <strike>cel puțin</strike> două consecințe:</p>
<ol>
<li>Orice modificări făcute asupra stării obiectului referențiat de către parametrul formal, vor fi vizibile și după încheierea apelului metodei; </li>
<li>Dacă modificăm parametrul formal din metodă(deci nu starea obiectului referențiat de el), modificarea nu va fi vizibilă după ieșirea din apel. </li>
</ol>
<div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;line-height:12pt;background-color:#f4f4f4;width:98.01%;font-family:&#39;direction:ltr;height:238px;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;margin:20px 0 10px;padding:4px;" id="codeSnippetWrapper">
<div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0;" id="codeSnippet">
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> Test {</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum2">   2:</span>     <span style="color:#0000ff;">public</span> String rezultat = <span style="color:#006080;">&quot;bun&quot;</span>;</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum3">   3:</span>     <span style="color:#0000ff;">public</span> Test() {</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum4">   4:</span>         System.out.println(<span style="color:#006080;">&quot;Constructor din Test&quot;</span>);</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum5">   5:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum6">   6:</span>     </pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum7">   7:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> schimba(Test tst) {</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum8">   8:</span>         tst.rezultat = <span style="color:#006080;">&quot;rau&quot;</span>;</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum9">   9:</span>         tst = null;</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum10">  10:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum11">  11:</span>     </pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum12">  12:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> main(String[] args) {</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum13">  13:</span>         Test tst = <span style="color:#0000ff;">new</span> Test();</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum14">  14:</span>         System.out.println(tst.rezultat);</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum15">  15:</span>         tst.schimba(tst);</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum16">  16:</span>         System.out.println(tst.rezultat);</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum17">  17:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&#39;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;"><span style="color:#606060;" id="lnum18">  18:</span> }</pre>
<p><!--CRLF--></div>
</div>
<p>După compilare și rulare, acest program va afișa:</p>
<p><strong>Constructor din Test<br />
    <br />bun</p>
<p>rau</strong></p>
<p>La linia 8 se modifică starea obiectului Test referențiat de parametrul formal <em>tst</em>, iar la linia 9 se asociază lui <em>tst</em> valoarea <em>null</em>. Modificarea asupra atributului <em>rezultat</em> se poate observa la ieșirea din apelul metodei schimbă.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexchiri.ro/index.php/2009/08/23/call-by-reference-sau-call-by-value-n-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Metode cu număr de parametri variabil</title>
		<link>http://alexchiri.ro/index.php/2009/08/23/metode-cu-numar-de-parametrii-variabil-2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=metode-cu-numar-de-parametrii-variabil-2</link>
		<comments>http://alexchiri.ro/index.php/2009/08/23/metode-cu-numar-de-parametrii-variabil-2/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 07:03:37 +0000</pubDate>
		<dc:creator>Alex Chiri</dc:creator>
				<category><![CDATA[D'ale SCJP-ului]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[varargs]]></category>

		<guid isPermaLink="false">http://alexchiri.wordpress.com/2009/08/23/metode-cu-numar-de-parametrii-variabil-2/</guid>
		<description><![CDATA[Începând cu Java 1.5 a fost introdusă facilitatea de a creea metode cu număr de parametrii variabil. Astfel de metode sunt numite metode cu aritate variabilă și pot permite apeluri cu un număr mai mare de parametri decât parametrii formali din semnătura metodei. Pentru o metodă cu aritate variabilă, ultimul parametru formal trebuie declarat în [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://alexchiri.ro/wp-content/plugins/wordpress-code-snippet/scripts/shBrushJava.js"></script>
<p>Începând cu Java 1.5 a fost introdusă facilitatea de a creea metode cu număr de parametrii variabil. Astfel de metode sunt numite metode cu aritate variabilă și pot permite apeluri cu un număr mai mare de parametri decât parametrii formali din semnătura metodei.</p>
<p>Pentru o metodă cu aritate variabilă, <strong>ultimul</strong> parametru formal trebuie declarat în felul următor:</p>
<p><em>&lt;tip&gt;… &lt;nume parametru formal&gt;</em></p>
<p>Prin urmare, în semnătura unei metode cu aritate variabilă putem avea un singur parametru formal ca mai sus și acesta trebuie să fie ultimul în lista de parametri formali. De asemenea, o altă consecință este că parametrii care pot varia ca număr sunt de același tip.</p>
<p>Parametrul formal ce variază este, de fapt, un array care este umplut cu parametrii dați în plus la apel. Prin urmare, următoarele semnături ale metodei <em>angajare</em> sunt considerate identice:</p>
<p><em>public void angajare(String… candidati);</em></p>
<p><em>public void angajare(String[] candidati);</em></p>
<p>Dacă cele două semnături sunt considerate identice, în momentul în care am încerca să facem overload la prima formă cu a doua(sau invers), am primi eroare la compilare.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexchiri.ro/index.php/2009/08/23/metode-cu-numar-de-parametrii-variabil-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Declararea și inițializarea de Array</title>
		<link>http://alexchiri.ro/index.php/2009/08/21/declararea-%c8%99i-ini%c8%9bializarea-de-array/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=declararea-%25c8%2599i-ini%25c8%259bializarea-de-array</link>
		<comments>http://alexchiri.ro/index.php/2009/08/21/declararea-%c8%99i-ini%c8%9bializarea-de-array/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 08:23:20 +0000</pubDate>
		<dc:creator>Alex Chiri</dc:creator>
				<category><![CDATA[D'ale SCJP-ului]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[scjp]]></category>

		<guid isPermaLink="false">http://alexchiri.wordpress.com/2009/08/21/declararea-%c8%99i-ini%c8%9bializarea-de-array/</guid>
		<description><![CDATA[După cum bine se știe un Array, în Java, se poate declara în felul următor: int[] numere[] = new int[10][10]; Parantezele pătrate se pot pune ori la tipul de date, ori la numele variabilei, ori la amândouă. De asemenea dimensiunea poate lipsi la ultimele dimensiuni ale array-ului. Deci aș fi putut scrie și așa: int[] [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://alexchiri.ro/wp-content/plugins/wordpress-code-snippet/scripts/shBrushJava.js"></script>
<p>După cum bine se știe un Array, în Java, se poate declara în felul următor:</p>
<p><em>int[] numere[] = new int[10][10];</em></p>
<p>Parantezele pătrate se pot pune ori la tipul de date, ori la numele variabilei, ori la amândouă. De asemenea dimensiunea poate lipsi la ultimele dimensiuni ale array-ului. Deci aș fi putut scrie și așa:</p>
<p><em>int[] numere[] = new int[10][];</em></p>
<p>Există două modalități de a face declararea și inițializarea unui Array:</p>
<ol>
<li><em>int[] numere = new int[] {1, 2, 3, 4};       <br /></em>Atenție: cand se face inițializarea array-ului nu se mai trece dimensiunea!</li>
<li><em>int[] numere = {1, 2, 3, 4};       <br /></em>Acesta este un bloc de inițializare, care poate fi folosit în locul liniei de mai sus, are același efect.</li>
</ol>
<p>Diferența între cele două modalități este că cea de-a doua nu este o expresie și nu poate fi folosită în felul următor:</p>
<p><em>int[] numere;</em></p>
<p><em>numere = {1, 2, 3, 4}; //nu e ok</em></p>
<p><em>numere = new int[] {1, 2, 3, 4}; //e ok</em></p>
]]></content:encoded>
			<wfw:commentRss>http://alexchiri.ro/index.php/2009/08/21/declararea-%c8%99i-ini%c8%9bializarea-de-array/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tipul Enum* (java.lang.Enum)</title>
		<link>http://alexchiri.ro/index.php/2009/08/18/tipul-enum-java-lang-enum/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tipul-enum-java-lang-enum</link>
		<comments>http://alexchiri.ro/index.php/2009/08/18/tipul-enum-java-lang-enum/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 06:32:58 +0000</pubDate>
		<dc:creator>Alex Chiri</dc:creator>
				<category><![CDATA[D'ale SCJP-ului]]></category>
		<category><![CDATA[enum]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[scjp]]></category>

		<guid isPermaLink="false">http://alexchiri.wordpress.com/2009/08/18/tipul-enum-java-lang-enum/</guid>
		<description><![CDATA[Câte ceva despre tipul Enum: un tip care conține un set de constante; un tip enum poate avea constructori, dar aceștia trebuie declarați după definirea constantelor și pot fi doar private; toate enum-urile sunt subtipuri ale clasei java.lang.Enum, prin urmare sunt comparabile și serializabile; la definirea constantelor se poate specifica o listă de parametri pentru [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://alexchiri.ro/wp-content/plugins/wordpress-code-snippet/scripts/shBrushJava.js"></script>
<p>Câte ceva despre tipul Enum:</p>
<ul>
<li>un tip care conține un set de constante;</li>
<li>un tip enum poate avea constructori, dar aceștia trebuie declarați după definirea constantelor și pot fi doar <em>private</em>;</li>
<li>toate enum-urile sunt subtipuri ale clasei java.lang.Enum, prin urmare sunt comparabile și serializabile;</li>
<li>la definirea constantelor se poate specifica o listă de parametri pentru fiecare, iar la încărcarea enum-ului pentru fiecare constantă se va apela constructorul corespunzător semnăturii ei;</li>
<li>un enum poate fi declarat în cadrul unei alte clase, dar doar ca membru de prim nivel sau în cadrul unui membru static; toate enum-urile declarate în cadrul unei alte clase sunt implicit statice;</li>
<li>deși un enum poate coține diferite metode abstracte, tipul nu va fi marcat ca și abstract, ca în cazul claselor obișnuite;</li>
<li>fiecare constantă a unui enum poate implementa diferite metode specifice, sub forma unor clase anonime care sunt instanțiate la “runtime”;</li>
<li>un enum poate implementa interfețe dar nu poate extinde;</li>
<li>Compararea cu == sau cu equals este echivalentă în cazul constantelor unui enum; </li>
</ul>
<p><em>*Conform Java 1.6</em></p>
]]></content:encoded>
			<wfw:commentRss>http://alexchiri.ro/index.php/2009/08/18/tipul-enum-java-lang-enum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
