BLOQUES IF Y SWITCH (OBJETO 2.1)
- Un bloque switch solo puede evaluar enumeraciones (enums) o alguno de los tipos primitivos que puedan ser promovidos implícitamente al tipo int (byte, short, int o char).
- Una constante case debe ser un literal o una variable final, o una expresión constante (incluido un enum). No puede existir una clausula case con una variable que no sea final, o con un rango de valores.
int x = 2; switch (x) { case 1: System.out.println("1"); case 2: System.out.println("2"); default: System.out.println("default"); case 3: System.out.println("3"); case 4: System.out.println("4"); }
2 default 3 4
El bloque default puede estar situado en cualquier parte del bloque switch, es decir, antes, después o entre media de constantes case
int x = 9; switch (x) { case 1: System.out.println("1"); case 2: System.out.println("2"); default: System.out.println("default"); case 3: System.out.println("3"); case 4: System.out.println("4");
default 3 4
BUCLES (OBJETIVO 2.2)
El siguiente ejemplo es perfectamente legal, actúa como un bucle while.
for ( ; ; ){ System.out.println("Dentro de un bucle infinito"); }
for (int i = 0, j = 0; (i < 10); i++, j++){ System.out.println("i es " + i + " j es " + j); }
int b = 3; for (int a = 1; b != 1; System.out.println("Iteracion")){ b = b - a; }
UTILIZAR BREAK Y CONTINUE (OBJETIVO 2.2)
- Una sentencia break saldrá solo del bucle etiquetado
- La etiqueta debe adherirse a las reglas para un nombre de variable y debe aderirse a las convenciones de nomenclatura de Java
MANEJANDO EXCEPCIONES (OBJETIVOS 2.4, 2.4 Y 2.6)
- Las excepciones checked incluyen todos los subtipos de la clase Exception, salvo las subclases de RuntimeException.
- Los subtipos de Error y RuntimeException son unchecked
- Los bloques catch deben estar ordenados desde los tipos de excepciones más específicos hacia los más generales (primero los subtipos y luego las clases bases)
Excepcion | Descripcion | Lanzado por |
---|---|---|
ArrayIndexOutOfBoundsException | Es lanzada cuando intentamos acceder a un array con unindex inválido (menor que 0 o mayor que la longitud del array). |
Por la JVM |
ClassCastException | Lanzado cuando intentamos hacer cast a una variable de referencia que no pasa el test IS-A |
Por la JVM |
IllegalArgumentException | Lanzado cuando un método recibe un argumento formateado de diferente manera del que el método espera. |
Programáticamente |
IllegalStateException | Lanzado cuando el estado del entorno no coincide con la operación que se intenta llevar a cabo. (Usar un Scaner que no ha sido cerrado) |
Programáticamente |
NullPointerException | Lanzado cuando intentamos acceder a un objeto con una variable de referencia cuyo valor actual es null. |
Por la JVM |
NumberFormatException | Lanzado cuando un método convierte un String a un número y ese String no puede ser convertido. |
Programáticamente |
AssertionError | Lanzado cuando una sentencia que comprueba un booleano devuelve false. |
Programáticamente |
ExceptionInInitializerError | Lanzado cuando intentamos inicializar una variable static en un bloque de inicialización. |
Por la JVM |
StackOverflowError | Típicamente lanzado cuando un método es muy recursivo y cada llamada se va añadiendo al stack. |
Por la JVM |
NoClassDefFoundError | Lanzado cuandl la JVM no puede encontrar la clase que se necesita, porque hay un error en la linea de comandos, o un problema con el classpath, o un archivo .class que no se encuentra. |
Por la JVM |
ASSERTIONS (OBJETIVO 2.3)
Usando Java 6 para Compilar código que usa assert como un identificador o como una palabra reservada
Línea de comandos | assert como identificador | assert como palabra reservada |
---|---|---|
javac -source 1.3 TestAsserts.java | Código compila con advertencias. | Compilación falla. |
javac -source 1.4 TestAsserts.java | Compilación falla. | El código compila. |
javac -source 1.5 TestAsserts.java | Compilación falla. | El código compila. |
javac -source 5 TestAsserts.java | Compilación falla. | El código compila. |
javac -source 1.6 TestAsserts.java | Compilación falla. | El código compila. |
javac -source 6 TestAsserts.java | Compilación falla. | El código compila. |
javac TestAsserts.java | Compilación falla. | El código compila. |
Activar y desactivar Assertions por clase, paquete, etc.
Línea de comandos | Que significa |
---|---|
java -ea java -enableassertions |
Enable assertions. |
java -da java -disableassertions |
Disable assertions (the default behavior of Java 6). |
java -ea:com.foo.Bar | Enable assertions in class com.foo.Bar. |
java -ea:com.foo… | Enable assertions in package com.foo and any of its subpackages. |
java -ea -dsa | Enable assertions in general, but disable assertions in system classes. |
java -ea -da:com.foo… | Enable assertions in general, but disable assertions in package com.foo and any of its subpackages. |