OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y Afirmaciones)
1. Oracle Certified Professional, Java SE 6 Programmer (1Z0-851) - Guía practica 2 de 7.
Esta guía práctica cubre la siguiente sección del examen:
Sección 2: Flujos, Excepciones y aserciones.
2.1. Desarrollar código que implemente una sentencia if o switch; e identificar tipos
de argumentos validos para estas sentencias.
2.2. Desarrollar código que implemente todas las formas de bucles, incluido el uso
de for, for mejorado(for-each), do, while, uso de etiquetas en bucles, break y
continue; explicar los valores que toman las variables contadoras de los bucles
durante y después de su ejecución.
2.3. Desarrollar código que haga uso de aserciones, distinguir el uso apropiado e
inapropiado de las aserciones.
2.4. Desarrollar código que haga uso de excepciones y manejo de estos (try, catch,
finally), declarar métodos y sobre escritura de métodos que lancen excepciones.
2.5. Reconocer el efecto de que se genere una excepción en un punto especificado
del código. Notar que la excepción puede ser una excepción en tiempo de
ejecución, una excepción checked o un error.
2.6. Reconocer situaciones que generen alguna de las siguientes excepciones:
ArrayIndexOutOfBoundsException, ClassCastException, IllegalArgumentException,
IllegalStateException, NullPointerException, NumberFormatException,
AssertionError, ExceptionInInitializerError, StackOverflowError o
NoClassDefFoundError. Entender de esa excepciones cuales son lanzadas por el
JVM, y reconocer situaciones en las cuales las otras son lanzadas por programacion.
Oscar Vásquez Flores (eoscarvf@gmail.com )
2. Oracle Certified Professional, Java SE 6 Programmer (1Z0-851) - Guía practica 2 de 7.
2.1. Desarrollar código que implemente una sentencia if o switch; e
identificar tipos de argumentos validos para estas sentencias.
❑ La única expresión valida dentro de una sentencia if, es una expresión booleana,
es decir una expresión que retorne una un tipo boolean o Boolean.
❑ No confundir la asignación (=) con la prueba de la igualdad (==).
Ejemplo:
boolean x = false;
if (x = true) { } // Es una asignación, entonces siempre va a retornar true.
❑ Las llaves son opcionales para un bloque if, si solo tiene una sentencia
condicional.
❑ La sentencia switch puede evaluar únicamente tipos de datos enum, byte,
short, int o char.
Esto es invalido.
long s = 30;
switch(s) { }
❑ El dato que esta en la sentencia case, debe ser un valor literal o una variable
final, o una expresión constante, incluido un enum. No se puede tener una case
con una variable no final o un rango de valores.
❑ En una sentencia switch cuando se entra a un case y este no tiene una
sentencia break, se entrara a todos los siguientes case, hasta encontrar un break,
a pesar de que el valor que representan los demás case no tenga un valor que
coincide con la buscado por el switch, es muy importe el uso del break para
terminar cada case, si así se desea, debido a que el uso de break es opcional.
❑ Se puede usar un bloque default para el caso en que ninguna sentencia case
cumpla la condición del switch.
❑ El bloque default se puede ubicar en cualquier parte en una sentencia switch, y
se ingresa a este si algún case previo fue activado, si el default no tiene un break
se ejecutará el siguiente case, hasta encontrar algún break.
2.2. Desarrollar código que implemente todas las formas de bucles,
incluido el uso de for, for mejorado(for-each), do, while, uso de etiquetas
en bucles, break y continue; explicar los valores que toman las variables
contadoras de los bucles durante y después de su ejecución.
❑ La forma basica del bucle for tiene tres partes: declaración y/o inicialización, evaluación
booleana y una expresión para iteración.
❑ Si una variable es incrementada o evaluada dentro del for, esta debe ser declarada
antes del for o dentro de la sección de declaración del for.
❑ Una variable que se declara dentro de un for no puede ser accedida fuera del for.
❑ Se puede inicializar mas de una variable del mismo tipo en la sección de declaraciones
del for, cada inicialización debe estar separada por una coma.
Oscar Vásquez Flores (eoscarvf@gmail.com )
3. Oracle Certified Professional, Java SE 6 Programmer (1Z0-851) - Guía practica 2 de 7.
❑ Un for mejorado (Disponible desde JSE 6.0), tiene dos partes, una declaración (La
variable debe ser compatible con los elementos del array o colección) y una expresión
(array o colección). Se utiliza únicamente para navegar en los arrays y colecciones.
❑ Dentro del bloque del for mejorado la variable que utilizamos en la declaración inicial
contendrá o representara cada elemento del array.
❑ La sección de expresión booleana de los bucles en Java siempre debe retornar un dato
tipo boolean, de lo contrario se genera un error de compilación.
❑ En un bucle do se ingresa por lo menos una vez al cuerpo de este.
2.3. Desarrollar código que haga uso de aserciones, distinguir el uso
apropiado e inapropiado de las aserciones.
Esta parte se desarrolla en otros puntos.
2.4. Desarrollar código que haga uso de excepciones y manejo de
estos(try, catch, finally), declarar métodos y sobre escritura de métodos
que lancen excepciones.
❑ Las excepciones pueden ser de dos tipos: checked (manejadas) y unchecked (no
manejadas).
❑ Las excepciones checked incluyen todos los sub tipos de la clase Exception, pero sin
considerar a las que sean sub tipo de RuntimeException.
❑ Las excepciones checked son sujetas a ser manejadas o declaración de reglas,
cualquier metodo que pueda lanzar una excepción checked (incluyendo métodos que
invocan a otros métodos que puedan lanzar una excepción checked) deberá declara una
excepción usando la clausula throws, o manejar la excepción con un apropiado try/catch.
❑ Los sub tipos de Error o RuntimeException son unckecked, entonces el compilador
no obliga a manejarlas o declarar reglas. Se tiene la libertad de manejarlas si se desea o
declararlas.
❑ Si se usa el bloque opcional finally, este siempre será invocado, sin importar que se
genere una excepción o no, y sin importar que la excepción sea atrapada.
❑ La única forma para que el bloque finally no sea invocado es cuando se tenga un
apagado de la JVM, por ejemplo cuando se invoca a System.exit() dentro del código antes
del bloque finally.
❑ Al invocar a finally no significa que este siempre se completara o ejecutara todo su
bloque, debido a que dentro de este bloque se puede generar una excepción o lanzar una
System.exit() el cual lo interrumpirá.
❑ Una excepción no controlada pasara de metodo a metodo (iniciando por el metodo que
genero la excepción) hasta que alguno de ellos tenga un try/catch que lo controle, de lo
contrario provocara que se termine el programa (Cancelación del JVM).
❑ Se pueden crear excepciones personalizadas extendiendo la clase Exception o algún
sub tipo de esta. Según eso la excepción se considera checked, entonces el compilador
forzara a manejarla o declararla.
Oscar Vásquez Flores (eoscarvf@gmail.com )
4. Oracle Certified Professional, Java SE 6 Programmer (1Z0-851) - Guía practica 2 de 7.
❑ Todos los bloques catch deben ser ordenados del más especificos al más general.
Por ejemplo si se tiene una clausula catch con IOException y otro con Exception, se
deberá colocar primero IOException. De otro forma la excepción tipo IOException será
atrapada por el bloque catch de Exception, el bloque catch atrapa cualquier excepción que
sea un sub tipo del argumento, luego de eso ya no se continua con el siguiente catch, el
compilar generara un error cuando se tenga clausulas que nunca serán alcanzadas.
2.5. Reconocer el efecto de que se genere una excepción en un punto
especificado del código. Notar que la excepción puede ser una excepción
en tiempo de ejecución, una excepción checked o un error.
Esta parte se desarrolla en otros puntos.
2.6. Reconocer situaciones que generen alguna de las siguientes
excepciones: ArrayIndexOutOfBoundsException, ClassCastException,
IllegalArgumentException, IllegalStateException, NullPointerException,
NumberFormatException, AssertionError, ExceptionInInitializerError,
StackOverflowError o NoClassDefFoundError. Entender de esa excepciones
cuales son lanzadas por el JVM, y reconocer situaciones en las cuales las
otras son lanzadas por programacion.
❑ Algunas excepciones son creadas por los programadores otras son creadas por la
JVM.
❑ Las siguientes son ejemplos de excepciones unchecked.
* Sub clases de java.lang.RuntimeException.
Estas excepciones pueden ser lanzadas en programación.
ArrayIndexOutOfBoundsException, indica que un array a sido accedido con un
índice ilegal. El índice es negativo, mayor o igual que el tamaño del array. Es una
sub clase de IndexOutOfBoundsException.
ClassCastException, indica que el código intenta hacer un cast de un objeto hacia
una sub clase de la cual no es instancia, ejemplo el siguiente código genera esa
excepción.
Object x= new Integer(0);
System.out.println((String)x);
IllegalArgumentException, indica que al metodo a sido pasado un argumento
ilegal o inapropiado.
IllegalStateException, Es una señal que un metodo a sido invocado en un tiempo
inapropiado. En otras palabras, el entorno Java o aplicación Java no esta en un
apropiado estado para la operación solicitada.
NullPointerException, Ocurre cuando una aplicación intenta usar un null cuando
un objeto es requerido.
Oscar Vásquez Flores (eoscarvf@gmail.com )
5. Oracle Certified Professional, Java SE 6 Programmer (1Z0-851) - Guía practica 2 de 7.
NumberFormatException, Indica que una aplicación a intentado convertir una
cadena a un tipo numérico, pero la cadena no tiene un formato apropiado. Es una
sub clase de IllegalArgumentException.
* Sub clases de java.lang.Error.
Estas excepciones son lanzadas usualmente solo por el JVM.
AssertionError, Indica que el assertion a fallado.
ExceptionInInitializerError, Indica que una excepción inesperada a ocurrido
durante una inicialización estática. Es una sub clase de LinkageError.
StackOverflowError, Ocurre cuando existe un desbordamiento de pila, en
aplicaciones recursivas por entrar muy profundo, es una sub clase de
VirtualMachineError.
NoClassDefFoundError, Se genera cuando el JVM o el cargador de clases intenta
cargar una definición de clase pero no se encuentra la definición de esta. Es una
sub clase de LinkageError.
Oscar Vásquez Flores (eoscarvf@gmail.com )