ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Tiger, Mustang e Dolphin: le nuove caratteristiche di JAVA 5, 6 ... 7(?) Roma 2 Dicembre 2006
Tiger: le nuove caratteristiche di Java 5 Relatore:  Matteo Baccan [email_address] Data: Roma 2/12/2006 10:00 Area: Programming & development Target: Tecnici Difficolt¨¤: Media 50 minuti per svelare la tigre, il cavallo e sapere che esiste il delfino.  La nuova versione di Java implementa caratteristiche che da tempo erano attese nello standard del linguaggio: Metadata, Generic Types, AutoBoxing e Unboxing dei tipi primitivi, Static import, gestione dinamica dei Loop e delle Enumeration.  Per Java 6: gestione di SystemTray e motori di scripting.  Vediamo di cosa si tratta e di come poter utilizzare queste nuove feature all'interno dei nostri programmi
Obiettivi Dopo aver completato questo seminario sarai in grado di: Descrivere le nuove caratteristiche di Java 5 Sfruttare i nuovi costrutti che sono stati introdotti con Tiger, attendendo Mustang (Java 6) e Dolphin (Java 7) Creare codice pi¨´ compatto ed efficiente  Migliorare lo stile della tua programmazione
Storia 1995 Java 1.0 Prima release 1997 Java 1.1 Gestione degli eventi, ereditariet¨¤, miglioramento della JVM 1999 Java 1.2 Swing, list, set, hashmap 2000 Java 1.3 Performance 2001 Java 1.4 Nuovo IO, XML, ASSERT 2004 Java 5 La svolta!! 2006 Java 6 RC a breve sui vostri schermi: http://java.sun.com/ 2008 java 7 snapshot disponibili su https://jdk7.dev.java.net/
Tiger Metadata (Annotations) Generics AutoBoxing e Auto-Unboxing Static import Foreach Enumeration Varargs Input/Output formattati (estesa in Java 6) Network (estesa in Java 6) Diagnostica e monitoring (estesa in Java 6) Property: setXXX() getXXX()  (Java 7)
Riferimenti Q: Cos'¨¨ JCP? Java Community Process (http://www.jcp.org)  A: Fin dalla sua introduzione, nel 1998, ¨¨ un processo nato per sviluppare e revisionare le specifiche tecniche di Java e le sue implementazioni. JCP contribuisce all'evoluzione della piattaforma Java cooperando con la comunit¨¤ internazionale di sviluppatori. Java 5 Tiger JSR-014 Generics JSR-175 Metadata JSR-201 Foreach, Boxing/Unboxing, enumeration etc Java 6 Mustang JSR-223 javax.script API : Java 6 : esecuzione di PHP, JavaScript, Java, Python, Ruby, Tcl etc etc ( https://scripting.dev.java.net/ )  202: Class File Update, 199: Compiler API, 269: Annotation Processors,  221: JDBC TM  4.0 software,  223: Scripting, 105: XML Digital Signature, 173: Streaming API for XML, 222: JAXB 2.0, 250: Common Annotations, 181: WS Metadata, 224: JAX-WS 2.0
JAVAC Nuove opzioni di compilazione di Javac: -source 1.5: Abilita l'uso delle nuove caratteristiche di Java 5 all'interno dei sorgenti (-target 1.5 ¨¨ implicito) -target 1.5:   Abilita javac a usare ne nuove feature di Java 5 all'interno di librerie e virtual machine  -Xlint:   Abilita javac a produrre dei warning su costrutti legali ma logicamente sospetti come, ad esempio, la dichiarazione di una classe Serializable senza la definizione di un serialVersionUID.
Metadata/Annotations Un sistema per poter arricchire il codice con nuove informazioni Vantaggi Permette a tool che agiscono su codice Java di non ricorrere a file di propriet¨¤ esterni Permette di semplificare la manipolazione del codice Arricchisce i programmi di nuove informazioni Non influisce sulle performance Sintassi @ annotation( [param=valore] ) Esempio 01
Metadata/Annotations Enum RetentionPolicy:  Indica la validit¨¤ dei metadata: CLASS: Le annotazioni sono registrate nel file .class dal compilatore ma non sono mantenute dalla VM a runtime  RUNTIME:  Le annotazioni sono registrate nel file .class dal compilatore e mantenute dalla VM a runtime, cosi possono essere lette tramite reflection SOURCE:  Le annotazioni sono scartate dal compilatore
Generics Permette la scrittura di classi generiche (C++ Template) Elimina il problema del runtime-casting Sposta gli errori nella fase di compilazione Javac non ¨¨ il primo compilatore java a supportare i Generics. Il primo ¨¨ stato:  Pizza .  http://pizzacompiler.sourceforge.net/ Esempio 02
Generics ¨C 1.4 senza public static void main(String[] args) { List myIntList = new LinkedList(); // Object container myIntList.add(new Integer(2)); myIntList.add("String"); Integer iValue1 = (Integer)myIntList.get(0); Integer iValue2 = (Integer)myIntList.get(1); System.out.println( "*"+iValue1.intValue()+"*" ); System.out.println( "*"+iValue2.intValue()+"*" ); } Exception in thread "main" java.lang.ClassCastException: java.lang.String at gen14.main(gen14.java:10)
Generics ¨C 5 con public static void main(String[] args) { List<Integer> myIntList = new LinkedList<Integer>(); //container myIntList.add(new Integer(2)); myIntList.add(&quot;String&quot;); Integer iValue1 = myIntList.get(0); Integer iValue2 = myIntList.get(1); System.out.println( &quot;*&quot;+iValue1.intValue()+&quot;*&quot; ); System.out.println( &quot;*&quot;+iValue2.intValue()+&quot;*&quot; ); } gen1.java:8: cannot find symbol symbol  : method add(java.lang.String) location: interface java.util.List<java.lang.Integer> myIntList.add(&quot;String&quot;);
Generics ¨C una classe public class gen2<GEN> { GEN uno; GEN due; public static void main(String[] args) { gen2<Integer> myInt2 = new gen2<Integer>(); myInt2.setUno( new Integer(10) ); myInt2.setDue( new Integer(7) ); System.out.println( myInt2.getUno()+myInt2.getDue() ); } public void setUno( GEN arg ) {  uno = arg;  } public void setDue( GEN arg ) {  due = arg;  } public GEN getUno() {  return uno;  } public GEN getDue() {  return due;  } }
Auto boxing/unboxing Capacit¨¤ di convertire tipi primitivi in oggetti e viceversa Presente anche in altri linguaggi, ad esempio: C# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfBoxingUnboxingPG.asp  Esempio 03
Auto boxing/unboxing - prima private static final Integer ONE = new Integer(1); public static void main(String[] args) { // Frequenza di stringhe Map m = new TreeMap(); for (int i=0; i<args.length; i++) { Integer freq = (Integer) m.get(args[i]); m.put(args[i], freq==null ? ONE : new Integer(freq.intValue() + 1)); } System.out.println(m); }
Auto boxing/unboxing - dopo public static void main(String[] args) { // Frequenza di stringhe Map<String,Integer> m = new TreeMap<String,Integer>(); for (String word : args) { Integer freq = m.get(word); m.put(word, freq==null ? 1 : freq+1 ); } System.out.println(m); }
Static import Permette di importare dei metodi static, risolti a livello di compilazione Si possono importare singoli metodi, l'intera classe o l'intero package Semplice da usare NB: All'uso dell'import static cambia la versione del .class: da 0x30 (1.4 compatibile) a 0x31 (1.4 non compatibile) Esempio 04
Static import import static java.lang.Math.max; // Singolo metodo import static java.lang.Math.*; // Tutti gli static public class impo2 { public static void main(String[] args) { int uno = 10; int due = 20; System.out.println( max( uno, due ) ); } }
Foreach Nuovo modo di scrivere i cicli, il  for  viene potenziato Chiarezza: Molto pi¨´ chiaro da scrivere e leggere, meno codice Errori: Minor uso di variabili temporanee, non c'¨¨ il rischio di fare cicli annidati incrociati Compilatore: Pensa a tutto lui EnhancedForStatement: for ( FormalParameter : Expression ) Statement Esempio 05
Foreach ¨C l'evoluzione // Old Style Vector c = new Vector(); for( Enumeration e = c.elements(); e.hasMoreElements();  ) String x = (String) e.nextElement(); // New Style Vector<String> c = new Vector<String>(); for( String s : c ) String x = s;
Enumerations Prima public static final int matteo  = 0; public static final int andrea  = 1; public static final int francesco = 2; Problemi Non typesafe. Sono solo numeri non li posso &quot;raggruppare&quot; in un tipo Le costanti sono &quot;compilate&quot; nel codice Se cambio l'ordine o tolgo una costante ho un errore runtime Esempio 06
Enumerations Soluzione Introduzione delle enum public  enum  nomi { matteo, andrea, francesco }; Gestione del tipo Non compilazione nel codice Gestione degli errori Da non confondere con le enum di C (non sono classi, sono compilate come le final) Vantaggi Sono classi e sono quindi estendibili e possono implementare un'interfaccia
Enumerations public enum nomieta { matteo(35), andrea(30), francesco(30); private final int eta; nomieta( int v ){ eta = v; } public int eta(){ return eta; } }; Uno sguardo al decompilato ...
Varargs Possibilit¨¤ di definire un numero di parametri variabile public class varTest { public static void main(String[] args) { varTest x = new varTest(); x.testArg( &quot;ciao&quot;, &quot;io&quot;, &quot;sono&quot;, &quot;Matteo&quot;, 10, 20 ); } void testArg(Object ... args) { for( Object s : args ) { System.out.println( s ); } } } Esempio 07
Input/Output formattati // Grazie a varargs abbiamo un output formattato System.out.printf(&quot;[%s] [%5d] [%5x]\n&quot;, &quot;Matteo&quot;, 33, 2459); // Input formattato  Scanner s= new Scanner(System.in); System.out.println( &quot;Ciao come ti chiami? &quot; ); String str = s.next(); System.out.println( &quot;Quanti anni hai? &quot; ); int val  = s.nextInt(); s.close(); // Java 6 introduce %n = in base alla piattaforma genera un \n (Unix) \r (Mac) (\r\n) Windows System.out.printf(&quot;[%s] [%5d] [%5x]%n&quot;, &quot;Matteo&quot;, 33, 2459); Esempio 08
Network Introduzione dei timeout a livello di classe:  URLConnection.java public void  setConnectTimeout (int timeout) { if (timeout < 0)  throw new IllegalArgumentException(&quot;...&quot;); connectTimeout = timeout; } public void  setReadTimeout (int timeout) { if (timeout < 0)  throw new IllegalArgumentException(&quot;...&quot;); readTimeout = timeout; } Fino a JDK 1.4: settaggio di sistema comune a tutte le istanze  -D sun.net.client.defaultConnectTimeout =... -D sun.net.client.defaultReadTimeout =...
Network Introduzione del ¡°PING¡± nella classe  InetAddress public boolean  isReachable (int timeout) throws IOException { ... } Miglioramento del supporto dei Cookie ( CookieHandler) (Java 6 CookiePolicy, CookieStore) Miglioramento della gestione dei Proxy server: si possono gestire le casistiche di non connessione col server Fino a JDK 1.4: settaggio di sistema comune a tutte le istanze  -D http.proxyHost =... -D http.proxyPort =...
Java 6: NetworkInterface NetworkInterface.getNetworkInterfaces() : accesso alle informazioni relative alle interfacce di rete attive Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces(); for (NetworkInterface netint : Collections.list(nets)) { console.printf(&quot;Display name: %s%n&quot;,  netint.getDisplayName()); console.printf(&quot;Name: %s%n&quot;, netint.getName()); .... Esempio 08a
Java 6:  TrayIcon // AWT introduce l'accesso alla SystemTray if (SystemTray.isSupported()) { SystemTray tray = SystemTray.getSystemTray(); .... Image image = Toolkit.getDefaultToolkit().getImage(&quot;tray.gif&quot;); PopupMenu popup = new PopupMenu(); ... TrayIcon trayIcon = new TrayIcon(image, &quot;Tray Demo&quot;, popup); Esempio 11
Java 6:  JSR 223 Integrazione con gli interpreti di script (PHP, Ruby, Javascript, ...) ScriptEngineManager manager = new ScriptEngineManager(); List<ScriptEngineFactory> factories = manager.getEngineFactories(); for (ScriptEngineFactory factory: factories) { ScriptEngine engine = factory.getScriptEngine(); } ScriptEngine engine = manager.getEngineByName(&quot;javascript&quot;); try { Double hour = (Double)engine.eval( &quot;var date = new Date();&quot; + &quot;date.getHours();&quot;); ... } catch (ScriptException e) { System.err.println(e); } Esempio 12
Java 6:  Varie // isEmpty() String dummy = &quot;&quot;; dummy.isEmpty(); public boolean isEmpty() { return count == 0; } // Input di stringhe senza output Console console = System.console(); char password[] = console.readPassword(&quot;Enter password: &quot;);
Non abbiamo parlato di Sicuramente da approfondire Concurrency Utilities Sono una serie di costrutti di alto livello che includono: executors, che sono un framework per la creazione di thread, code thread safe, Timers, locks e altre primitive di sincronizzazione JDBC 4.0 Java Compiler API Desktop API
Riferimenti Java 5 download http://java.sun.com/javase/downloads/index.jsp Breve storia delle versioni di Java http://www.java.com/en/javahistory/ Java Community Process http://www.jcp.org  Mokabyte ¨C j2se 1.5 beta1 http://www.mokabyte.it/2004/03/jdk1_5.htm  Esempi di codice http://zamples.com/JspExplorer/samples/samplesJDK1_5.html Dove poter scaricare questo materiale http://www.baccan.it
Q&A
Grazie Matteo Baccan Enterprise Architect Email: matteo@baccan.it

More Related Content

What's hot (19)

Jpnde
JpndeJpnde
Jpnde
Antonio Furone
?
Test double - un'introduzione (PHP)
Test double - un'introduzione (PHP)Test double - un'introduzione (PHP)
Test double - un'introduzione (PHP)
Carmelantonio Zolfo
?
Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...
Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...
Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...
Codemotion
?
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
Majong DevJfu
?
Scala: come recuperare la programmazione funzionale e perch¨¦
Scala: come recuperare la programmazione funzionale e perch¨¦Scala: come recuperare la programmazione funzionale e perch¨¦
Scala: come recuperare la programmazione funzionale e perch¨¦
Edmondo Porcu
?
Metodi asincroni in spring
Metodi asincroni in springMetodi asincroni in spring
Metodi asincroni in spring
Vitalij Zadneprovskij
?
Java OCA teoria 4
Java OCA teoria 4Java OCA teoria 4
Java OCA teoria 4
Valerio Radice
?
Googletest, tdd e mock
Googletest, tdd e mockGoogletest, tdd e mock
Googletest, tdd e mock
yuroller
?
Java 8
Java 8Java 8
Java 8
alessiostalla
?
Introduzione a Python
Introduzione a PythonIntroduzione a Python
Introduzione a Python
Emanuel Di Nardo
?
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMs
JUG Genova
?
Java SE 5. Capitolo 01: Base
 Java SE 5. Capitolo 01: Base Java SE 5. Capitolo 01: Base
Java SE 5. Capitolo 01: Base
bobpuley
?
Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio Java
Paolo Tosato
?
Corso Python 2020 - Lezione 2
Corso Python 2020 - Lezione 2Corso Python 2020 - Lezione 2
Corso Python 2020 - Lezione 2
Riccardo Bortoluzzi
?
Corso python 2020 - Lezione 1
Corso python 2020 - Lezione 1Corso python 2020 - Lezione 1
Corso python 2020 - Lezione 1
Riccardo Bortoluzzi
?
Java5
Java5Java5
Java5
Antonio Furone
?
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
Universit¨¤ degli Studi di Trieste
?
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
?
Test double - un'introduzione (PHP)
Test double - un'introduzione (PHP)Test double - un'introduzione (PHP)
Test double - un'introduzione (PHP)
Carmelantonio Zolfo
?
Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...
Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...
Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...
Codemotion
?
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
Majong DevJfu
?
Scala: come recuperare la programmazione funzionale e perch¨¦
Scala: come recuperare la programmazione funzionale e perch¨¦Scala: come recuperare la programmazione funzionale e perch¨¦
Scala: come recuperare la programmazione funzionale e perch¨¦
Edmondo Porcu
?
Googletest, tdd e mock
Googletest, tdd e mockGoogletest, tdd e mock
Googletest, tdd e mock
yuroller
?
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMs
JUG Genova
?
Java SE 5. Capitolo 01: Base
 Java SE 5. Capitolo 01: Base Java SE 5. Capitolo 01: Base
Java SE 5. Capitolo 01: Base
bobpuley
?
Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio Java
Paolo Tosato
?
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
Universit¨¤ degli Studi di Trieste
?
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
?

Viewers also liked (20)

javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - Tiger
Matteo Baccan
?
Creative City Yokohama
Creative City YokohamaCreative City Yokohama
Creative City Yokohama
yuu_2003
?
Getting Started With School Net
Getting Started With School NetGetting Started With School Net
Getting Started With School Net
Mindi Stevens
?
Ïã¸ÛÁùºÏ²Ê
Ïã¸ÛÁùºÏ²ÊÏã¸ÛÁùºÏ²Ê
Ïã¸ÛÁùºÏ²Ê
wejia
?
You Media: Relationships and The Long Tail of Popularity
You Media: Relationships and The Long Tail of PopularityYou Media: Relationships and The Long Tail of Popularity
You Media: Relationships and The Long Tail of Popularity
Mrinal Desai
?
Webtech 2010: twitter programming
Webtech 2010: twitter programmingWebtech 2010: twitter programming
Webtech 2010: twitter programming
Matteo Baccan
?
Working away from the office: Benefits and drawbacks
Working away from the office: Benefits and drawbacksWorking away from the office: Benefits and drawbacks
Working away from the office: Benefits and drawbacks
Rhonda Bracey
?
Newmedia Congres Webversie
Newmedia Congres WebversieNewmedia Congres Webversie
Newmedia Congres Webversie
Sjef Kerkhofs
?
Niver tonight - 19.05.07Niver tonight - 19.05.07
Niver tonight - 19.05.07
Jubrac Jacui
?
Totara Seminar: Sam Barbee, Learning Pool
Totara Seminar: Sam Barbee, Learning PoolTotara Seminar: Sam Barbee, Learning Pool
Totara Seminar: Sam Barbee, Learning Pool
Paul McElvaney
?
Social Care e-learning from Learning Pool & Ophira
Social Care e-learning from Learning Pool & OphiraSocial Care e-learning from Learning Pool & Ophira
Social Care e-learning from Learning Pool & Ophira
Paul McElvaney
?
I premios bermejos diplomasI premios bermejos diplomas
I premios bermejos diplomas
Juan Serrano P¨¦rez
?
If there is no fly v2
If there is no fly v2If there is no fly v2
If there is no fly v2
Z3roXIII
?
Tipos de textoTipos de texto
Tipos de texto
cubs2000
?
Éè¼Æ×ÊÁÏ×ܽá
Éè¼Æ×ÊÁÏ×ܽáÉè¼Æ×ÊÁÏ×ܽá
Éè¼Æ×ÊÁÏ×ܽá
yamingd
?
Learning Pool's Elaine Walton & Dave Briggs on 'E-learning for Councillors an...
Learning Pool's Elaine Walton & Dave Briggs on 'E-learning for Councillors an...Learning Pool's Elaine Walton & Dave Briggs on 'E-learning for Councillors an...
Learning Pool's Elaine Walton & Dave Briggs on 'E-learning for Councillors an...
Paul McElvaney
?
Editing: It's not as easy as it looks
Editing: It's not as easy as it looksEditing: It's not as easy as it looks
Editing: It's not as easy as it looks
Rhonda Bracey
?
Bolji svet - Uvodni webinar
Bolji svet  - Uvodni webinarBolji svet  - Uvodni webinar
Bolji svet - Uvodni webinar
Maja Vujovic
?
Creative City Yokohama
Creative City YokohamaCreative City Yokohama
Creative City Yokohama
yuu_2003
?
Getting Started With School Net
Getting Started With School NetGetting Started With School Net
Getting Started With School Net
Mindi Stevens
?
Ïã¸ÛÁùºÏ²Ê
Ïã¸ÛÁùºÏ²ÊÏã¸ÛÁùºÏ²Ê
Ïã¸ÛÁùºÏ²Ê
wejia
?
You Media: Relationships and The Long Tail of Popularity
You Media: Relationships and The Long Tail of PopularityYou Media: Relationships and The Long Tail of Popularity
You Media: Relationships and The Long Tail of Popularity
Mrinal Desai
?
Webtech 2010: twitter programming
Webtech 2010: twitter programmingWebtech 2010: twitter programming
Webtech 2010: twitter programming
Matteo Baccan
?
Working away from the office: Benefits and drawbacks
Working away from the office: Benefits and drawbacksWorking away from the office: Benefits and drawbacks
Working away from the office: Benefits and drawbacks
Rhonda Bracey
?
Newmedia Congres Webversie
Newmedia Congres WebversieNewmedia Congres Webversie
Newmedia Congres Webversie
Sjef Kerkhofs
?
Niver tonight - 19.05.07Niver tonight - 19.05.07
Niver tonight - 19.05.07
Jubrac Jacui
?
Totara Seminar: Sam Barbee, Learning Pool
Totara Seminar: Sam Barbee, Learning PoolTotara Seminar: Sam Barbee, Learning Pool
Totara Seminar: Sam Barbee, Learning Pool
Paul McElvaney
?
Social Care e-learning from Learning Pool & Ophira
Social Care e-learning from Learning Pool & OphiraSocial Care e-learning from Learning Pool & Ophira
Social Care e-learning from Learning Pool & Ophira
Paul McElvaney
?
I premios bermejos diplomasI premios bermejos diplomas
I premios bermejos diplomas
Juan Serrano P¨¦rez
?
If there is no fly v2
If there is no fly v2If there is no fly v2
If there is no fly v2
Z3roXIII
?
Tipos de textoTipos de texto
Tipos de texto
cubs2000
?
Éè¼Æ×ÊÁÏ×ܽá
Éè¼Æ×ÊÁÏ×ܽáÉè¼Æ×ÊÁÏ×ܽá
Éè¼Æ×ÊÁÏ×ܽá
yamingd
?
Learning Pool's Elaine Walton & Dave Briggs on 'E-learning for Councillors an...
Learning Pool's Elaine Walton & Dave Briggs on 'E-learning for Councillors an...Learning Pool's Elaine Walton & Dave Briggs on 'E-learning for Councillors an...
Learning Pool's Elaine Walton & Dave Briggs on 'E-learning for Councillors an...
Paul McElvaney
?
Editing: It's not as easy as it looks
Editing: It's not as easy as it looksEditing: It's not as easy as it looks
Editing: It's not as easy as it looks
Rhonda Bracey
?
Bolji svet - Uvodni webinar
Bolji svet  - Uvodni webinarBolji svet  - Uvodni webinar
Bolji svet - Uvodni webinar
Maja Vujovic
?

Similar to Javaday 2006: Java 5 (20)

Java 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio SperdutoJava 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio Sperduto
Vitalij Zadneprovskij
?
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
K-Tech Formazione
?
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
?
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
?
KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgets
Pietro Lerro
?
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5
JBug Italy
?
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano Ciccazzo
Java User Group Roma
?
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immagini
Paolo Sereno
?
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
Franco Lombardo
?
Corso pratico di C# - 2013
Corso pratico di C# - 2013Corso pratico di C# - 2013
Corso pratico di C# - 2013
Matteo Valoriani
?
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
Sinergia Totale
?
Java Advanced
Java AdvancedJava Advanced
Java Advanced
Antonio Furone
?
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
Federico Paparoni
?
Corso java base
Corso java baseCorso java base
Corso java base
Simone Gimelli
?
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
Pasquale Paola
?
Js intro
Js introJs intro
Js intro
Daniele Cruciani
?
Configurazione automatica di ambienti di testing per reti di calcolatori - te...
Configurazione automatica di ambienti di testing per reti di calcolatori - te...Configurazione automatica di ambienti di testing per reti di calcolatori - te...
Configurazione automatica di ambienti di testing per reti di calcolatori - te...
Bruno Interlandi
?
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
Massimo Groppelli
?
Java 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio SperdutoJava 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio Sperduto
Vitalij Zadneprovskij
?
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
?
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
?
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5
JBug Italy
?
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano Ciccazzo
Java User Group Roma
?
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immagini
Paolo Sereno
?
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
Sinergia Totale
?
Configurazione automatica di ambienti di testing per reti di calcolatori - te...
Configurazione automatica di ambienti di testing per reti di calcolatori - te...Configurazione automatica di ambienti di testing per reti di calcolatori - te...
Configurazione automatica di ambienti di testing per reti di calcolatori - te...
Bruno Interlandi
?
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
Massimo Groppelli
?

More from Matteo Baccan (20)

Gmail e google app
Gmail e google appGmail e google app
Gmail e google app
Matteo Baccan
?
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan
?
Matteo baccan raspberry pi - linox 2015 - corso parte 3
Matteo baccan   raspberry pi - linox 2015 - corso parte 3Matteo baccan   raspberry pi - linox 2015 - corso parte 3
Matteo baccan raspberry pi - linox 2015 - corso parte 3
Matteo Baccan
?
Matteo baccan raspberry pi - linox 2015 - corso parte 2
Matteo baccan   raspberry pi - linox 2015 - corso parte 2Matteo baccan   raspberry pi - linox 2015 - corso parte 2
Matteo baccan raspberry pi - linox 2015 - corso parte 2
Matteo Baccan
?
Matteo baccan raspberry pi - linox 2015 - corso parte 1
Matteo baccan   raspberry pi - linox 2015 - corso parte 1Matteo baccan   raspberry pi - linox 2015 - corso parte 1
Matteo baccan raspberry pi - linox 2015 - corso parte 1
Matteo Baccan
?
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Matteo Baccan
?
Matteo baccan raspberry pi - linox 2014
Matteo baccan   raspberry pi - linox 2014Matteo baccan   raspberry pi - linox 2014
Matteo baccan raspberry pi - linox 2014
Matteo Baccan
?
Codemotion 2014 : ottimizzare JAVA e PHP su un¡¯architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un¡¯architettura Raspberry Pi ClusterCodemotion 2014 : ottimizzare JAVA e PHP su un¡¯architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un¡¯architettura Raspberry Pi Cluster
Matteo Baccan
?
Phpday 2009 php e java
Phpday 2009 php e javaPhpday 2009 php e java
Phpday 2009 php e java
Matteo Baccan
?
Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e java
Matteo Baccan
?
Confsl 2010 Facebook Framework
Confsl 2010 Facebook FrameworkConfsl 2010 Facebook Framework
Confsl 2010 Facebook Framework
Matteo Baccan
?
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un¡¯architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un¡¯architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un¡¯architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un¡¯architet...
Matteo Baccan
?
Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3 Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3
Matteo Baccan
?
Codemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search ServerCodemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search Server
Matteo Baccan
?
Codemotion twitter programming
Codemotion twitter programmingCodemotion twitter programming
Codemotion twitter programming
Matteo Baccan
?
Webtech 2010: facebook framework
Webtech 2010: facebook frameworkWebtech 2010: facebook framework
Webtech 2010: facebook framework
Matteo Baccan
?
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: Aspectj
Matteo Baccan
?
JIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingJIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java Programming
Matteo Baccan
?
Javaday 2007: skype4java
Javaday 2007: skype4javaJavaday 2007: skype4java
Javaday 2007: skype4java
Matteo Baccan
?
Phpday 2010: facebook php framework
Phpday 2010: facebook php frameworkPhpday 2010: facebook php framework
Phpday 2010: facebook php framework
Matteo Baccan
?
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan
?
Matteo baccan raspberry pi - linox 2015 - corso parte 3
Matteo baccan   raspberry pi - linox 2015 - corso parte 3Matteo baccan   raspberry pi - linox 2015 - corso parte 3
Matteo baccan raspberry pi - linox 2015 - corso parte 3
Matteo Baccan
?
Matteo baccan raspberry pi - linox 2015 - corso parte 2
Matteo baccan   raspberry pi - linox 2015 - corso parte 2Matteo baccan   raspberry pi - linox 2015 - corso parte 2
Matteo baccan raspberry pi - linox 2015 - corso parte 2
Matteo Baccan
?
Matteo baccan raspberry pi - linox 2015 - corso parte 1
Matteo baccan   raspberry pi - linox 2015 - corso parte 1Matteo baccan   raspberry pi - linox 2015 - corso parte 1
Matteo baccan raspberry pi - linox 2015 - corso parte 1
Matteo Baccan
?
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Matteo Baccan
?
Matteo baccan raspberry pi - linox 2014
Matteo baccan   raspberry pi - linox 2014Matteo baccan   raspberry pi - linox 2014
Matteo baccan raspberry pi - linox 2014
Matteo Baccan
?
Codemotion 2014 : ottimizzare JAVA e PHP su un¡¯architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un¡¯architettura Raspberry Pi ClusterCodemotion 2014 : ottimizzare JAVA e PHP su un¡¯architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un¡¯architettura Raspberry Pi Cluster
Matteo Baccan
?
Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e java
Matteo Baccan
?
Confsl 2010 Facebook Framework
Confsl 2010 Facebook FrameworkConfsl 2010 Facebook Framework
Confsl 2010 Facebook Framework
Matteo Baccan
?
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un¡¯architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un¡¯architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un¡¯architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un¡¯architet...
Matteo Baccan
?
Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3 Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3
Matteo Baccan
?
Codemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search ServerCodemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search Server
Matteo Baccan
?
Codemotion twitter programming
Codemotion twitter programmingCodemotion twitter programming
Codemotion twitter programming
Matteo Baccan
?
Webtech 2010: facebook framework
Webtech 2010: facebook frameworkWebtech 2010: facebook framework
Webtech 2010: facebook framework
Matteo Baccan
?
JIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingJIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java Programming
Matteo Baccan
?
Javaday 2007: skype4java
Javaday 2007: skype4javaJavaday 2007: skype4java
Javaday 2007: skype4java
Matteo Baccan
?
Phpday 2010: facebook php framework
Phpday 2010: facebook php frameworkPhpday 2010: facebook php framework
Phpday 2010: facebook php framework
Matteo Baccan
?

Javaday 2006: Java 5

  • 1. Tiger, Mustang e Dolphin: le nuove caratteristiche di JAVA 5, 6 ... 7(?) Roma 2 Dicembre 2006
  • 2. Tiger: le nuove caratteristiche di Java 5 Relatore: Matteo Baccan [email_address] Data: Roma 2/12/2006 10:00 Area: Programming & development Target: Tecnici Difficolt¨¤: Media 50 minuti per svelare la tigre, il cavallo e sapere che esiste il delfino. La nuova versione di Java implementa caratteristiche che da tempo erano attese nello standard del linguaggio: Metadata, Generic Types, AutoBoxing e Unboxing dei tipi primitivi, Static import, gestione dinamica dei Loop e delle Enumeration. Per Java 6: gestione di SystemTray e motori di scripting. Vediamo di cosa si tratta e di come poter utilizzare queste nuove feature all'interno dei nostri programmi
  • 3. Obiettivi Dopo aver completato questo seminario sarai in grado di: Descrivere le nuove caratteristiche di Java 5 Sfruttare i nuovi costrutti che sono stati introdotti con Tiger, attendendo Mustang (Java 6) e Dolphin (Java 7) Creare codice pi¨´ compatto ed efficiente Migliorare lo stile della tua programmazione
  • 4. Storia 1995 Java 1.0 Prima release 1997 Java 1.1 Gestione degli eventi, ereditariet¨¤, miglioramento della JVM 1999 Java 1.2 Swing, list, set, hashmap 2000 Java 1.3 Performance 2001 Java 1.4 Nuovo IO, XML, ASSERT 2004 Java 5 La svolta!! 2006 Java 6 RC a breve sui vostri schermi: http://java.sun.com/ 2008 java 7 snapshot disponibili su https://jdk7.dev.java.net/
  • 5. Tiger Metadata (Annotations) Generics AutoBoxing e Auto-Unboxing Static import Foreach Enumeration Varargs Input/Output formattati (estesa in Java 6) Network (estesa in Java 6) Diagnostica e monitoring (estesa in Java 6) Property: setXXX() getXXX() (Java 7)
  • 6. Riferimenti Q: Cos'¨¨ JCP? Java Community Process (http://www.jcp.org) A: Fin dalla sua introduzione, nel 1998, ¨¨ un processo nato per sviluppare e revisionare le specifiche tecniche di Java e le sue implementazioni. JCP contribuisce all'evoluzione della piattaforma Java cooperando con la comunit¨¤ internazionale di sviluppatori. Java 5 Tiger JSR-014 Generics JSR-175 Metadata JSR-201 Foreach, Boxing/Unboxing, enumeration etc Java 6 Mustang JSR-223 javax.script API : Java 6 : esecuzione di PHP, JavaScript, Java, Python, Ruby, Tcl etc etc ( https://scripting.dev.java.net/ ) 202: Class File Update, 199: Compiler API, 269: Annotation Processors, 221: JDBC TM 4.0 software, 223: Scripting, 105: XML Digital Signature, 173: Streaming API for XML, 222: JAXB 2.0, 250: Common Annotations, 181: WS Metadata, 224: JAX-WS 2.0
  • 7. JAVAC Nuove opzioni di compilazione di Javac: -source 1.5: Abilita l'uso delle nuove caratteristiche di Java 5 all'interno dei sorgenti (-target 1.5 ¨¨ implicito) -target 1.5: Abilita javac a usare ne nuove feature di Java 5 all'interno di librerie e virtual machine -Xlint: Abilita javac a produrre dei warning su costrutti legali ma logicamente sospetti come, ad esempio, la dichiarazione di una classe Serializable senza la definizione di un serialVersionUID.
  • 8. Metadata/Annotations Un sistema per poter arricchire il codice con nuove informazioni Vantaggi Permette a tool che agiscono su codice Java di non ricorrere a file di propriet¨¤ esterni Permette di semplificare la manipolazione del codice Arricchisce i programmi di nuove informazioni Non influisce sulle performance Sintassi @ annotation( [param=valore] ) Esempio 01
  • 9. Metadata/Annotations Enum RetentionPolicy: Indica la validit¨¤ dei metadata: CLASS: Le annotazioni sono registrate nel file .class dal compilatore ma non sono mantenute dalla VM a runtime RUNTIME: Le annotazioni sono registrate nel file .class dal compilatore e mantenute dalla VM a runtime, cosi possono essere lette tramite reflection SOURCE: Le annotazioni sono scartate dal compilatore
  • 10. Generics Permette la scrittura di classi generiche (C++ Template) Elimina il problema del runtime-casting Sposta gli errori nella fase di compilazione Javac non ¨¨ il primo compilatore java a supportare i Generics. Il primo ¨¨ stato: Pizza . http://pizzacompiler.sourceforge.net/ Esempio 02
  • 11. Generics ¨C 1.4 senza public static void main(String[] args) { List myIntList = new LinkedList(); // Object container myIntList.add(new Integer(2)); myIntList.add(&quot;String&quot;); Integer iValue1 = (Integer)myIntList.get(0); Integer iValue2 = (Integer)myIntList.get(1); System.out.println( &quot;*&quot;+iValue1.intValue()+&quot;*&quot; ); System.out.println( &quot;*&quot;+iValue2.intValue()+&quot;*&quot; ); } Exception in thread &quot;main&quot; java.lang.ClassCastException: java.lang.String at gen14.main(gen14.java:10)
  • 12. Generics ¨C 5 con public static void main(String[] args) { List<Integer> myIntList = new LinkedList<Integer>(); //container myIntList.add(new Integer(2)); myIntList.add(&quot;String&quot;); Integer iValue1 = myIntList.get(0); Integer iValue2 = myIntList.get(1); System.out.println( &quot;*&quot;+iValue1.intValue()+&quot;*&quot; ); System.out.println( &quot;*&quot;+iValue2.intValue()+&quot;*&quot; ); } gen1.java:8: cannot find symbol symbol : method add(java.lang.String) location: interface java.util.List<java.lang.Integer> myIntList.add(&quot;String&quot;);
  • 13. Generics ¨C una classe public class gen2<GEN> { GEN uno; GEN due; public static void main(String[] args) { gen2<Integer> myInt2 = new gen2<Integer>(); myInt2.setUno( new Integer(10) ); myInt2.setDue( new Integer(7) ); System.out.println( myInt2.getUno()+myInt2.getDue() ); } public void setUno( GEN arg ) { uno = arg; } public void setDue( GEN arg ) { due = arg; } public GEN getUno() { return uno; } public GEN getDue() { return due; } }
  • 14. Auto boxing/unboxing Capacit¨¤ di convertire tipi primitivi in oggetti e viceversa Presente anche in altri linguaggi, ad esempio: C# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfBoxingUnboxingPG.asp Esempio 03
  • 15. Auto boxing/unboxing - prima private static final Integer ONE = new Integer(1); public static void main(String[] args) { // Frequenza di stringhe Map m = new TreeMap(); for (int i=0; i<args.length; i++) { Integer freq = (Integer) m.get(args[i]); m.put(args[i], freq==null ? ONE : new Integer(freq.intValue() + 1)); } System.out.println(m); }
  • 16. Auto boxing/unboxing - dopo public static void main(String[] args) { // Frequenza di stringhe Map<String,Integer> m = new TreeMap<String,Integer>(); for (String word : args) { Integer freq = m.get(word); m.put(word, freq==null ? 1 : freq+1 ); } System.out.println(m); }
  • 17. Static import Permette di importare dei metodi static, risolti a livello di compilazione Si possono importare singoli metodi, l'intera classe o l'intero package Semplice da usare NB: All'uso dell'import static cambia la versione del .class: da 0x30 (1.4 compatibile) a 0x31 (1.4 non compatibile) Esempio 04
  • 18. Static import import static java.lang.Math.max; // Singolo metodo import static java.lang.Math.*; // Tutti gli static public class impo2 { public static void main(String[] args) { int uno = 10; int due = 20; System.out.println( max( uno, due ) ); } }
  • 19. Foreach Nuovo modo di scrivere i cicli, il for viene potenziato Chiarezza: Molto pi¨´ chiaro da scrivere e leggere, meno codice Errori: Minor uso di variabili temporanee, non c'¨¨ il rischio di fare cicli annidati incrociati Compilatore: Pensa a tutto lui EnhancedForStatement: for ( FormalParameter : Expression ) Statement Esempio 05
  • 20. Foreach ¨C l'evoluzione // Old Style Vector c = new Vector(); for( Enumeration e = c.elements(); e.hasMoreElements(); ) String x = (String) e.nextElement(); // New Style Vector<String> c = new Vector<String>(); for( String s : c ) String x = s;
  • 21. Enumerations Prima public static final int matteo = 0; public static final int andrea = 1; public static final int francesco = 2; Problemi Non typesafe. Sono solo numeri non li posso &quot;raggruppare&quot; in un tipo Le costanti sono &quot;compilate&quot; nel codice Se cambio l'ordine o tolgo una costante ho un errore runtime Esempio 06
  • 22. Enumerations Soluzione Introduzione delle enum public enum nomi { matteo, andrea, francesco }; Gestione del tipo Non compilazione nel codice Gestione degli errori Da non confondere con le enum di C (non sono classi, sono compilate come le final) Vantaggi Sono classi e sono quindi estendibili e possono implementare un'interfaccia
  • 23. Enumerations public enum nomieta { matteo(35), andrea(30), francesco(30); private final int eta; nomieta( int v ){ eta = v; } public int eta(){ return eta; } }; Uno sguardo al decompilato ...
  • 24. Varargs Possibilit¨¤ di definire un numero di parametri variabile public class varTest { public static void main(String[] args) { varTest x = new varTest(); x.testArg( &quot;ciao&quot;, &quot;io&quot;, &quot;sono&quot;, &quot;Matteo&quot;, 10, 20 ); } void testArg(Object ... args) { for( Object s : args ) { System.out.println( s ); } } } Esempio 07
  • 25. Input/Output formattati // Grazie a varargs abbiamo un output formattato System.out.printf(&quot;[%s] [%5d] [%5x]\n&quot;, &quot;Matteo&quot;, 33, 2459); // Input formattato Scanner s= new Scanner(System.in); System.out.println( &quot;Ciao come ti chiami? &quot; ); String str = s.next(); System.out.println( &quot;Quanti anni hai? &quot; ); int val = s.nextInt(); s.close(); // Java 6 introduce %n = in base alla piattaforma genera un \n (Unix) \r (Mac) (\r\n) Windows System.out.printf(&quot;[%s] [%5d] [%5x]%n&quot;, &quot;Matteo&quot;, 33, 2459); Esempio 08
  • 26. Network Introduzione dei timeout a livello di classe: URLConnection.java public void setConnectTimeout (int timeout) { if (timeout < 0) throw new IllegalArgumentException(&quot;...&quot;); connectTimeout = timeout; } public void setReadTimeout (int timeout) { if (timeout < 0) throw new IllegalArgumentException(&quot;...&quot;); readTimeout = timeout; } Fino a JDK 1.4: settaggio di sistema comune a tutte le istanze -D sun.net.client.defaultConnectTimeout =... -D sun.net.client.defaultReadTimeout =...
  • 27. Network Introduzione del ¡°PING¡± nella classe InetAddress public boolean isReachable (int timeout) throws IOException { ... } Miglioramento del supporto dei Cookie ( CookieHandler) (Java 6 CookiePolicy, CookieStore) Miglioramento della gestione dei Proxy server: si possono gestire le casistiche di non connessione col server Fino a JDK 1.4: settaggio di sistema comune a tutte le istanze -D http.proxyHost =... -D http.proxyPort =...
  • 28. Java 6: NetworkInterface NetworkInterface.getNetworkInterfaces() : accesso alle informazioni relative alle interfacce di rete attive Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces(); for (NetworkInterface netint : Collections.list(nets)) { console.printf(&quot;Display name: %s%n&quot;, netint.getDisplayName()); console.printf(&quot;Name: %s%n&quot;, netint.getName()); .... Esempio 08a
  • 29. Java 6: TrayIcon // AWT introduce l'accesso alla SystemTray if (SystemTray.isSupported()) { SystemTray tray = SystemTray.getSystemTray(); .... Image image = Toolkit.getDefaultToolkit().getImage(&quot;tray.gif&quot;); PopupMenu popup = new PopupMenu(); ... TrayIcon trayIcon = new TrayIcon(image, &quot;Tray Demo&quot;, popup); Esempio 11
  • 30. Java 6: JSR 223 Integrazione con gli interpreti di script (PHP, Ruby, Javascript, ...) ScriptEngineManager manager = new ScriptEngineManager(); List<ScriptEngineFactory> factories = manager.getEngineFactories(); for (ScriptEngineFactory factory: factories) { ScriptEngine engine = factory.getScriptEngine(); } ScriptEngine engine = manager.getEngineByName(&quot;javascript&quot;); try { Double hour = (Double)engine.eval( &quot;var date = new Date();&quot; + &quot;date.getHours();&quot;); ... } catch (ScriptException e) { System.err.println(e); } Esempio 12
  • 31. Java 6: Varie // isEmpty() String dummy = &quot;&quot;; dummy.isEmpty(); public boolean isEmpty() { return count == 0; } // Input di stringhe senza output Console console = System.console(); char password[] = console.readPassword(&quot;Enter password: &quot;);
  • 32. Non abbiamo parlato di Sicuramente da approfondire Concurrency Utilities Sono una serie di costrutti di alto livello che includono: executors, che sono un framework per la creazione di thread, code thread safe, Timers, locks e altre primitive di sincronizzazione JDBC 4.0 Java Compiler API Desktop API
  • 33. Riferimenti Java 5 download http://java.sun.com/javase/downloads/index.jsp Breve storia delle versioni di Java http://www.java.com/en/javahistory/ Java Community Process http://www.jcp.org Mokabyte ¨C j2se 1.5 beta1 http://www.mokabyte.it/2004/03/jdk1_5.htm Esempi di codice http://zamples.com/JspExplorer/samples/samplesJDK1_5.html Dove poter scaricare questo materiale http://www.baccan.it
  • 34. Q&A
  • 35. Grazie Matteo Baccan Enterprise Architect Email: matteo@baccan.it