1. Introducción
    1. Historia
      1. 1990: Diseñado inicialmente por James Gosling
      2. 1992: nombre "Oak", Duke es la mascota
      3. 1995: cambio de nombre a "Java", lanzamiento oficial de Sun
      4. 1996: JDK 1.0
      5. 1997: JDK 1.1
      6. 1998: J2SE 1.2
      7. 2000: J2SE 1.3
      8. 2002: J2SE 1.4
      9. 2004: J2SE 5.0
      10. 2006: Java es open source, JavaSE 6
      11. 2009: Oracle compra Sun
    2. Ediciones
      1. JavaEE
        1. Enterprise
      2. JavaSE
        1. Standard
      3. JavaME
        1. Mobile
    3. Principios
      1. Simple, orientado a objetos
      2. Robusto y seguro
      3. Arquitectura neutra y portable
      4. Alta performance
      5. Interpretado, multithreaded, dinámico
    4. Arquitectura
      1. Java Virtual Machine JVM
        1. Programa nativo
        2. Plataforma específica
        3. Ejecuta bytecode
          1. Generado por el compilador Java
          2. .class
        4. Verificador de bytecode
      2. Java Runtime Environment JRE
        1. Necesaria para ejecutar
      3. Java Development Kit JDK
        1. Necesaria para desarrollar
      4. Multiplataforma
      5. Garbage collector
    5. Compilación
      1. HolaMundo.java
      2. Se compila con javac
      3. HolaMundo.class
      4. Se ejecuta en la JVM
    6. IDE
      1. Eclipse
      2. NetBeans
      3. IntelliJ Idea
      4. JDeveloper
  2. Sintaxis
    1. Comentarios
      1. Una línea //
      2. Multilínea /* */
      3. Javadoc /** */
    2. Identificadores
      1. Case sensitive
      2. Comienza con letra, '_', '$'
      3. Incluye letras o números
      4. Java Keywords
    3. Variables
      1. Primitivos
        1. Entero
          1. byte
          2. short
          3. int
          4. long
        2. Real
          1. float
          2. double
        3. Booleano
          1. boolean
        4. Caracter
          1. char
    4. Operadores
      1. Aritméticos
        1. + - * / % ++ --
      2. Lógicos
        1. && || !
      3. Relacionales
        1. == != < > <= >=
      4. Asignación
        1. = += -= *= /=
      5. Ternario
        1. ?:
    5. Estructuras de control
      1. if / else
      2. switch / case
      3. while
      4. do while
      5. for
      6. break / continue
    6. Constantes
      1. public static final
    7. Arreglos
      1. Arreglos de objetos
      2. Arreglos de primitivos
    8. Strings
      1. String cadena = "cadena";
      2. Concatenar con +
  3. Programación orientada a objetos
    1. Beneficios
      1. Encapsulamiento
      2. Reutilización
      3. Bajo acoplamiento
      4. Alta cohesión
    2. Objeto
      1. Instanciar un objeto: MiObjeto obj = new MiObjeto()
      2. Utilizar un objeto: obj.metodo();
      3. Finalizando un objeto
        1. Llamado por el GC
        2. finalize()
    3. Clase
      1. atributos
      2. métodos
        1. Overloading
          1. Reutilizar el nombre del método
          2. Diferente argumentos
        2. Overriding
          1. Sobreescribir el método
          2. Mismos argumentos
      3. constructores
      4. Declaración una clase: class
    4. Interface
      1. Solo declara métodos
      2. No se puede instanciar
      3. Declarar una interface: interface
      4. Implementar una interface: implements
    5. Modificadores
      1. Acceso
        1. public
        2. protected
        3. default
        4. private
      2. Otros
        1. final
          1. No puede ser modificado
          2. Aplica
          3. Clases
          4. Variables
          5. Métodos
        2. abstract
          1. No puede ser instanciado
          2. Aplica
          3. Clases
          4. Métodos
        3. static
          1. Asociado a la clase, no a la instancia
          2. Aplica
          3. Variables
          4. Métodos
        4. native
          1. Su implementación está fuera de la JVM
          2. Aplica a métodos
        5. transient
          1. No se persiste
          2. Aplica a variables
        6. volatile
          1. No es de uso común
          2. Las variables no pueden ser modificadas de forma asíncrona
          3. Aplica a variables
        7. synchronized
          1. Controla el acceso concurrente en hilos
    6. Herencia
      1. Reutilizar atributos y métodos de la clase padre
      2. Heredar una clase: extends
    7. Encapsulación
      1. Ocultar información
      2. getters/setters
    8. Polimorfismo
      1. Un objeto se comporta de diferentes formas
  4. Paquetes
    1. Características
      1. Evita la colisión de nombres
      2. Organización de clases
      3. Correspondencia con estructura de directorios
    2. Uso
      1. Creación: package net.lshimokawa.mipaquete;
      2. Importar clases de otros paquetes: import
    3. Convención de nombres
      1. Dominio invertido
      2. Paquete base
      3. net.lshimokawa.paquete
  5. Excepciones
    1. Introducción
      1. Evento que ocurre dentro de la ejecución del programa
      2. Interrumpe el flujo normal de ejecución
      3. Separa el flujo normal del programa del tratamiento de excepciones
      4. Se pueden propagar las excepciones
    2. Uso de excepciones
      1. try
        1. Bloque de código que requiere tratamiento de excepciones
      2. catch
        1. Tratamiento de la excepción
        2. Excepciones específicas a genéricas
      3. finally
        1. Se ejecuta siempre
        2. Sea flujo normal o una excepción
      4. Propagación
        1. throw
        2. throws
    3. Tipos
      1. Checked
        1. Errores recuperables
        2. Heredan de Exception
        3. El compilador te obliga a tratarlas
        4. Bloque try-catch o throws
      2. Unchecked
        1. Errores no recuperables
        2. Heredan de RuntimeException
        3. El compilador no te obliga a tratarlas
    4. Buenas prácticas
      1. Cerrar los recursos, uso de finally
      2. No usar excepciones en control de flujo
      3. No suprimir ni ignorar excepciones
      4. No atrapar excepciones generales
      5. Loggear las excepciones solo una vez
  6. JDBC
    1. Introducción
      1. Java Database Connectivity
      2. API que permite ejecutar operaciones sobre BD
      3. Colección de interfaces
      4. Paquete: java.sql
    2. Drivers
      1. Independientes de la BD
      2. Tipos
        1. JDBC-ODBC bridge
          1. Open Database Connectivity de Microsoft
        2. Native-API partly Java technology-enabled driver
        3. Net-protocol fully Java technology-enabled driver
        4. Native-protocol fully Java technology-enabled driver
    3. API
      1. DriverManager
        1. Carga el driver de BD
      2. Connection
        1. Abre la conexión
        2. Cierra la conexión
        3. Commit
        4. Rollback
      3. Statement
        1. Prepara y ejecuta los querys
        2. PreparedStatement
        3. CallableStatement
          1. Para StoredProcedures
      4. ResultSet
        1. Almacena el resultado del query
        2. Itera sobre los resultados
  7. Threads
    1. Introducción
      1. Similar a un proceso real
      2. Flujo secuencial de control
      3. Considerado light, se ejecuta dentro del contexto del programa
      4. Propia pila de ejecución y contador de programa
    2. Implementación
      1. Heredar la clase Thread
      2. Implementar la interface Runnable
      3. Implementar el método run()
    3. Estados
      1. Thread states
    4. Thread scheduler
      1. Depende de la JVM
      2. Usa su propio algoritmo
      3. No es determinable
    5. Thread priorities
      1. Entero del 1 al 10
      2. Preferencia de la prioridad más alta
      3. Utilizado por el thread scheduler
      4. Prioridad por defecto: 5
    6. Sincronizando
      1. El método
        1. Utilizar el modificador synchronized en el método
      2. Bloque
        1. Abrir un bloque con synchronized
  8. Collections Framework
    1. Introducción
      1. Colección: objeto que agrupa varios elementos como una unidad
      2. Consta de
        1. Interfaces
        2. Implementaciones
        3. Algoritmos
    2. Beneficios
      1. Reduce el esfuerzo al programar
      2. Incrementa la performance y calidad
      3. Interoperatibilidad
      4. Reduce el esfuerzo de aprender nuevas APIs
      5. Reduce el esfuero de diseñar nuevas APIs
      6. Reutilización
    3. API
      1. Collection
        1. Set
          1. HashSet
          2. TreeSet
        2. List
          1. ArrayList
          2. LinkedList
      2. Map
        1. TreeMap
        2. HashMap
        3. WeekHashMap
      3. Collections
        1. Utilitario para manejo de colecciones
      4. Arrays
        1. Utilitario para el manejo de arreglos