Resumen OCP(SCJP): Capítulo 5. Control de Flujo, Excepciones y Assertions

por | junio 29, 2013

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)

Jerarquía de excepciones

Jerarquía de excepciones

  • 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.

EOF