La expresión entre paréntesis debe evaluarse como un valor lógico
Si la expresión lógica se evalúa como verdadera, el bloque siguiente al if se ejecuta
Si la expresión lógica se evalúa como falsa, el bloque else se ejecuta
El bloque else es opcional
Las llaves no son necesarias en los bloques if o else si su código es una sola instrucción
Un bloque else puede contener una sentencia if
Puede contener instrucciones de asignación que terminan siendo expresiones booleanas
Topic
Sentencia
switch
Topic
La variable a evaluar debe ser compatible con un int, lo que significa que sólo puede ser
byte, short, char, int, Byte, Short, Character, Integer o de tipo enum
Cualquier número de sentencias case puede aparecer
El expresión constante de un case debe ser un valor literal o una variable final
El bloque default es opcional y debe aparecer al final de todas las declaraciones case
Si ninguna de las sentencias case es igual a la expresión, el bloque default se ejecuta
Cuando una sentencia case es verdadera, ninguna otra sentencia case se valida
Todas las sentencias siguientes del case verdadero se ejecutarán hasta que se produzca una
ruptura (break) o se llegue al final de la instrucción switch
switch sobre
un enum
Las sentencia case debe ser uno de los elementos de la enumeración
No se puede utilizar el método ordinal() de la enumeración, sólo se
puede utilizar el nombre del elemento de enum
El elemento de enumeración en la sentencia case no debe ir con el
nombre de la enumeración como prefijo
Topic
Sentencia
for
Es una estructura de control de repetición que es útil para repetir un
bloque de código un número fijo de veces
Sentencia
Básica
Topic
Los dos puntos y comas son necesarias para crear tres secciones:
instrucción de inicialización, expresión lógica, y instrucción de actualización
El paso de inicialización se produce una sola vez al comienzo del bucle
El expresion lógica debe evaluar como verdadero o falso
Las instrucciones de inicialización y actualización puede contener múltiples
sentencias separadas por comas
Cualquier variable declarada en la sección de inicialización son variables
locales que se pueden utilizar únicamente en el bucle for
Las tres secciones de la sentencia for son opcionales. Si no es necesaria
se puede dejar las secciones en blanco
Sentencia
Mejorada
Diseñado para iterar a través de matrices y colecciones
Topic
El tipo de dato del iterador deben ser compatible con el tipo de datos de la colección
El ámbito de aplicación del iterador es el cuerpo del bucle
El número de iteraciones del bucle es igual al tamaño de la colección
La colección debe ser una matriz o un objeto de tipo java.lang.Iterable
Topic
Topic
Sentencia
while
Es una estructura de control de repetición que es útil para repetir un
bloque de código un número indeterminado de veces
Topic
El valor entre paréntesis debe evaluarse como una expresión lógica,
ya sea verdadera o falsa
Si la expresión lógica es verdadera, el cuerpo del bucle se ejecuta y la
expresión lógica se vuelve a comprobar
Si la expresión lógica es falsa, el bucle no se ejecuta y el control salta a la
siguiente instrucción después del final del bucle
El cuerpo del bucle se ejecuta hasta que la expresión lógica sea falsa
No se puede escribir código que no es accesible
Topic
Topic
Sentencia
do
También conocido como bucle do-while
Es una estructura de control de repetición que es útil para repetir un bloque de código
un número indeterminado de veces, pero por lo menos una vez
Topic
El cuerpo del bucle se ejecuta una vez antes de la expresión lógica sea verificada
El valor entre paréntesis debe evaluarse como una expresión lógica, ya sea verdadera o falsa
Si la expresión booleana es verdadera, el cuerpo del bucle se ejecuta de nuevo y
luego dicha expresión se vuelve a verificar
Si la expresión booleana es falsa, el bucle no se ejecuta de nuevo y el control salta a
la siguiente instrucción después del final del bucle
Al igual que un bucle while, el cuerpo del bucle se ejecuta hasta que la expresión lógica sea falsa
No olvidar el punto y coma después de la expresión lógica
Topic
Una variable declarada dentro del bloque de una sentencia do sólo tiene alcance en ese bloque
Topic
Sentencia
break
Transfiere el control fuera de la sentencia que lo encierra
Pueden aparecer dentro de las estructuras: switch, for, while y do
Topic
Una sentencia break puede contener una etiqueta que define la estructura
de control de la cual va a salir
Una sentencia break sin etiqueta termina inmediatamente la estructura
de control que lo encierra
Aseguran que las modificaciones futuras no afectan el uso de la sentencia break
Topic
Topic
Sentencia
continue
Transfiere el control al siguiente punto de continuación del bucle
Transferencia
for
Transfiere el control a la expresión de
actualización de la declaración
while
Transfiere el control a la expresión lógica
do
Transfiere el control a la expresión lógica
Topic
Una sentencia continue puede contener una etiqueta que define la estructura
de control a la cual va a continuar
Una sentencia continue sin etiqueta continua inmediatamente la estructura
de control que lo encierra
Topic
Topic
Assertions
(Afirmaciones)
Es una expresión lógica en ciertos lugares del código en donde
se piensa que algo debe ser siempre cierto
Es insistir en que algo es verdadero y reclamar su afirmacióncon
Permite comprobar errores en el código que de otro modo podrían pasar inadvertidos
Puede colocar afirmaciones en el código para propósitos de depuración y pruebas
y omitirlos cuando el programa está en producción.
Sintaxis
assert boolean_expression;
assert boolean_expression : error_message;
El mensaje de error es opcional y es una cadena que se utiliza en el
mensaje del AssertionError cuando se produce
Si la expresión lógica es verdadera, entonces la afirmación es válida y no pasa
nada. El programa continúa su ejecución en su forma normal
Si la expresión lógica es falsa, entoncesla afirmación no es válida y se lanza un
java.lang.AssertionError, haciendo que el programa termine en dicha línea de código
Por defecto, las afirmaciones son ignoradas por la JVM en tiempo de ejecución
Comandos para
habilitar /deshabilitar
las afirmaciones
Habilita un paquete específico y
deshabilita una clase específica
Habilita TODAS
las afirmaciones
Habilita las afirmaciones
de paquetes específicos
Usos
Invariante
Interno
Cuando se afirma que un valor se encuentra dentro de ciertos límites
assert x < 0;
Invariante
de Clase
Cuando se afirma el estado de un objeto
Suelen estar en los métodos privados que devuelven un valor booleano
Topic
Invariante de
Flujo de Control
Cuando se afirma que una línea de código no puede ser alcanzada
Topic
Condiciones Previas
Cuando se afirma ciertas condiciones antes de que un método sea invocado
Post Condiciones
Cuando se afirma que se cumplen ciertas condiciones después
de que un método se ejecuta correctamente
Las afirmaciones no deben contener ninguna lógica de negocio que afecta el resultado del código
Ejemplo: assert ++x > 10; // NO es un buen diseño
No utilizar afirmaciones para comprobar que los argumentos pasados a un método sean válidos,
en su lugar utilizar una IllegalArgumentException
Excepciones
Una excepción es un evento que se produce durante la ejecución de un
programa y que interrumpe su flujo normal
Es un objeto que un método "lanza" hacia abajo de la pila de llamada del método
Como el objeto de la excepción viaja por la pila de la llamada a los métodos,
cualquier método en el camino tiene la oportunidad de detectar la excepción
Sentencia
try
Es un bloque de código que contiene una o más instrucciones que
pueden lanzar una excepción
Puede ser seguida por una o más cláusulas de captura, también
llamadas controladores de excepciones
Topic
Una cláusula catch tiene exactamente un parámetro que es igual al tipo de
excepción que está tratando de capturar
La Clase
Throwable
La clase java.lang.Throwable es la clase padre de todos los objetos que se
pueden lanzar (ya sea por la JVM o utilizando la palabra reservada throw)
Sólo los objetos de tipo Throwable o subclases de Throwable pueden
aparecer en una cláusula catch
public void printStackTrace()
Imprime el seguimiento de la pila para System.err
public void printStackTrace(PrintStream s)
Imprime el seguimiento de la pila en el
PrintStream especificado
public void printStackTrace(PrintWriter s)
Imprime el seguimiento de la pila en el
PrintWriter especificado
public String getMessage()
Devuelve el mensaje de detalle del objeto Throwable
El mensaje se establece en el constructor de Throwable
public String toString()
Devuelve una breve descripción del objeto Throwable
que incluye el tipo de excepción y su mensaje
Claúsula
catch
Se comprueban en el orden en que aparecen
Si una excepción se recoge en una cláusula catch, los bloques de
captura posteriores se omiten
Las declaraciones inválidas try-catch se dan cuando existen claúsulas catch
inalcanzables, esto sucede cuando una excepción hereda de otra
Topic
Categorías
Excepciones en
Tiempo de Ejecución
Si es una clase java.lang.RuntimeException o una
subclase de RuntimeException
Excepciones
Comprobadas
Si es una clase hija de java.lang.Exception, pero
no una clase hija de RuntimeException
El controlador exige controlar estas excepciones
Formas de
Controlar
Mediante un bloque try que proporciona su controlador
correspondiente (catch) para la excepción
El método que contiene la instrucción, debe declarar la excepción
en la cláusula throws de la declaración de método
Errores
Si es una clase hija de java.lang.Error
Se asocia a problemas que surgen fuera de su aplicación,
y normalmente no trata de recuperarse de los errores
Topic
throws
Un método utiliza la palabra reservada throws para indicar
que podría lanzar una excepción
Topic
Bloque
finally
Una sentencia try puede ir seguido de un bloque finally
Se ejecuta después de un try, independientemente de si se
produce una excepción dentro del bloque try
Un bloque finally sólo puede aparecer después de un sentencia try
y debe aparecer al final de las cláusulas catch
Topic
Permite realizar tareas de limpieza independientemente de lo
que sucede durante el bloque try
Una sentencia try puede contener un bloque finally sin ninguna cláusula catch
Java API
(Exceptions y Errors)
ArrayIndexOutOfBoundsException
Cuando se intenta acceder a un elemento de la matriz
que se encuentra fuera de los límites de la matriz
Topic
ClassCastException
Cuando un objeto se convierte en un tipo de dato del cual
el objeto no es una instancia
El compilador a menudo ayuda a evitar esta excepción cuando
no puede convertir un objeto a cierto tipo de dato
Topic
Topic
IllegalArgumentException
Se produce mediante programación si un argumento pasado a un método
no es válido, donde la validez se basa en la lógica de negocio de la
aplicación y el comportamiento específico del método
Topic
IllegalStateException
Se produce mediante programación cuando se invoca un método y el programa
no está en un estado apropiado para que el método pueda llevar a cabo su tarea
Esto ocurre normalmente cuando se invoca un método fuera de secuencia, o tal
vez cuando a un método sólo se le permite ser invocado una vez y se realiza un
intento para invocar de nuevo
Topic
NullPointerException
Se produce cuando una referencia nula se utiliza en situaciones
en donde se requiere a un objeto real
Topic
NumberFormatException
Se produce cuando una cadena se analiza en un valor numérico
y la cadena no tiene el formato adecuado
La excepción es lanzada por los métodos valueOf y parsing de
todas las clases contenedoras de java.lang
Topic
AssertionError
Se lanza para indicar un assert (afirmación) ha fallado
No se puede lanzar mediante programación
La JVM lanza una cuando los afirmaciones están habilitadas
y la expresión lógica de una sentencia assert es falsa
ExceptionInitializerError
Se produce cuando hay una excepción inesperada durante un
inicializador estático o al inicializar de una variable estática
Topic
StackOverFlowError
Se produce cuando la llamada al método genera un desbordamientos
de pila de la memoria (heap memory), por lo general debido a la
recursividad infinita de un método
Topic
NoClassDefFoundError
Se produce cuando el cargador de clases de la JVM no
puede encontrar la definición de una clase