A metà 2011 è stata rilasciata la versione 7 di Java [nickname Dolphin]. Due sono le grandi novità di questo rilascio:

  • Java è ora marchiata Oracle (che ha acquisito Sun)
  • La reference implementation è ora OpenJDK (l’implementazione open-source di Java), mentre per le passate versioni rimane HotSpot, la versione di Sun Oracle.

Le novità più interessanti, dal punto di vista delle API, sono:

  • Una (nuova) versione delle API NIO 2 per la gestione e la navigazione del file-system (come ad esempio: [Path](https://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html), [Files](https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html))
  • Supporto al multiprocessing (ForkJoinTask / RecursiveTask)
  • La possibilità di usare instanze di String come argomento di switch: ``` switch (s) { case “foo”: break; case “bar”: break; case “foobar”: System.out.println(“it’s foobar!”); } ```
  • Catturare diversi tipi di Exception con una sola catch [separando le Exception con un ‘|’]: ``` try { FileInputStream fi = new FileInputStream(“foo.txt”); } catch(FileNotFoundException | IoException e) { log.error(“error: not found or I/O Exception”); } ```
  • try-with-resource [Automatic Resource Management]: dentro ai blocchi try/catch/finally si rimanda la chiusura degli stream/connessioni al finally. Grazie a try-with-resource è la stessa JVM che si occupa di fare ordine con le risorse utilizzate al termine del blocco. ``` try (FileOutputStream fos = new FileOutputStream(f)) { fos.write(buf, 0, len); } catch (Exception e) { log.error(e); } ```
  • Diamond operator (solo sintassi, evitiamo la ripetizione della classe usando i Generics): ``` List foobar = new ArrayList<>(); ```
  • Leggibilità dei valori numerici (specifichiamo un separatore ‘_’): ``` long accountNumber = 1234_5678_9012L; ```
  • JDBC 4.1 (Annotazioni `@Select` e `@Update` per definire le query, `DataSet` sostituisce ResultSet)