¿Qué nuevas características de Java 7 se implementarán? ¿Y qué están haciendo ahora?
Respuestas:
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]
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
}
int one_million = 1_000_000;
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;
}
int binary = 0b1001_1001;
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
se convierte en:
Map<String, List<String>> anagrams = new HashMap<>();
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;
}
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);
}
}
Objects
clase, 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))
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.
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.
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);
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 (|).
El paquete java.nio.file
El java.nio.file
paquete 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.
Mejoras en el lenguaje de programación Java @ Java7
Referencia oficial Referencia
oficial con referencia wiki java8
Simple, Object-Oriented, Portable, Platform independent, Secured...
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 .
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:
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"
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