Nuevas funciones en java 7


Respuestas:


211

Características y mejoras de Java SE 7 de las notas de la versión de JDK 7

Este es el resumen de las nuevas funciones de Java 7 de la página de funciones de OpenJDK 7 :

vm JSR 292: soporte para lenguajes de tipado dinámico (InvokeDynamic)
        Comprobación estricta de archivos de clase
lang JSR 334: Pequeñas mejoras de idioma (Project Coin)
arquitectura de cargador de clases de actualización básica
        Método para cerrar un URLClassLoader
        Actualizaciones de simultaneidad y cobranza (jsr166y)
i18n Unicode 6.0
        Mejora de la configuración regional
        Configuración regional de usuario y configuración regional de interfaz de usuario independientes
ionet JSR 203: más API de E / S nuevas para la plataforma Java (NIO.2)
        Proveedor de sistema de archivos NIO.2 para archivos zip / jar
        SCTP (Protocolo de transmisión de control de flujo)
        SDP (protocolo directo de sockets)
        Utilice la pila IPv6 de Windows Vista
        TLS 1.2
sec Criptografía de curva elíptica (ECC)
jdbc JDBC 4.1
canalización de cliente XRender para Java 2D
        Cree nuevas API de plataforma para funciones de gráficos 6u10
        Aspecto y tacto de Nimbus para Swing
        Componente Swing JLayer
        Sintetizador de sonido Gervill [NUEVO]
web Actualizar la pila XML
MBeans mejorados de mgmt [ACTUALIZADO]

Ejemplos de código para nuevas funciones en Java 1.7

Declaración de prueba con recursos

esta:

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

se convierte en:

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

Puede declarar más de un recurso para cerrar:

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

Guiones bajos en literales numéricos

int one_million = 1_000_000;

Cuerdas en interruptor

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

Literales binarios

int binary = 0b1001_1001;

Inferencia de tipo mejorada para la creación de instancias genéricas

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

se convierte en:

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

Captura de excepciones múltiples

esta:

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

se convierte en:

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

SafeVarargs

esta:

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

se convierte en:

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

4
+1 Código para los ejemplos de código difíciles de encontrar. ¿Puedes agregar más?
Zasz

3
La inferencia de tipo mejorada parece ser una copia triste de C # con un cambio extraño donde se escribe una referencia, pero el objeto no es ?? ¡Qué comedia!
Zasz

1
@Zasz, sí claro, está en mejora continua
didxga

Entonces la pregunta es OP, ¿cuál es tu opinión? ¿Son estas mejoras solo del lado de la productividad o realmente pueden mejorar el rendimiento de los programas? Si no cambia el código de bytes, ¿se pueden utilizar nuevas mejoras de idioma con el código de bytes marcado como 1.5?
Dmitriy R

Aunque no es una mejora del lenguaje, existe la nueva Objectsclase, con métodos estáticos para evitar tener que buscar referencias nulas. Ejemplo: se if (obj != null && obj.equals(anotherObj))convierte enif (Objects.equals(obj, anotherObj))
Carcamano

13

Nueva función de Java Standard Edition (JSE 7)

  1. Decora componentes con la clase JLayer:

    La clase JLayer es un decorador flexible y potente para componentes Swing. La clase JLayer en Java SE 7 es similar en espíritu al proyecto del proyecto JxLayer en java.net. La clase JLayer se basó inicialmente en el proyecto JXLayer, pero su API evolucionó por separado.

  2. Cadenas en la instrucción switch :

    En el JDK 7, podemos usar un objeto String en la expresión de una declaración de cambio. El compilador de Java genera códigos de bytes generalmente más eficientes a partir de declaraciones de conmutación que utilizan objetos String que a partir de declaraciones encadenadas if-then-else.

  3. Inferencia de tipo para instancia genérica:

    Podemos reemplazar los argumentos de tipo requeridos para invocar el constructor de una clase genérica con un conjunto vacío de parámetros de tipo (<>) siempre que el compilador pueda inferir los argumentos de tipo del contexto. Este par de paréntesis angulares se llama informalmente diamante. Java SE 7 admite la inferencia de tipo limitada para la creación de instancias genéricas; solo puede usar la inferencia de tipos si el tipo parametrizado del constructor es obvio por el contexto. Por ejemplo, el siguiente ejemplo no se compila:

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

    En comparación, el siguiente ejemplo se compila:

    List<? extends String> list2 = new ArrayList<>();
    l.addAll(list2);
    
  4. Detectar varios tipos de excepciones y volver a generar excepciones con la verificación de tipo mejorada:

    En Java SE 7 y posterior, un solo bloque catch puede manejar más de un tipo de excepción. Esta función puede reducir la duplicación de códigos. Considere el siguiente código, que contiene código duplicado en cada uno de los bloques de captura:

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

    En versiones anteriores a Java SE 7, es difícil crear un método común para eliminar el código duplicado porque la variable e tiene diferentes tipos. El siguiente ejemplo, que es válido en Java SE 7 y versiones posteriores, elimina el código duplicado:

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

    La cláusula catch especifica los tipos de excepciones que puede manejar el bloque, y cada tipo de excepción se separa con una barra vertical (|).

  5. El paquete java.nio.file

    El java.nio.filepaquete y su paquete relacionado, java.nio.file.attribute, brindan soporte integral para E / S de archivos y para acceder al sistema de archivos. Un proveedor de sistema de archivos zip también está disponible en JDK 7.

Fuente: http://ohmjavaclasses.blogspot.com/


6

3

Además de lo que dijo John Skeet, aquí hay una descripción general del proyecto Java 7 . Incluye una lista y descripción de las funciones.

Nota: JDK 7 se lanzó el 28 de julio de 2011, por lo que ahora debería ir al sitio oficial de Java SE .


FYI, esta es una buena presentación pero bastante antigua y algo desactualizada.
Alex Miller

Recibí una página de error en hebreo cuando probé este enlace. ¿Hay una copia más actualizada en alguna parte?
Simon Nickerson

1

Cambios de idioma :

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

Cambios en la biblioteca :

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

Cambios de plataforma :

-support for dynamic languages

A continuación se muestra el enlace que explica las características recién agregadas de JAVA 7, la explicación es muy clara con los posibles pequeños ejemplos para cada característica:

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


0

Usando el operador Diamond (<>) para la creación de instancias genéricas

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

Usando cadenas en declaraciones switch

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

Guión bajo en literales numéricos

int val 12_15; long phoneNo = 01917_999_720L;

Usar una declaración de captura única para lanzar una excepción múltiple usando "|" operador

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

No es necesario cerrar () recursos porque Java 7 proporciona una declaración 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
  }

literales binarios con prefijo "0b" o "0B"


0

Creo que ForkJoinPool y la mejora relacionada con Executor Framework es una adición importante en Java 7.


-2

La siguiente lista contiene enlaces a las páginas de mejoras en 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

Referencia 1 Referencia 2


1
Debería proporcionar descripciones o ejemplos más breves en lugar de esa lista, lo que también podemos encontrar en la página oficial de Java.
Ken Block
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.