SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
Padova 7 Maggio 2004



         Tiger
nuove caratteristiche per
      JAVA 1.5
        by Matteo Baccan
       http://www.baccan.it

     www.JavaPortal.it
     www JavaPortal
Tiger: nuove caratteristiche per Java 1.5

•   Relatore:       Matteo Baccan         matteo@baccan.it
•   Data:           Milano 03/06/2004 13:00
•   Area:           Programming & development
•   Target:         Tecnici
•   Difficoltà:     Media

    50 minuti per svelare la tigre sotto i suoi aspetti.
    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.
    Nuovi strumenti per l'Analisi Diagnostica e il Monitoring e Manageability.
    Vediamo di cosa si tratta e di come poter utilizzare queste nuove feature
    all'interno dei nostri programmi
    Intervento allineato alla BETA 2


                          www.JavaPortal.it
                          www JavaPortal
Obiettivi

Dopo aver completato questo seminario sarai in grado di:


• Descrivere le nuove caratteristiche di Java 1.5

• Sfruttare i nuovi costrutti che sono stati introdotti con Tiger

• Creare codice più compatto ed efficiente

• Migliorare lo stile della tua programmazione




                     www.JavaPortal.it
                     www JavaPortal
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 1.5
   La svolta!!



                    www.JavaPortal.it
                    www JavaPortal
Tiger

•   Metadata (Annotations)
•   Generics
•   AutoBoxing e Auto-Unboxing
•   Static import
•   Foreach
•   Enumeration
•   Varargs
•   Input/Output formattati
•   Network
•   Diagnostica e monitoring
•   Pack200




                   www.JavaPortal.it
                   www JavaPortal
Riferimenti

• Java Community Process (http://www.jcp.org)
   – JSR-014 Generics
   – JSR-175 Metadata
   – JSR-201 Foreach, Boxing/Unboxing, enumeration etc



Q: Cos'è JCP?
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.




                     www.JavaPortal.it
                     www JavaPortal
JAVAC

Nuove opzioni di compilazione di Javac:
-source 1.5:   Abilita l'uso delle nuove caratteristiche di Java 1.5
               all'interno dei sorgenti (-target 1.5 è implicito)
-target 1.5:   Abilita javac a usare ne nuove feature di Java 1.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.




                     www.JavaPortal.it
                     www JavaPortal
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] )

Ed ora un esempio ...


                     www.JavaPortal.it
                     www JavaPortal
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

                     www.JavaPortal.it
                     www JavaPortal
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/




                     www.JavaPortal.it
                     www JavaPortal
Generics – 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)


                    www.JavaPortal.it
                    www JavaPortal
Generics – 1.5 con

 public static void main(String[] args) {
   List<Integer> myIntList = new LinkedList<Integer>(); //container
   myIntList.add(new Integer(2));
   myIntList.add("String");
   Integer iValue1 = myIntList.get(0);
   Integer iValue2 = myIntList.get(1);
   System.out.println( "*"+iValue1.intValue()+"*" );
   System.out.println( "*"+iValue2.intValue()+"*" );
 }

gen1.java:8: cannot find symbol
symbol : method add(java.lang.String)
location: interface java.util.List<java.lang.Integer>
   myIntList.add("String");
                      www.JavaPortal.it
                      www JavaPortal
Generics – 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; }
}
                    www.JavaPortal.it
                    www JavaPortal
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




                      www.JavaPortal.it
                      www JavaPortal
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);
}




                     www.JavaPortal.it
                     www JavaPortal
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);
}




                   www.JavaPortal.it
                   www JavaPortal
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)




                      www.JavaPortal.it
                      www JavaPortal
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 ) );
  }
}




                     www.JavaPortal.it
                     www JavaPortal
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




                     www.JavaPortal.it
                     www JavaPortal
Foreach – 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;




                    www.JavaPortal.it
                    www JavaPortal
Enumerations

Prima
public static final int matteo = 0;
public static final int carlo = 1;
public static final int raffaele = 2;

Problemi
• Non typesafe. Sono solo numeri non li posso "raggruppare" in un
   tipo
• Le costanti sono "compilate" nel codice
• Se cambio l'ordine o tolgo una costante ho un errore runtime




                      www.JavaPortal.it
                      www JavaPortal
Enumerations

Soluzione
Introduzione delle enum

public enum nomi { matteo, carlo, raffaele };

Gestione del tipo
Non compilazione nel codice
Gestione degli errori

Vantaggi
• Sono classi e sono quindi estendibili e possono implementare
  un'interfaccia



                     www.JavaPortal.it
                     www JavaPortal
Enumerations

public enum nomieta { matteo(33), carlo(29), raffaele(55);
   private final int eta;
   nomieta( int v ){
     eta = v;
   }
   public int eta(){
     return eta;
   }
};

Uno sguardo al decompilato ...




                     www.JavaPortal.it
                     www JavaPortal
Varargs

Possibilità di definire un numero di parametri variabile

public class varTest {
  public static void main(String[] args) {
     varTest x = new varTest();
     x.testArg( "ciao", "io", "sono", "Matteo", 10, 20 );
  }
  void testArg(Object ... args) {
     for( Object s : args ) {
       System.out.println( s );
     }
  }
}

                      www.JavaPortal.it
                      www JavaPortal
Input/Output formattati

// Grazie a varargs
// Output formattato
System.out.printf("[%s] [%5d] [%5x]n", "Matteo", 33, 2459);

// Input formattato
// BETA 1
//Scanner s=Scanner.create(System.in);
// BETA 2
Scanner s= new Scanner(System.in);
System.out.println( "Ciao come ti chiami? " );
String str = s.next();
System.out.println( "Quanti anni hai? " );
int val = s.nextInt();
s.close();
                     www.JavaPortal.it
                     www JavaPortal
Network

Introduzione dei timeout a livello di classe: URLConnection.java
public void setConnectTimeout(int timeout) {
    if (timeout < 0) throw new IllegalArgumentException("...");
    connectTimeout = timeout;
  }
public void setReadTimeout(int timeout) {
    if (timeout < 0) throw new IllegalArgumentException("...");
    readTimeout = timeout;
}

Fino a JDK 1.4: settaggio di sistema comune a tutte le istanze
    -Dsun.net.client.defaultConnectTimeout=...
    -Dsun.net.client.defaultReadTimeout=...

                     www.JavaPortal.it
                     www JavaPortal
Network

• Introduzione del “PING” nella classe InetAddress


    public boolean isReachable(int timeout) throws IOException {
      ...
    }

• Miglioramento del supporto dei Cookie

• 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
   -Dhttp.proxyHost=...
   -Dhttp.proxyPort=...
                    www.JavaPortal.it
                    www JavaPortal
Stack

Nuovi metodi per poter gestire lo stackTrace dei programmi
source
StackTraceElement e[]=Thread.currentThread().getStackTrace();
for (int i=0; i <e.length; i++) {
   System.out.println(e[i]);
  }
System.out.println("n"+Thread.getAllStackTraces());
output
java.lang.Thread.dumpThreads(Native Method)
java.lang.Thread.getStackTrace(Unknown Source)
stackTest.main(stackTest.java:7)


{Thread[Reference Handler,10,system]=[Ljava.lang.StackTraceElement;@130c19b,
    Thread[main,5,main]=[Ljava.lang.StackTraceElement;@1f6a7b9, Thread[Signal
    Dispatcher,10,system]=[Ljava.lang.StackTraceElement;@7d772e, Thread
    [Finalizer,8,system]=[Ljava.lang.StackTraceElement;@11b86e7}


                            www.JavaPortal.it
                            www JavaPortal
Memoria

Classi per la gestione della memoria di Hotspot JVM
// Cambiato nella BETA 2
List pools =ManagementFactory.getMemoryPoolMXBeans();
for(Object o : pools.toArray() ){
     MemoryPoolMXBean p = (MemoryPoolMXBean)o;
     System.out.println("Memory type="+p.getType()+" Memory
   usage="+p.getUsage());
}

Memory type=Non-heap memory Memory usage=init = 196608
  (192K) used = 438336(428K) committed = 458752 (448K)max =
  33554432(32768K)
Memory type=Heap memory Memory usage=init = 524288(512K)
  used = 164072(160K) committed = 524288 (512K)max = -1(-1K)

                   www.JavaPortal.it
                   www JavaPortal
Pack200

Pack200 nuova modalità di compressione dei JAR
Ottimizza le strutture dei .class file

                       zip pack200 pack200+zip pack20+gzip
----------------------------------------------------------
plugin.jar 1068615 324282 313435        132233      132352
tools.jar 6016154 1936403 1711907       714670      717355

pack200 e unpack200 sono disponibili con la Beta 2




                    www.JavaPortal.it
                    www JavaPortal
Pack200

Utile nelle applicazioni client/server

   Dalla versione 1.5, HTTP compression è implementata da Java Web
   Start e dal Java Plug-in, come discusso da RFC 2616. Le modalità
   di compressione possibili sono gzip e pack200-gzip.

   L'applicazione invia una richiesta HTTP al server, indicando che
   “Accept-Encoding” (AE) è pack200-gzip o gzip.

   Il server cerca il JAR richiesto, risponde con un “Content-
   Encoding” (CE) indicando pack200-gzip , gzip, o NULL, in base
   alla richiesta e opzionalmente imposta un “Content-Type” (CT) a
   “application/Java-archive”. In questo modo JWS o JP conoscono il
   metodo di compressione dei JAR ed utilizzano la corretta
   decompressione

                      www.JavaPortal.it
                      www JavaPortal
Pack200




www.JavaPortal.it
www JavaPortal
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




                     www.JavaPortal.it
                     www JavaPortal
Riferimenti

• Java 1.5 download
   http://java.sun.com/j2se/1.5.0/download.jsp
• Breve storia delle versioni di Java
   http://www.particle.kth.se/~lindsey/JavaCourse/Book/Java/Chap
      ter01/versions.html
• Java Community Process
   http://www.jcp.org
• Mokabyte – 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
   http://www.javaportal.it
                   www.JavaPortal.it
                   www JavaPortal
and now ...




   Q&A


www.JavaPortal.it
www JavaPortal
GRAZIE



       da

Matteo Baccan


www.JavaPortal.it
www JavaPortal
Ringraziamenti…

• Le aziende grazie alle quali posso essere qui oggi




                      http://www.grupposisge.it/




                    www.JavaPortal.it
                    www JavaPortal

Contenu connexe

Tendances

Corso Python Deltapromo lezione 1
Corso Python Deltapromo   lezione 1Corso Python Deltapromo   lezione 1
Corso Python Deltapromo lezione 1Paolo Ferretti
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#Marco Parenzan
 
Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)Davide Carboni
 
Lezione 01 - Singleton
Lezione 01 - SingletonLezione 01 - Singleton
Lezione 01 - SingletonMarco Bianchi
 
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
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsJUG Genova
 
Java SE 5. Capitolo 01: Base
 Java SE 5. Capitolo 01: Base Java SE 5. Capitolo 01: Base
Java SE 5. Capitolo 01: Basebobpuley
 
Introduzione al Test Driven Development
Introduzione al Test Driven DevelopmentIntroduzione al Test Driven Development
Introduzione al Test Driven DevelopmentEnnio Masi
 
Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio JavaPaolo Tosato
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of KotlinErik Minarini
 

Tendances (20)

Java OCA teoria 1
Java OCA teoria 1Java OCA teoria 1
Java OCA teoria 1
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Logging
LoggingLogging
Logging
 
Corso Python Deltapromo lezione 1
Corso Python Deltapromo   lezione 1Corso Python Deltapromo   lezione 1
Corso Python Deltapromo lezione 1
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)
 
Lezione 01 - Singleton
Lezione 01 - SingletonLezione 01 - Singleton
Lezione 01 - Singleton
 
Java5
Java5Java5
Java5
 
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é
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMs
 
Java OCA teoria 4
Java OCA teoria 4Java OCA teoria 4
Java OCA teoria 4
 
Java SE 5. Capitolo 01: Base
 Java SE 5. Capitolo 01: Base Java SE 5. Capitolo 01: Base
Java SE 5. Capitolo 01: Base
 
Introduzione al Test Driven Development
Introduzione al Test Driven DevelopmentIntroduzione al Test Driven Development
Introduzione al Test Driven Development
 
Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio Java
 
Lezione 11 - Bridge
Lezione 11 - BridgeLezione 11 - Bridge
Lezione 11 - Bridge
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of Kotlin
 
Corso java base
Corso java baseCorso java base
Corso java base
 
Java Advanced
Java AdvancedJava Advanced
Java Advanced
 
REST con Jersey
REST con JerseyREST con Jersey
REST con Jersey
 
Mini Corso Java - Parte 1
Mini Corso Java - Parte 1Mini Corso Java - Parte 1
Mini Corso Java - Parte 1
 

En vedette

香港六合彩
香港六合彩香港六合彩
香港六合彩wejia
 
Google既有商業模式的破壞者3
Google既有商業模式的破壞者3Google既有商業模式的破壞者3
Google既有商業模式的破壞者3guestc1eec3
 
Rosas De Reus Pps
Rosas De Reus PpsRosas De Reus Pps
Rosas De Reus PpsJuan
 
Dave Briggs - Engaging Change
Dave Briggs - Engaging ChangeDave Briggs - Engaging Change
Dave Briggs - Engaging ChangePaul McElvaney
 
香港六合彩
香港六合彩香港六合彩
香港六合彩wejia
 
子育て支援Sns
子育て支援Sns子育て支援Sns
子育て支援Snsyuu_2003
 
Laura Overton at LP2010
Laura Overton at LP2010Laura Overton at LP2010
Laura Overton at LP2010Paul McElvaney
 
Kvkvkvk
KvkvkvkKvkvkvk
Kvkvkvkslomb
 
Click frog present2013-agecy2
Click frog present2013-agecy2Click frog present2013-agecy2
Click frog present2013-agecy2Ivan Zhyvayev
 
عرض ملتقى النهائي جديد
عرض ملتقى النهائي جديدعرض ملتقى النهائي جديد
عرض ملتقى النهائي جديدsabah alharby
 
ADMIRÁVEL/ADMIRABLE
ADMIRÁVEL/ADMIRABLEADMIRÁVEL/ADMIRABLE
ADMIRÁVEL/ADMIRABLEJatsoc .
 
Customizing HTML Outputs From Author-It
Customizing HTML Outputs From Author-ItCustomizing HTML Outputs From Author-It
Customizing HTML Outputs From Author-ItRhonda Bracey
 
LB Bexley: the generation game
LB Bexley:  the generation gameLB Bexley:  the generation game
LB Bexley: the generation gamePaul McElvaney
 
Usability Testing Of Mobius Catalog
Usability Testing Of Mobius CatalogUsability Testing Of Mobius Catalog
Usability Testing Of Mobius Catalogcscoville
 

En vedette (20)

香港六合彩
香港六合彩香港六合彩
香港六合彩
 
Google既有商業模式的破壞者3
Google既有商業模式的破壞者3Google既有商業模式的破壞者3
Google既有商業模式的破壞者3
 
Rosas De Reus Pps
Rosas De Reus PpsRosas De Reus Pps
Rosas De Reus Pps
 
Dave Briggs - Engaging Change
Dave Briggs - Engaging ChangeDave Briggs - Engaging Change
Dave Briggs - Engaging Change
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
子育て支援Sns
子育て支援Sns子育て支援Sns
子育て支援Sns
 
Laura Overton at LP2010
Laura Overton at LP2010Laura Overton at LP2010
Laura Overton at LP2010
 
Preso 24 recl
Preso 24 reclPreso 24 recl
Preso 24 recl
 
Kvkvkvk
KvkvkvkKvkvkvk
Kvkvkvk
 
It is All True
It is All TrueIt is All True
It is All True
 
Vov meeting
Vov meeting Vov meeting
Vov meeting
 
Click frog present2013-agecy2
Click frog present2013-agecy2Click frog present2013-agecy2
Click frog present2013-agecy2
 
Para Que Serve O Galego
Para Que Serve O GalegoPara Que Serve O Galego
Para Que Serve O Galego
 
عرض ملتقى النهائي جديد
عرض ملتقى النهائي جديدعرض ملتقى النهائي جديد
عرض ملتقى النهائي جديد
 
La Mujer Ideal
La Mujer IdealLa Mujer Ideal
La Mujer Ideal
 
ADMIRÁVEL/ADMIRABLE
ADMIRÁVEL/ADMIRABLEADMIRÁVEL/ADMIRABLE
ADMIRÁVEL/ADMIRABLE
 
Customizing HTML Outputs From Author-It
Customizing HTML Outputs From Author-ItCustomizing HTML Outputs From Author-It
Customizing HTML Outputs From Author-It
 
LB Bexley: the generation game
LB Bexley:  the generation gameLB Bexley:  the generation game
LB Bexley: the generation game
 
Usability Testing Of Mobius Catalog
Usability Testing Of Mobius CatalogUsability Testing Of Mobius Catalog
Usability Testing Of Mobius Catalog
 
Lecture 2
Lecture 2Lecture 2
Lecture 2
 

Similaire à Webbit 2004: Tiger, java

javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - TigerMatteo Baccan
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: AspectjMatteo Baccan
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Introduzione a scala prima parte
Introduzione a scala   prima parteIntroduzione a scala   prima parte
Introduzione a scala prima parteOnofrio Panzarino
 
Corso pratico di C# - 2013
Corso pratico di C# - 2013Corso pratico di C# - 2013
Corso pratico di C# - 2013Matteo Valoriani
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScriptSinergia Totale
 
Introduzione al java
Introduzione al javaIntroduzione al java
Introduzione al javaGiovanni Pace
 
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 SperdutoVitalij Zadneprovskij
 
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
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Marco Loregian
 
KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgetsPietro Lerro
 
Java Unit Testing - JUnit (1)
Java Unit Testing - JUnit (1)Java Unit Testing - JUnit (1)
Java Unit Testing - JUnit (1)fgianneschi
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Developmentsazilla
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Developmentsazilla
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow FoundationDotNetMarche
 

Similaire à Webbit 2004: Tiger, java (20)

javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - Tiger
 
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: Aspectj
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Introduzione a scala prima parte
Introduzione a scala   prima parteIntroduzione a scala   prima parte
Introduzione a scala prima parte
 
Corso pratico di C# - 2013
Corso pratico di C# - 2013Corso pratico di C# - 2013
Corso pratico di C# - 2013
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
 
Introduzione al java
Introduzione al javaIntroduzione al java
Introduzione al java
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
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
 
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...
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
 
KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgets
 
Java Unit Testing - JUnit (1)
Java Unit Testing - JUnit (1)Java Unit Testing - JUnit (1)
Java Unit Testing - JUnit (1)
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Development
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Development
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow Foundation
 

Plus de 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 2015Matteo 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 3Matteo 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 2Matteo 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 1Matteo 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 2014Matteo 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 ClusterMatteo Baccan
 
Phpday 2009 php e java
Phpday 2009 php e javaPhpday 2009 php e java
Phpday 2009 php e javaMatteo Baccan
 
Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e javaMatteo Baccan
 
Confsl 2010 Facebook Framework
Confsl 2010 Facebook FrameworkConfsl 2010 Facebook Framework
Confsl 2010 Facebook FrameworkMatteo 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 ServerMatteo Baccan
 
Codemotion twitter programming
Codemotion twitter programmingCodemotion twitter programming
Codemotion twitter programmingMatteo Baccan
 
Webtech 2010: twitter programming
Webtech 2010: twitter programmingWebtech 2010: twitter programming
Webtech 2010: twitter programmingMatteo Baccan
 
Webtech 2010: facebook framework
Webtech 2010: facebook frameworkWebtech 2010: facebook framework
Webtech 2010: facebook frameworkMatteo Baccan
 
JIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingJIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingMatteo Baccan
 
Javaday 2007: skype4java
Javaday 2007: skype4javaJavaday 2007: skype4java
Javaday 2007: skype4javaMatteo Baccan
 
Phpday 2010: facebook php framework
Phpday 2010: facebook php frameworkPhpday 2010: facebook php framework
Phpday 2010: facebook php frameworkMatteo Baccan
 

Plus de Matteo Baccan (20)

Gmail e google app
Gmail e google appGmail e google app
Gmail e google app
 
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 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 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 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
 
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 raspberry pi - linox 2014
Matteo baccan   raspberry pi - linox 2014Matteo baccan   raspberry pi - linox 2014
Matteo baccan raspberry pi - linox 2014
 
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
 
Phpday 2009 php e java
Phpday 2009 php e javaPhpday 2009 php e java
Phpday 2009 php e java
 
Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e java
 
Confsl 2010 Facebook Framework
Confsl 2010 Facebook FrameworkConfsl 2010 Facebook Framework
Confsl 2010 Facebook Framework
 
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...
 
Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3 Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3
 
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
 
Codemotion twitter programming
Codemotion twitter programmingCodemotion twitter programming
Codemotion twitter programming
 
Webtech 2010: twitter programming
Webtech 2010: twitter programmingWebtech 2010: twitter programming
Webtech 2010: twitter programming
 
Webtech 2010: facebook framework
Webtech 2010: facebook frameworkWebtech 2010: facebook framework
Webtech 2010: facebook framework
 
JIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingJIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java Programming
 
Javaday 2007: skype4java
Javaday 2007: skype4javaJavaday 2007: skype4java
Javaday 2007: skype4java
 
Phpday 2010: facebook php framework
Phpday 2010: facebook php frameworkPhpday 2010: facebook php framework
Phpday 2010: facebook php framework
 

Webbit 2004: Tiger, java

  • 1. Padova 7 Maggio 2004 Tiger nuove caratteristiche per JAVA 1.5 by Matteo Baccan http://www.baccan.it www.JavaPortal.it www JavaPortal
  • 2. Tiger: nuove caratteristiche per Java 1.5 • Relatore: Matteo Baccan matteo@baccan.it • Data: Milano 03/06/2004 13:00 • Area: Programming & development • Target: Tecnici • Difficoltà: Media 50 minuti per svelare la tigre sotto i suoi aspetti. 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. Nuovi strumenti per l'Analisi Diagnostica e il Monitoring e Manageability. Vediamo di cosa si tratta e di come poter utilizzare queste nuove feature all'interno dei nostri programmi Intervento allineato alla BETA 2 www.JavaPortal.it www JavaPortal
  • 3. Obiettivi Dopo aver completato questo seminario sarai in grado di: • Descrivere le nuove caratteristiche di Java 1.5 • Sfruttare i nuovi costrutti che sono stati introdotti con Tiger • Creare codice più compatto ed efficiente • Migliorare lo stile della tua programmazione www.JavaPortal.it www JavaPortal
  • 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 1.5 La svolta!! www.JavaPortal.it www JavaPortal
  • 5. Tiger • Metadata (Annotations) • Generics • AutoBoxing e Auto-Unboxing • Static import • Foreach • Enumeration • Varargs • Input/Output formattati • Network • Diagnostica e monitoring • Pack200 www.JavaPortal.it www JavaPortal
  • 6. Riferimenti • Java Community Process (http://www.jcp.org) – JSR-014 Generics – JSR-175 Metadata – JSR-201 Foreach, Boxing/Unboxing, enumeration etc Q: Cos'è JCP? 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. www.JavaPortal.it www JavaPortal
  • 7. JAVAC Nuove opzioni di compilazione di Javac: -source 1.5: Abilita l'uso delle nuove caratteristiche di Java 1.5 all'interno dei sorgenti (-target 1.5 è implicito) -target 1.5: Abilita javac a usare ne nuove feature di Java 1.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. www.JavaPortal.it www JavaPortal
  • 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] ) Ed ora un esempio ... www.JavaPortal.it www JavaPortal
  • 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 www.JavaPortal.it www JavaPortal
  • 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/ www.JavaPortal.it www JavaPortal
  • 11. Generics – 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) www.JavaPortal.it www JavaPortal
  • 12. Generics – 1.5 con public static void main(String[] args) { List<Integer> myIntList = new LinkedList<Integer>(); //container myIntList.add(new Integer(2)); myIntList.add("String"); Integer iValue1 = myIntList.get(0); Integer iValue2 = myIntList.get(1); System.out.println( "*"+iValue1.intValue()+"*" ); System.out.println( "*"+iValue2.intValue()+"*" ); } gen1.java:8: cannot find symbol symbol : method add(java.lang.String) location: interface java.util.List<java.lang.Integer> myIntList.add("String"); www.JavaPortal.it www JavaPortal
  • 13. Generics – 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; } } www.JavaPortal.it www JavaPortal
  • 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 www.JavaPortal.it www JavaPortal
  • 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); } www.JavaPortal.it www JavaPortal
  • 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); } www.JavaPortal.it www JavaPortal
  • 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) www.JavaPortal.it www JavaPortal
  • 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 ) ); } } www.JavaPortal.it www JavaPortal
  • 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 www.JavaPortal.it www JavaPortal
  • 20. Foreach – 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; www.JavaPortal.it www JavaPortal
  • 21. Enumerations Prima public static final int matteo = 0; public static final int carlo = 1; public static final int raffaele = 2; Problemi • Non typesafe. Sono solo numeri non li posso "raggruppare" in un tipo • Le costanti sono "compilate" nel codice • Se cambio l'ordine o tolgo una costante ho un errore runtime www.JavaPortal.it www JavaPortal
  • 22. Enumerations Soluzione Introduzione delle enum public enum nomi { matteo, carlo, raffaele }; Gestione del tipo Non compilazione nel codice Gestione degli errori Vantaggi • Sono classi e sono quindi estendibili e possono implementare un'interfaccia www.JavaPortal.it www JavaPortal
  • 23. Enumerations public enum nomieta { matteo(33), carlo(29), raffaele(55); private final int eta; nomieta( int v ){ eta = v; } public int eta(){ return eta; } }; Uno sguardo al decompilato ... www.JavaPortal.it www JavaPortal
  • 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( "ciao", "io", "sono", "Matteo", 10, 20 ); } void testArg(Object ... args) { for( Object s : args ) { System.out.println( s ); } } } www.JavaPortal.it www JavaPortal
  • 25. Input/Output formattati // Grazie a varargs // Output formattato System.out.printf("[%s] [%5d] [%5x]n", "Matteo", 33, 2459); // Input formattato // BETA 1 //Scanner s=Scanner.create(System.in); // BETA 2 Scanner s= new Scanner(System.in); System.out.println( "Ciao come ti chiami? " ); String str = s.next(); System.out.println( "Quanti anni hai? " ); int val = s.nextInt(); s.close(); www.JavaPortal.it www JavaPortal
  • 26. Network Introduzione dei timeout a livello di classe: URLConnection.java public void setConnectTimeout(int timeout) { if (timeout < 0) throw new IllegalArgumentException("..."); connectTimeout = timeout; } public void setReadTimeout(int timeout) { if (timeout < 0) throw new IllegalArgumentException("..."); readTimeout = timeout; } Fino a JDK 1.4: settaggio di sistema comune a tutte le istanze -Dsun.net.client.defaultConnectTimeout=... -Dsun.net.client.defaultReadTimeout=... www.JavaPortal.it www JavaPortal
  • 27. Network • Introduzione del “PING” nella classe InetAddress public boolean isReachable(int timeout) throws IOException { ... } • Miglioramento del supporto dei Cookie • 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 -Dhttp.proxyHost=... -Dhttp.proxyPort=... www.JavaPortal.it www JavaPortal
  • 28. Stack Nuovi metodi per poter gestire lo stackTrace dei programmi source StackTraceElement e[]=Thread.currentThread().getStackTrace(); for (int i=0; i <e.length; i++) { System.out.println(e[i]); } System.out.println("n"+Thread.getAllStackTraces()); output java.lang.Thread.dumpThreads(Native Method) java.lang.Thread.getStackTrace(Unknown Source) stackTest.main(stackTest.java:7) {Thread[Reference Handler,10,system]=[Ljava.lang.StackTraceElement;@130c19b, Thread[main,5,main]=[Ljava.lang.StackTraceElement;@1f6a7b9, Thread[Signal Dispatcher,10,system]=[Ljava.lang.StackTraceElement;@7d772e, Thread [Finalizer,8,system]=[Ljava.lang.StackTraceElement;@11b86e7} www.JavaPortal.it www JavaPortal
  • 29. Memoria Classi per la gestione della memoria di Hotspot JVM // Cambiato nella BETA 2 List pools =ManagementFactory.getMemoryPoolMXBeans(); for(Object o : pools.toArray() ){ MemoryPoolMXBean p = (MemoryPoolMXBean)o; System.out.println("Memory type="+p.getType()+" Memory usage="+p.getUsage()); } Memory type=Non-heap memory Memory usage=init = 196608 (192K) used = 438336(428K) committed = 458752 (448K)max = 33554432(32768K) Memory type=Heap memory Memory usage=init = 524288(512K) used = 164072(160K) committed = 524288 (512K)max = -1(-1K) www.JavaPortal.it www JavaPortal
  • 30. Pack200 Pack200 nuova modalità di compressione dei JAR Ottimizza le strutture dei .class file zip pack200 pack200+zip pack20+gzip ---------------------------------------------------------- plugin.jar 1068615 324282 313435 132233 132352 tools.jar 6016154 1936403 1711907 714670 717355 pack200 e unpack200 sono disponibili con la Beta 2 www.JavaPortal.it www JavaPortal
  • 31. Pack200 Utile nelle applicazioni client/server Dalla versione 1.5, HTTP compression è implementata da Java Web Start e dal Java Plug-in, come discusso da RFC 2616. Le modalità di compressione possibili sono gzip e pack200-gzip. L'applicazione invia una richiesta HTTP al server, indicando che “Accept-Encoding” (AE) è pack200-gzip o gzip. Il server cerca il JAR richiesto, risponde con un “Content- Encoding” (CE) indicando pack200-gzip , gzip, o NULL, in base alla richiesta e opzionalmente imposta un “Content-Type” (CT) a “application/Java-archive”. In questo modo JWS o JP conoscono il metodo di compressione dei JAR ed utilizzano la corretta decompressione www.JavaPortal.it www JavaPortal
  • 33. 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 www.JavaPortal.it www JavaPortal
  • 34. Riferimenti • Java 1.5 download http://java.sun.com/j2se/1.5.0/download.jsp • Breve storia delle versioni di Java http://www.particle.kth.se/~lindsey/JavaCourse/Book/Java/Chap ter01/versions.html • Java Community Process http://www.jcp.org • Mokabyte – 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 http://www.javaportal.it www.JavaPortal.it www JavaPortal
  • 35. and now ... Q&A www.JavaPortal.it www JavaPortal
  • 36. GRAZIE da Matteo Baccan www.JavaPortal.it www JavaPortal
  • 37. Ringraziamenti… • Le aziende grazie alle quali posso essere qui oggi http://www.grupposisge.it/ www.JavaPortal.it www JavaPortal