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