Agradecimientos
Sobre el autor
Sobre el revisor técnico
Introducción
Organización del libro
Convenciones
Código fuente
1. Primeros pasos con Java
¿Qué es Java?
Java es un lenguaje
Java es una plataforma
Java SE, Java EE, Java ME y Android
Instalación y exploración del JDK
Instalación y exploración de dos IDE populares
IDE NetBeans
IDE Eclipse
Póker
Comprendiendo el juego
Modelado del juego en pseudocódigo
Conversión de pseudocódigo en código Java
Compilación, ejecución y distribución de FourOfAKind
Ejercicios
Resumen
2. Fundamentos del lenguaje
Clases
Declaración de clases
Introducción de campos
Declarar campos
Inicialización de campos
Campos de sólo lectura
Introducción de métodos
Declaración de métodos
Implementación de métodos
Métodos sobrecargados
Introducción de constructores
Introducción de otros inicializadores
Inicializadores de clase
Inicializadores de instancia
Orden de inicialización
Interfaz o Implementación
Objetos
Creación de objetos y matrices
Acceso a campos
Llamadas a métodos
Pila de llamadas a métodos
Llamadas recursivas
Pasar argumentos
Llamadas a métodos de instancia encadenados
Recolección de basura
Ejercicios
Resumen
3. Aprendizaje de las características del lenguaje orientado a objetos
Herencia
Extensión de clases
La superclase máxima
Clonación
Igualdad
Finalización
Código hash
Representación de cadenas
Composición
El problema con la herencia de implementación
Polimorfismo
Upcasting y enlace en tiempo de ejecución
Clases abstractas y métodos abstractos
Downcasting e identificación del tipo en tiempo de ejecución
Tipos de retorno covariantes
Interfaces
Declaración de interfaces
Implementación de interfaces
Extensión de interfaces
¿Por qué utilizar interfaces?
Ejercicios
Resumen
4. Dominio de las características avanzadas del lenguaje (I)
Tipos anidados
Clases estáticas
Clases internas no estáticas
Clases anónimas
Clases locales
Interfaces dentro de clases
Paquetes
¿Qué son los paquetes?
Los nombres de paquetes deben ser únicos
La sentencia de paquete
La sentencia de importación
Búsqueda de paquetes y tipos
Búsqueda en tiempo de compilación
Búsqueda en tiempo de ejecución
Jugar con paquetes
Paquetes y archivos JAR
Importaciones estáticas
Excepciones
¿Qué son las excepciones?
Representación de excepciones en el código fuente
Códigos de error y objetos
La jerarquía de la clase Throwable
Clases de excepciones personalizadas
Ejecución de excepciones
Manejo de excepciones
Realización de la limpieza
Ejercicios
Resumen
5. Dominio de las características avanzadas del lenguaje (II)
Aserciones
Declaración de aserciones
Uso de las aserciones
Invariantes internas
Invariantes de flujo de control
Diseño por contrato o convención
Evitar las aserciones
Habilitar y deshabilitar aserciones
Anotaciones
Descubrimiento de anotaciones
Declaración de tipos de anotación y código fuente de anotaciones
Uso de meta-anotaciones y declaraciones de tipo de anotación
Procesamiento de anotaciones
Genéricos
Colecciones y la necesidad de la seguridad de tipo
Tipos de genéricos
Declaración y uso de tipos genéricos personalizados
Límites del parámetro de tipo
Ámbito del parámetro de tipo
La necesidad de comodines
Cosificación y borrado
Métodos genéricos
Enumeraciones
El problema con los tipos enumerados tradicionales
La alternativa de las enumeraciones
Mejora de una enumeración
La clase de enumeración
Extensión de la clase Enum
Ejercicios
Resumen
6. Exploración de las API básicas (I)
API para matemáticas
Math y StrictMath
BigDecimal
BigInteger
Información de paquete
Clases envolventes primitivas
Boolean
Character
Float y Double
Integer, Long, Short y Byte
Number
API References
Terminología básica
Reference y ReferenceQueue
SoftReference
WeakReference
PhantomReference
Ejercicios
Resumen
7. Exploración de las API básicas (II)
API Reflection
Gestión de cadenas
String
StringBuffer
Sistema
API Threading
Runnable y Thread
Sincronización de hilos
Ejercicios
Resumen
8. Recorrido por la plataforma de colecciones
Introducción a la plataforma
Comparable y comparador
Iterable y Collection
Iterator y el bucle for mejorado
Empaquetado automático (autoboxing) y desempaquetado (unboxing)
List
ArrayList
LinkedList
Set
TreeSet
HashSet
EnumSet
SortedSet
Queue
PriorityQueue
Map
TreeMap
HashMap
IdentityHashMap
WeakHashMap
EnumMap
SortedMap
Utilidades
Clases de colecciones clásicas
Ejercicios
Resumen
9. Exploración de otras API de utilidad
Utilidades de concurrencia
Ejecutores
Sincronizadores
Colecciones concurrentes
Bloqueos
Variables atómicas
Las API de internacionalización
Locales
Paquetes de recursos
Paquetes de recursos de propiedad
Paquetes de recursos de lista
Iteradores de interrupción
Recopiladores (Collator)
Fechas, zonas horarias y calendarios
Formateadores
Formateadores de número
Formateadores de mensaje
API Preferences
Generación aleatoria de números
API Regular Expressions
Ejercicios
Resumen
10. Trabajar con E/S
File
RandomAccessFile
Flujos
Introducción a las clases de flujo
OutputStream e InputStream
ByteArrayOutputStream y ByteArrayInputStream
FileOutputStream y FileInputStream
PipedOutputStream y PipedInputStream
FilterOutputStream and FilterInputStream
BufferedOutputStream y BufferedInputStream
DataOutputStream y DataInputStream
Serialización y deserialización de objetos
Serialización y deserialización predeterminada
Serialización y deserialización personalizada
Externalización
PrintStream
Escritores y lectores
Introducción a las clases de escritura y de lectura
Writer y Reader
OutputStreamWriter y InputStreamReader
FileWriter y FileReader
Ejercicios
Resumen
Apéndice. Soluciones a los ejercicios
Capítulo 1. Primeros pasos con Java
Capítulo 2. Fundamentos del lenguaje
Capítulo 3. Aprendizaje de las características del lenguaje orientado a objetos
Capítulo 4. Dominio de las características avanzadas del lenguaje (I)
Capítulo 5. Dominio de las características avanzadas del lenguaje (II)
Capítulo 6. Exploración de las API básicas (I)
Capítulo 7. Exploración de las API básicas (II)
Capítulo 8. Recorrido por la plataforma de colecciones
Capítulo 9. Exploración de otras API de utilidad
Capítulo 10. Trabajar con E/S
Índice alfabético
Los smartphones y otros dispositivos móviles táctiles basados en Android están haciendo furor. Gracias a las cerca de 300.000 aplicaciones disponibles, el mercado de desarrollo se encuentra en su momento más álgido. Este libro le enseña la mayor parte de las características del lenguaje Java, las API y las herramientas que necesita conocer antes de poder convertirse en un eficaz programador de Android. Comenzando por las clases y objetos, verá también las características orientadas a objetos (como las interfaces) y otras funcionalidades más complejas, así como las herramientas javac, java, javadoc y jar del JDK. Encontrará igualmente una introducción sobre los entornos de desarrollo integrado NetBeans y Eclipse.Cada uno de los diez capítulos se complementa con una sección de ejercicios que le ayudará a reforzar lo aprendido. Obtenga auténticos conocimientos prácticos sobre Java y desarrolle aplicaciones Android de éxito.