Cómo usar este libro
Y este libro... ¿para quién es?
Una ayuda más: información de soporte
Convenios utilizados en este libroIntroducción
¿Qué es Java?
¿Por qué hemos elegido Java?
¿Qué ventajas e inconvenientes tiene frente a otros lenguajes?
Simple
Portable
Interpretado
Robusto
Distribuido
Con arquitectura independiente
La API de Java
La máquina virtual de Java (Java Virtual Machine)
Seguro
Orientado a objetos
Dinámico
Multihilo (multithread)
Java vs. C y C++
Java vs. C#
Java vs. Javascript
Hemos acertado
1. Lo que ves es con lo que te quedas: applet
Introducción: What you see is what you get
Los applet e Internet
Hola World Wide Web. Nuestro primer applet
El código Java
La página HTML
Compilar el archivo Java
Visualizar el applet
Los applet y HTML
El tag applet
El tag object
¿Qué ocurre dentro de un applet? El ciclo de vida de un applet
Profundizando en los applet. Un ejemplo completo
Destripar el ejemplo
Resumen
2. Programar es un juego: sintaxis de Java
Introducción: Javarkanoid
Aprender a gatear: colocación, comentarios, identificadores y palabras reservadas
Colocación del código
Comentarios
Identificadores
Palabras reservadas
Descubrir los pies: tipos de datos
Tipos primitivos de datos
Enteros
Reales
Caracteres
Booleanos
Otro tipo de datos: String
Dar nuestro primer paso: literales y variables
Literales
Literales numéricos
Literales carácter
Literales cadena
Variables
Declaración de variables
Tipos de variables
Inicialización de las variables
Scope: alcance de una variable
Aprender a andar: operadores
Operadores aritméticos
Operadores relacionales
Operadores lógicos
Operadores con objetos
Operadores de cadenas
Operadores de gestión de memoria
Asignación
Conversión de tipos automática
Casting: conversión de tipos explícita
Precedencia de operadores
Resumen
3. Sintaxis de Java (Parte II)
Introducción: pasar de andar a correr
Correr y esquivar obstáculos: instrucciones de control de flujo
Instrucciones condicionales
Condicional if...else
Condicional switch
Operador condicional
Bucles: instrucciones iterativas
Bucle for
Bucle while
Bucle do...while
Instrucciones de control general
Break
Continue
Práctica: una bola rebotona
La estuctura del applet
Evitar parpadeos: doble buffer
Cargar nuestras imágenes: MediaTracker
Nuestro ejemplo
Resumen
4. Un tipo de datos que no podemos olvidar: arrays
Introducción
Arrays unidimensionales
Declarar el tipo base de los elementos del array
Reservar espacio de memoria para el array
Acceder a los elementos del array
Arrays multidimensionales
Obtener la longitud de un array
Ejemplo de uso de arrays: ladrillos
Resumen
5. Hacer las cosas bien: programación orientada a objetos
Introducción: pensar orientado a objetos
Objetos: todo es un objeto
Clases: todo objeto viene de una clase
Definición de una clase
Cabecera de la clase
Cuerpo de la clase
Cuerpo de la clase: definición de atributos
Cuerpo de la clase: definición de métodos
Cabecera del método
Cuerpo del método
Llamada a un método
Método constructor
Método finalizador
Todo junto: instanciar clases para obtener objetos
Referenciamos el objeto
Instanciamos la clase
A tener en cuenta con las referencias: Aliasing y duplicación de objetos, paso de parámetros y operadores de comparación
Aliasing y duplicación de objetos
Paso de referencias por parámetro
Operadores de objetos
Ejemplo: la clase Sprite
Resumen
6. Programación orientada a objetos (Parte II)
Introducción: más POO
Herencia
Herencia y accesibilidad
Herencia y constructores
Sobrecarga de métodos
Polimorfismo
Clases abstractas
Interfaces
Final
Paquetes
Definir un paquete
Importar un paquete
Paquetes interesantes de Java
Resumen
7. Nuestras clases y las clases de Java
Introducción
Nuestras clases: más Javarkanoid
Las clases base: Sprite, Movible y Colisiona
Las clases principales: Ladrillos, Bola y Pala
El applet que une todo: la clase Javarkanoid
Clases de Java
El paquete java.lang
El paquete java.util
El paquete java.applet
Y las que quedan...
Resumen
8. Todos cometemos errores: manejo de errores en Java
Introducción: los otros errores, las excepciones
La jerarquía de las excepciones
Capturar excepciones: uso de try, catch y finally
Intenta y captura: try...catch
La pila de llamadas
Capturar excepciones más genéricas
Y para terminar: finally
Lanzar excepciones: throw y throws
Lanzar excepciones con throw
Lanzar excepciones con throws
Crear nuestras propias excepciones
Resumen
9. Interactividad
Introducción
El modelo de delegación de eventos
Eventos
Fuentes de eventos
Receptores de eventos
Un gran evento: manejo de eventos
Sólo para tus ojos: mejoras de Javarkanoid
Resumen
10. Otra manera de interactuar: entrada/salida
Introducción
El flujo de datos: stream
Stream predefinidos
Stream de byte
Stream de caracteres
Para qué nos interesan los stream de bytes
Ejemplo de lectura y escritura en la consola
Ejemplo de lectura y escritura en ficheros
Para qué nos interesan los otros stream: stream de caracteres
Javarkanoid y la entrada/salida: editor de niveles
¿Qué hay de nuevo, viejo? El paquete java.nio
Resumen
11. Una interacción conocida: ventanas en Java con Swing
Introducción: ventanas en Java
Qué es Swing
Cómo funciona Swing: jerarquía de contenedores y componentes
Paso 1: los contenedores de nivel más alto
La clase JFrame
La clase JDialog y JOptionPane
La clase JApplet
Paso 2: contenedores intermedios
Content Pane: la clase JPanel
Gestor de ubicación de componentes: la interface LayoutManager
Paso 3: los componentes
El componente botón
El componente etiqueta
Los eventos en los componentes
Resumen
12. Juntos, pero no revueltos: Mutithreading
Introducción: qué es la programación concurrente
Cómo programar concurrentemente en Java: los threads
Estados del thread
Nuevo: crear un thread
En ejecución: comenzar y ejecutar
Parado: esperar
Muerto: difícilmente reanudable
La clase Thread
Crear nuestros propios threads
Crear una subclase de Thread
Implementar la interfaz Runnable
Resumen
13. Mutithreading (Parte II)
Introducción: más hilos
Todos juntos: sincronización
Synchronized
Sincronizar métodos
Sincronizar bloques de código
No revueltos: comunicación entre threads
Resumen
14. Multimedia: imagen (Java2D) y sonido
Introducción: un mundo de imágenes y sonidos
Gráficos bidimensionales: Java2D
¿Qué puede hacer Java2D?
¿Cómo se hace?
Figuras básicas: Geometrías
Rellenar y contornear
Render: Procesar los gráficos
Transformación
Traslación
Rotación
Escala
Composición
Clipear
Pautas de render
Todo junto
Muchas más características en Java2D
¿Se me escucha ahí fuera? Sonido en Java
Reproducción de sonido en un applet
Reproducción de sonido en una aplicación standalone
Resumen
15. Multimedia y realidad: Java3D
Acercarnos a la realidad: Java3D
Instalación de Java3D
Filosofía de Java3D: diagramas
El diagrama base
La correspondencia con las clases Java3D
La correspondencia con los programas Java3D
El universo simplificado: SimpleUniverse
Nuestro primer ejemplo: un cuadrado que se convierte en un cubo
Dibujo del diagrama de escena
Código y ejecución del programa
¿Un applet, una aplicación standalone o las dos cosas a la vez?
Muchas clases nuevas
Las etapas del programa 3D
Crear el objeto Canvas3D
Construir la rama de contenido
Compilar el diagrama de escena
Crear el objeto SimpleUniverse y adaptarlo a nuestras necesidades
Unir los subdiagramas a Locale
Movernos en tres dimensiones: transformaciones
Rotaciones
Transform3D
TransformGroup
Vector3f
Ejemplo de rotación: cubo en perspectiva
Dibujo del diagrama de escena
Código y ejecución del programa
¡Esto se mueve!: animaciones
Capacidad de modificación en tiempo de ejecución
Añadir animaciones a nuestras escenas
Ejemplo de animación: todo me da vueltas
Dibujo del diagrama de escena
Código y ejecución del programa
Mucho más con Java3D
Resumen
16. Queremos más Java
Podríamos no parar de leer nunca
JDBC: acceso a bases de datos
Bases de datos relacionales
SQL: Structured Query Language
JDBC: Java DataBase Connectivity
Java Servlets
Ciclo de vida de un servlet
Clases y objetos necesarios para crear un servlet
HttpServletRequest
HttpServletResponse
Responder a las peticiones
JSP: Java Server Pages
Entre el HTML y los servlets
Componentes de una página JSP
Scriptlets
Declaraciones
Expresiones
Etiquetas
Directivas
Java Beans y Enterprise Java Beans (EJB)
Los JavaBean
Estructura de un JavaBean
JavaBeans y JSP
EJB: Enterprise JavaBeans
Contenedores EJB
Clasificación de los EJB
Estructura del EJB
Desplegar un bean
Modelo Vista Controlador
Errores frecuentes de las arquitecturas
Arquitectura de 2 capas
Arquitectura de 3 capas
Arquitectura de n capas
Arquitectura MVC (Modelo Vista Controlador)
Java y XML
XML
PI
DTD
Espacio de nombres
XSL y XSLT
XPath
Esquemas XML
XQL
¿Cómo mezclamos todo esto con Java?
SAX
DOM
JAXP
Java y XML: la unión hace la fuerza
RMI: Remote Method Invocation
Esquema de funcionamiento RMI
Clases necesarias para utilizar RMI
Pasos para crear una aplicación RMI
Java IDL y CORBA: Programación distribuida
La arquitectura CORBA
Pasos para crear una aplicación con Java IDL
JMS: Java Message Server
¿Cuándo es interesante utilizar JMS?
JMS junto a otras tecnologías de la plataforma J2EE
JINI
SCSL
Nos vemos
Apéndice A. Instalación de Java
Todo lo que necesitamos para crear en Java
Descarga de Java
Instalar Java
Configurar Java
Variable PATH en Windows 2000 y NT
Variable PATH en Windows XP
Variable PATH en Windows ME
Disfrutar Java
Crear en Java
Apéndice B. Novedades de Java 1.4 y Java 1.5
Va de versiones y de animales
Java 1.4: novedades en todos los campos
Procesamiento total de XML
Nueva API de entrada/salida (I/O)
Seguridad
Cambios en Java 2D
Marco de trabajo para imágenes de entrada/salida
API de impresión (Java Print Service)
Cambios en la AWT
Cosas nuevas en Swing
Arrastrar y soltar (drag & drop)
API para Logging
Java Web Start
Nueva API JDBC 3.0
Aserciones
API de preferencias
Excepciones encadenadas
Novedades en la Máquina Virtual de Java
Rendimiento
Soporte de redes para IPv6
RMI
Cambios en la serialización
JNDI
CORBA, Java IDL y RMI-IIOP
Depuración en Java
Internacionalización
Java Plug-in
Novedades en las colecciones
Accesibilidad
Expresiones regulares
Clase Math
Cambios en JNI
Java 1.5: cambios desde la base
Generics
Autoboxing
Bucle For mejorado
Enumeraciones (Enumerations)
Importar datos estáticos (Static Imports)
Conclusiones
Índice alfabético