<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="it" lang="it">
<head>
<title>Java 5</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="Java_5"/>
<meta name="wx_page_id" content="80672"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="Java 5" id="wxsec1"><h1 class="pagetitle" id="wx1">Java 5</h1>

<div class="wx_image" wx:align="right" id="wx2"><a href="/wit/Immagine:Java-Logo.png" title="Logo Java" wx:linktype="image" wx:pagename="Immagine:Java-Logo.png" wx:page_id="60469" id="wx3"><img src="/wit/Immagine:Java-Logo.png" alt="Logo Java" id="wx4"/></a></div>

<p id="wx5"><b id="wx6">Java 5</b> è la versione 5.0 dell'edizione standard del <a href="/wit/Linguaggio_di_programmazione" title="Linguaggio di programmazione" wx:linktype="known" wx:pagename="Linguaggio_di_programmazione" wx:page_id="2573" id="wx7">linguaggio di programmazione</a> <a href="/wit/Linguaggio_di_programmazione_Java" title="Linguaggio di programmazione Java" wx:linktype="known" wx:pagename="Linguaggio_di_programmazione_Java" wx:page_id="17847" id="wx8">Java</a> (in inglese <i id="wx9">Java 2 Platform Standard Edition</i> o <i id="wx10">J2SE</i>). Questa versione era inizialmente conosciuta come versione 1.5.0, ma i creatori del linguaggio, per enfatizzarne il livello di maturità e stabilità raggiunto, hanno preferito rinominarla eliminando l'uno iniziale <sup id="_ref-versione_0" class="reference"><a href="#_note-versione" title="" wx:fragment="_note-versione" wx:linktype="note" id="wx11"/></sup>.</p>

<p id="wx12">Questa versione è stata pubblicata per la prima volta il <a href="/wit/29_settembre" title="29 settembre" wx:linktype="known" wx:pagename="29_settembre" wx:page_id="5249" id="wx13">29 settembre</a> <a href="/wit/2004" title="2004" wx:linktype="known" wx:pagename="2004" wx:page_id="5559" id="wx14">2004</a> e contiene nuove funzionalità che puntano a semplificare e potenziare il linguaggio stesso. Il codice <a href="/wit/Bytecode" title="Bytecode" wx:linktype="known" wx:pagename="Bytecode" wx:page_id="112780" id="wx15">bytecode</a> prodotto da un <a href="/wit/Compilatore" title="Compilatore" wx:linktype="known" wx:pagename="Compilatore" wx:page_id="1521" id="wx16">compilatore</a> Java 5 può essere eseguito su qualsiasi <a href="/wit/Macchina_virtuale_Java" title="Macchina virtuale Java" wx:linktype="known" wx:pagename="Macchina_virtuale_Java" wx:page_id="116824" id="wx17">macchina virtuale Java</a>. Per usufruire quindi delle nuove caratteristiche del linguaggio non è necessario aggiornare la macchina virtuale.</p>

<p id="wx18">Le nuove caratteristiche del linguaggio hanno permesso di potenziare e semplificare altre componenti standard di Java. Ad esempio gli <a href="/wit/Enterprise_JavaBeans" title="Enterprise JavaBeans" wx:linktype="known" wx:pagename="Enterprise_JavaBeans" wx:page_id="318286" id="wx19">Enterprise JavaBeans</a>, che fanno parte delle specifiche dell'<a href="/wit/J2EE" title="J2EE" wx:linktype="known" wx:pagename="J2EE" wx:page_id="154777" id="wx20">edizione enterprise</a> di Java, erano noti agli sviluppatori per essere particolarmente complessi da programmare, ma dalla versione 3.0 questo problema è stato risolto grazie all'utilizzo dei metadati.</p>

<div id="wx_toc"/>

<a id="Modifiche_al_linguaggio" name="Modifiche_al_linguaggio"/>
<wx:section level="2" title="Modifiche al linguaggio" id="wxsec2"><h2 id="wx21">Modifiche al linguaggio</h2>

<a id="Numero_variabile_di_argomenti" name="Numero_variabile_di_argomenti"/>
<wx:section level="3" title="Numero variabile di argomenti" id="wxsec7"><h3 id="wx22">Numero variabile di argomenti</h3>

<p id="wx23">È possibile definire metodi in grado di avere in input un numero qualsiasi di argomenti dello stesso tipo. Utilizzando gli <i id="wx24">Array</i> si è in grado di ottenere la stessa funzionalità con le versioni precedenti alla 1.5, tuttavia l'utilizzo di una sintassi specifica rendere più semplice e leggibile questo tipo di codice. A titolo di esempio il seguente codice utilizza esclusivamente funzionalità della versione 1.4 di Java:</p>

<pre id="wx25">
public static void fai_qualcosa(String args[]) {
   for (int i=0;i &lt;args.length; i++) {
     //fai qualcosa
   }
}
 
...
 
   fai_qualcosa(new String[] { "Questo è"," un set di parametri", " passati..." } );
   fai_qualcosa(new String[] { "Questo è"," un set di parametri", " passati...", " alla funzione" } );
</pre>

<p id="wx26">Con Java 1.5, lo stesso risultato può essere ottenuto con il seguente codice:</p>

<pre id="wx27">
public static void fai_qualcosa(<b id="wx28">String ...</b> args) {
   for (int i=0;i &lt;args.length; i++) {
     //fai qualcosa
   }
}
 
...
 
   fai_qualcosa("Questo è"," un set di parametri", " passati...");
   fai_qualcosa("Questo è"," un set di parametri", " passati...", " alla funzione");
</pre>

<a id="Output_formattato" name="Output_formattato"/>
</wx:section><wx:section level="3" title="Output formattato" id="wxsec8"><h3 id="wx29"><i id="wx30">Output</i> formattato</h3>

<p id="wx31">È stata aggiunta alla classe <i id="wx32">System</i> la funzione <i id="wx33">printf</i> che permette una formattazione dell' <i id="wx34">output</i> simile all'omonima funzione del <a href="/wit/C_%28linguaggio%29" title="C (linguaggio)" wx:linktype="known" wx:pagename="C_(linguaggio)" wx:page_id="26840" id="wx35">linguaggio C</a>.</p>

<pre id="wx36">
public static void main(String ... s)
{
   System.out.printf("Hai passato %s e %s, in totale %d parametri\n",s[0],s[1],2);
}

</pre>

<p id="wx37">La funzione <i id="wx38">printf</i> ha il seguente prototipo:</p>

<pre id="wx39">
public static void printf(String s, Object ... objs);
</pre>

<a id="Tipi_generici" name="Tipi_generici"/>
</wx:section><wx:section level="3" title="Tipi generici" id="wxsec9"><h3 id="wx40">Tipi generici</h3>

<wx:template id="wx_t2" pagename="Template:Vedi_anche" page_id="201597"/>
<table style="margin-bottom:.5em; border:1px solid #CCC; text-align:left; font-size:95%; background:#ffffff" id="wx41">
<tr id="wx42">
<td style="padding:0 .5em" id="wx43"><a href="/wit/Immagine:Exquisite-kfind.png" title="" wx:linktype="image" wx:pagename="Immagine:Exquisite-kfind.png" id="wx44"><img src="/wit/Immagine:Exquisite-kfind.png" alt="" width="20" id="wx45"/></a> </td>
<td style="width:100%" id="wx46"><i id="wx47">Per approfondire, vedi la voce <b id="wx48"><a href="/wit/Generics_Java" title="Generics Java" wx:linktype="known" wx:pagename="Generics_Java" wx:page_id="657814" id="wx49">Generics Java</a></b>.</i> </td>
</tr>
</table>

<wx:templateend start="wx_t2"/>
<p id="wx50">I tipi generici o <i id="wx51">generics</i> permettono di semplificare l'utilizzo di classi che, come ad esempio le classi del package Collection, gestiscono collezioni di oggetti di qualsiasi tipo. Senza l'uso dei tipi generici, la gestione di oggetti di qualsiasi tipo può essere effettuata convertendo preventivamente gli oggetti nel tipo <i id="wx52">Object</i>, che è la classe da cui derivano tutte le altre. Questa soluzione obbliga il programmatore a utilizzare operazioni di conversione di tipo (<i id="wx53">casting</i>) ogniqualvolta è necessario prelevare un oggetto dalla collezione; inoltre non è possibile controllare a tempo di compilazione se vi siano errori di conversione di tipo, ad esempio se viene aggiunto alla collezione un tipo di oggetto non valido.</p>

<p id="wx54">I tipi generici risolvono entrambi questi problemi, ad esempio il seguente codice utilizza esclusivamente le funzionalità di Java 1.4 per aggiungere e successivamente prelevare due stringhe da una collezione di tipo <i id="wx55">ArrayList</i> :</p>

<pre id="wx56">
List lista = new ArrayList();
lista.add("stringa1");
lista.add("stringa2");
String s1 = <b id="wx57">(String)</b>lista.get(0);
StringBuffer s2 = <b id="wx58">(String)</b>lista.get(1);
</pre>

<p id="wx59">Con Java 1.5 lo stesso codice può essere scritto nel modo seguente:</p>

<pre id="wx60">
List<b id="wx61">&lt;String&gt;</b> lista = new ArrayList<b id="wx62">&lt;String&gt;</b>();
lista.add("stringa1");
lista.add("stringa2");
String s1 = lista.get(0);
StringBuffer s2 = lista.get(1);
</pre>

<p id="wx63">In entrambe le versioni vi è un errore di tipo in quanto la variabile <i id="wx64">s2</i> non è di tipo <i id="wx65">String</i>. Tuttavia nella versione 1.4 il codice viene compilato e l'errore viene individuato solo a tempo di esecuzione, con la versione 1.5 l'errore è individuato a tempo di compilazione perché si è dichiarata la variabile <i id="wx66">lista</i> come una collezione di oggetti di tipo <i id="wx67">String</i>.</p>

<a id="Metadati" name="Metadati"/>
</wx:section><wx:section level="3" title="Metadati" id="wxsec10"><h3 id="wx68">Metadati</h3>

<p id="wx69">I metadati permettono di associare informazioni aggiuntive alle <a href="/wit/Classe_%28programmazione%29" title="Classe (programmazione)" wx:linktype="known" wx:pagename="Classe_(programmazione)" wx:page_id="236766" id="wx70">classi</a>, alle <a href="/wit/Interfaccia_%28programmazione%29" class="new" title="Interfaccia (programmazione)" wx:linktype="unknown" wx:pagename="Interfaccia_(programmazione)" id="wx71">interfacce</a>, ai <a href="/wit/Metodo_%28programmazione%29" title="Metodo (programmazione)" wx:linktype="known" wx:pagename="Metodo_(programmazione)" wx:page_id="233404" id="wx72">metodi</a> e ai <a href="/wit/Campo_%28programmazione%29" class="new" title="Campo (programmazione)" wx:linktype="unknown" wx:pagename="Campo_(programmazione)" id="wx73">campi</a> di un programma Java. Queste informazioni aggiuntive, dette anche annotazioni, possono essere lette e processate sia dal compilatore Java che da altri strumenti, e possono essere memorizzate nei file .class prodotti dal compilatore per essere poi lette a tempo di esecuzione tramite le apposite <a href="/wit/Funzioni_di_introspezione" class="new" title="Funzioni di introspezione" wx:linktype="unknown" wx:pagename="Funzioni_di_introspezione" id="wx74">funzioni di introspezione</a> messe a disposizione dal linguaggio.</p>

<p id="wx75">I metadati, in combinazione con strumenti in grado di elabolarli, possono rendere molto più concisa la sintassi di un programma Java. Ad esempio, per definire i metodi remoti di una classe senza usufruire dei metadati sarebbe necessario scrivere un codice simile al seguente:</p>

<pre id="wx76">
 public interface PingIF extends Remote {
     public void ping() throws RemoteException;
 }
  
 public class Ping implements PingIF {
    public void ping() {
    }
 }
</pre>

<p id="wx77">con i metadati si può ottenere un risultato analogo con un codice molto più semplice e leggibile:</p>

<pre id="wx78">
 public class Ping {
    public <b id="wx79">@remote</b> void ping() {
    }
 }
</pre>

<a id="Autoboxing" name="Autoboxing"/>
</wx:section><wx:section level="3" title="Autoboxing" id="wxsec11"><h3 id="wx80"><i id="wx81">Autoboxing</i></h3>

<p id="wx82">L' <i id="wx83">autoboxing</i> permette di fare una <a href="/wit/Conversione_di_tipo" title="Conversione di tipo" wx:linktype="known" wx:pagename="Conversione_di_tipo" wx:page_id="582194" id="wx84">conversione di tipo</a> automatica tra un <a href="/wit/Tipo_primitivo" title="Tipo primitivo" wx:linktype="known" wx:pagename="Tipo_primitivo" wx:page_id="647483" id="wx85">tipo primitivo</a> e la sua classe equivalente. Ad esempio nel codice seguente viene effettuata una conversione automatica della variabile <i id="wx86">i</i> dal tipo primitivo <i id="wx87">int</i> al tipo <i id="wx88">Integer</i>, e il valore risultante viene assegnato alla variabile <i id="wx89">i_oggetto</i>:</p>

<pre id="wx90">
int i = 42;
Integer i_oggetto = i;
System.out.println(i_oggetto);
</pre>

<p id="wx91">Anche questa modifica va nella direzione di una maggiore leggibilità del codice, in quanto elimina la necessità di effettuare una esplicita conversione di tipo.</p>

<a id="Ciclo_for_migliorato" name="Ciclo_for_migliorato"/>
</wx:section><wx:section level="3" title="Ciclo for migliorato" id="wxsec12"><h3 id="wx92">Ciclo <i id="wx93">for</i> migliorato</h3>

<p id="wx94">Il ciclo <i id="wx95">for</i> è stato migliorato in modo da eliminare la necessità dell'uso degli iteratori, fornendo così una sintassi più semplice e meno prona ad errori. Ad esempio, il seguente è un frammento di codice Java 1.4:</p>

<pre id="wx96">
int[] iss = new int[] {1,2,3,4,5} ;
for(int i = 0; i &lt; iss.length; i++) 
{
   list.add(new Integer(iss[i]));
   //...
}
 
List list = new ArrayList();
for(Iterator it = list.iterator(); it.hasNext();) 
{
   doStuff((Integer)x);
   //...
}
</pre>

<p id="wx97">Nella versione 1.5 lo stesso codice può essere scritto nel modo seguente:</p>

<pre id="wx98">
int[] iss = new int[] {1,2,3,4,5} ;
for(int x : iss) 
{
   list.add(x);
   //...
}
 
List&lt;Integer&gt; list = new ArrayList&lt;Integer&gt;();
for(Integer x : list) 
{
   doStuff(x);
   //...
}
</pre>

<a id="Tipo_enumerazione" name="Tipo_enumerazione"/>
</wx:section><wx:section level="3" title="Tipo enumerazione" id="wxsec13"><h3 id="wx99">Tipo enumerazione</h3>

<p id="wx100">Il tipo enumerazione permette di definire una serie di valori costanti, senza dover esplicitamente assegnare ad ognuno di essi un corrispondente valore numerico. Ad esempio, in Java 1.4 una enumerazione può essere definita nel modo seguente:</p>

<pre id="wx101">
 public static final int ROSSO  = 0;
 public static final int VERDE  = 1;
 public static final int GIALLO = 2;
 public static final int BLUE   = 3;
</pre>

<p id="wx102">In Java 1.5 si può utilizzare la parola chiave <i id="wx103">enum</i> per definire lo stesso tipo di valori:</p>

<pre id="wx104">
public <b id="wx105">enum</b> Colori { ROSSO, VERDE, GIALLO, BLUE};
</pre>

<a id="Importazione_delle_costanti_statiche" name="Importazione_delle_costanti_statiche"/>
</wx:section><wx:section level="3" title="Importazione delle costanti statiche" id="wxsec14"><h3 id="wx106">Importazione delle costanti statiche</h3>

<p id="wx107">L'importazione delle costanti statiche permette di fare uso di costanti statiche di una classe o di una interfaccia senza il bisogno di dover derivare da quella classe o implementare quell'interfaccia. Per eseguire questo tipo di importazione si usa la parola chiave <i id="wx108">import static</i>, ad esempio:</p>

<pre id="wx109">
<b id="wx110">import static</b> java.awt.BorderLayout.*;
</pre>

<a id="Curiosit.C3.A0" name="Curiosit.C3.A0"/>
</wx:section></wx:section><wx:section level="2" title="Curiosità" id="wxsec3"><h2 id="wx111">Curiosità</h2>

<ul id="wx112">
<li id="wx113">
<p id="wx114">Il nome in codice di Java 5 durante lo sviluppo era <i id="wx115">Tiger</i>.</p>
</li>
</ul>

<a id="Voci_correlate" name="Voci_correlate"/>
</wx:section><wx:section level="2" title="Voci correlate" id="wxsec4"><h2 id="wx116">Voci correlate</h2>

<ul id="wx117">
<li id="wx118"><a href="/wit/Java_%28linguaggio%29" title="Java (linguaggio)" wx:linktype="known" wx:pagename="Java_(linguaggio)" wx:page_id="26747" id="wx119">Il linguaggio Java</a></li>
</ul>

<a id="Note" name="Note"/>
</wx:section><wx:section level="2" title="Note" id="wxsec5"><h2 id="wx120">Note</h2>

<ol class="references" id="wx121">
<li id="_note-versione"><a href="#_ref-versione_0" title="" wx:fragment="_ref-versione_0" wx:linktype="noteref" id="wx122"><b id="wx123">^</b></a> <wx:template id="wx_t1" pagename="Template:En" page_id="121878"/>
<p id="wx124">(<span style="font-weight:bolder; font-size:80%" id="wx125"><a href="/wit/Lingua_inglese" title="Lingua inglese" wx:linktype="known" wx:pagename="Lingua_inglese" wx:page_id="2523" id="wx126">EN</a></span>) <wx:templateend start="wx_t1"/> <a href="http://java.sun.com/j2se/1.5.0/docs/relnotes/version-5.0.html" class="external free" wx:linktype="external" rel="nofollow" id="wx127">http://java.sun.com/j2se/1.5.0/docs/relnotes/version-5.0.html</a> Motivazioni per il cambiamento del numero di versione.</p>
</li>
</ol>

<a id="Collegamenti_esterni" name="Collegamenti_esterni"/>
</wx:section><wx:section level="2" title="Collegamenti esterni" id="wxsec6"><h2 id="wx128">Collegamenti esterni</h2>

<ul id="wx129">
<li id="wx130"><wx:template id="wx_t3" pagename="Template:En" page_id="121878"/>
<p id="wx131">(<span style="font-weight:bolder; font-size:80%" id="wx132"><a href="/wit/Lingua_inglese" title="Lingua inglese" wx:linktype="known" wx:pagename="Lingua_inglese" wx:page_id="2523" id="wx133">EN</a></span>) <wx:templateend start="wx_t3"/> <a href="http://java.sun.com/j2se/1.5.0/" class="external text" wx:linktype="external" rel="nofollow" id="wx134">Sito ufficiale della versione 5 di Java</a></p>
</li>

<li id="wx135"><wx:template id="wx_t4" pagename="Template:En" page_id="121878"/>
<p id="wx136">(<span style="font-weight:bolder; font-size:80%" id="wx137"><a href="/wit/Lingua_inglese" title="Lingua inglese" wx:linktype="known" wx:pagename="Lingua_inglese" wx:page_id="2523" id="wx138">EN</a></span>) <wx:templateend start="wx_t4"/> <a href="http://java.sun.com/developer/technicalArticles/releases/j2se15/" class="external text" wx:linktype="external" rel="nofollow" id="wx139">Descrizione delle novità della versione 5</a></p>
</li>
</ul>
</wx:section></wx:section></div>
<div id="wx_categorylinks">
<a href="/wit/index.php?title=Speciale:Categories&amp;article=Java_5" title="Speciale:Categories" wx:linktype="known" wx:pagename="Speciale:Categories" id="wx140">Categoria</a>: <span dir="ltr" id="wx141"><a href="/wit/Categoria:Java" title="Categoria:Java" wx:linktype="known" wx:pagename="Categoria:Java" wx:page_id="106864" id="wx142">Java</a></span></div>
<div id="wx_languagelinks">
</div>
</body>
<wx:templatearguments for="wx_t1"/>
<wx:templatearguments for="wx_t2"><wx:argument name="1">
<p id="wx143">Generics Java</p>
</wx:argument></wx:templatearguments>
<wx:templatearguments for="wx_t3"/>
<wx:templatearguments for="wx_t4"/>
</html>
