Neue Funktionen in Java 7


Antworten:


211

Java SE 7- Funktionen und -Erweiterungen aus den JDK 7-Versionshinweisen

Dies ist die Zusammenfassung der neuen Java 7-Funktionen auf der OpenJDK 7-Funktionsseite :

vm JSR 292: Unterstützung für dynamisch typisierte Sprachen (InvokeDynamic)
        Strikte Überprüfung von Klassendateien
lang JSR 334: Kleine Sprachverbesserungen (Project Coin)
Kern Upgrade der Class-Loader-Architektur
        Methode zum Schließen eines URLClassLoader
        Aktualisierungen von Parallelität und Sammlungen (jsr166y)
i18n Unicode 6.0
        Gebietsschemaverbesserung
        Trennen Sie das Gebietsschema des Benutzers und das Gebietsschema der Benutzeroberfläche
ionet JSR 203: Weitere neue E / A-APIs für die Java-Plattform (NIO.2)
        NIO.2-Dateisystemanbieter für Zip / JAR-Archive
        SCTP (Stream Control Transmission Protocol)
        SDP (Sockets Direct Protocol)
        Verwenden Sie den Windows Vista IPv6-Stack
        TLS 1.2
sec Kryptographie mit elliptischen Kurven (ECC)
jdbc JDBC 4.1
Client XRender-Pipeline für Java 2D
        Erstellen Sie neue Plattform-APIs für 6u10-Grafikfunktionen
        Nimbus Look-and-Feel für Swing
        Swing JLayer-Komponente
        Gervill Sound Synthesizer [NEU]
web Aktualisieren Sie den XML-Stack
mgmt Enhanced MBeans [AKTUALISIERT]

Codebeispiele für neue Funktionen in Java 1.7

Try-with-Resources-Anweisung

Dies:

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

wird:

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

Sie können mehr als eine Ressource zum Schließen deklarieren:

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

Unterstriche in numerischen Literalen

int one_million = 1_000_000;

Saiten im Schalter

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;
}

Binäre Literale

int binary = 0b1001_1001;

Verbesserte Typinferenz für die Erstellung generischer Instanzen

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

wird:

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

Fang mehrerer Ausnahmen

Dies:

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

wird:

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

SafeVarargs

Dies:

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

wird:

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

4
+1 Code für schwer zu findende Codebeispiele. Können Sie mehr hinzufügen?
Zasz

3
Die verbesserte Typinferenz scheint eine traurige Kopie von C # mit einer seltsamen Änderung zu sein, bei der eine Referenz eingegeben wird, das Objekt jedoch nicht? Was für eine Komödie!
Zasz

1
@ Zasz, ja sicher, es ist in ständiger Verbesserung
Didxga

Die Frage ist also an OP, was ist Ihre Meinung? Sind diese Verbesserungen nur auf der Produktivitätsseite oder können sie die Leistung von Programmen wirklich verbessern? Wenn sich kein Bytecode ändert, können neue Sprachverbesserungen mit dem als 1,5 gekennzeichneten Bytecode verwendet werden?
Dmitriy R

Obwohl dies keine Sprachverbesserung ist, gibt es die neue ObjectsKlasse mit statischen Methoden, um zu vermeiden, dass nach Nullreferenzen gesucht werden muss. Beispiel: if (obj != null && obj.equals(anotherObj))wirdif (Objects.equals(obj, anotherObj))
Carcamano

13

Neues Feature der Java Standard Edition (JSE 7)

  1. Dekorieren Sie Komponenten mit der JLayer-Klasse:

    Die JLayer-Klasse ist ein flexibler und leistungsstarker Dekorateur für Swing-Komponenten. Die JLayer-Klasse in Java SE 7 ähnelt im Geist dem JxLayer-Projektprojekt auf java.net. Die JLayer-Klasse basierte ursprünglich auf dem JXLayer-Projekt, die API wurde jedoch separat entwickelt.

  2. Strings in switch Anweisung :

    Im JDK 7 können wir ein String-Objekt im Ausdruck einer switch-Anweisung verwenden. Der Java-Compiler generiert im Allgemeinen effizienteren Bytecode aus switch-Anweisungen, die String-Objekte verwenden, als aus verketteten if-then-else-Anweisungen.

  3. Typinferenz für generische Instanz:

    Wir können die zum Aufrufen des Konstruktors einer generischen Klasse erforderlichen Typargumente durch einen leeren Satz von Typparametern (<>) ersetzen, solange der Compiler die Typargumente aus dem Kontext ableiten kann. Dieses Paar spitzer Klammern wird informell als Diamant bezeichnet. Java SE 7 unterstützt eine begrenzte Typinferenz für die Erstellung generischer Instanzen. Sie können die Typinferenz nur verwenden, wenn der parametrisierte Typ des Konstruktors aus dem Kontext ersichtlich ist. Das folgende Beispiel wird beispielsweise nicht kompiliert:

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

    Im Vergleich dazu wird folgendes Beispiel kompiliert:

    List<? extends String> list2 = new ArrayList<>();
    l.addAll(list2);
  4. Abfangen mehrerer Ausnahmetypen und erneutes Auslösen von Ausnahmen mit verbesserter Typprüfung:

    In Java SE 7 und höher kann ein einzelner Catch-Block mehr als einen Ausnahmetyp verarbeiten. Diese Funktion kann die Codeduplizierung reduzieren. Betrachten Sie den folgenden Code, der in jedem der catch-Blöcke doppelten Code enthält:

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

    In Releases vor Java SE 7 ist es schwierig, eine gemeinsame Methode zum Entfernen des duplizierten Codes zu erstellen, da die Variable e unterschiedliche Typen hat. Das folgende Beispiel, das in Java SE 7 und höher gültig ist, entfernt den duplizierten Code:

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

    Die catch-Klausel gibt die Arten von Ausnahmen an, die der Block verarbeiten kann, und jeder Ausnahmetyp wird durch einen vertikalen Balken (|) getrennt.

  5. Das Paket java.nio.file

    Das java.nio.filePaket und das zugehörige Paket java.nio.file.attribute bieten umfassende Unterstützung für Datei-E / A und für den Zugriff auf das Dateisystem. Ein Zip-Dateisystemanbieter ist auch in JDK 7 verfügbar.

Quelle: http://ohmjavaclasses.blogspot.com/


6

3

Zusätzlich zu den Aussagen von John Skeet finden Sie hier eine Übersicht über das Java 7-Projekt . Es enthält eine Liste und eine Beschreibung der Funktionen.

Hinweis: JDK 7 wurde am 28. Juli 2011 veröffentlicht. Sie sollten daher jetzt zur offiziellen Java SE-Website gehen .


Zu Ihrer Information, dies ist eine gute Präsentation, aber ziemlich alt und etwas veraltet.
Alex Miller

Ich habe eine Fehlerseite auf Hebräisch erhalten, als ich diesen Link ausprobiert habe. Gibt es irgendwo eine aktuellere Kopie?
Simon Nickerson

1

Sprachänderungen :

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

Bibliotheksänderungen :

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

Plattformänderungen :

-support for dynamic languages

Unten finden Sie den Link, der die neu hinzugefügten Funktionen von JAVA 7 erklärt. Die Erklärung ist kristallklar mit den möglichen kleinen Beispielen für jede Funktion:

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


0

Verwenden des Diamond (<>) -Operators für die generische Instanzerstellung

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

Verwenden von Zeichenfolgen in switch-Anweisungen

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

Unterstrich in numerischen Literalen

int val 12_15; long phoneNo = 01917_999_720L;

Verwenden einer einzelnen catch-Anweisung zum Auslösen mehrerer Ausnahmen mithilfe von "|" Operator

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

Ressourcen müssen nicht geschlossen werden (), da Java 7 eine Try-with-Resources-Anweisung bereitstellt

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

binäre Literale mit dem Präfix "0b" oder "0B"


0

Ich denke, ForkJoinPool und die damit verbundene Verbesserung des Executor Framework sind eine wichtige Ergänzung in Java 7.


-2

Die folgende Liste enthält Links zu den Erweiterungsseiten 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

Referenz 1 Referenz 2


1
Sie sollten anstelle dieser Liste mehr kurze Beschreibungen oder Beispiele geben, was wir auch auf der offiziellen Java-Seite herausfinden können.
Ken Block
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.