1. Características
1.1. Simple y Orientado a Objetos
1.2. Robusto y seguro
1.3. Interpretado, neutro de la arquitectura y portable
1.4. Distribuido y alto desempeño
1.5. Multi-hebra
1.6. Dinámico
2. Entorno
2.1. Comentarios en Java
2.1.1. //TEXTO
2.1.2. /*TEXTO*/
2.1.3. /**TEXTO*/
2.2. Método main
2.2.1. El interpretador lo invoca al ejecutarse una aplicación Java
2.2.2. Tiene un argumento único: Arreglo de Strings
2.3. Permite acceder a recursos del Sistema: con el paquete System (API Java)
2.4. Applets
2.4.1. Uso normal es en un Web Browser
2.4.2. Diferente Modelo de Ejecución
2.5. Importación de Clases y Paquetes con la palabra reservada import. Ejm: import.java.applet*
2.6. Definición de subclases con la palabra reservada extends
3. Funcionalidad
3.1. Esencial
3.2. Interfaces Gráficas
3.3. Comunicación en la Red y Applets
3.4. Internacionalización
3.5. Seguridad
3.6. Threads(hebras)
3.7. Componentes de Software (JavaBean)
3.8. Serialización de Objetos
3.9. Acceso uniforme a Base de Datos y sus relaciones
4. Conceptos Básicos
4.1. Conjunto de Caracteres: Utiliza Unicode, 16 bits
4.2. Identificadores: Case sensitive y deben inicar con una letra
4.3. Palabras reservadas: abstract, continue, for, new, switch, assert, default, goto, package, synchronized, boolean, do, if, private, this, break, double, implements, protected, throw, byte, else, import, public, throws, case, enum, instanceof, return, transient, catch, extends, int, short, try, char, final, interface, static, void, class, finally, long, strictfp, volatile, const, float, native, super, while.
5. Variables, Constantes y Tipos Primitivos
5.1. Variable debe ser declarada antes de su uso
5.2. Variables esta nombrada por un identificador
5.3. Tipos de Datos
5.3.1. Primitivos: Entero, real, booleano y caracter
5.3.1.1. byte: Entero de un byte 8 bits, C-2 short: Entero corto 16 bits, C-2 int: Entero 32 bits, C-2 long: Entro largo 64 bits, C-2 float: Punto flotante de precisión simple 32 bits, IEEE 754 double: Punto flotante de precisión doble 64 bits, IEEE 754 char: Caracter 16 bits, Unicode boolean: Booleano (true y false)
5.3.2. Referencias: Arreglo, clase e interfaz
5.4. No soporta punteros
5.5. Declaración de Variables: [modificador]tipo de variable {,variable}*
6. Operadores
6.1. Conversión de Tipo
6.1.1. Implícita: Es automática
6.1.2. Explícita: Se denomina cast. Ejm: long d=(long) i;
6.2. Operadores Ariméticos
6.2.1. Suma + Resta - Multiplicación * División / Residuo o módulo %
6.3. Operadores de Incremento y Decremento
6.3.1. variable++ y variable-- aunque existen en forma prefija y postfija
6.4. Operadores Relacionales
6.4.1. Mayor que > Mayor o igual que >= Menor que < Menor o igual que <= Igual que == Diferente !=
6.5. Operadores al Bit
6.5.1. AND al bit & OR inclusivo al bit | OR exclusivo al bit ^ Corrimiento a la izquierda << (rellenando con 0) Corrrimiento a la derecha >> (rellenando con el signo) Corrimiento a la derecha >>> (rellenando con 0)
6.6. Operador Condicional
6.6.1. La forma valor = test ? exp1 : exp2;
6.7. Operador de Asignación
6.7.1. =
6.7.2. Java soporta otras formas de asignación +=, -=, *=, /=, %=, >>=, <<= ,>>>=, &=, ^=, |=
7. Clases y Objetos
7.1. Clases
7.1.1. Contienen los métodos que definen la computación
7.1.2. Estructura Lógica: Nombre, Atributos y Métodos
7.1.3. Modificadores: public, asbtract y final
7.1.4. Control de acceso a Variables Miembros (Atributos de Clase)
7.1.4.1. private
7.1.4.2. protected
7.1.4.3. public
7.1.5. Creación de Objetos
7.1.5.1. Persona p1; Persona p2 = new Persona(“Pedro”);
7.1.5.2. Constructores: Un objeto recién creado debe inicializar las variables miembro
7.1.5.2.1. Ejemplo: public Persona (String s) { ID = ++nextID; Nombre = s; }
7.1.5.2.2. Modificadores de Acceso
7.1.5.2.3. Si no se define constructor, se asume un constructor sin argumentos, que no hace nada
7.1.6. Métodos
7.1.6.1. Un método se entiende para manipular el estado del objeto (variables miembro)
7.1.6.2. Para proteger campos de un acceso externo se usa el modificador private
7.1.6.3. Es recomendable usar accesores para proteger el estado de los objetos
7.1.6.4. Referencia this: Sólo se puede usar en un método no estático, y se refiere al objeto actual sobre el que se invocó el método
7.1.6.5. Sobrecarga de Métodos
7.1.6.5.1. Java permite tener varios métodos con un mismo nombre, pero diferentes parámetros
7.1.6.5.2. Miembros Estáticos: Un miembro estático es único para toda una clase, en vez de tener uno por objeto
7.1.6.6. Recolección de Basura: Java realiza recolección automática de basura, el programador no requiere liberar explícitamente los objetos
7.1.6.7. Método finalize: Permite ejecutar un método de finalización antes de liberar memoria
7.1.6.8. Método main: El método mainse debe encontrar en cada aplicación Java
7.1.6.9. Método toString: Si un objeto soporta el método public String toString(), este método se invoca en cualquier expresión en que el objeto aparezca con los operadores + y +=
7.1.7. Clases Anidadas
7.1.7.1. Java permite definir una clase como miembro de otra clase
7.1.7.2. Si clase anidada se declara estática, se llama clase anidada estática
7.1.8. Clases Internas
7.1.8.1. Si no es estática, es una clase interna
8. Caracteres, String y Otros Tipos de Datos
8.1. Arreglos
8.1.1. Arreglos en Java son agrupaciones ordenadas de elementos
8.1.2. Los índice varían desde 0 a largo-1
8.1.3. Los arreglos no se pueden derivar
8.2. Caracteres y Strings
8.2.1. Clases básicas
8.2.1.1. Character
8.2.1.1.1. Métodos
8.2.1.2. String
8.2.1.2.1. Contiene métodos comunes con el StringBuffer
8.2.1.3. StringBuffer
8.2.1.3.1. StringBuffer debe siempre usar new para crear un string
8.3. Números
8.3.1. Clase Number y sus métodos
8.3.2. Funciones matemáticas
8.3.2.1. exponenciación logaritmos raíz cuadrada Funciones trigonométricas Máximos y mínimos Redondeos etc.
8.3.3. Formato
8.3.3.1. Los programas almacenan y operan números en forma independiente de la localidad
8.3.3.2. Java provee soporte para realizar tales conversiones en paquete java.text
8.4. Date
8.4.1. Clase java.util.Date
8.4.2. Útil para manejar datos fecha/hora
9. Streams y Archivos
9.1. Streams Básicos
9.1.1. Java provee dos clases básicas para bytes
9.1.1.1. InputStream : Secuencia de bytes de entrada
9.1.1.2. OutputStream : Secuencia de bytes de salida
9.2. Conjunto de Streams
9.2.1. Java provee más de 60 clases de streams
9.2.2. Todas las clases se derivan de las 4 clases básicas
9.3. Archivos
9.3.1. Clases Básicas
9.3.1.1. FileReader. Lectura de caracteres FileWriter. Escritura de caracteres FileInputStream . Lectura de bytes FileOutputStream . Escritura de bytes
9.3.2. Clase File
9.3.2.1. No corresponde a un stream (se deriva de Object), que permite tener repesentación abstracta de archivos y directorios
9.3.2.2. Está definida en paquete java.io
10. Historia
10.1. 1991: James Gosling inicia proyecto de código independiente
10.2. 1993: Desarrolla un nuevo lenguaje (OAK)
10.3. 1994: Aparece WWW y Mosaic
10.4. 1995: Sun inicia disponibilidad de Java
10.5. 2004 : Versión J2se 1.5-Beta disponible
11. Tecnología
11.1. POO
11.2. Sintaxis Similar a C++
11.3. Contiene Máquina Virtual Java (JVM)
11.4. Tres Versiones: J2SE, J2EE, J2ME
11.5. Contiene Java API
12. Control de Flujo
12.1. Sentencias y Bloques
12.1.1. Sentencia if-else
12.1.1.1. if (exp-booleana) sent1 else sent2
12.1.2. Sentencia switch
12.1.2.1. switch (valor) { case 0: case 2: case 4: case 6: case 8: System.out.println (“es par”); break; case 1: case 3: case 5: case 7: case 9: System.out.println (“es impar”); break; default: System.out.println (“es impar”); }
12.1.3. Sentencia while y do-while
12.1.3.1. while (exp-boolena ) sentencia
12.1.3.2. do sentencia while (exp-boolena );
12.1.4. Sentencia for
12.1.4.1. for (exp-inicial; exp-boolena; exp-incremento) sentencia
12.1.5. Sentencia break: Permite salir desde cualquier bloque.
12.1.6. Sentencia continue: Permite saltar al final del cuerpo de una repetición y evaluar la condición del término.
12.1.7. Sentencia return: Terminar la ejecución de un método y retorna al invocador.
13. Herencia
13.1. Clases Extendidas
13.1.1. En Java todas las clases son extendidas
13.1.1.1. Toda clase se deriva (quizás indirectamente) de la clase Object
13.1.2. Java sólo permite tener una única superclase (herencia simple)
13.2. Reglas
13.2.1. Una subclase hereda todos los miembros
13.2.1.1. públicos
13.2.1.2. protegidos
13.2.1.3. sin modificador (paquete)
13.2.2. Colisiones de nombres
13.2.2.1. En el caso de una variable miembro, ésta se oculta
13.2.2.2. En el caso de un método, éste es redefinido (overriden)
13.3. Redefinición de Varaibles Miembros
13.3.1. Los campos no se pueden realmente redefinir, sólo pueden ser ocultados
13.3.2. Para accederlos se puede usar referencia super
13.4. Redefinición de Métodos
13.4.1. Para la definición de métodos donde existe coincidencia de nombres
13.4.1.1. Sobrecarga: Definir más de un método con el mismo nombre, pero con diferente firma
13.4.1.2. Redefinición: Reemplaza la implementación de la superclase
13.4.2. Métodos que no se pueden redefinir
13.4.2.1. Métodos finales
13.4.2.2. Métodos Estáticos
13.4.3. Métodos que se deben redefinir
13.4.3.1. Métodos que han sido declarados abstractos en la superclase
13.5. Constructores en clases extendidas
13.5.1. Se invoca el constructor de la superclase (sino se especifica cual, se usa el por omisión)
13.5.2. Inicializar los campos usando sentencias de inicialización
13.5.3. Ejecutar el cuerpo del constructor
13.6. Modificador final
13.6.1. Variable. La variable no puede ser modificada (constante)
13.6.2. Método. El método no puede ser redefinido
13.6.3. Clase. La clase no se puede derivar (implícitamente todos sus métodos son finales)
13.7. Clase Object
13.7.1. Todas las clases tienen a Object como raíz, por lo tanto heredan sus métodos
13.7.2. Métodos
13.7.2.1. Métodos de utilidad general
13.7.2.2. Métodos para soportar hebras (threads)
13.8. Clonación de Objetos
13.8.1. El método clone permite clonar un objeto
13.8.2. Una clase que permite clonar objetos normalmente implementa la interfaz Cloneable
13.9. Clases y Métodos Abstractos
13.9.1. Permite definir clases que definen sólo parte de su implementación
14. Interfaces y Paquetes
14.1. Interfaces
14.1.1. Interfaz es una simple lista de métodos abstractos (no implementados)
14.1.2. Cuerpo
14.1.2.1. Todas las constantes son implícitamente
14.1.2.1.1. públicas
14.1.2.1.2. estáticas
14.1.2.1.3. finales
14.1.2.2. Todos los métodos son implícitamente
14.1.2.2.1. públicos
14.1.2.2.2. abstractos
14.1.2.3. No se aceptan otros modificadores (e.g. private, protected y synchronized)
14.1.3. Implementación
14.1.3.1. Una referencia a una interfaz permite suponer que los métodos existen
14.1.3.2. Una clase que “implementa” una interfaz se compromete a “implementarlos”.
14.1.4. Herencia
14.1.4.1. Herencia Simple vs Múltiple
14.1.4.1.1. Una clase puede extender exactamente una superclase
14.1.4.1.2. Una interfaz puede extender múltiples interfaces
14.1.4.1.3. Java evita el problema permitiendo sólo herencia simple para clases
14.1.4.2. Extensión de interfaces
14.1.4.2.1. Al igual que las clases, las interfaces pueden tener súper-interfaces.
14.1.4.2.2. La interfaz hija “hereda” las definiciones de la interfaz padre
14.1.4.2.3. En este caso se permite herencia múltiple
14.2. Paquetes
14.2.1. Contiene clases, interfaces y subpaquetes que están relacionados
14.2.2. Definición
14.2.2.1. En la primera línea de cada archivo fuente de una clase o interfaz debe aparecer: package <nombre>
14.2.2.2. El nombre del paquete implícitamente se antepone al nombre de la clase o interfaz
14.2.2.3. Código externo al paquete puede referenciar a tipo internos del paquete de acuerdo a las reglas de control de acceso
14.2.3. Control de Acceso
14.2.3.1. Clases e Interfaces tienen dos accesos
14.2.3.1.1. Público. Si se califican con public esta permitido su acceso fuera del paquete
14.2.3.1.2. Paquete. Sino se declara public, su acceso se restringe dentro del paquete
14.2.3.2. Miembros de clase declarados
14.2.3.2.1. Sin modificador de acceso son accesibles dentro del paquete, pero fuera de él
14.2.3.2.2. Miembros no privados son accesibles por cualquier código del paquete (son amistosos)
14.2.3.3. Paquetes de Java
14.2.3.3.1. java.lang java.io java.util java.math java.awt java.net java.rmi java.applet java.sql java.beans java.security etc.
15. Manejo de Excepciones
15.1. Una excepción corresponde a un evento que interrumpe el flujo normal de ejecución
15.2. Jerarquía
15.2.1. Error: Representa un error interno irrecuperable o agotamiento de recursos en el sistema de runtime de Java
15.2.2. Exception: Representa una situación excepcional en el programa.
15.2.2.1. Subclases
15.2.2.1.1. RuntimeException se debe a un error de programación
15.2.2.1.2. IOException son por algún otro problema
15.3. Tipos
15.3.1. Excepciones no verificadas (unchecked)
15.3.2. Excepciones verificadas (checked)
15.4. Métodos
15.4.1. Un método advierte al compilador sobre excepciones que no puede manejar lanzándola con throws
15.5. Capturar Excepciones
15.5.1. Sentencia try permite definir un bloque de sentencias para las cuales se quiere definir un manejador de excepciones
15.5.2. Para cada clase de excepción se define un manejador diferente con catch