Java Language
Características de Java SE 7
Buscar..
Introducción
Observaciones
Nuevas características del lenguaje de programación Java SE 7.
- Literales binarios : los tipos integrales (byte, short, int y long) también se pueden expresar utilizando el sistema de números binarios. Para especificar un literal binario, agregue el prefijo 0b o 0B al número.
- Cadenas en declaraciones de switch : puede usar un objeto String en la expresión de una declaración de switch
- La declaración try-with-resources : La declaración try-with-resources es una declaración try que declara uno o más recursos. Un recurso es como un objeto que debe cerrarse después de que el programa haya terminado con él. La declaración try-with-resources asegura que cada recurso se cierre al final de la declaración. Cualquier objeto que implemente java.lang.AutoCloseable, que incluye todos los objetos que implementan java.io.Closeable, puede usarse como un recurso.
- Captura de múltiples tipos de excepciones y reingreso de excepciones con la verificación de tipos mejorada : un solo bloque de captura puede manejar más de un tipo de excepción. Esta característica puede reducir la duplicación de código y disminuir la tentación de atrapar una excepción demasiado amplia.
- Subrayados en literales numéricos : cualquier número de guiones bajos (_) puede aparecer en cualquier lugar entre los dígitos en un literal numérico. Esta función le permite, por ejemplo, separar grupos de dígitos en literales numéricos, lo que puede mejorar la legibilidad de su código.
- Inferencia de tipos para la creación de instancias genéricas : puede reemplazar los argumentos de tipo requeridos para invocar al 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 soportes angulares se llama informalmente el diamante.
- Advertencias y errores mejorados del compilador cuando se usan parámetros formales no confiables con métodos de Varargs
Literales binarios
// An 8-bit 'byte' value:
byte aByte = (byte)0b00100001;
// A 16-bit 'short' value:
short aShort = (short)0b1010000101000101;
// Some 32-bit 'int' values:
int anInt1 = 0b10100001010001011010000101000101;
int anInt2 = 0b101;
int anInt3 = 0B101; // The B can be upper or lower case.
// A 64-bit 'long' value. Note the "L" suffix:
long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;
La declaración de prueba con recursos
El ejemplo lee la primera línea de un archivo. Utiliza una instancia de BufferedReader
para leer datos del archivo. BufferedReader
es un recurso que debe cerrarse una vez que el programa haya terminado con él:
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
En este ejemplo, el recurso declarado en la declaración try-with-resources es un BufferedReader
. La declaración de declaración aparece entre paréntesis inmediatamente después de la palabra clave try. La clase BufferedReader
, en Java SE 7 y versiones posteriores, implementa la interfaz java.lang.AutoCloseable
. Debido a que la instancia de BufferedReader
se declara en una sentencia try-with-resource, se cerrará sin importar si la sentencia de prueba se completa normalmente o de manera abrupta (como resultado del método BufferedReader.readLine
una IOException
).
Subrayados en literales numéricos
El siguiente ejemplo muestra otras formas en que puede usar el guión bajo en literales numéricos:
long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi = 3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;
Puede colocar guiones bajos solo entre dígitos; No puedes colocar guiones bajos en los siguientes lugares:
- Al principio o al final de un número
- Adyacente a un punto decimal en un literal de punto flotante
- Antes de un sufijo F o L
- En posiciones donde se espera una cadena de dígitos
Inferencia de tipos para la creación de instancias genéricas
Puedes usar
Map<String, List<String>> myMap = new HashMap<>();
en lugar de
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
Sin embargo, no puedes usar
List<String> list = new ArrayList<>();
list.add("A");
// The following statement should fail since addAll expects
// Collection<? extends String>
list.addAll(new ArrayList<>());
porque no se puede compilar. Tenga en cuenta que el diamante a menudo funciona en las llamadas de método; sin embargo, se sugiere que use el diamante principalmente para declaraciones de variables.
Cadenas en las instrucciones del interruptor
public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
String typeOfDay;
switch (dayOfWeekArg) {
case "Monday":
typeOfDay = "Start of work week";
break;
case "Tuesday":
case "Wednesday":
case "Thursday":
typeOfDay = "Midweek";
break;
case "Friday":
typeOfDay = "End of work week";
break;
case "Saturday":
case "Sunday":
typeOfDay = "Weekend";
break;
default:
throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
}
return typeOfDay;
}