Nuove funzionalità in java 7


Risposte:


211

Funzionalità e miglioramenti di Java SE 7 dalle note di rilascio di JDK 7

Questo è il riepilogo delle nuove funzionalità di Java 7 dalla pagina delle funzionalità di OpenJDK 7 :

vm JSR 292: supporto per linguaggi tipizzati dinamicamente (InvokeDynamic)
        Controllo rigoroso dei file di classe
lang JSR 334: Miglioramenti in piccole lingue (Project Coin)
core Aggiorna l'architettura class-loader
        Metodo per chiudere un URLClassLoader
        Aggiornamenti di concorrenza e raccolte (jsr166y)
i18n Unicode 6.0
        Miglioramento delle impostazioni locali
        Impostazioni internazionali dell'utente e dell'interfaccia utente separate
ionet JSR 203: più nuove API I / O per la piattaforma Java (NIO.2)
        Provider di file system NIO.2 per archivi zip / jar
        SCTP (Stream Control Transmission Protocol)
        SDP (Sockets Direct Protocol)
        Usa lo stack IPv6 di Windows Vista
        TLS 1.2
sec Crittografia a curva ellittica (ECC)
jdbc JDBC 4.1
pipeline XRender client per Java 2D
        Crea nuove API della piattaforma per le funzionalità grafiche 6u10
        Aspetto di Nimbus per Swing
        Componente Swing JLayer
        Sintetizzatore di suoni Gervill [NUOVO]
web Aggiorna lo stack XML
MBean avanzati mgmt [AGGIORNATO]

Esempi di codice per nuove funzionalità in Java 1.7

Dichiarazione di prova con le risorse

Questo:

BufferedReader br = new BufferedReader(new FileReader(path));
try {
   return br.readLine();
} finally {
   br.close();
}

diventa:

try (BufferedReader br = new BufferedReader(new FileReader(path)) {
   return br.readLine();
}

Puoi dichiarare la chiusura di più di una risorsa:

try (
   InputStream in = new FileInputStream(src);
   OutputStream out = new FileOutputStream(dest))
{
 // code
}

Sottolineature in letterali numerici

int one_million = 1_000_000;

Stringhe in switch

String s = ...
switch(s) {
 case "quux":
    processQuux(s);
    // fall-through

  case "foo":
  case "bar":
    processFooOrBar(s);
    break;

  case "baz":
     processBaz(s);
    // fall-through

  default:
    processDefault(s);
    break;
}

Letterali binari

int binary = 0b1001_1001;

Inferenza del tipo migliorata per la creazione di istanze generiche

Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

diventa:

Map<String, List<String>> anagrams = new HashMap<>();

Rilevamento di più eccezioni

Questo:

} catch (FirstException ex) {
     logger.error(ex);
     throw ex;
} catch (SecondException ex) {
     logger.error(ex);
     throw ex;
}

diventa:

} catch (FirstException | SecondException ex) {
     logger.error(ex);
    throw ex;
}

SafeVarargs

Questo:

@SuppressWarnings({"unchecked", "varargs"})
public static void printAll(List<String>... lists){
    for(List<String> list : lists){
        System.out.println(list);
    }
}

diventa:

@SafeVarargs
public static void printAll(List<String>... lists){
    for(List<String> list : lists){
        System.out.println(list);
    }
}

4
+1 codice per gli esempi di codice difficili da trovare. Puoi aggiungere altro?
Zasz

3
L'inferenza del tipo migliorata sembra essere una triste copia da C # con una strana modifica in cui viene digitato un riferimento, ma l'oggetto non è ?? Che commedia!
Zasz

1
@Zasz, sì certo, è in continuo miglioramento
didxga

Quindi la domanda è OP, qual è la tua opinione? Questi miglioramenti riguardano solo la produttività o possono davvero migliorare le prestazioni dei programmi? Se nessun bytecode cambia, è possibile utilizzare nuovi miglioramenti del linguaggio con bytecode contrassegnato come 1.5?
Dmitriy R

Sebbene non sia un miglioramento del linguaggio, c'è la nuova Objectsclasse, con metodi statici per evitare di dover controllare i riferimenti nulli. Esempio: if (obj != null && obj.equals(anotherObj))diventaif (Objects.equals(obj, anotherObj))
Carcamano

13

Nuova funzionalità di Java Standard Edition (JSE 7)

  1. Decora i componenti con la classe JLayer:

    La classe JLayer è un decoratore flessibile e potente per componenti Swing. La classe JLayer in Java SE 7 è simile nello spirito al progetto del progetto JxLayer su java.net. La classe JLayer era inizialmente basata sul progetto JXLayer, ma la sua API si è evoluta separatamente.

  2. Stringhe nell'istruzione switch :

    In JDK 7, possiamo usare un oggetto String nell'espressione di un'istruzione switch. Il compilatore Java genera un bytecode generalmente più efficiente dalle istruzioni switch che utilizzano oggetti String rispetto alle istruzioni concatenate if-then-else.

  3. Inferenza del tipo per istanza generica:

    Possiamo sostituire gli argomenti di tipo richiesti per richiamare il costruttore di una classe generica con un set vuoto di parametri di tipo (<>) purché il compilatore possa dedurre gli argomenti di tipo dal contesto. Questa coppia di parentesi angolari è chiamata informalmente il diamante. Java SE 7 supporta l'inferenza di tipo limitata per la creazione di istanze generiche; è possibile utilizzare l'inferenza del tipo solo se il tipo parametrizzato del costruttore è ovvio dal contesto. Ad esempio, il seguente esempio non viene compilato:

    List<String> l = new ArrayList<>();
    l.add("A");
    l.addAll(new ArrayList<>());
    

    In confronto, il seguente esempio viene compilato:

    List<? extends String> list2 = new ArrayList<>();
    l.addAll(list2);
    
  4. Cattura di più tipi di eccezioni e rilancio delle eccezioni con il controllo del tipo migliorato:

    In Java SE 7 e versioni successive, un singolo blocco catch può gestire più di un tipo di eccezione. Questa funzione può ridurre la duplicazione del codice. Considera il seguente codice, che contiene codice duplicato in ciascuno dei blocchi catch:

    catch (IOException e) {
        logger.log(e);
        throw e;
    }
    catch (SQLException e) {
        logger.log(e);
        throw e;
    }
    

    Nelle versioni precedenti a Java SE 7, è difficile creare un metodo comune per eliminare il codice duplicato perché la variabile e ha tipi diversi. Il seguente esempio, valido in Java SE 7 e versioni successive, elimina il codice duplicato:

    catch (IOException|SQLException e) {
        logger.log(e);
        throw e;
    }
    

    La clausola catch specifica i tipi di eccezioni che il blocco può gestire e ogni tipo di eccezione è separato da una barra verticale (|).

  5. Il pacchetto java.nio.file

    Il java.nio.filepacchetto e il relativo pacchetto, java.nio.file.attribute, forniscono un supporto completo per l'I / O dei file e per l'accesso al file system. Un provider di file system zip è disponibile anche in JDK 7.

Fonte: http://ohmjavaclasses.blogspot.com/


6

3

Oltre a ciò che ha detto John Skeet, ecco una panoramica del progetto Java 7 . Include un elenco e una descrizione delle funzionalità.

Nota: JDK 7 è stato rilasciato il 28 luglio 2011, quindi ora dovresti andare al sito ufficiale di java SE .


Cordiali saluti, questa è una buona presentazione ma piuttosto vecchia e un po 'obsoleta.
Alex Miller

Ho ricevuto una pagina di errore in ebraico quando ho provato questo collegamento: c'è una copia più aggiornata da qualche parte?
Simon Nickerson

1

Cambiamenti di lingua :

-Project Coin (small changes)
-switch on Strings
-try-with-resources
-diamond operator

Modifiche alla libreria :

-new abstracted file-system API (NIO.2) (with support for virtual filesystems)
-improved concurrency libraries
-elliptic curve encryption
-more incremental upgrades

Modifiche alla piattaforma :

-support for dynamic languages

Di seguito è riportato il collegamento che spiega le nuove funzionalità aggiunte di JAVA 7, la spiegazione è chiarissima con i possibili piccoli esempi per ciascuna funzionalità:

http://radar.oreilly.com/2011/09/java7-features.html


0

Utilizzo dell'operatore Diamante (<>) per la creazione di istanze generiche

Map<String, List<Trade>> trades = new TreeMap <> ();

Utilizzo di stringhe nelle istruzioni switch

String status=  something”;
   switch(statue){
     case1: 
     case2: 
     default:
    }

Sottolineatura in letterali numerici

int val 12_15; long phoneNo = 01917_999_720L;

Utilizzo di una singola istruzione catch per generare più eccezioni utilizzando "|" operatore

catch(IOException | NullPointerException ex){
          ex.printStackTrace();   
    }

Non è necessario chiudere le risorse perché Java 7 fornisce l'istruzione try-with-resources

try(FileOutputStream fos = new FileOutputStream("movies.txt");
      DataOutputStream dos = new DataOutputStream(fos)) {
              dos.writeUTF("Java 7 Block Buster");
  } catch(IOException e) {
        // log the exception
  }

letterali binari con prefisso "0b" o "0B"


0

Penso che ForkJoinPool e il relativo miglioramento a Executor Framework siano un'importante aggiunta in Java 7.


-2

Il seguente elenco contiene collegamenti alle pagine dei miglioramenti in Java SE 7.

Swing
IO and New IO
Networking
Security
Concurrency Utilities
Rich Internet Applications (RIA)/Deployment
    Requesting and Customizing Applet Decoration in Dragg able Applets
    Embedding JNLP File in Applet Tag
    Deploying without Codebase
    Handling Applet Initialization Status with Event Handlers
Java 2D
Java XML  JAXP, JAXB, and JAX-WS
Internationalization
java.lang Package
    Multithreaded Custom Class Loaders in Java SE 7
Java Programming Language
    Binary Literals
    Strings in switch Statements
    The try-with-resources Statement
    Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking
    Underscores in Numeric Literals
    Type Inference for Generic Instance Creation
    Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods
Java Virtual Machine (JVM)
    Java Virtual Machine Support for Non-Java Languages
    Garbage-First Collector
    Java HotSpot Virtual Machine Performance Enhancements
JDBC

Riferimento 1 Riferimento 2


1
Dovresti fornire descrizioni o esempi più brevi invece di quell'elenco che cosa siamo anche in grado di scoprire nella pagina ufficiale di Java.
Ken Block
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.