Agradecimientos
Sobre el autor
Sobre el editor técnico
Introducción
La evolución de Java
Java SE 8
Organización del libro
Convenciones
No se necesita experiencia de programación
Requisitos de software
Código fuente
1. Conceptos de Java
Los orígenes de Java
La relación de Java con C y C++
La relación de Java con C#
La contribución de Java a Internet
Applet de Java
Seguridad
Portabilidad
La magia de Java: el código de bytes
Términos principales de Java
Programación orientada a objetos
Encapsulación
Polimorfismo
Herencia
Obtener el kit de desarrollo de Java
El primer programa
Introducir el programa
Compilar el programa
El primer programa de ejemplo línea por línea
Solucionar errores sintácticos
Otro sencillo programa
Otro tipo de datos
Dos instrucciones de control
La instrucción if
El bucle for
Crear bloques de código
Puntos y coma y ubicación
Técnicas de sangrado
Palabras clave de Java
Identificadores en Java
Las bibliotecas de clases de Java
Evaluación de conocimientos
2. Tipos de datos y operadores
Importancia de los tipos de datos
Tipos primitivos de Java
Enteros
Tipos de coma flotante
Caracteres
El tipo boolean
Literales
Literales hexadecimales, octales y binarios
Secuencias de escape de caracteres
Literales de cadena
Variables
Inicializar una variable
Inicialización dinámica
Ámbito y duración de variables
Operadores
Operadores aritméticos
Incremento y decremento
Operadores relacionales y lógicos
Operadores lógicos de cortocircuito
El operador de asignación
Asignaciones abreviadas
Conversión de tipos en asignaciones
Convertir tipos incompatibles
Precedencia de operadores
Expresiones
Conversión de tipos en expresiones
Espaciado y paréntesis
Evaluación de conocimientos
3. Instrucciones de control
Introducir caracteres desde el teclado
La instrucción if
Instrucciones if anidadas
La cadena if-else-if
La instrucción switch
Instrucciones switch anidadas
El bucle for
Variantes del bucle for
Componentes vacíos
El bucle infinito
Bucles sin cuerpo
Declarar variables de control de bucle dentro del bucle for
El bucle for mejorado
El bucle while
El bucle do-while
Utilizar break para salir de un bucle
Usar break como goto
Utilizar continue
Bucles anidados
Evaluación de conocimientos
4. Clases, objetos y métodos
Clases: aspectos esenciales
Formato general de una clase
Definir una clase
Crear objetos
Variables de referencia y asignación
Métodos
Añadir un método a la clase Vehicle
Devolver valores desde un método
Devolver un valor
Utilizar parámetros
Añadir un método con parámetros a Vehicle
Constructores
Constructores con parámetros
Añadir un constructor a la clase Vehicle
Revisión del operador new
Recolección de basura y uso de finalizadores
El método finalize()
La palabra clave this
Evaluación de conocimientos
5. Otros tipos de datos y operadores
Matrices
Matrices de una dimensión
Matrices multidimensionales
Matrices de dos dimensiones
Matrices irregulares
Matrices de tres o más dimensiones
Inicializar matrices multidimensionales
Sintaxis alternativa para declarar matrices
Asignar referencias de matriz
Usar el miembro length
El bucle for de estilo for-each
Iterar por matrices multidimensionales
Aplicar el bucle for mejorado
Cadenas
Crear cadenas
Trabajar con cadenas
Matrices de cadenas
Las cadenas son inmutables
Utilizar una cadena para controlar una instrucción switch
Utilizar argumentos de línea de comandos
Los operadores de orden de bits
Los operadores AND, OR, XOR y NOT de orden de bits
Los operadores de desplazamiento
Asignaciones abreviadas de orden de bits
El operador ?
Evaluación de conocimientos
6. Análisis detallado de métodos y clases
Controlar el acceso a los miembros de una clase
Modificadores de acceso de Java
Pasar objetos a métodos
Cómo pasar argumentos
Devolver objetos
Sobrecargar métodos
Sobrecargar constructores
Recursión
Comprender static
Bloques estáticos
Clases anidadas e internas
Argumentos de longitud variable: varargs
Fundamentos de varargs
Sobrecargar métodos varargs
Varargs y la ambigüedad
Evaluación de conocimientos
7. Herencia
Aspectos básicos de la herencia
Acceso a miembros y herencia
Constructores y herencia
Utilizar super para invocar constructores de superclase
Utilizar super para acceder a miembros de una superclase
Crear una jerarquía multinivel
Cuándo se ejecutan los constructores
Referencias de superclase y objetos de subclase
Reemplazar métodos
Los métodos reemplazados admiten polimorfismo
Por qué reemplazar métodos
Aplicar reemplazo de métodos a TwoDShape
Utilizar clases abstractas
Utilizar final
Evitar reemplazos con final
Evitar la herencia con final
Utilizar final con miembros de datos
La clase Object
Evaluación de conocimientos
8. Paquetes e interfaces
Paquetes
Definir un paquete
Buscar paquetes y CLASSPATH
Breve ejemplo de paquete
Paquetes y acceso a miembros
Ejemplo de acceso a paquetes
Miembros protegidos
Importar paquetes
La biblioteca de clases de Java se incluye en paquetes
Interfaces
Implementar interfaces
Utilizar referencias de interfaz
Variables en interfaces
Ampliar interfaces
Métodos de interfaz predeterminados
Fundamentos de los métodos predeterminados
Un ejemplo más práctico de un método predeterminado
Problemas de herencia múltiple
Usar métodos estáticos en una interfaz
Consideraciones finales sobre paquetes e interfaces
Evaluación de conocimientos
9. Controlar excepciones
La jerarquía de excepciones
Fundamentos del control de excepciones
Utilizar try y catch
Ejemplo de excepción
Consecuencias de una excepción sin capturar
Excepciones para controlar errores con elegancia
Utilizar varias instrucciones catch
Capturar excepciones de subclases
Anidar bloques try
Generar una excepción
Volver a generar una excepción
Análisis de Throwable
Utilizar finally
Utilizar throws
Tres nuevas funciones de excepciones
Excepciones integradas de Java
Crear subclases de excepción
Evaluación de conocimientos
10. Utilizar E/S
E/S de Java se basa en flujos
Flujos de bytes y de caracteres
Clases de flujo de bytes
Clases de flujo de caracteres
Flujos predefinidos
Utilizar los flujos de bytes
Leer entradas de consola
Escribir la salida en la consola
Leer y escribir archivos con flujos de bytes
Entradas desde un archivo
Escribir en un archivo
Cerrar automáticamente un archivo
Leer y escribir datos binarios
Archivos de acceso aleatorio
Utilizar los flujos basados en caracteres de Java
Entrada de consola con flujos de caracteres
Leer caracteres
Leer cadenas
Salida de consola con flujos de caracteres
E/S de archivos con flujos de caracteres
Utilizar FileWriter
Utilizar FileReader
Utilizar envoltorios de tipos de Java para convertir cadenas numéricas
Evaluación de conocimientos
11. Programación de subprocesamiento múltiple
Aspectos básicos del subprocesamiento múltiple
La clase Thread y la interfaz Runnable
Crear un subproceso
Pequeñas mejoras
Crear varios subprocesos
Determinar el final de un subproceso
Prioridades de subprocesos
Sincronización
Utilizar métodos sincronizados
La instrucción synchronized
Comunicar subprocesos con notify(), wait() y notifyAll()
Ejemplo de uso de wait() y notify()
Suspender, reanudar y detener subprocesos
Evaluación de conocimientos
12. Enumeraciones, autoboxing, importación estática y anotaciones
Enumeraciones
Aspectos básicos de las enumeraciones
Las enumeraciones de Java son tipos de clases
Los métodos values() y valueOf()
Constructores, métodos, variables de instancia y enumeraciones
Dos restricciones importantes
Las enumeraciones heredan enum
Autoboxing
Envoltorios de tipos
Aspectos básicos de autoboxing
Autoboxing y métodos
Autoboxing/Unboxing en expresiones
Una advertencia
Importación estática
Anotaciones (metadatos)
Evaluación de conocimientos
13. Genéricos
Aspectos básicos de los genéricos
Un sencillo ejemplo de genéricos
Los genéricos sólo funcionan con tipos de referencia
Los tipos genéricos difieren en función de sus argumentos de tipo
Una clase genérica con dos parámetros de tipo
Formato general de una clase genérica
Tipos vinculados
Usar argumentos comodín
Comodines vinculados
Métodos genéricos
Constructores genéricos
Interfaces genéricas
Tipos sin procesar y código de legado
Inferencia de tipos con el operador de rombo
Supresión
Errores de ambigüedad
Restricciones genéricas
No se pueden crear instancias de parámetros de tipo
Restricciones en miembros estáticos
Restricciones genéricas de matrices
Restricción de excepciones genéricas
Ampliar su estudio de los genéricos
Evaluación de conocimientos
14. Expresiones lambda y referencias de método
Expresiones lambda: Introducción
Fundamentos de las expresiones lambda
Interfaces funcionales
Expresiones lambda en funcionamiento
Bloques de expresiones lambda
Interfaces funcionales genéricas
Expresiones lambda y captura de variables
Generar una excepción desde una expresión lambda
Referencias de método
Referencias de método a métodos static
Referencias de método a métodos de instancia
Referencias de constructor
Interfaces funcionales predefinidas
Evaluación de conocimientos
15. Applet, eventos y otros temas
Aspectos básicos de los applet
Organización y elementos esenciales de los applet
Arquitectura de los applet
Estructura completa de un applet
Inicializar y finalizar applet
Solicitar una nueva operación de dibujo
El método update()
Utilizar la ventana de estado
Pasar parámetros a applet
La clase Applet
Procesar eventos
El modelo de delegación de eventos
Eventos
Orígenes de eventos
Escuchadores de eventos
Clases de evento
Interfaces de escuchador de eventos
Utilizar el modelo de delegación de eventos
Procesar eventos de ratón y de movimiento de ratón
Un sencillo applet de eventos de ratón
Otras palabras clave de Java
Los modificadores transient y volatile
instanceof
strictfp
assert
Métodos nativos
Evaluación de conocimientos
16. Swing: Introducción
Los orígenes y la filosofía de diseño de Swing
Componentes y contenedores
Componentes
Contenedores
Los paneles de contenedores de nivel superior
Administradores de diseño
Un sencillo programa Swing
Análisis del primer ejemplo de Swing
Utilizar JButton
Trabajar con JTextField
Crear un componente JCheckBox
Trabajar con JList
Utilizar clases internas anónimas para procesar eventos
Crear un applet de Swing
Evaluación de conocimientos
17. Presentación de JavaFX
Conceptos básicos de JavaFX
Los paquetes de JavaFX
Las clases Stage y Scene
Nodos y escenas gráficas
Diseños
La clase Application y los métodos de ciclo vital
Iniciar una aplicación de JavaFX
Estructura de una aplicación JavaFX
Compilar y ejecutar un programa de JavaFX
El subproceso de la aplicación
Un sencillo control JavaFX: Label
Utilizar botones y eventos
Fundamentos de eventos
El control Button
Ilustrar el procesamiento de eventos y los botones
Otros tres controles de JavaFX
CheckBox
ListView
TextField
Presentación de efectos y transformaciones
Efectos
Transformaciones
Ejemplo de efectos y transformaciones
A continuación
Evaluación de conocimientos
Apéndice A. Respuestas
Apéndice B. Utilizar comentarios de documentación de Java
Etiquetas javadoc
Formato general de un comentario de documentación
Qué muestra javadoc
Un ejemplo de comentarios de documentación
Índice alfabético
El diseño de Java, su robustez, el respaldo de la industria y su fácil portabilidad han hecho de Java uno de los lenguajes con un mayor crecimiento y amplitud de uso en distintos ámbitos de la industria de la informática. Su gran impacto en el desarrollo web, su protagonismo en el ámbito de las aplicaciones para dispositivos móviles, e incluso su sencillez y dinamismo para crear aplicaciones de escritorio, hacen de Java la plataforma de desarrollo número uno del mundo.
Herbert Schildt le presenta esta obra a través de un enfoque paso a paso repleto de ejemplos, evaluaciones y proyectos. Comienza con los aspectos básicos, como la forma de compilar y ejecutar un programa Java, para después analizar el núcleo del lenguaje Java. También se describen las funciones más avanzadas y novedosas de Java 8, como la programación de subprocesamiento múltiple, los genéricos, Swing, las expresiones lambda y los métodos de interfaz predeterminado. La obra concluye con una introducción a JavaFX. Al finalizar el libro, dispondrá de una sólida base para programar con Java.