|
Java ha estado siempre orientado a satisfacer las necesidades tecnológicas más punteras. Como lenguaje independiente de la plataforma, ha facilitado enormemente la labor de miles de desarrolladores web, posibilitando la creación de programas que se ejecutan eficazmente con independencia del sistema operativo. La edición de la plataforma estándar de Java 2, versión 5.0 cuenta con mejoras tan significativas que la convierten en la actualización más amplia a la que hemos asistido.
Tanto si es un principiante como un programador con experiencia, en este manual único encontrará respuestas a todas sus dudas sobre Java, así como innumerables aplicaciones de muestra y cientos de ejemplos. Hallará una cobertura exhaustiva del lenguaje y sus bibliotecas más importantes y de tecnologías consolidadas como Java Beans o Java Swing. En poco tiempo será además capaz de obtener el máximo partido de las nuevas y potentes características de Java 2 v5.0, como los genéricos, autoboxing, enumeraciones o metadatos, descritas mediante explicaciones detalladas y de fácil comprensión.
ÍNDICE
Introducción
Un libro para programadores
Contenido
Código del libro
Parte I. El lenguaje de Java
1. Historia y evolución de Java
El linaje de Java
El nacimiento de la programación moderna: C
El paso siguiente: C++
Todo est preparado para Java
La creación de Java
La conexión con C#
Por qué Java es tan importante para Internet
Los applets de Java
Seguridad
Portabilidad
La magia de Java: el bytecode
Las palabras de moda de Java
Simple
Orientado a objetos
Robusto
Multiproceso
Arquitectura neutra
Interpretado y de alto rendimiento
Distribuido
Din mico
La evolución de Java
La revolución de J2SE 5
La cultura de la innovación
2. Introducción a Java
Programación orientada a objetos
Dos paradigmas
Abstracción
Los tres principios de la programación orientada a objetos
Encapsulado
Herencia
Polimorfismo
Polimorfismo, encapsulado y herencia
Primer programa de prueba
Introducción del programa
Compilación del programa
Primer programa de prueba en profundidad
Segundo programa breve
Dos sentencias de control
La sentencia if
El bucle for
Utilización de los bloques de c¢digo
Cuestiones de léxico
Espacios en blanco
Identificadores
Literales
Comentarios
Separadores
Las palabras clave de Java
Las bibliotecas de clases de Java
3. Tipos de datos, variables y matrices
Java es un lenguaje muy tipificado
Los tipos primitivos
Enteros
byte
short
int
long
Tipos en coma flotante
float
double
Caracteres
Booleanos
Literales en profundidad
Literales enteros
Literales de coma flotante
Literales booleanos
Literales de tipo car cter
Literales de cadena
Variables
Declaración de una variable
Inicialización dinámica
Ámbito y tiempo de vida de las variables
Conversión de tipos
Conversiones automáticas de Java
Conversión de tipos incompatibles
Promoción automática de tipos en expresiones
Reglas de la promoción de tipos
Matrices
Matrices unidimensionales
Matrices multidimensionales
Sintaxis alternativa de la declaraci¢n de una matriz
Unas breves notas acerca de las cadenas
Una nota sobre los punteros para los programadores de C/C++
4. Operadores
Operadores aritméticos
Operadores aritméticos básicos
El operador m¢dulo
Operadores de asignación aritmética
Incremento y decremento
Operadores a nivel de bit
Operadores lógicos a nivel de bit
El operador NOT
El operador AND
El operador OR
El operador XOR
Utilización de los operadores lógicos a nivel de bit
Desplazamiento a la izquierda
El desplazamiento a la derecha
Desplazamiento a la derecha sin signo
Asignaciones con operadores a nivel de bit
Operadores relaciones
Operadores lógicos booleanos
Operadores l¢gicos en cortocircuito
El operador de asignación
El operador "?"
Operador de prioridad
El uso de paréntesis
5. Sentencias de control
Sentencias de selección de Java
if
if anidados
if-else-if múltiple
switch
Sentencias switch anidadas
Sentencias de iteración
while
do-while
for
Declaración de variables de control del bucle dentro del bucle
Utilización de la coma
Algunas variaciones de los bucles for
La versión for-each del bucle for
Iteración a través de la matriz multidimensional
Aplicación de la versión mejorada de for
Bucles anidados
Sentencias de salto
Utilización de break
Utilización de la sentencia break para salir de un bucle
Utilización de la sentencia break como forma de goto
Utilización de continue
return
6. Introducción a las clases
Fundamentos de las clases
Forma general de una clase
Una clase sencilla
Declaración de objetos
El operador new
Asignación de variables de referencia a objetos
Introducción a los métodos
Incorporación de un método a la clase Box
Devolución de un valor
Métodos con par metros
Constructores
Constructores con par metros
La palabra clave this
Ocultación de variables de instancia
Recogida de basura
El método finalize( )
La clase Stack
7. Métodos y clases
Sobrecarga de métodos
Sobrecarga de constructores
Utilización de objetos como par metros
Paso de argumentos
Devolución de objetos
Recursividad
Control de acceso
static
final
Matrices
Introducción a las clases anidadas e interiores
La clase String
Argumentos de la línea de órdenes
Argumentos de longitud variable: varargs
Sobrecarga de métodos vararg
Los varargs y la ambig?edad
8. Herencia
Fundamentos de la herencia
Acceso a miembros y herencia
Un ejemplo más práctico
Una variable de superclase puede referirse a un objeto de una subclase
super
Utilización de super para llamar a constructores de la superclase
Una segunda utilización de super
Creación de una jerarquía multinivel
Orden de ejecución de los constructores
Sobreescritura de métodos
Selección dinámica de métodos
¿Por qué se sobreescriben los métodos?
Aplicación de la sobreescritura de métodos
Clases abstractas
Utilización de final con herencia
Utilización de final para evitar la sobreescritura
Utilización de final para evitar la herencia
La clase Object
9. Paquetes e interfaces
Paquetes
Definición de un paquete
Paquetes y CLASSPATH
Breve ejemplo de un paquete
Protección de acceso
Un ejemplo de acceso
Importación de paquetes
Interfaces
Definición de una interfaz
Implementación de una interfaz
Acceso a implementaciones a través de las referencias de la interfaz
Implementación parcial
Aplicación de las interfaces
Variables en interfaces
Las interfaces se pueden extender
10. Gestión de excepciones
Fundamentos de la gestión de excepciones
Tipos de excepciones
Excepciones no capturadas
Utilización de try y catch
Descripción de una excepción
Cláusulas catch múltiples
Sentencias try anidadas
throw
throws
finally
Excepciones incorporadas en Java
Creación de subclases de excepción propias
Excepciones encadenadas
Utilización de las excepciones
11. Programación multihilo
El modelo de hilo de Java
Prioridades del hilo
Sincronización
Mensajes
La clase Thread y la interfaz Runnable
El hilo principal
Creación de un hilo
Implementación de la interfaz Runnable
Extensión de Thread
Elegir una opción
Creación de hilos múltiples
Utilización de isAlive( ) y join( )
Prioridades de los hilos
Sincronización
Utilización de métodos sincronizados
La sentencia sincronizada
Comunicación entre hilos
Bloqueo
Suspensión, reanudación y finalización de hilos
Suspensi¢n, reanudación y finalización de hilos con Java 1.1 y versiones anteriores
La forma moderna de suspensión, reanudación y finalización de hilos
Programación multihilo
12. Enumeraciones, autoboxing y metadatos (anotaciones)
Enumeraciones
Enumeraciones fundamentales
Los métodos values( ) y valueOf( )
Las enumeraciones de Java son tipos de clases
Las enumeraciones heredan enum
Otro ejemplo de enumeración
Envoltorios de tipo
Character
Boolean
Envoltorios de tipos numéricos
Autoboxing
Autoboxing y los métodos
Autoboxing y auto-unboxing en expresiones
Autoboxing y auto-unboxing de valores booleanos y caracteres
Autoboxing y auto-unboxing ayudan a evitar errores
Advertencia
Metadatos (anotaciones)
Fundamentos de la anotación
Especificaci¢n de una política de retención
Cómo obtener anotaciones en el momento de la ejecución utilizandola reflexión
Un segundo ejemplo de reflexión
Obtención de todas las anotaciones
La interfaz de elemento anotado
Utilización de los valores por defecto
Anotaciones de marca
Anotaciones de un miembro
Anotaciones incorporadas
@@Retention
@@Documented
@@Target
@@Inherited
@@Override
@@Deprecated
@@SuppressWarnings
Algunas restricciones
13. E/S, applets y otros temas
Fundamentos de E/S
Flujos
Flujos de bytes y flujos de caracteres
Las clases de flujos de bytes
Las clases de flujos de caracteres
Flujos predefinidos
Entrada por consola
Lectura de caracteres
Lectura de cadenas
Salida por consola
La clase PrintWriter
Archivos de lectura y escritura
Fundamentos de los applets
Los modificadores transient y volatile
instanceof
strictfp
Métodos nativos
Problemas con los métodos nativos
assert
Validar e invalidar aserciones
Importación estática
14. Genéricos
¿Qué son los genéricos?
Un sencillo ejemplo de genéricos
Los genéricos sólo funcionan con objetos
Los tipos genéricos difieren en sus argumentos de tipo
Cómo contribuyen los genéricos a la mejora de la seguridad de tipo
Una clase genérica con dos parámetros de tipo
Forma general de una clase genérica
Tipos limitados
Utilización de argumentos comodín
Comodines delimitados
Creación de un método genérico
Constructores genéricos
Interfaces genéricas
Tipos primitivos y el código heredado
Jerarquías de clases genéricas
Utilización de una superclase genérica
Una subclase genérica
Comparaciones de tipo de ejecuci¢n dentro de la jerarquía genérica
Conversión
Sobrescritura de métodos en una clase genérica
Borrado
Métodos puente
Errores de ambig?edad
Algunas restricciones genéricas
Los par metros de tipo no pueden tener instancias
Restricciones en los miembros estáticos
Restricciones de matriz genéricas
Restricción de excepción genérica
éltimos toques a los genéricos
Parte II. La biblioteca Java
15. Gestión de cadenas
Constructores String
Constructores String incorporados por J2SE 5
Longitud de una cadena
Operaciones especiales con cadenas
Literales de cadena
Concatenación de cadenas
Concatenación de cadenas con otros tipos de datos
Conversión de cadenas y toString( )
Extracción de caracteres
charAt( )
getChars( )
getBytes( )
toCharArray( )
Comparación de cadenas
equals( ) y equalsIgnoreCase( )
regionMatches( )
startsWith() y endsWith( )
equals( ) frente a ==
compareTo( )
B£squeda en las cadenas
Modificación de una cadena
substring( )
concat( )
replace( )
trim( )
Conversión de datos utilizando valueOf( )
Intercambio de mayúsculas y minúsculas dentro de una cadena
Otros métodos String
StringBuffer
Constructores StringBuffer
length( ) y capacity( )
ensureCapacity( )
setLength( )
charAt( ) y setCharAt( )
getChars( )
append( )
insert( )
reverse( )
delete( ) y deleteCharAt( )
replace( )
substring( )
M‚todos adicionales de StringBuffer
StringBuilder
16. An lisis java.lang
Envoltorios para los tipos simples
Number
Double y Float
Los métodos isInfinitive( ) y isNaN( )
Byte, Short, Integer y Long
Conversión entre números y cadenas
Character
Otros extras de Character para punto de código de Unicode
Boolean
Void
Process
Runtime
Gestión de memoria
Ejecución de otros programas
ProcessBuilder
System
currentTimeMillis( )
Uso de arraycopy( )
Propiedades del entorno
Object
El método clone( ) y la interfaz Cloneable
ClassLoader
Math
Funciones trascendentes
Funciones exponenciales
Funciones de redondeo
Otros métodos de Math
StrictMath
Compiler
Thread, ThreadGroup y Runnable
La interfaz Runnable
Thread
ThreadGroup
ThreadLocal e InheritableThreadLocal
Package
RuntimePermission
Throwable
SecurityManager
StackTraceElement
Enum
La interfaz CharSequence
La interfaz Comparable
Appendable
Iterable
Readable
Los subpaquetes de java.lang
java.lang.annotation
java.lang.instrument
java.lang.management
java.lang.ref
java.lang.reflect
17.java.util parte 1: la estructura de las colecciones
Introducción a las colecciones
Cambios que introduce la versión J2SE 5
Los genéricos cambian de forma radical la estructura de colecciones
El mecanismo de autoboxing facilita el uso de tipos simples
El bucle for for-each
Las interfaces de colección
La interfaz Collection
La interfaz List
La interfaz Set
La interfaz SortedSet
La interfaz Queue
Las clases de Collection
La clase ArrayList
Obtención de una matriz a partir de una ArrayList
La clase LinkedList
La clase HashSet
La clase LinkedHashSet
La clase TreeSet
La clase PriorityQueue
La clase EnumSet
Acceso a Collection a través de un iterador
Usar un iterador
La alternativa for-each a los iteradores
Almacenamiento de clases definidas por el usuario en colecciones
La interfaz RandomAccess
Trabajar con mapas
Las interfaces de mapa
La interfaz Map
La interfaz SortedMap
La interfaz Map.Entry
Las clases Map
La clase HashMap
La clase TreeMap
La clase LinkedHashMap
La clase IdentityHashMap
La clase EnumMap
Comparadores
Uso de un comparador
Los algoritmos de Collection
Arrays
¿Por qué colecciones genéricas?
Herencia de clases e interfaces
La interfaz Enumeration
Vector
Stack
Dictionary
Hashtable
Properties
Uso de store( ) y load( )
Resumen de las colecciones
18. java.util parte 2: m s clases de utilidades
StringTokenizer
BitSet
Date
Calendar
GregorianCalendar
TimeZone
SimpleTimeZone
Locale( )
Random
Observable
La interfaz Observer
Un ejemplo con la interfaz Observer
Timer y TimerTask
Currency
Formatter
Constructores de Formatter
Métodos Formatter
Los fundamentos del formateo
Formatear cadenas y caracteres
Formatear números
Formatear la fecha y la hora
Especificadores %n y %%
Especificar un ancho mínimo de campo
Especificar la precisión
Uso de las marcas de formato
Justificación de la salida
Las marcas de espacio, +, 0 y (
La marca coma
La marca #
La opción de las mayúsculas
Uso del índice de argumento
La conexión printf() de Java
Scanner
Los constructores de Scanner
Fundamentos de Scanning
Algunos ejemplos de Scanner
Establecer los delimitadores
Otras caracter¡sticas de Scanner
Subpaquetes de java.util
java.util.concurrent, java.util.concurrent.atomic y java.utilconcurrent.locks
java.util.jar
java.util.logging
java.util.prefs
java.util.regex
java.util.zip
19. Entrada/Salida: an lisis de java.io
Las clases e interfaces de E/S de Java
File
Directorios
Utilización de FilenameFilter
La alternativa listFiles( )
Creación de directorios
Las interfaces Closeable y Flushable
Las clases Stream
Los flujos de bytes
InputStream
OutputStream
FileInputStream
FileOutStream
ByteArrayInputStream
ByteArrayOutputStream
Flujos de bytes filtrados
Flujos de bytes con b£fer
BufferedInputStream
BufferedOutputStream
PushbackInputStream
SequenceInputStream
PrintStream
DataOutputStream y DataInputStream
RandomAccessFile
Flujos de caracteres
Reader
Writer
FileReader
CharArrayReader
CharArrayWriter
BufferedReader
BufferedWriter
PushbackReader
PrintWriter
Utilización de flujos de E/S
Mejorar wc( ) con StreamTokenizer
Serialización
Serializable
Externalizable
ObjectOutput
ObjectOutputStream
ObjectInputStream
ObjectInputStream
Un ejemplo de serializaci¢n
Ventajas de los flujos
20. Trabajar en red
Fundamentos del trabajo en red
Introducción a los conectores
Cliente/servidor
Conectores reservados
Servidores proxy
Direcciones de Internet
Servicio de nombres de dominio (DNS)
Java y la red
Las clases e interfaces de trabajo en red
InetAddress
Métodos de fábrica
Métodos de instancia
Inet4Address e Inet6Address
Conectores TCP/IP para clientes
Un ejemplo Whois
URL
Formato
URLConnection
Conectores TCP/IP para servidores
Un servidor HTTP proxy cach‚
Código fuente
MimeHeader.java
HttpResponse.java
UrlCacheEntry.java
LogMessage.java
httpd.java
HTTP.java
Datagramas
DatagramPacket
Servidor y cliente de datagramas
La clase URI
Nuevas clases que se incorporan con J2SE 5
21. La clase Applet
Fundamentos de la clase Applet
La clase Applet
Arquitectura de un applet
Estructura de un applet
Comienzo y final de un applet
init( )
start( )
paint( )
stop( )
destroy( )
Sobrescribir update( )
Métodos sencillos para la visualización de applets
Repintar
Un sencillo applet
Usar la barra de estado
La etiqueta APPLET de HTML
Paso de par metros a los applets
Mejora del applet que muestra una frase
getDocumentBase( ) y getCodeBase( )
AppletContext y showDocument( )
La interfaz AudioClip
La interfaz AppletStub
Salida a la consola
22. Gestión de eventos
Dos mecanismos para gestionar eventos
El modelo de delegación de eventos
Eventos
Fuentes de eventos
Oyentes de eventos
Clases de eventos
La clase ActionEvent
La clase AdjustmentEvent
La clase ComponentEvent
La clase ContainerEvent
La clase FocusEvent
La clase InputEvent
La clase ItemEvent
La clase KeyEvent
La clase MouseEvent
La clase MouseWheelEvent
La clase TextEvent
La clase WindowEvent
Fuentes de eventos
Interfaces de oyente de eventos
La interfaz ActionListener
La interfaz AdjustmentListener
La interfaz ComponentListener
La interfaz ContainerListener
La interfaz FocusListener
La interfaz ItemListener
La interfaz KeyListener
La interfaz MouseListener
La interfaz MouseMotionListener
La interfaz MouseWheelListener
La interfaz TextListener
La interfaz WindowFocusListener
La interfaz WindowListener
Uso del modelo de delegación de eventos
Gestión de eventos de ratón
La gestión de eventos de teclado
Clases adaptadoras
Clases internas
Clases internas an¢nimas
23. Introducción a AWT: trabajo con ventanas, gráficos y texto
Clases AWT
Fundamentos básicos de las ventanas
Component
Container
Panel
Window
Frame
Canvas
Trabajar con ventanas Frame
Ajustar las dimensiones de una ventana
Ocultar y mostrar una ventana
Poner título a una ventana
Cerrar una ventana de tipo Frame
Creación de una ventana Frame en un applet
Gestión de eventos en una ventana Frame
Creación de un programa con ventanas
Visualizar la información dentro de una ventana
Trabajar con gráficos
L¡neas de dibujo
Dibujar rectángulos
Dibujar elipses y círculos
Dibujar arcos
Dibujar polígonos
Tamaño de los gráficos
Trabajar con color
Métodos de la clase Color
Uso del matiz, la saturación y el brillo
getRed( ), getGreen( ), getBlue( )
getRGB( )
Establecimiento del color para los gráficos
Ejemplo de applet con colores
Establecer el modo de pintar
Trabajar con fuentes
Determinación de las fuentes disponibles
Creación y selección de una fuente
Información sobre las fuentes
Gestión de la salida del texto utilizando FontMetrics
Visualización de varias líneas de texto
Centrar el texto
Alineamiento de un texto de varias líneas
24. AWT controles, gestores de organización y menús
Fundamentos de los controles
Incorporación y eliminación de controles
Responder a los controles
Etiquetas
Uso de los botones
Gestionar botones
Checkbox
Gestionar las checkbox
Grupo Checkbox
Controles Choice
Gestión de las listas Choice
Listas
Gestión de listas
Barras de desplazamiento
Gestión de las barras de desplazamiento
TextField
Gestión de TextField
TextArea
Gestores de organización
FlowLayout
BorderLayout
Insets
GridLayout
CardLayout
GridBagLayout
Barras de menús y menús
Cuadros de diálogo
FileDialog
Gestión de eventos extendiendo los componentes AWT
Extender Button
Extender Checkbox
Extender un grupo de Checkbox
|