Login
Cerca all'interno di JavaPortal
Help
Home Page Documentazione Forum Progetti Partner Pubblica!
Documentazione > Tutorial > Il ruggito della tigre : J2SE 1.5
Modifica Impostazioni
Hide
Best Practices
EJB
Frameworks
Howto
J2EE
J2ME and Wireless
J2SE
JSP e Servlet
Java Application Server
Java IDE/Tools
Java Media
Java Security
Java Sys Admin
Java e XML
Java e SQL
OpenSource Java
Patterns
Repository
Tesi
UML
Web Services
Slide
White Paper di jws.it
project management
Eventi
Groovy

Hai una tesi in Java?
Tesine preparate
per esami?
Pubblica tutto su
JavaPortal!

Scrivi al nostro staff


Gruppo di studio Java su Second Life by Paideia.


Henry Ford
Vero progresso quando i vantaggi di una nuova tecnologia diventano per tutti


Cifrare dati in Java, parte 3: Cifratura Simmetrica


Rss Feed
Home Page
Articoli
News
Forum
Classi

  Visualizza Commenti (0) Aggiungi Commento    
Add to Shortcuts
 
Vota l'articolo
Il ruggito della tigre : J2SE 1.5
By Giuseppe Capodieci
2 ottobre 2005

  Il ruggito della tigre : J2SE 1.5
Program C’est plus facile
Program I Metadati
Program I Generics
Program Autoboxing e Auto-Unboxing dei tipi primitivi
Program I cicli
Program Il tipo enum
Program Gli import statici
Program Formattazione dell’Output C-style
Program Formattazione dell’Input C-style
Program Utility per la gestione della concorrenza
Program Addio rmic
Program Programmazione Desktop
Program XML
Program JDBC RowSet
Program Conclusioni
Program Riferimenti

La Java 2 Platform Standard Edition 1.5 nome in codice “Tiger”, è l’ultima release ufficiale della piattaforma java. Questa release è quella che si definisce come major nel senso che apporterà diverse novità nel modo di programmare in java e di gestire la JVM. Questa release promette, tra le altre cose, delle migliorie alla JVM in termini di Scalabilità, Performance, Monitoring e Gestibilità ma soprattutto tante novità orientate a rendere più semplice e veloce il lavoro a chi si occupa di sviluppo, ogni tanto qualcuno ci pensa…. ; ed è proprio su queste novità che mi voglio soffermare nel presente articolo, facendo una sorta di carrellata tra queste.



C’est plus facile top
Ci sono diverse features in questa release che aumentano la facilità di sviluppo, tra queste abbiamo i Metadati, i Generics, l’Autoboxing, facilitazione dei cicli iterativi, il tipo enumerativo, gli import statici, la formattazione dell’ I/O stile C, gli argomenti variabili, utility per la concorrenza, una gestione più semplice dell’interfaccia RMI, novità per la programmazione Desktop e XML e l’implementazione dell’interfaccia JDBC RowSet.


I Metadati top

I metadati permettono di associare informazioni aggiuntive a classi, interfacce, metodi e campi. Queste informazioni possono essere lette dai file sorgenti, dai file class e a runtime usando la reflection. I metadati sono particolarmente utili quando ad esempio abbiamo dei file di configurazione esterni; in questo caso si possono portare le informazioni presenti nel file esterno, all’interno della classe e poi leggerli e usarli a runtime; o ancora, basti pensare al codice che bisogna scrivere per esportare un metodo come web service mediante JAX-RPC. Con l’utilizzo delle annotationsè possibile “decorare” opportunamente le classi e creare un tool che genera automaticamente il codice necessario per creare un web service. Lo stesso discorso è valido per tutte quelle situazioni in cui bisogna scrivere codice ripetitivo, come fare il lookup di una risorsa JNDIo configurare una connessione JDBC.

Prima:

    public interface NetUtilsI extends Remote {
        public void ping() throws RemoteException;
    }

    public class NetUtils implements NetUtilsI {
        public void ping() {
            ...
        }
    }

Adesso:

    public class NetUtils {
        public @remote void ping() {
            ...
        }
    }



I Generics top

L’applicazione dei generics è possibile vederla nella Collections API. Le classi che vi appartengono (ArrayList, HasMap, ecc.) possono contenere dati di vari tipi; con i generics è possibile indicare il tipo di dato che conterrà la collezione avendo un controllo a tempo di compilazione. Ma vediamo un esempio per chiarire meglio la cosa:

Prima si faceva :

    ArrayList list = new ArrayList();
        list.add(0, new Integer(42));
        int total = ((Integer)list.get(0)).intValue();

 

Adesso:

    ArrayList<Integer> list =new ArrayList<Integer>();
        list.add(0, new Integer(42));
        int total = list.get(0).intValue();

Osserviamo come nel secondo caso non sia più necessario il casting dell’oggetto estratto dalla Collection, inoltre se tentassimo diinserire un oggetto di tipo String in listavremmo un errore a tempo di compilazione.



Autoboxing e Auto-Unboxing dei tipi primitivi top

Convertire un tipo primitivo come int o boolean nel suo equivalente “oggetto” Integer e Boolean e viceversa è un’operazione che necessita della scrittura di codice extra, soprattutto quando si utilizzano le Collections. L’autoboxing e l’auto-unboxing permettono di scrivere codice più chiaro e conciso in questo tipo di situazioni.

Prima, ad esempio, si scriveva:

    ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(0, new Integer(100));
        int total = (list.get(0)).intValue();

Adesso:

    ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(0, 100);
        int total = list.get(0);



I cicli top

La classe Iterator viene molto usata nelle Collections per navigare sequenzialmente gli elementi contenuti in essa. In questa versione del jdk è stata contratta la sintassi per i cicli.

 

Prima si faceva :

    ArrayList<Integer> list = new ArrayList<Integer>();
        for (Iterator i = list.iterator(); i.hasNext();) {
            Integer value=(Integer)i.next();
        }

Adesso più semplicemente:

    ArrayList<Integer> list = new ArrayList<Integer>();
        for (Integer i : list) { ... }

Da notare come l’uso dei generics permette di evitare il casting degli oggetti.



Il tipo enum top

Finalmente è stato introdotto il tipo enumerativo!!! (Quante volte mi avrebbe fatto comodo……!!!)

    public enum Stagioni { INVERNO, PRIMAVERA, ESTATE, AUTUNNO };


Gli import statici top

Gli import statici permettono di riferire costanti statiche senza indicarne la classe. Un esempio chiarirà meglio la cosa: Se devo invocare, ad esempio, Math.cos(), facendo un import statico potrò invocare semplicemente cos():

     import static java.lang.Math.*;
      r = cos(PI * theta); 



Formattazione dell’Output C-style top

E’ stato introdotto il metodo printf del C che permette la formattazione dell’output. Sono presenti la maggior parte dei più comuni formatters ed inoltre le classi Date e BigInteger sono stati dotati di propri formatter. Riferirsi alla classe java.util.Formatterper maggiori informazioni.

    System.out.printf("name count%n");
     System.out.printf("%s %5d%n", user, total);

Da notare l’uso del newline cross-platform %n da preferire all’uso di\n



Formattazione dell’Input C-style top

La classe Scanner permette di leggere dati da tastiera o da un qualunque altro stream. Nell’esempio seguente ci si aspetta da standard input una stringa e poi un intero; finche non sono disponibili i dati richiesti si resta in uno stato di blocco. E’ possibile elaborare input più complessi con gli algoritmi di pattern-matching presenti nella classe java.util.Formatter.

 Scanner s= new Scanner(System.in);
    String param= s.next();
    int value=s.nextInt();
    s.close(); 

Argomenti variabili

Questa funzionalità consente di passare un numero variabile di argomenti ad un metodo; basta usare la semplice notazione ... per indicare che un metodo accetta una lista di lunghezza imprecisata di argomenti.

Esempio:

    public static String format(String intro, Object... arguments);
         String result = MessageFormat.format("Oggi è il ",      
                                                                                     new Date(),
                                                                                     "e la temperatura è di ",
                                                                                       new Integer(18), “gradi”);



Utility per la gestione della concorrenza top

Sono state introdotte diverse utility per facilitare l’uso della concorrenza e quindi dei Thread. E’ possibile costruire thread pool ecollection thread-safe inoltre sono messe a disposizione primitive di basso livello per sfruttare il supporto alla concorrenza messo a disposizione del processore. Una delle novità interessanti da sottolineare è l’introduzione della classe Semaphore. Un semaforo può essere usato come la wait per rendere esclusivo l’accesso ad una parte di codice, offrendo però una maggiore flessibilità.

Esempio:

    finalprivate Semaphore s= new Semaphore(1, true);

        s.acquireUninterruptibly();
        try {
                x=x+10; //valore protetto
        } finally {
          s.release(); //rilascia la risorsa
        } 



Addio rmic top
Non è più necessario usare il compilatore rmic per generare gli stubs delle interfacce remote. Adesso questi ultimi vengono generati automaticamente a runtime.


Programmazione Desktop top

La programmazione di client Desktop è uno degli elementi chiave della piattaforma java e in questa versione vengono prospettati notevoli miglioramenti per la fase di avvio delle applicazioni (normalmente abbastanza lenta) e una migliore gestione della memoria ma anche un nuovo tema per le interfacce swing chiamato Ocean e il Windows XP Look & Feel.

Per chi è dotato di acceleratori grafici con driver OpenGL, adesso è possibile accedere da Java2D alle funzioni native.

La versione del jdk per Linux è inoltre dotato del veloce toolkit X11 chiamato XAWT (sun.awt.X11.XToolkit), abilitato per default, che permette il drag & drop di oggetti con altri software come StarOffice o Mozilla.



XML top
La J2SE 1.5 introduce parecchie novità nell’ambito del supporto di XML a livello di core library : XML 1.1 con i namespaces, XML Schema, SAX 2.0.2, il supporto per il DOM level 3 e l’ XSLT con un veloce compilatore (XSLTC).


JDBC RowSet top

Nella versione 1.4 della J2SE era stata introdotta l’interfaccia RowSet, che estende ResultSet al fine di creare un metodo “leggero” per passare i dati provenienti da DB tra i componenti di un’applicazione. In pratica il RowSet è l’esportazione di JDBC verso JavaBeans; sono presenti i metodi setters “tipati” (setInt, setString ecc.) per passare i parametri al fine di eseguire una query e i metodi getters per leggere i risultati. Ne sono state implementate ben cinque versioni, tra quelle più interessanti citiamo la CachedRowSet che non resta permanentemente connesso alla fonte dati, ma che vi accede solo quando necessario e la WebRowSet che può importare ed esportare un RowSet in formato XML.

Vediamo un esempio di utilizzo della classe WebRowSet :

   Class.forName("oracle.jdbc.driver.OracleDriver");
    WebRowSetImpl wrs = new WebRowSetImpl();
    wrs.setCommand("SELECT nome_prodotto,prezzo FROM catalogo");
    wrs.setUsername("user1");
    wrs.setPassword("pwd1");
    wrs.setUrl("jdbc:oracle:thin:@hostname:1521:test");
    wrs.execute(); // esegue la query e popola il webset
    wrs.absolute(1); // muove il cursore alla prima riga
    wrs.updateInt(2, 10); // setta a 10 il secondo campo reperito cioè // prezzo
    wrs.updateRow(); // aggiorna la riga
    wrs.acceptChanges(); // scrive il dato modificato nel data source
    wrs.writeXml(System.out); // esporta il rowset in formato XML
    wrs.close(); // chiude il rowset



Conclusioni top
Abbiamo visto in questo articolo le principali news dal lato della programmazione della J2SE 1.5. Sun Microsystem ha da poco annunciato l’uscita della release ufficiale che promette davvero tante novità. Chi vuole subito cimentarsi nell’utilizzo di queste nuove features può scaricare la versione del jdk all’indirizzo
http://java.sun.com/j2se/1.5.0/download.jsp


Riferimenti top

J2SE 1.5 in a Nutshell
http://java.sun.com/developer/technicalArticles/releases/j2se15/

JDK 1.5 from Joshua and Neal
http://www.theserverside.com/blogs/showblog.tss?id=JDK15

New Features and Enhancements J2SE 5.0
http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html



Username:
Password:
To sign up for an account, click register... Register
Hide





Powered By



Campagna Anti-IF


Skin


PARTNER
Zio Budda
HostingJava


LICENZA



Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati sotto licenza Creative Commons

Sitemap  © 2002-2004 Copyright Information. Privacy . Today is domenica 1 agosto 2010