-
Sentencia
if
- Topic
- 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
- java -enableassertions paquete.clase
- java -ea paquete.clase
- java -ea:paquete_habilitado... paquete.clase
- java -ea:... paquete.clase
-
java -ea:paquete.clase_habilitada paquete.clase
- Habilita una clase
específica
-
java -ea:paquete_habilitado...
-da:paquete.clase_deshabilitada paquete.clase
- 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