SlideShare una empresa de Scribd logo
1 de 77
Certificación Java 6
Capítulo 5 - Flujos de control, excepciones y
aserciones
SENTENCIAS IF Y
SWITCH
Cubre el objetivo:
2.1 Develop code that implements an if or switch
statement; and identify legal argument types for these
statements.
Sentencia if - else
 La sentencia básica es:
 El else es algo opcional, no es obligatorio
usarlo.
 Los corchetes también son opcionales, es
importante tener en cuenta que sin los
conchetes solo se ejecuta la línea inmediata
al if En el caso de que x sea menor
que 3, no se ejecuta la línea
inmediata al if, pero las demás si
Sentencia if - else
 Es importante aclarar que aunque
puede ir if sin else, no se puede que
halla un else sin if.
 También se puede usar un else if para
ahorrar líneas y simplificar el código
Expresiones legales para las
sentencias if
 Siempre en un if debe evaluarse un
booleano, ya sea una asignación, una
comparación o un método
 Suponiendo que trueInt vale 1, y falseInt vale
0, entonces:
Sentencia Resultado
if (trueInt) Ilegal, el if no puede evaluar un int
if (trueInt == true)
if (falseInt == false)
Ilegal, trueInt y falseInt no es
boolean, no se pueden comparar
if (1) 1 no es booleano, es ilegal
if (trueInt == 1)
if (falseInt == 0)
TrueInt es entero y vale 1, son
iguales, el resultado es true, y es
legal
Asignaciones en un if
 En un if se pueden usar asignaciones, pero solo si se
usa una variable booleana (o el wrapper Boolean), y el
resultado siempre es true, por lo tanto siempre entra
dentro de la sentencia.
La sentencia compila, porque
boo es booleano, en el if boo se
le asigna a true, y se ejecuta el
bloque del if.
La sentencia no compila, porque
x es int, se necesita solo boolean
La sentencia switch
 La forma básica del switch es:
 El switch solo puede evaluar expresiones de tipo
char, byte, short, int y Enum. La expresión no compila si
se usa un tipo de variable diferente inclusive long, float
y double. Conclusión la expresión debe ser compatible
con int o un Enum.
 Por otro lado el valor del case debe ser una constante
en tiempo de ejecución, esto significa que solo se
pueden usar constantes o variables final que tienen
asignadas un valor. a es una constante que vale 1,
por lo tanto compila en este
punto
b es una variable que aunque es final
no esta inicializada como constante,
por lo tanto aquí no compila y arroja
error
La sentencia switch
 También hay que tener en cuenta el
alcance de una variable.
 Por otro lado no pueden existir dos casos
con el mismo valor
 En los switch se pueden usar
wrappers y manejar outboxing
Aunque g es byte y es válido por el
switch, el compilador sabe que 128 es
mayor que el tamaño máximo de una
variable byte, y arroja error de compilación
En este punto se presenta un error de
compilación, porque el caso 80 ya se
presentó, esta repetido
La sentencia switch
 Cuando se usa un case la única forma
de detener la sentencia es con un
break, si no existe el sistema sigue
ejecutando los otros casos hasta
terminar el switch
Como no hay un break entonces se
ejecutan todos los casos después del
green, el resulado es:
Green blue done
La sentencia switch
 Por último, se puede decir que el caso
default no va de último
obligatoriamente:
CICLOS E ITERACIONES
Cubre el objetivo
2.2 Develop code that implements all forms of loops and
iterators, including the use offor, the enhanced for loop (for-
each), do, while, labels, break, and continue; and explainthe values taken
by loop counter variables during and after loop execution.
Uso del ciclo while
 La forma básica es:
 En el while se maneja la misma
filosofía que se explicó en la sentencia
if. Solo se pueden manejar booleanos
Sentencia Explicación
int x = 1;
while (x) { }
No compila porque x no es booleano es
entero
int x = 1;
while (x = 5) { }
No compila, para que funcione x debe
ser booleabo
while (x == 5) { } Es valido, es una prueba de igualdad
while (true) { } Compila, se usa un booleano, el
problema es que el ciclo nunca termina
El cliclo while
 En el ciclo while solo se pueden usar
variables que sean declaradas
previamente
Esto es un error de compilación porque
fuera que se esta evaluando un entero y
no un booleano, se esta declarando dentro
del mismo while
El ciclo do
 Este ciclo es igual al while si no que la
evaluación se hasta hasta el final del
bloque, por lo tanto siempre
entra, ejecuta el bloque y después
evalúa el resultado
 Al final de la sentencia (después del
while), siempre debe haber un punto y
El bloque siempre se ejecuta por
lo menos una vez, en este caso
imprime Inside loop, y luego se
da cuenta que es falso y no
ejecuta más.
El ciclo for básico
 El for básico esta compuesto de tres
partes: La declaración e inicialización
de variables, la expresión booleana y
la condición de iteración.
 Estas tres secciones están separadas
por puntos y comas.
 Se pueden declarar e inicializar varias
variables del mismo tipo, y se separan
con comas
El ciclo for básico
 Es importante ponerle atención al
alcance de las variables de los for.
 En la sección de condicionales solo se
puede usar una sola condición.
El alcance de la variable x es solo
para el for, por lo tanto existe un
error de compilación, porque se
usa después de los corchetes
Sentencia Explicación
for (int x = 0; ((((x < 10) && (y-- > 2)) | x
== 3)); x++) { }
Solo existe una sola condición, es algo
compleja pero es solo una, por lo tanto
compila
for (int x = 0; (x > 5), (y < 2); x++) { } Existen dos condiciones diferentes, no
compila
El ciclo for básico
 La última sección es una acción que se
ejecuta en cada ciclo, no es necesario
que sea un booleano ni que evalué una
expresión
 Los for requieren las tres secciones, asi
se usen o no, por ejemploEste ciclo for tiene las tres
secciones, aunque no las
declaran, en este caso se
vuelve un ciclo infinito
La sentencia compila, y se
ejecuta sin ningún
problema, el resultado es
iterate
iterate
El for básico
 El ciclo for puede tener varias
declaraciones en la primera
sección, para la segunda sección solo
se puede usar una sola condicional, y
en la tercera varias condicionales
Declaración de varias
variables de un mismo tipo
Una sola condicional
compuesta
Se manejan dos
condicionales separadas
por comas
El for avanzado
 Existe un for especializado para los
arrays y las colecciones.
 La expresión esta compuesta de dos
partes:
◦ La declaración: La variable es nueva, y debe
ser compatible con los tipos de elementos
que componen el arreglo, y es al que se le
asignan los elementos dentro del ciclo.
◦ La expresión: Indica el array que se quiere
Este for simplificado
permite recorrer la
colección
El for avanzado
 De acuerdo a lo siguiente:
int x;
long x2;
Long [] La = {4L, 5L, 6L};
long [] la = {7L, 8L, 9L};
int [][] twoDee = {{1,2,3}, {4,5,6}, {7,8,9}};
String [] sNums = {"one", "two", "three"};
Animal [] animals = {new Dog(), new Cat()};
Usos legales Usos ilegales
for(long y : la ) ;
for(long lp : La) ;
for(int[] n : twoDee) ;
for(int n2 : twoDee[2]) ;
for(String s : sNums) ;
for(Object o : sNums) ;
for(Animal a : animals) ;
for(x2 : la) ;
for(int x2 : twoDee) ;
for(int x3 : la) ;
for(Dog d : animals) ;
Break, return y continue
 Existen formas para romper el ciclo, y se puede hacer
de varias formas, cada una tiene un alcance y un
comportamiento distinto.
 Break: Esta sentencia detiene inmediatamente la
ejecución del ciclo y continua en la línea inmediata
después del bloque. Esta sentencia se puede usar en
ciclos y en switch
 Continue: Esta sentencia solo se puede usar en los
ciclos, y sirve para detener una iteración, es decir
detiene el ciclo actual y continua con la siguiente
iteración.
 Return: Esta instrucción si hace parte de los métodos
más que de los ciclos, y sirve para ponerle fin a un
método como tal, si va dentro del ciclo, pues lo termina
con método y todo, a su vez también retorna un valor o
variable al método invocador.
Break, return y continue
 Comportamiento dentro de ciclos anónimos:
◦ Tanto el break como el continue tienen un
comportamiento normal en este tipo de ciclos ya
que es donde se da más común
Normalmente el ciclo se ejecutaría
infinitamente pero en este caso se
ejecuta una sola vez pues la
sentencia break rompe el ciclo
En este caso pues no
termina el ciclo sino lo que
hace es detener la
iteración y continuar en la
siguiente.
Break, return y continue
 Sentencias marcadas:
◦ En java se puede colocar justo antes de iniciar el
ciclo una marca o label el cual sirve de bandera
para que el break o el continue puedan
ejecutarse al ciclo correspondiente
Es importante tener en cuenta que cuando se hace el
continue y la marca el sistema ya no tiene en cuenta
los for si no que se remite directamente al for de la
marca en este caso el primero
Break, return y continue
 Sentencias marcadas:
En este caso al igual con el anterior el sistema no tiene en
cuenta el ciclo que esta ejecutando sino el que corresponde a
la marca es decir el segundo for
MANEJO DE
EXCEPCIONESCubre los objetivos:
2.4 Develop code that makes use of exceptions and exception handling
clauses (try, catch, finally), and declares methods and overriding methods that
throw exceptions.
2.5 Recognize the effect of an exception arising at a specific point in a code
fragment. Note that the exception may be a runtime exception, a checked
exception, or an error.
Uso del try-catch
El principal elemento para controlar las excepciones
es mediante un conjunto de sentencias llamadas try
catch, por medio de este mecanismo cada vez que
ocurra una excepción o anomalía en el bloque try se
direcciona directamente al bloque catch.
Uso del finally
 El finally es un bloque que va después del catch, y se hace
para poder ejecutar un bloque de código al final del
procedimiento, sin importar si se presentó una excepción o
no, basicamente lo que se busca es poder tener una forma
de colocar los objetos en un estado que no desestabilice la
aplicación después como cerrar un socket, quitar una
conexión a una base de datos, cerrar un archivo.
 Importante, el bloque finally siempre va al final, y
siempre se ejecuta, ya sea después del bloque try o
después del bloque catch, pero siempre se ejecuta
Formas legales de bloque try
catch finally
 El bloque siempre tiene que ir en el
orden try - catch - finaly
 También puede ir try - finally
Formas ilegales de bloque try
catch finally
 No se puede poner un bloque solo, tiene
que ir el try con catch o con finally
 Tampoco se puede colocar nada entre
los bloques estos deben ser
consecutivos, uno después de otro sin
interrupciones
Propagación de excepciones
 Las excepciones una vez se producen y
si no están controladas entonces se
propagan al método que las llamó y así
sucesivamente hasta llegar al método
principal o main.
Árbol de herencia de las
excepciones
 Todos los errores
y excepciones
heredan de la
clase throwble.
 La diferencia
entre error y
excepcion es que
los errores son
situaciones que
con errores de
programación y
que no se pueden
controlar, como
un
outOfMemoryErro
r
Árbol de herencia de las
excepciones
 Una excepción por el contrario si se
puede controlar y se da en su mayoría
porque existe una condición que no
permite la completa ejecución de la
aplicación.
 De throwable se puede destacar un
método que se llama
printStackTrace, este método permite
imprimir toda la pila de excepción e
indica que excepción se disparó
Manejando el nivel de herencia
en las excepciones
 Como ya dijimos las excepciones manejan una
herencia, por lo tanto el catch que se maneja en
lo posible es mejor usando la excepción
específica que se quiere tratar, de esta forma se
le dará un uso más potente a el catch y las
aplicaciones serán mucho más completas.
La funcionalidad
es la mismaMejor usar esta opción
más especializada y
versatil
Manejo de múltiples
excepciones
 Como ya vimos es mejor usar un catch
especializado para cada tipo de
excepción, sin embargo cuando una
excepción sucede java primero busca un
catch con la excepción específica, si no
la encuentra entonces busca la padre y
así sucesivamente.
 De acuerdo a esto hay que tener en
cuenta que no se puede poner nunca
una excepción padre y luego una hija en
el orden de los catch, si no es así
entonces se tiene un error de
compilación.
Manejo de múltiples catch
Este caso se
presenta siempre
que no encuentre
el archivo
especifico
Este caso
se da
cuando no
puede
escribir o
leer en el
archivo
especificado
Manejo de múltiples catch
 Por otro lado es importante
especificar que IOException es
padre de FileNotFoundException,
por lo tanto primero va el hijo y de
últimas el padre, al Contrario es
error de compilación
Uso de throws
 La instrucción throws va en el encabezado
del método y sirve para listar las excepciones
que el método puede lanzar.
 La sentencia anterior indica que el método
puede lanzar las excepciones MyException1
y MyException2, al tener esta instrucción ya
no es necesario tratarlas con un try-catch si
no que se propaga esta función al método
que lo llama.
 Cada método debe manejar sus propias
excepciones ya sea por medio de un catch o
por medio de un throws
Uso de throws
 Para efectos de compilación deben
ser tratadas todas las excepciones
que no derivan de
java.lang.RuntimeException.
EOFException no deriva de
RuntimeException por lo tanto toca
Controlarla, en este caso se hace con
Throws
NullPointerException deriva de
runtimeException, por lo tanto
No es necesario para el compilador
Que este controlada y no arroja
error de compilación
Uso de excepciones propias
 Declarar una excepción propia es muy
sencillo, lo que hay que hacer es primero
declarar una clase que herede de
Exception.
 Luego en el método principal, lanzarla
en con ayuda de throw y throws, o
manejarla con ayuda de try - catch
Uso del throw en el catch
 Uno puede usar un throw en un catch en vez
de manejar la excepción ahí mismo, en este
caso hay que tener en cunta que toca
también declararla usando en throws en la
declaración del método, y si existe un finally
este también se ejecuta.
Error de compilación, debe usarse un throws en la
declaración del método para solucionarse
EXCEPCIONES
COMUNES Y ERRORES2.6 Recognize situations that will result in any of the following
being thrown:
ArrayIndexOutOfBoundsException, ClassCastException, IllegalA
rgumentException, IllegalStateException, NullPointerException,
NumberFormatException, AssertionError, ExceptionInInitializerE
rror, StackOverflowError, or NoClassDefFoundError. Understand
which of these are thrown by the virtual machine and recognize
situations in which others should be thrown programmatically.
¿De dónde vienen las
excepciones?
De acuerdo al objetivo de esta sección es
importante entender que causa una excepción o
un error y de donde estas son. Para el propósito
del examen vamos a definir dos categorías:
•Excepciones JVM: Estas excepciones y errores
son únicamente lanzados por el Java Virtual
Machine
•Excepciones de programación: Estas
excepciones y errores son exclusivamente
lanzadas por el desarrollados y el programa.
Excepciones JVM
 NullPointerException: Esta excepción
se dispara cuando se trata de acceder
un objeto que no ha sido
inicializado, y que apunta a null.
Aquí hay un nullPointerException,
porque S sigue siendo Null, y un valor
null no puede indicar un tamaño
Excepciones JVM
 StackOverFlowError: Es un error muy común
cuando hay un método recursivo, pero sobre
todo se presenta cuando se acaba la
memoria RAM para el procesamiento, java
no puede responde y sale esta excepción.
Esta recursividad se ejecutará tantas
veces que va a ocupar toda la memoria
RAM al final saldrá el error
StackOverFlowError
Excepciones de
programación
 NumberFormatException: Este error
sale cuando se trata de hacer un
casteo de formato y el valor no puede
convertirse a número
Lista de errores y
excepcionesExcepción Descripción Lazado por
ArrayIndexOutOfBound
sException
(Capítulo 3:
“Asignaciones”
Excepción que sale cuando se esta
tratando de entrar a una posición de un
array que no existe
JVM
ClassCastException
(Chapter 2, “Orientación
a objetos")
Excepción que ocurre cuando se esta
tratando de castear un objeto que no
cumple la regla “Es un”
JVM
IllegalArgumentExcepti
on(Este capítulo)
Se arroja cuando un método recibe un
argumento formateado de una forma
diferente a la que se espera
Program
ación
IllegalStateException
(Chapter 6, “Formato")
Lanzado cuando el estado del entorno no
esta óptimo para la operación que se trata
de hacer, por ejemplo una clase Scanner
que esta cerrada
Program
ación
NullPointerException
(Chapter 3,
"Assignments")
Lanzado cuando se trata de acceder un
objeto cuyo valor es nulo
JVM
Lista de errores y
excepciones
Excepción Descripción Lanzado por
NumberForma
tException
(Chapter 3,
"Assignments")
Esta excepción sale cuando el sistema recibe
un String y va a pasarlo a número pero el
valor no es posible convertirlo
Programación
AssertionError
(This chapter)
Se arroja cuando la evaluación de la sentencia
arroja false
Programación
ExceptionInIni
tializerError
(Chapter 3,
"Assignments")
Lanzado cuando se trata de inicializar una
variable estática o un bloque de inicialización
JVM
StackOverflow
Error
(This chapter)
Típicamente lanzado cuando los recursos de
la máquina están copados
JVM
NoClassDefFo
undError
(Chapter 10,
"Development")
Lanzada cuando java no encuentra una clase
que necesita, causada por un error en la línea
de comandos, la ruta del classpath o falta el
archivo .class
JVM
TRABAJANDO CON
MECANISMOS DE
ASERCIÓN2.3 Develop code that makes use of assertions, and
distinguish appropriate from inappropriate uses of
assertions.
Aserciones
Las aserciones son mécanismos que usa java para poder hacer
validaciones en tiempo de desarrollo pero nunca en tiempo de
ejecución, sin necesidad de usar debug, excepciones o colocar líneas
de validación
Por ejemplo al usar una aserción con el fin de validar si un número es
negativo uno generalmente hace esto
Con las aserciones este código se ve reducido a esto:
Además otra ventaja que tiene es que si uno tiene la posibilidad de
deshabilitar las aserciones, por lo tanto se puede quitar la validación
sin necesidad de modificar el código
Funcionamiento de las
aserciones
 La filosofía de las aserciones es muy
simple, deben estar evaluando una expresión, en
caso que la expresión sea verdadera pues no
hay lio en la ejecución, pero si es falsa entonces
arroja un AssertionError el cual no puede ser
controlado, por ser error.
 Existen dos formas de programarlas
La diferencia consiste en que en el segundo caso, el mensaje que
está después de los dos puntos sale en la traza del error cuando
se arroja el AssertionError
Reglas de las aserciones
 Las aserciones deben evaluar un booleano,
como un if y si imprime un valor debe ser un
String como un System.out.println
Formas válidas de Assert
Errores inválidas
La palabra assert y las versiones
de java
 Resulta que las aserciones cambian
dependiendo de la versión de java en la
que se esté compilando, de tal forma
que si se usa una versión menor a 1.4 la
palabra assert puede servir para una
aserción o para identificar una
variable, ya de 1.4 en adelante es una
palabra reservada y no se podrá usar
para identificar variables
javac -source 1.3 OldCode.java P
javac -source 1.4 NotQuiteSoOldCode.java O
La palabra assert y las versiones
de java
 El siguiente cuadro muestra el comportamiento dependiendo
de la versión de java con la que se esta compilando
Habilitando aserciones
 Las aserciones por definición estan
deshabilitadas y si uno quiere que se
ejecuten entonces toca habilitarlas
manualmente.
 Para habiliarlo toca en la consola
escribir lo siguiente
Deshabilitando aserciones
 Las aserciones se pueden deshabiliar
de nuevo una vez estén activas, este
proceso es igual de sencillo que las
habilitaciones, para esto en la consola
se debe escribir algo así:
Activación selectiva de
aserciones
 Hay tres modalidades de habilitar las
aserciones:
◦ Sin argumentos: Poner java –ea habilita las
aserciones en todas las clases de la aplicación
◦ Con el nombre de un paquete: Poner algo como
java -ea:com.foo... Habilita el paquete foo.
◦ Con una clase: Se habilita o se desabilita con
una clase en específico.
 También existe la posibilidad de combinar
estas tres opciones, por ejemplo:
 Aquí se puede ver que habilita todas clases
(parte azul), menos la clase Foo (parte roja)
Activación selectiva de
aserciones
Uso apropiado de las
aserciones
 No es bueno validar parámetros de
entrada
◦ No es bueno simplemente porque en una
aplicación muy grande otras personas
pueden estar usando un método público,
al habilitarle y colocarle aserciones puede
afectar la ejecución de otro proceso
distinto al de uno, es recomendable
lanzar excepciones propias o
IllegalArgumentException.
Uso apropiado de las
asersiones
 Validar si vienen valores en los
parámetros de entrada del main.
◦ En el main puede venir con parámetros de
entrada, al igual que el caso anterior es
mejor no validarlo con aserciones si no mejor
usar excepciones y control de variables.
 No usar aserciones para validar casos
que en teoría se supone que nunca
sucederían
◦ Por lo general estos casos es mejor
controlarlos con una variable o una
excepción pues si se llegaran a disparar la
excepción no nos da suficiente información
de que fue lo que ocurrió
Uso apropiado de las
aserciones
 No usar aserciones que puedan
ocasionar efectos colaterales
◦ Es mejor no usar métodos dentro de las
aserciones, pues recuerde que las
aserciones no siempre se ejecutan, solo
cuando están habilitadas, por lo tanto esto
puede generar inconvenientes para la
ejecución del programador
Lo más seguro es que
no siempre se ejecute
el método modifyThings
y esto puede generar
problemas para la ejecución
de la aplicación
PREGUNTAS DE
PRÁCTICA
Pregunta 1
Que es cierto:
 A. Only one compilation will succeed
 B. Exactly two compilations will succeed
 C. Exactly three compilations will succeed
 D. All four compilations will succeed
 E. No compiler warnings will be produced
 F. At least one compiler warning will be produced
Dado dos clases Y estas líneas de comando
Respuesta 1
 Aquí hay que recordar que con java 3
e inferior la palabra asert no es
reservada y puede usarse como
identificador de variable, con 4 en
adelante es reservada y debe validar
una condición.
 Por lo tanto
 Dejando la opción B y F como válidas
P
O
O
P
Pregunta 2
Cuál es el resultado?
 A. -
 B. -c
 C. -c2
 D. -2c
 E. -c22b
 F. -2c2b
 G. -2c2bc
 H. Compilation fails
Respuesta 2
 La respuesta
es –c, por la
tanto la opción
correcta es B
Pregunta 3
 Dada la siguiente línea
try { int x = Integer.parseInt("two"); }
¿Cuál es el catch más apropiado?
 A. ClassCastException
 B. IllegalStateException
 C. NumberFormatException
 D. IllegalArgumentException
 E. ExceptionInInitializerError
 F. ArrayIndexOutOfBoundsException
Respuesta 3
 ClassCastExcepction no es porque no se estan
casteando clases sino primitivas, entonces no es
la A.
 IllegalStateStatement: Tampoco es porque no
estamos manejando variables estáticas
 NumberFormatException: Si es, la conversión de
formatos primitivos númericos se debe validar
con esta excepción, la respuesta correcta es la
C.
 IlegalArgumentException: No es un método, esta
opción se descarta
 ExceptionInInicializater Error: Tampoco es un
error de inicialización.
 ArrayIndexOfBoundsException: No hay arrays ni
arreglos en el código.
Pregunta 4
Qué es cierto?
 A. It is appropriate to use assertions to
validate arguments to methods marked public
 B. It is appropriate to catch and handle
assertion errors
 C. It is NOT appropriate to use assertions to
validate command-line arguments
 D. It is appropriate to use assertions to
generate alerts when you reach code that
should not be reachable
 E. It is NOT appropriate for assertions to
change a program’s state
Respuesta 4
 A es incorrecta, recuerde que es una
mala práctica validar variables de
entrada con aserciones en un método
público
 B es incorrecta, no es apropiado
manejar errores
 C es correcta, no es bueno validar
argumentos de la línea de entrada
 D es correcta, es la funcionalidad básica
de una aserción.
 E es correcta, no se debe usar una
aserción, si este genera un cambio en la
lógica del la aplicación.
Pregunta 5
¿Cuál opción insertada en la línea 4 funciona?
 A. for(int y : x) {
 B. for(x : int y) {
 C. int y = 0; for(y : x) {
 D. for(int y=0, z=0; z<x.length; z++) { y = x[z];
 E. for(int y=0, int z=0; z<x.length; z++) { y =
x[z];
 F. int y = 0; for(int z=0; z<x.length; z++) { y =
x[z];
Respuesta 5
 A es una opción válida para un for
simplificado
 B es incorrecta está mal declarada la
sentencia for
 C es incorrecta, es obligatorio que y este
declarado dentro del for
 D es correcta, es un for normal con
doble declaración
 E es incorrecta porque esta mal
declarada z
 F es correcta, es un for normal.
Pregunta 6
¿Cuál es el resultado?
 A. -ic of
 B. -mf of
 C. -mc mf
 D. -ic mf of
 E. -ic mc mf of
 F. -ic mc of mf
 G. Compilation fails
Respuesta 6
Entonces el
resultado de
tanto thwow y
catch sería:
-ic mc mf of
La respuesta
es la E
Pregunta 7
 What is the result? (Choose all that apply.)
 A. Compilation succeeds
 B. Compilation fails due to an error on line 8
 C. Compilation fails due to an error on line 10
 D. Compilation fails due to an error on line 12
 E. Compilation fails due to an error on line 14
Respuesta 7
 La A no es, existen problemas de
compilación
 La B tampoco es pues la sobreescritura esta
bien, subsubexception es hija de
subexception.
 La C si es, al tener que el método lanza
Exception se genera un error de
compilación, pues el thows solo permite que
sea la misma excepción o una hija
 La D es incorrecta pues esta es una
sobrecarga y no hay problema por el throws
 La E tampoco es pues un método sin throws
también es una forma válida de sobescritura
Pregunta 8
¿Cuál es el resultado?
 A. 9 10 d
 B. 8 9 10 d
 C. 9 10 10 d
 D. 9 10 10 d 13
 E. 8 9 10 10 d 13
 F. 8 9 10 9 10 10 d 13
 G. Compilation fails
Respuesta 8

Más contenido relacionado

La actualidad más candente

Tutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicasTutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicas
Michele André
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
Oscar V
 
Matlab 2
Matlab 2Matlab 2
Matlab 2
jmh700
 
Lenguajes de programacion c
Lenguajes de programacion c Lenguajes de programacion c
Lenguajes de programacion c
charnisch
 

La actualidad más candente (20)

Iteraciones y decisiones en c++
Iteraciones y decisiones en c++Iteraciones y decisiones en c++
Iteraciones y decisiones en c++
 
Tutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicasTutorial algoritmo estructuras ciclicas
Tutorial algoritmo estructuras ciclicas
 
Operadores C SHARP
Operadores C SHARPOperadores C SHARP
Operadores C SHARP
 
Estructura repetitiva for y while
Estructura repetitiva for y whileEstructura repetitiva for y while
Estructura repetitiva for y while
 
Contadores y Acumuladores
Contadores y AcumuladoresContadores y Acumuladores
Contadores y Acumuladores
 
Http estructa
Http estructaHttp estructa
Http estructa
 
Estructuras de control en Visual Basic
Estructuras de control en Visual BasicEstructuras de control en Visual Basic
Estructuras de control en Visual Basic
 
Estructuras repetitivas for y while
Estructuras repetitivas for y whileEstructuras repetitivas for y while
Estructuras repetitivas for y while
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
 
Matlab 2
Matlab 2Matlab 2
Matlab 2
 
Automatas de estado finito
Automatas de estado finitoAutomatas de estado finito
Automatas de estado finito
 
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
 
Estructura de un programa
Estructura de un programaEstructura de un programa
Estructura de un programa
 
Estructuras anidadas
Estructuras anidadasEstructuras anidadas
Estructuras anidadas
 
Tutorial de JFLAP
Tutorial de JFLAPTutorial de JFLAP
Tutorial de JFLAP
 
Control de flujo
Control de flujoControl de flujo
Control de flujo
 
Instrucciones de control en c++
Instrucciones de control en c++Instrucciones de control en c++
Instrucciones de control en c++
 
Lenguajes de programacion c
Lenguajes de programacion c Lenguajes de programacion c
Lenguajes de programacion c
 
Los Ciclos en los Diagramas de Flujo
Los Ciclos en los Diagramas de FlujoLos Ciclos en los Diagramas de Flujo
Los Ciclos en los Diagramas de Flujo
 
Logica difusa grupo 2
Logica difusa grupo 2Logica difusa grupo 2
Logica difusa grupo 2
 

Destacado

Java excepciones
Java excepcionesJava excepciones
Java excepciones
ricardo_79
 
86535551 ciclo-de-vida-jsf
86535551 ciclo-de-vida-jsf86535551 ciclo-de-vida-jsf
86535551 ciclo-de-vida-jsf
pablo lopez
 
ProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y CiclosProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y Ciclos
Andres Garcia
 
Java script(diapositivas)
Java script(diapositivas) Java script(diapositivas)
Java script(diapositivas)
Roberto Mejia
 

Destacado (19)

Java excepciones
Java excepcionesJava excepciones
Java excepciones
 
excepciones en java
excepciones en javaexcepciones en java
excepciones en java
 
Ciclos
CiclosCiclos
Ciclos
 
Programacion en java
Programacion en javaProgramacion en java
Programacion en java
 
Flujo de un programa Java (I)
Flujo de un programa Java (I)Flujo de un programa Java (I)
Flujo de un programa Java (I)
 
While do while
While do whileWhile do while
While do while
 
Modulo 1
Modulo 1Modulo 1
Modulo 1
 
Programación III (Java) - 08 threads
Programación III (Java) - 08 threadsProgramación III (Java) - 08 threads
Programación III (Java) - 08 threads
 
Fase 5 ciclo for
Fase 5 ciclo forFase 5 ciclo for
Fase 5 ciclo for
 
86535551 ciclo-de-vida-jsf
86535551 ciclo-de-vida-jsf86535551 ciclo-de-vida-jsf
86535551 ciclo-de-vida-jsf
 
Clojure: Java y Lisp, unidos
Clojure: Java y Lisp, unidosClojure: Java y Lisp, unidos
Clojure: Java y Lisp, unidos
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
 
Ciclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - AlgoritmiaCiclos Java - NetsBeans - Algoritmia
Ciclos Java - NetsBeans - Algoritmia
 
Curso java
Curso javaCurso java
Curso java
 
Sentencias de control en java
Sentencias de control en javaSentencias de control en java
Sentencias de control en java
 
ProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y CiclosProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y Ciclos
 
Captura de datos y mensajes Interfaz - JAVA
Captura de datos y mensajes Interfaz - JAVACaptura de datos y mensajes Interfaz - JAVA
Captura de datos y mensajes Interfaz - JAVA
 
Java script(diapositivas)
Java script(diapositivas) Java script(diapositivas)
Java script(diapositivas)
 
Java netbeans-clase-001
Java netbeans-clase-001Java netbeans-clase-001
Java netbeans-clase-001
 

Similar a Certificación java 6 cap 5

Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Java
quesada_diego
 
Semana 05 - Estructuras repetitivas (1).pptx
Semana 05 - Estructuras repetitivas (1).pptxSemana 05 - Estructuras repetitivas (1).pptx
Semana 05 - Estructuras repetitivas (1).pptx
Carlos Díaz Sánchez
 
Clase5 controldeflujo
Clase5 controldeflujoClase5 controldeflujo
Clase5 controldeflujo
jorg_marq
 
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNTEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
Anyeni Garay
 
3 java sesin 3 pps
3 java sesin 3 pps3 java sesin 3 pps
3 java sesin 3 pps
ajplbe
 
Do while, for y foreach
Do while, for y foreachDo while, for y foreach
Do while, for y foreach
RogDer
 

Similar a Certificación java 6 cap 5 (20)

Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Java
 
Arreglos Expresiones y Control de Flujo
Arreglos Expresiones y Control de FlujoArreglos Expresiones y Control de Flujo
Arreglos Expresiones y Control de Flujo
 
Semana 05 - Estructuras repetitivas (1).pptx
Semana 05 - Estructuras repetitivas (1).pptxSemana 05 - Estructuras repetitivas (1).pptx
Semana 05 - Estructuras repetitivas (1).pptx
 
2ª unidad de algoritmo
2ª unidad de algoritmo2ª unidad de algoritmo
2ª unidad de algoritmo
 
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
 
métodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control javamétodos procedimimientos estructuras de control java
métodos procedimimientos estructuras de control java
 
Instrucciones de control repetitivas
Instrucciones de control repetitivasInstrucciones de control repetitivas
Instrucciones de control repetitivas
 
Estructura de control repetitiva
Estructura de control repetitivaEstructura de control repetitiva
Estructura de control repetitiva
 
Programación básica
Programación básicaProgramación básica
Programación básica
 
Clase5 controldeflujo
Clase5 controldeflujoClase5 controldeflujo
Clase5 controldeflujo
 
Las estructuras de control
Las estructuras de controlLas estructuras de control
Las estructuras de control
 
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓNTEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
TEMA Nº 8: CONTROL DE EJECUCIÓN Y MANTENIMIENTO DE SESIÓN
 
Excel - Variables y condicionales
Excel - Variables y condicionalesExcel - Variables y condicionales
Excel - Variables y condicionales
 
3 java sesin 3 pps
3 java sesin 3 pps3 java sesin 3 pps
3 java sesin 3 pps
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Presentación introducción a Matlab y su estructura
Presentación introducción a Matlab y su estructuraPresentación introducción a Matlab y su estructura
Presentación introducción a Matlab y su estructura
 
programacion iterativa trabajo
programacion iterativa trabajoprogramacion iterativa trabajo
programacion iterativa trabajo
 
Estructuras selectivas.pptx
Estructuras selectivas.pptxEstructuras selectivas.pptx
Estructuras selectivas.pptx
 
Estructuras selectivas.pptx
Estructuras selectivas.pptxEstructuras selectivas.pptx
Estructuras selectivas.pptx
 
Do while, for y foreach
Do while, for y foreachDo while, for y foreach
Do while, for y foreach
 

Último

Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficios
JonathanCovena1
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
JonathanCovena1
 

Último (20)

Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperio
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficios
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circular
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 

Certificación java 6 cap 5

  • 1. Certificación Java 6 Capítulo 5 - Flujos de control, excepciones y aserciones
  • 2. SENTENCIAS IF Y SWITCH Cubre el objetivo: 2.1 Develop code that implements an if or switch statement; and identify legal argument types for these statements.
  • 3. Sentencia if - else  La sentencia básica es:  El else es algo opcional, no es obligatorio usarlo.  Los corchetes también son opcionales, es importante tener en cuenta que sin los conchetes solo se ejecuta la línea inmediata al if En el caso de que x sea menor que 3, no se ejecuta la línea inmediata al if, pero las demás si
  • 4. Sentencia if - else  Es importante aclarar que aunque puede ir if sin else, no se puede que halla un else sin if.  También se puede usar un else if para ahorrar líneas y simplificar el código
  • 5. Expresiones legales para las sentencias if  Siempre en un if debe evaluarse un booleano, ya sea una asignación, una comparación o un método  Suponiendo que trueInt vale 1, y falseInt vale 0, entonces: Sentencia Resultado if (trueInt) Ilegal, el if no puede evaluar un int if (trueInt == true) if (falseInt == false) Ilegal, trueInt y falseInt no es boolean, no se pueden comparar if (1) 1 no es booleano, es ilegal if (trueInt == 1) if (falseInt == 0) TrueInt es entero y vale 1, son iguales, el resultado es true, y es legal
  • 6. Asignaciones en un if  En un if se pueden usar asignaciones, pero solo si se usa una variable booleana (o el wrapper Boolean), y el resultado siempre es true, por lo tanto siempre entra dentro de la sentencia. La sentencia compila, porque boo es booleano, en el if boo se le asigna a true, y se ejecuta el bloque del if. La sentencia no compila, porque x es int, se necesita solo boolean
  • 7. La sentencia switch  La forma básica del switch es:  El switch solo puede evaluar expresiones de tipo char, byte, short, int y Enum. La expresión no compila si se usa un tipo de variable diferente inclusive long, float y double. Conclusión la expresión debe ser compatible con int o un Enum.  Por otro lado el valor del case debe ser una constante en tiempo de ejecución, esto significa que solo se pueden usar constantes o variables final que tienen asignadas un valor. a es una constante que vale 1, por lo tanto compila en este punto b es una variable que aunque es final no esta inicializada como constante, por lo tanto aquí no compila y arroja error
  • 8. La sentencia switch  También hay que tener en cuenta el alcance de una variable.  Por otro lado no pueden existir dos casos con el mismo valor  En los switch se pueden usar wrappers y manejar outboxing Aunque g es byte y es válido por el switch, el compilador sabe que 128 es mayor que el tamaño máximo de una variable byte, y arroja error de compilación En este punto se presenta un error de compilación, porque el caso 80 ya se presentó, esta repetido
  • 9. La sentencia switch  Cuando se usa un case la única forma de detener la sentencia es con un break, si no existe el sistema sigue ejecutando los otros casos hasta terminar el switch Como no hay un break entonces se ejecutan todos los casos después del green, el resulado es: Green blue done
  • 10. La sentencia switch  Por último, se puede decir que el caso default no va de último obligatoriamente:
  • 11. CICLOS E ITERACIONES Cubre el objetivo 2.2 Develop code that implements all forms of loops and iterators, including the use offor, the enhanced for loop (for- each), do, while, labels, break, and continue; and explainthe values taken by loop counter variables during and after loop execution.
  • 12. Uso del ciclo while  La forma básica es:  En el while se maneja la misma filosofía que se explicó en la sentencia if. Solo se pueden manejar booleanos Sentencia Explicación int x = 1; while (x) { } No compila porque x no es booleano es entero int x = 1; while (x = 5) { } No compila, para que funcione x debe ser booleabo while (x == 5) { } Es valido, es una prueba de igualdad while (true) { } Compila, se usa un booleano, el problema es que el ciclo nunca termina
  • 13. El cliclo while  En el ciclo while solo se pueden usar variables que sean declaradas previamente Esto es un error de compilación porque fuera que se esta evaluando un entero y no un booleano, se esta declarando dentro del mismo while
  • 14. El ciclo do  Este ciclo es igual al while si no que la evaluación se hasta hasta el final del bloque, por lo tanto siempre entra, ejecuta el bloque y después evalúa el resultado  Al final de la sentencia (después del while), siempre debe haber un punto y El bloque siempre se ejecuta por lo menos una vez, en este caso imprime Inside loop, y luego se da cuenta que es falso y no ejecuta más.
  • 15. El ciclo for básico  El for básico esta compuesto de tres partes: La declaración e inicialización de variables, la expresión booleana y la condición de iteración.  Estas tres secciones están separadas por puntos y comas.  Se pueden declarar e inicializar varias variables del mismo tipo, y se separan con comas
  • 16. El ciclo for básico  Es importante ponerle atención al alcance de las variables de los for.  En la sección de condicionales solo se puede usar una sola condición. El alcance de la variable x es solo para el for, por lo tanto existe un error de compilación, porque se usa después de los corchetes Sentencia Explicación for (int x = 0; ((((x < 10) && (y-- > 2)) | x == 3)); x++) { } Solo existe una sola condición, es algo compleja pero es solo una, por lo tanto compila for (int x = 0; (x > 5), (y < 2); x++) { } Existen dos condiciones diferentes, no compila
  • 17. El ciclo for básico  La última sección es una acción que se ejecuta en cada ciclo, no es necesario que sea un booleano ni que evalué una expresión  Los for requieren las tres secciones, asi se usen o no, por ejemploEste ciclo for tiene las tres secciones, aunque no las declaran, en este caso se vuelve un ciclo infinito La sentencia compila, y se ejecuta sin ningún problema, el resultado es iterate iterate
  • 18. El for básico  El ciclo for puede tener varias declaraciones en la primera sección, para la segunda sección solo se puede usar una sola condicional, y en la tercera varias condicionales Declaración de varias variables de un mismo tipo Una sola condicional compuesta Se manejan dos condicionales separadas por comas
  • 19. El for avanzado  Existe un for especializado para los arrays y las colecciones.  La expresión esta compuesta de dos partes: ◦ La declaración: La variable es nueva, y debe ser compatible con los tipos de elementos que componen el arreglo, y es al que se le asignan los elementos dentro del ciclo. ◦ La expresión: Indica el array que se quiere Este for simplificado permite recorrer la colección
  • 20. El for avanzado  De acuerdo a lo siguiente: int x; long x2; Long [] La = {4L, 5L, 6L}; long [] la = {7L, 8L, 9L}; int [][] twoDee = {{1,2,3}, {4,5,6}, {7,8,9}}; String [] sNums = {"one", "two", "three"}; Animal [] animals = {new Dog(), new Cat()}; Usos legales Usos ilegales for(long y : la ) ; for(long lp : La) ; for(int[] n : twoDee) ; for(int n2 : twoDee[2]) ; for(String s : sNums) ; for(Object o : sNums) ; for(Animal a : animals) ; for(x2 : la) ; for(int x2 : twoDee) ; for(int x3 : la) ; for(Dog d : animals) ;
  • 21. Break, return y continue  Existen formas para romper el ciclo, y se puede hacer de varias formas, cada una tiene un alcance y un comportamiento distinto.  Break: Esta sentencia detiene inmediatamente la ejecución del ciclo y continua en la línea inmediata después del bloque. Esta sentencia se puede usar en ciclos y en switch  Continue: Esta sentencia solo se puede usar en los ciclos, y sirve para detener una iteración, es decir detiene el ciclo actual y continua con la siguiente iteración.  Return: Esta instrucción si hace parte de los métodos más que de los ciclos, y sirve para ponerle fin a un método como tal, si va dentro del ciclo, pues lo termina con método y todo, a su vez también retorna un valor o variable al método invocador.
  • 22. Break, return y continue  Comportamiento dentro de ciclos anónimos: ◦ Tanto el break como el continue tienen un comportamiento normal en este tipo de ciclos ya que es donde se da más común Normalmente el ciclo se ejecutaría infinitamente pero en este caso se ejecuta una sola vez pues la sentencia break rompe el ciclo En este caso pues no termina el ciclo sino lo que hace es detener la iteración y continuar en la siguiente.
  • 23. Break, return y continue  Sentencias marcadas: ◦ En java se puede colocar justo antes de iniciar el ciclo una marca o label el cual sirve de bandera para que el break o el continue puedan ejecutarse al ciclo correspondiente Es importante tener en cuenta que cuando se hace el continue y la marca el sistema ya no tiene en cuenta los for si no que se remite directamente al for de la marca en este caso el primero
  • 24. Break, return y continue  Sentencias marcadas: En este caso al igual con el anterior el sistema no tiene en cuenta el ciclo que esta ejecutando sino el que corresponde a la marca es decir el segundo for
  • 25. MANEJO DE EXCEPCIONESCubre los objetivos: 2.4 Develop code that makes use of exceptions and exception handling clauses (try, catch, finally), and declares methods and overriding methods that throw exceptions. 2.5 Recognize the effect of an exception arising at a specific point in a code fragment. Note that the exception may be a runtime exception, a checked exception, or an error.
  • 26. Uso del try-catch El principal elemento para controlar las excepciones es mediante un conjunto de sentencias llamadas try catch, por medio de este mecanismo cada vez que ocurra una excepción o anomalía en el bloque try se direcciona directamente al bloque catch.
  • 27. Uso del finally  El finally es un bloque que va después del catch, y se hace para poder ejecutar un bloque de código al final del procedimiento, sin importar si se presentó una excepción o no, basicamente lo que se busca es poder tener una forma de colocar los objetos en un estado que no desestabilice la aplicación después como cerrar un socket, quitar una conexión a una base de datos, cerrar un archivo.  Importante, el bloque finally siempre va al final, y siempre se ejecuta, ya sea después del bloque try o después del bloque catch, pero siempre se ejecuta
  • 28. Formas legales de bloque try catch finally  El bloque siempre tiene que ir en el orden try - catch - finaly  También puede ir try - finally
  • 29. Formas ilegales de bloque try catch finally  No se puede poner un bloque solo, tiene que ir el try con catch o con finally  Tampoco se puede colocar nada entre los bloques estos deben ser consecutivos, uno después de otro sin interrupciones
  • 30. Propagación de excepciones  Las excepciones una vez se producen y si no están controladas entonces se propagan al método que las llamó y así sucesivamente hasta llegar al método principal o main.
  • 31. Árbol de herencia de las excepciones  Todos los errores y excepciones heredan de la clase throwble.  La diferencia entre error y excepcion es que los errores son situaciones que con errores de programación y que no se pueden controlar, como un outOfMemoryErro r
  • 32. Árbol de herencia de las excepciones  Una excepción por el contrario si se puede controlar y se da en su mayoría porque existe una condición que no permite la completa ejecución de la aplicación.  De throwable se puede destacar un método que se llama printStackTrace, este método permite imprimir toda la pila de excepción e indica que excepción se disparó
  • 33. Manejando el nivel de herencia en las excepciones  Como ya dijimos las excepciones manejan una herencia, por lo tanto el catch que se maneja en lo posible es mejor usando la excepción específica que se quiere tratar, de esta forma se le dará un uso más potente a el catch y las aplicaciones serán mucho más completas. La funcionalidad es la mismaMejor usar esta opción más especializada y versatil
  • 34. Manejo de múltiples excepciones  Como ya vimos es mejor usar un catch especializado para cada tipo de excepción, sin embargo cuando una excepción sucede java primero busca un catch con la excepción específica, si no la encuentra entonces busca la padre y así sucesivamente.  De acuerdo a esto hay que tener en cuenta que no se puede poner nunca una excepción padre y luego una hija en el orden de los catch, si no es así entonces se tiene un error de compilación.
  • 35. Manejo de múltiples catch Este caso se presenta siempre que no encuentre el archivo especifico Este caso se da cuando no puede escribir o leer en el archivo especificado
  • 36. Manejo de múltiples catch  Por otro lado es importante especificar que IOException es padre de FileNotFoundException, por lo tanto primero va el hijo y de últimas el padre, al Contrario es error de compilación
  • 37. Uso de throws  La instrucción throws va en el encabezado del método y sirve para listar las excepciones que el método puede lanzar.  La sentencia anterior indica que el método puede lanzar las excepciones MyException1 y MyException2, al tener esta instrucción ya no es necesario tratarlas con un try-catch si no que se propaga esta función al método que lo llama.  Cada método debe manejar sus propias excepciones ya sea por medio de un catch o por medio de un throws
  • 38. Uso de throws  Para efectos de compilación deben ser tratadas todas las excepciones que no derivan de java.lang.RuntimeException. EOFException no deriva de RuntimeException por lo tanto toca Controlarla, en este caso se hace con Throws NullPointerException deriva de runtimeException, por lo tanto No es necesario para el compilador Que este controlada y no arroja error de compilación
  • 39. Uso de excepciones propias  Declarar una excepción propia es muy sencillo, lo que hay que hacer es primero declarar una clase que herede de Exception.  Luego en el método principal, lanzarla en con ayuda de throw y throws, o manejarla con ayuda de try - catch
  • 40. Uso del throw en el catch  Uno puede usar un throw en un catch en vez de manejar la excepción ahí mismo, en este caso hay que tener en cunta que toca también declararla usando en throws en la declaración del método, y si existe un finally este también se ejecuta. Error de compilación, debe usarse un throws en la declaración del método para solucionarse
  • 41. EXCEPCIONES COMUNES Y ERRORES2.6 Recognize situations that will result in any of the following being thrown: ArrayIndexOutOfBoundsException, ClassCastException, IllegalA rgumentException, IllegalStateException, NullPointerException, NumberFormatException, AssertionError, ExceptionInInitializerE rror, StackOverflowError, or NoClassDefFoundError. Understand which of these are thrown by the virtual machine and recognize situations in which others should be thrown programmatically.
  • 42. ¿De dónde vienen las excepciones? De acuerdo al objetivo de esta sección es importante entender que causa una excepción o un error y de donde estas son. Para el propósito del examen vamos a definir dos categorías: •Excepciones JVM: Estas excepciones y errores son únicamente lanzados por el Java Virtual Machine •Excepciones de programación: Estas excepciones y errores son exclusivamente lanzadas por el desarrollados y el programa.
  • 43. Excepciones JVM  NullPointerException: Esta excepción se dispara cuando se trata de acceder un objeto que no ha sido inicializado, y que apunta a null. Aquí hay un nullPointerException, porque S sigue siendo Null, y un valor null no puede indicar un tamaño
  • 44. Excepciones JVM  StackOverFlowError: Es un error muy común cuando hay un método recursivo, pero sobre todo se presenta cuando se acaba la memoria RAM para el procesamiento, java no puede responde y sale esta excepción. Esta recursividad se ejecutará tantas veces que va a ocupar toda la memoria RAM al final saldrá el error StackOverFlowError
  • 45. Excepciones de programación  NumberFormatException: Este error sale cuando se trata de hacer un casteo de formato y el valor no puede convertirse a número
  • 46. Lista de errores y excepcionesExcepción Descripción Lazado por ArrayIndexOutOfBound sException (Capítulo 3: “Asignaciones” Excepción que sale cuando se esta tratando de entrar a una posición de un array que no existe JVM ClassCastException (Chapter 2, “Orientación a objetos") Excepción que ocurre cuando se esta tratando de castear un objeto que no cumple la regla “Es un” JVM IllegalArgumentExcepti on(Este capítulo) Se arroja cuando un método recibe un argumento formateado de una forma diferente a la que se espera Program ación IllegalStateException (Chapter 6, “Formato") Lanzado cuando el estado del entorno no esta óptimo para la operación que se trata de hacer, por ejemplo una clase Scanner que esta cerrada Program ación NullPointerException (Chapter 3, "Assignments") Lanzado cuando se trata de acceder un objeto cuyo valor es nulo JVM
  • 47. Lista de errores y excepciones Excepción Descripción Lanzado por NumberForma tException (Chapter 3, "Assignments") Esta excepción sale cuando el sistema recibe un String y va a pasarlo a número pero el valor no es posible convertirlo Programación AssertionError (This chapter) Se arroja cuando la evaluación de la sentencia arroja false Programación ExceptionInIni tializerError (Chapter 3, "Assignments") Lanzado cuando se trata de inicializar una variable estática o un bloque de inicialización JVM StackOverflow Error (This chapter) Típicamente lanzado cuando los recursos de la máquina están copados JVM NoClassDefFo undError (Chapter 10, "Development") Lanzada cuando java no encuentra una clase que necesita, causada por un error en la línea de comandos, la ruta del classpath o falta el archivo .class JVM
  • 48. TRABAJANDO CON MECANISMOS DE ASERCIÓN2.3 Develop code that makes use of assertions, and distinguish appropriate from inappropriate uses of assertions.
  • 49. Aserciones Las aserciones son mécanismos que usa java para poder hacer validaciones en tiempo de desarrollo pero nunca en tiempo de ejecución, sin necesidad de usar debug, excepciones o colocar líneas de validación Por ejemplo al usar una aserción con el fin de validar si un número es negativo uno generalmente hace esto Con las aserciones este código se ve reducido a esto: Además otra ventaja que tiene es que si uno tiene la posibilidad de deshabilitar las aserciones, por lo tanto se puede quitar la validación sin necesidad de modificar el código
  • 50. Funcionamiento de las aserciones  La filosofía de las aserciones es muy simple, deben estar evaluando una expresión, en caso que la expresión sea verdadera pues no hay lio en la ejecución, pero si es falsa entonces arroja un AssertionError el cual no puede ser controlado, por ser error.  Existen dos formas de programarlas La diferencia consiste en que en el segundo caso, el mensaje que está después de los dos puntos sale en la traza del error cuando se arroja el AssertionError
  • 51. Reglas de las aserciones  Las aserciones deben evaluar un booleano, como un if y si imprime un valor debe ser un String como un System.out.println Formas válidas de Assert Errores inválidas
  • 52. La palabra assert y las versiones de java  Resulta que las aserciones cambian dependiendo de la versión de java en la que se esté compilando, de tal forma que si se usa una versión menor a 1.4 la palabra assert puede servir para una aserción o para identificar una variable, ya de 1.4 en adelante es una palabra reservada y no se podrá usar para identificar variables javac -source 1.3 OldCode.java P javac -source 1.4 NotQuiteSoOldCode.java O
  • 53. La palabra assert y las versiones de java  El siguiente cuadro muestra el comportamiento dependiendo de la versión de java con la que se esta compilando
  • 54. Habilitando aserciones  Las aserciones por definición estan deshabilitadas y si uno quiere que se ejecuten entonces toca habilitarlas manualmente.  Para habiliarlo toca en la consola escribir lo siguiente
  • 55. Deshabilitando aserciones  Las aserciones se pueden deshabiliar de nuevo una vez estén activas, este proceso es igual de sencillo que las habilitaciones, para esto en la consola se debe escribir algo así:
  • 56. Activación selectiva de aserciones  Hay tres modalidades de habilitar las aserciones: ◦ Sin argumentos: Poner java –ea habilita las aserciones en todas las clases de la aplicación ◦ Con el nombre de un paquete: Poner algo como java -ea:com.foo... Habilita el paquete foo. ◦ Con una clase: Se habilita o se desabilita con una clase en específico.  También existe la posibilidad de combinar estas tres opciones, por ejemplo:  Aquí se puede ver que habilita todas clases (parte azul), menos la clase Foo (parte roja)
  • 58. Uso apropiado de las aserciones  No es bueno validar parámetros de entrada ◦ No es bueno simplemente porque en una aplicación muy grande otras personas pueden estar usando un método público, al habilitarle y colocarle aserciones puede afectar la ejecución de otro proceso distinto al de uno, es recomendable lanzar excepciones propias o IllegalArgumentException.
  • 59. Uso apropiado de las asersiones  Validar si vienen valores en los parámetros de entrada del main. ◦ En el main puede venir con parámetros de entrada, al igual que el caso anterior es mejor no validarlo con aserciones si no mejor usar excepciones y control de variables.  No usar aserciones para validar casos que en teoría se supone que nunca sucederían ◦ Por lo general estos casos es mejor controlarlos con una variable o una excepción pues si se llegaran a disparar la excepción no nos da suficiente información de que fue lo que ocurrió
  • 60. Uso apropiado de las aserciones  No usar aserciones que puedan ocasionar efectos colaterales ◦ Es mejor no usar métodos dentro de las aserciones, pues recuerde que las aserciones no siempre se ejecutan, solo cuando están habilitadas, por lo tanto esto puede generar inconvenientes para la ejecución del programador Lo más seguro es que no siempre se ejecute el método modifyThings y esto puede generar problemas para la ejecución de la aplicación
  • 62. Pregunta 1 Que es cierto:  A. Only one compilation will succeed  B. Exactly two compilations will succeed  C. Exactly three compilations will succeed  D. All four compilations will succeed  E. No compiler warnings will be produced  F. At least one compiler warning will be produced Dado dos clases Y estas líneas de comando
  • 63. Respuesta 1  Aquí hay que recordar que con java 3 e inferior la palabra asert no es reservada y puede usarse como identificador de variable, con 4 en adelante es reservada y debe validar una condición.  Por lo tanto  Dejando la opción B y F como válidas P O O P
  • 64. Pregunta 2 Cuál es el resultado?  A. -  B. -c  C. -c2  D. -2c  E. -c22b  F. -2c2b  G. -2c2bc  H. Compilation fails
  • 65. Respuesta 2  La respuesta es –c, por la tanto la opción correcta es B
  • 66. Pregunta 3  Dada la siguiente línea try { int x = Integer.parseInt("two"); } ¿Cuál es el catch más apropiado?  A. ClassCastException  B. IllegalStateException  C. NumberFormatException  D. IllegalArgumentException  E. ExceptionInInitializerError  F. ArrayIndexOutOfBoundsException
  • 67. Respuesta 3  ClassCastExcepction no es porque no se estan casteando clases sino primitivas, entonces no es la A.  IllegalStateStatement: Tampoco es porque no estamos manejando variables estáticas  NumberFormatException: Si es, la conversión de formatos primitivos númericos se debe validar con esta excepción, la respuesta correcta es la C.  IlegalArgumentException: No es un método, esta opción se descarta  ExceptionInInicializater Error: Tampoco es un error de inicialización.  ArrayIndexOfBoundsException: No hay arrays ni arreglos en el código.
  • 68. Pregunta 4 Qué es cierto?  A. It is appropriate to use assertions to validate arguments to methods marked public  B. It is appropriate to catch and handle assertion errors  C. It is NOT appropriate to use assertions to validate command-line arguments  D. It is appropriate to use assertions to generate alerts when you reach code that should not be reachable  E. It is NOT appropriate for assertions to change a program’s state
  • 69. Respuesta 4  A es incorrecta, recuerde que es una mala práctica validar variables de entrada con aserciones en un método público  B es incorrecta, no es apropiado manejar errores  C es correcta, no es bueno validar argumentos de la línea de entrada  D es correcta, es la funcionalidad básica de una aserción.  E es correcta, no se debe usar una aserción, si este genera un cambio en la lógica del la aplicación.
  • 70. Pregunta 5 ¿Cuál opción insertada en la línea 4 funciona?  A. for(int y : x) {  B. for(x : int y) {  C. int y = 0; for(y : x) {  D. for(int y=0, z=0; z<x.length; z++) { y = x[z];  E. for(int y=0, int z=0; z<x.length; z++) { y = x[z];  F. int y = 0; for(int z=0; z<x.length; z++) { y = x[z];
  • 71. Respuesta 5  A es una opción válida para un for simplificado  B es incorrecta está mal declarada la sentencia for  C es incorrecta, es obligatorio que y este declarado dentro del for  D es correcta, es un for normal con doble declaración  E es incorrecta porque esta mal declarada z  F es correcta, es un for normal.
  • 72. Pregunta 6 ¿Cuál es el resultado?  A. -ic of  B. -mf of  C. -mc mf  D. -ic mf of  E. -ic mc mf of  F. -ic mc of mf  G. Compilation fails
  • 73. Respuesta 6 Entonces el resultado de tanto thwow y catch sería: -ic mc mf of La respuesta es la E
  • 74. Pregunta 7  What is the result? (Choose all that apply.)  A. Compilation succeeds  B. Compilation fails due to an error on line 8  C. Compilation fails due to an error on line 10  D. Compilation fails due to an error on line 12  E. Compilation fails due to an error on line 14
  • 75. Respuesta 7  La A no es, existen problemas de compilación  La B tampoco es pues la sobreescritura esta bien, subsubexception es hija de subexception.  La C si es, al tener que el método lanza Exception se genera un error de compilación, pues el thows solo permite que sea la misma excepción o una hija  La D es incorrecta pues esta es una sobrecarga y no hay problema por el throws  La E tampoco es pues un método sin throws también es una forma válida de sobescritura
  • 76. Pregunta 8 ¿Cuál es el resultado?  A. 9 10 d  B. 8 9 10 d  C. 9 10 10 d  D. 9 10 10 d 13  E. 8 9 10 10 d 13  F. 8 9 10 9 10 10 d 13  G. Compilation fails