Control de flujo, Excepciones y Assertions

A continuación dejo el resumen del quinto capítulo (Flow Control, Exceptions, and Assertions) del libro "Sun Certified Programmer for Java 6 Study Guide".

Escribir código que utiliza los bloques if y switch (Objeto 2.1):
  • En un bloque if la única expresión legal es una booleana. Es decir, una expresión que pueda resolverse como un valor boolean o Boolean.
  • Tener cuidado con las asignaciones booleanas (=) ya que pueden ser confundidas con una comprobación de igualdad (==).
  • Los corchetes son opcionales en un bloque if que tenga solo una línea. Tener cuidado con la identación.
  • 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.
  • Si una condición en un bloque switch coincide con una constante case, la ejecución comenzará a partir de dicha constante case y continuará hasta que se encuentre con una instrucción break, o hasta la finalización del bloque switch. Es decir, la primer constante case que coincida será el punto de de comienzo de la ejecución.
  • La palabra clave default puede ser utilizada en un bloque switch si se quiere ejecutar algún código cuando ninguna de las constantes case aplican.
  • El bloque default puede estar situado en cualquier parte del bloque switch, es decir, antes, después o entre media de constantes case.
Escribir código que utilice bucles (Objetivo 2.2):
  • Un bloque básico for está compuesto por tres partes: declaración y/o inicialización, evaluación booleana, y la expresión de iteración.
  • Si una variable es incrementada o evaluada dentro de un bucle for, aquella debe estar declarada antes del este, o dentro de la declaración del bucle for.
  • Una variable declarada dentro de la sección de declaración de un bucle for solo puede ser utilizada dentro de este. Es decir, el ámbito de la variable es solo dentro del bucle for.
  • Se puede inicializar más de una variable del mismo tipo dentro de la sección de declaración del bucle for; cada inicialización debe estar separada por una coma.
  • Un bloque foreach (introducido en Java 6), está compuesto de dos partes, la declaración y la expresión. Es utilizado solo para iterar a través de los elementos de un arreglo o una colección.
  • En un for (de tipo foreach), la expresión es el arreglo o la colección a través de la cual se va a iterar.
  • En un for (de tipo foreach), la declaración es donde se declara la variable (la cuál es del mismo tipo que los elementos) que contendrá el valor de cada uno de los elementos de la colección.
  • Solo pueden ser utilizados valores o expresiones booleanas dentro de una condición de un if o un bucle. No se pueden utilizar números.
  • En el bucle do, su cuerpo siempre se ejecuta al menos una vez, incluso si la condición no se cumple.
Utilizar break y continue (Objetivo 2.2):
  • La clausula break provoca que la iteración actual de un bucle se detenga y que se ejecute la siguiente línea de código fuera del bucle.
  • La clausula continue provoca que la iteración actual de un bucle se detenga, luego se comprueba la condición del bucle, y en caso de ser afirmativa el bucle se ejecuta nuevamente.
  • Si una clausula break o una continue se encuentran etiquetadas, estas provocan la misma acción pero en el bucle etiquetado, no en el que se está ejecutando.
Manejando excepciones (Objetivos 2.4, 2.4 y 2.6):
  • Existen dos tipos de excepciones: comprobadas y no comprobadas.
  • Las excepciones comprobadas incluyen todos los subtipos de la clase Exception, salvo las subclases de RuntimeException.
  • Cualquier método que pueda lanzar una excepción comprobada la debe declarar en la clausula throws, o tratarla en los correspondientes bloques try/catch.
  • Los subtipos de Error y RuntimeException no son comprobados, por lo tanto el compilador no obliga a tratarlas o declararlas en la clausula throws.
  • Si se utiliza el bloque (opcional) finally, este será ejecutado tanto si el código del bloque try termina correctamente, como si se genera una excepción y la misma es atrapada por un bloque de tratamiento.
  • La única excepción en la que el bloque finally no será ejecutado, es si dentro del bloque try (o algún bloque catch) se realiza una invocación el método System.exit().
  • Que el bloque finally siempre se ejecute, no quiere decir que el mismo se ejecutará completamente. El código dentro de un bloque finally puede lanzar una excepción o invocar el método System.exit().
  • Las excepciones no atrapadas se propagan hacia abajo a través de la pila de llamadas (call stack). Comenzando a partir del método en el que la excepción fue lanzada y terminando en el lugar donde se trate la misma, o finalizando la ejecución del programa.
  • Se pueden declarar nuevas excepciones extendiendo de la clase Exception o alguno de sus subtipos. Estas excepciones son consideradas comprobadas y el compilador obliga a tratarlas o declararlas en la clausula thorws cada vez que sean generadas.
  • 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). En caso contrario, el compilador generará un error porque algún bloque catch nunca va a poder ser alcanzado.
  • Las excepciones pueden ser creadas por la JVM o por un programador.
Trabajando con el mecanismo Assertions (Objetivo 2.3):
  • Una Assertion brinda una manera de testear las suposiciones durante el desarrollo y el debug.
  • Las Assertions típicamente están activadas durante el testeo pero desactivadas durante la implementación.
  • Se puede utilizar ‘assert’ como una palabra clave (a partir de la versión 1.4) o como un identificador, pero nunca de las dos maneras. Para compilar código antiguo que utilice la palabra ‘assert’ como un identificador, se debe usar el comando –source 1.3 a la hora de compilar.
  • El mecanismo Assertions por defecto esta desactivado en tiempo de ejecución. Para activarlo se debe utilizar el comando –ea o –enableassertions.
  • Para desactivar el mecanismo se debe utilizar el comando –da o –disableassertions.
  • Para activar o desactivar el mecanismo Assertions en general, se lo debe hacer sin ningún argumento. Se puede combinar la activación y desactivación para utilizar el alguna clase y/o paquete en especial.
  • No utilizar las assertions para validar argumentos de métodos públicos.
  • No utilizar expresiones assert que provoquen efectos. No se garantiza que las assertions siempre se van a ejecutar, y no se aconseja tener diferentes comportamientos dependiendo de si están o no activadas.
  • Utilizar assertions (incluso en los métodos públicos) para validar bloques de código que nunca van a ser alcanzados. Por ejemplo: assert false; Esto provoca un error en caso de que el código sea ejecutado.

0 comentarios:



Publicar un comentario

Este blog dejo de ser mantenido el día 12/02/2010. Para cualquier consulta o comentario realizarlo a través del sitio http://onj2ee.blogspot.com/