CONTENIDO

 

PRÓLOGO................................................................................................. XXIII

PARTE 1.  PROGRAMACIÓN BÁSICA............................     1

CAPÍTULO 1. FASES EN EL DESARROLLO DE UN PROGRAMA..... 3

QUÉ ES UN PROGRAMA..... 3

LENGUAJES DE PROGRAMACIÓN..... 4

Compiladores.. 6

Intérpretes.. 6

¿QUÉ ES JAVA?... 7

HISTORIA DE JAVA..... 8

¿POR QUÉ APRENDER JAVA?... 9

REALIZACIÓN DE UN PROGRAMA EN JAVA..... 9

Cómo crear un programa... 11

Interfaz de línea de órdenes.. 11

¿Qué hace este programa?... 12

Guardar el programa escrito en el disco... 13

Compilar y ejecutar el programa... 13

Biblioteca de clases.. 15

Guardar el programa ejecutable en el disco... 15

Depurar un programa... 16

Entorno de desarrollo integrado... 16

EJERCICIOS RESUELTOS... 16

EJERCICIOS PROPUESTOS... 18

 

 

CAPÍTULO 2. INTRODUCCIÓN A JAVA..... 19

DECLARACIÓN DE UNA VARIABLE.... 19

ASIGNAR VALORES... 22

AÑADIR COMENTARIOS... 23

MOSTRAR DATOS POR LA PANTALLA..... 24

EXPRESIONES ARITMÉTICAS... 25

EXPRESIONES CONDICIONALES... 27

ESCRIBIR NUESTROS PROPIOS MÉTODOS... 29

EJERCICIOS PROPUESTOS... 31

 

CAPÍTULO 3. INTRODUCCIÓN A LA POO..... 33

PENSAR EN OBJETOS... 34

Clases y objetos.. 34

Mensajes y métodos.. 35

DISEÑO DE UNA CLASE DE OBJETOS... 36

CONSTRUCTORES... 43

HERENCIA..... 46

EJERCICIOS RESUELTOS... 53

EJERCICIOS PROPUESTOS... 57

 

CAPÍTULO 4. ELEMENTOS DEL LENGUAJE.... 59

PRESENTACIÓN DE LA SINTAXIS DE JAVA..... 59

CARACTERES DE JAVA..... 60

Letras, dígitos y otros.. 60

Espacios en blanco... 60

Caracteres especiales y signos de puntuación... 61

Secuencias de escape... 61

TIPOS DE DATOS... 62

Tipos primitivos.. 62

Tipos referenciados.. 64

Tipos enumerados.. 64

LITERALES... 65

Literales enteros.. 65

Literales reales. . 66

Literales de un solo carácter.. 66

Literales de cadenas de caracteres.. 67

IDENTIFICADORES... 67

PALABRAS CLAVE.... 68

COMENTARIOS... 68

DECLARACIÓN DE CONSTANTES SIMBÓLICAS... 69

¿Por qué utilizar constantes?... 70

Sentencia import static... 70

DECLARACIÓN DE UNA VARIABLE.... 71

Iniciación de una variable... 72

EXPRESIONES NUMÉRICAS... 73

CONVERSIÓN ENTRE TIPOS DE DATOS... 73

OPERADORES... 74

Operadores aritméticos.. 74

Operadores de relación... 75

Operadores lógicos.. 76

Operadores unitarios.. 77

Operadores a nivel de bits.. 77

Operadores de asignación... 78

Operador condicional. 80

PRIORIDAD Y ORDEN DE EVALUACIÓN..... 81

EJERCICIOS RESUELTOS... 82

EJERCICIOS PROPUESTOS... 84

 

CAPÍTULO 5. ESTRUCTURA DE UN PROGRAMA.... 85

ESTRUCTURA DE UNA APLICACIÓN JAVA..... 85

Paquetes y protección de clases.. 89

Protección de una clase... 90

Sentencia import. 91

Definiciones y declaraciones.. 92

Sentencia simple... 93

Sentencia compuesta o bloque... 94

Métodos.. 94

Definición de un método... 94

Método main... 95

Crear objetos de una clase... 95

Cómo acceder a los miembros de un objeto... 97

Protección de los miembros de una clase... 98

Miembro de un objeto o de una clase... 99

Referencias a objetos.. 101

Pasando argumentos a los métodos.. 104

PROGRAMA JAVA FORMADO POR MÚLTIPLES FICHEROS... 105

ACCESIBILIDAD DE VARIABLES... 107

EJERCICIOS PROPUESTOS... 108

 

CAPÍTULO 6. CLASES DE USO COMÚN..... 109

ENTRADA Y SALIDA..... 110

Flujos de entrada... 111

Flujos de salida... 112

Excepciones.. 113

Flujos estándar de E/S... 114

Determinar la clase a la que pertenece un objeto... 115

BufferedInputStream..... 116

BufferedReader 117

PrintStream..... 119

Trabajar con tipos de datos primitivos.. 121

Clases que encapsulan los tipos primitivos.. 122

Clase Leer.. 125

¿DÓNDE SE UBICAN LAS CLASES QUE DAN SOPORTE?... 128

Variable CLASSPATH..... 128

CARÁCTER FIN DE FICHERO..... 129

CARACTERES \r\n... 131

ALTERNATIVA A LOS FLUJOS DE E/S... 133

Entrada de datos.. 133

Salida con formato... 135

Clase Formatter.. 136

MÉTODOS MATEMÁTICOS... 138

EJERCICIOS RESUELTOS... 140

EJERCICIOS PROPUESTOS... 144

 

CAPÍTULO 7. SENTENCIAS DE CONTROL.... 147

SENTENCIA if.. 147

ANIDAMIENTO DE SENTENCIAS if.. 150

ESTRUCTURA else if.. 152

SENTENCIA switch... 154

SENTENCIA while... 159

Bucles anidados.. 162

SENTENCIA do ... while... 165

SENTENCIA for.. 168

SENTENCIA break... 171

SENTENCIA continue... 172

ETIQUETAS... 172

SENTENCIAS try ... catch... 174

EJERCICIOS RESUELTOS... 175

EJERCICIOS PROPUESTOS... 182

CAPÍTULO 8. MATRICES... 185

INTRODUCCIÓN A LAS MATRICES... 186

MATRICES NUMÉRICAS UNIDIMENSIONALES... 187

Declarar una matriz... 187

Crear una matriz... 188

Iniciar una matriz... 189

Acceder a los elementos de una matriz... 189

Métodos de una matriz... 190

Trabajar con matrices unidimensionales.. 191

Tamaño de una matriz... 192

ArrayList. 193

Añadir un elemento... 194

Insertar un elemento... 194

Modificar un elemento... 194

Obtener un elemento... 194

Iteradores.. 194

Tamaño... 195

Eliminar elementos.. 195

Buscar elementos.. 195

Copiar listas.. 195

Ejemplo... 196

Matrices asociativas.. 198

Map... 200

CADENAS DE CARACTERES... 203

Leer y escribir una cadena de caracteres.. 204

Clase String... 206

String(String valor).. 207

String toString().. 207

String concat(String str).. 208

int compareTo(String otroString).. 208

int length().. 209

String toLowerCase().. 209

String toUpperCase().. 210

String trim().. 210

boolean startsWith(String prefijo).. 210

boolean endsWith(String sufijo).. 210

String substring(int IndiceInicial, int IndiceFinal).. 210

char charAt(int índice).. 211

int indexOf(int car).. 211

int indexOf(String str).. 211

String replace(char car, char nuevoCar).. 211

static String valueOf(tipo dato).. 211

char[] toCharArray().. 211

byte[] getBytes().. 212

Clase StringBuffer.. 212

StringBuffer([arg]).. 212

int length().. 213

int capacity().. 213

StringBuffer append(tipo x).. 213

StringBuffer insert(int índice, tipo x).. 213

StringBuffer delete(int p1, int p2).. 213

StringBuffer replace(int p1, int p2, String str).. 214

StringBuffer reverse().. 214

String substring(int IndiceInicial, int IndiceFinal).. 214

char charAt(int índice).. 214

void setCharAt(int índice, char car).. 215

String toString().. 215

Clase StringTokenizer.. 215

Conversión de cadenas de caracteres a datos numéricos.. 216

MATRICES DE REFERENCIAS A OBJETOS... 217

Matrices numéricas multidimensionales.. 218

Matrices de cadenas de caracteres.. 222

SENTENCIA for para colecciones.. 227

EJERCICIOS RESUELTOS... 228

EJERCICIOS PROPUESTOS... 235

 

CAPÍTULO 9. MÁS SOBRE MÉTODOS Y COLECCIONES... 239

PASAR UNA MATRIZ COMO ARGUMENTO A UN MÉTODO..... 239

DATOS RETORNADOS POR UN MÉTODO..... 241

REFERENCIA A UN TIPO PRIMITIVO..... 243

ARGUMENTOS EN LA LÍNEA DE ÓRDENES... 246

MÉTODOS RECURSIVOS... 248

MÉTODOS SOBRECARGADOS... 250

NÚMERO VARIABLE DE PARÁMETROS... 252

LA CLASE Object 254

boolean equals(Object obj).. 254

String toString().. 255

void finalize().. 256

LA CLASE Arrays.. 256

binarySearch... 256

equals.. 257

fill. 258

sort. 258

COLECCIONES... 259

MÁS SOBRE REFERENCIAS Y OBJETOS String... 260

EJERCICIOS RESUELTOS... 263

EJERCICIOS PROPUESTOS... 268

 

PARTE 2.  MECANISMOS DE ABSTRACCIÓN............. 271

CAPÍTULO 10. CLASES Y PAQUETES... 273

DEFINICIÓN DE UNA CLASE.... 273

Atributos.. 275

Métodos de una clase... 276

Control de acceso a los miembros de la clase... 277

Acceso predeterminado... 278

Acceso público... 279

Acceso privado... 279

Acceso protegido... 279

IMPLEMENTACIÓN DE UNA CLASE.... 280

MÉTODOS SOBRECARGADOS... 283

NÚMERO VARIABLE DE PARÁMETROS... 285

IMPLEMENTACIÓN DE UNA APLICACIÓN..... 286

CONTROL DE ACCESO A UNA CLASE.... 287

REFERENCIA this.. 288

VARIABLES, MÉTODOS Y CLASES FINALES... 289

INICIACIÓN DE UN OBJETO..... 290

Constructor.. 292

Sobrecarga del constructor.. 295

Llamar a un constructor.. 296

Asignación de objetos.. 297

Constructor copia... 298

DESTRUCCIÓN DE OBJETOS... 299

Destructor.. 300

Ejecutar el recolector de basura... 302

REFERENCIAS COMO MIEMBROS DE UNA CLASE.... 302

REDEFINIR MÉTODOS HEREDADOS DE Object. 310

Método equals.. 310

Método clone... 312

MIEMBROS STATIC DE UNA CLASE.... 314

Atributos static... 314

Acceder a los atributos static... 316

Métodos static... 317

 

CLASES ANIDADAS... 319

Clases internas.. 320

Clases definidas dentro de un método... 322

Clases anónimas.. 323

TIPOS ENUMERADOS... 325

MATRICES DE OBJETOS... 327

PAQUETES... 336

Crear un paquete... 337

La clase aplicación pertenece a un paquete... 339

Compilar y ejecutar la aplicación desde NetBeans.. 339

Compilar y ejecutar la aplicación desde una consola... 342

EJERCICIOS RESUELTOS... 343

EJERCICIOS PROPUESTOS... 358

 

CAPÍTULO 11. SUBCLASES E INTERFACES... 365

CLASES Y MÉTODOS ABSTRACTOS... 366

SUBCLASES Y HERENCIA..... 367

DEFINIR UNA SUBCLASE.... 370

Control de acceso a los miembros de las clases.. 372

Qué miembros hereda una subclase... 373

ATRIBUTOS CON EL MISMO NOMBRE.... 378

REDEFINIR MÉTODOS DE LA SUPERCLASE.... 379

CONSTRUCTORES DE LAS SUBCLASES... 382

COPIA DE OBJETOS... 385

DESTRUCTORES DE LAS SUBCLASES... 387

JERARQUÍA DE CLASES... 389

REFERENCIAS A OBJETOS DE UNA SUBCLASE.... 398

Conversiones implícitas.. 398

Conversiones explícitas.. 400

INFORMACIÓN DE TIPOS DURANTE LA EJECUCIÓN..... 401

POLIMORFISMO..... 401

MÉTODOS EN LÍNEA.... 411

INTERFACES... 412

Definir una interfaz... 412

Un ejemplo: la interfaz IFecha... 413

Utilizar una interfaz... 415

Clase abstracta frente a interfaz... 418

Utilizar una interfaz como un tipo... 419

Interfaces frente a herencia múltiple... 421

Para qué sirve una interfaz... 421

Implementar múltiples interfaces.. 422

EJERCICIOS RESUELTOS... 422

EJERCICIOS PROPUESTOS... 425

 

CAPÍTULO 12. CLASES GENÉRICAS... 427

DEFINICIÓN DE CLASES GENÉRICAS... 428

Relación entre clases genéricas.. 432

Tipo comodín... 432

MÉTODOS GENÉRICOS... 435

EJERCICIOS RESUELTOS... 436

EJERCICIOS PROPUESTOS... 438

 

CAPÍTULO 13. EXCEPCIONES... 439

EXCEPCIONES DE JAVA..... 441

MANEJAR EXCEPCIONES... 443

Lanzar una excepción... 444

Capturar una excepción... 444

Excepciones derivadas.. 446

BLOQUE DE FINALIZACIÓN..... 447

DECLARAR EXCEPCIONES... 449

CREAR EXCEPCIONES... 451

FLUJO DE EJECUCIÓN..... 453

CUÁNDO UTILIZAR EXCEPCIONES Y CUÁNDO NO..... 455

EJERCICIOS RESUELTOS... 456

EJERCICIOS PROPUESTOS... 461

 

CAPÍTULO 14. FLUJOS... 463

VISIÓN GENERAL DE LOS FLUJOS DE E/S... 465

Flujos que no procesan los datos de E/S... 466

Flujos que procesan los datos de E/S... 468

ABRIENDO FICHEROS PARA ACCESO SECUENCIAL.... 473

Flujos de bytes.. 474

FileOutputStream..... 474

FileInputStream..... 477

Clase File... 478

Flujos de caracteres.. 481

FileWriter.. 482

FileReader.. 483

 

Flujos de datos.. 484

DataOutputStream..... 485

DataInputStream..... 486

Un ejemplo de acceso secuencial. 487

SERIACIÓN DE OBJETOS... 492

Escribir objetos en un fichero... 494

Leer objetos desde un fichero... 495

Seriar objetos que referencian a objetos.. 497

ABRIENDO FICHEROS PARA ACCESO ALEATORIO..... 501

La clase RandomAccessFile... 501

La clase CPersona... 504

La clase CListaTfnos.. 505

Constructor CListaTfnos.. 505

Escribir un registro en el fichero... 507

Añadir un registro al final del fichero... 508

Leer un registro del fichero... 508

Eliminar un registro del fichero... 509

¿Hay registros marcados para eliminar?... 510

Buscar un registro en el fichero... 510

Un ejemplo de acceso aleatorio a un fichero... 511

Modificar un registro... 514

Actualizar el fichero... 516

ESCRIBIR DATOS EN LA IMPRESORA..... 517

EJERCICIOS RESUELTOS... 518

EJERCICIOS PROPUESTOS... 532

 

PARTE 3.  DISEÑO Y PROGRAMACIÓN........................ 535

CAPÍTULO 15. ESTRUCTURAS DINÁMICAS... 537

LISTAS LINEALES... 538

Listas lineales simplemente enlazadas.. 538

Operaciones básicas.. 541

Inserción de un elemento al comienzo de la lista... 542

Buscar en una lista un elemento con un valor x. . 544

Inserción de un elemento en general. 544

Borrar un elemento de la lista... 545

Recorrer una lista... 546

Borrar todos los elementos de una lista... 546

UNA CLASE PARA LISTAS LINEALES... 547

Clase genérica para listas lineales.. 550

Clase LinkedList<T>... 558

LISTAS CIRCULARES... 560

Clase CListaCircularSE<T>... 562

PILAS... 566

COLAS... 567

EJEMPLO..... 569

LISTA DOBLEMENTE ENLAZADA..... 571

Lista circular doblemente enlazada... 572

Clase CListaCircularDE<T>... 572

Ejemplo... 578

ÁRBOLES... 579

Árboles binarios.. 580

Formas de recorrer un árbol binario... 582

ÁRBOLES BINARIOS DE BÚSQUEDA..... 584

Clase CArbolBinB<T>... 585

Buscar un nodo en el árbol. 588

Insertar un nodo en el árbol. 589

Borrar un nodo del árbol. 590

Utilización de la clase CArbolBinB<T>... 593

ÁRBOLES BINARIOS PERFECTAMENTE EQUILIBRADOS... 596

Clase CArbolBinE<T>... 597

Utilización de la clase CArbolBinE<T>... 602

CLASES APORTADAS POR LA BIBLIOTECA JAVA..... 604

EJERCICIOS RESUELTOS... 605

EJERCICIOS PROPUESTOS... 619

 

CAPÍTULO 16. ALGORITMOS... 623

RECURSIVIDAD..... 623

ORDENACIÓN DE DATOS... 629

Método de la burbuja... 630

Método de inserción... 633

Método quicksort. 634

Comparación de los métodos expuestos.. 638

BÚSQUEDA DE DATOS... 638

Búsqueda secuencial. 638

Búsqueda binaria... 639

Búsqueda de cadenas.. 640

ORDENACIÓN DE FICHEROS EN DISCO..... 643

Ordenación de ficheros. Acceso secuencial. 644

Ordenación de ficheros. Acceso aleatorio... 651

ALGORITMOS HASH..... 654

Matrices hash... 655

Método hash abierto... 656

Método hash con desbordamiento... 657

Eliminación de elementos.. 658

Clase CHashAbierto... 658

Un ejemplo de una matriz hash... 662

EJERCICIOS RESUELTOS... 665

EJERCICIOS PROPUESTOS... 667

 

CAPÍTULO 17. HILOS... 669

CONCEPTO DE PROCESO..... 669

HILOS... 674

Estados de un hilo... 676

Cuándo se debe crear un hilo... 677

PROGRAMAR CON HILOS... 677

Crear un hilo... 677

Hilo derivado de Thread... 679

Hilo asociado con una clase... 681

Demonios.. 684

Finalizar un hilo... 685

Controlar un hilo... 687

Preparado... 688

Bloqueado... 688

Dormido... 689

Esperando... 689

SINCRONIZACIÓN DE HILOS... 690

Secciones críticas.. 691

Exclusión mutua... 695

Monitor reentrante... 698

Utilizar wait y notify... 699

¿Por qué los métodos almacenar y obtener utilizan un bucle?... 705

Interbloqueo... 706

GRUPO DE HILOS... 707

Grupo predefinido... 707

Grupo explícito... 709

PLANIFICACIÓN DE HILOS... 709

¿Qué ocurre con los hilos que tengan igual prioridad?... 710

Asignar prioridades a los hilos.. 711

TUBERÍAS... 714

ESPERA ACTIVA Y PASIVA..... 719

EJERCICIOS RESUELTOS... 719

EJERCICIOS PROPUESTOS... 728

CAPÍTULO 18. INTERFACES GRÁFICAS Y APLICACIONES PARA

                             INTERNET.... 731

INTERFACES GRÁFICAS... 732

Estructura de una aplicación... 732

Compilar y ejecutar la aplicación... 736

DISEÑO DE LA INTERFAZ GRÁFICA..... 736

Crear un componente Swing... 737

Componentes Swing más comunes.. 737

Contenedores.. 738

Administradores de diseño... 739

Añadir los componentes al contenedor.. 740

Asignar un administrador de diseño... 741

Añadir una etiqueta y editar sus propiedades.. 741

Añadir un botón de pulsación y editar sus propiedades.. 742

MANEJO DE EVENTOS... 743

Asignar manejadores de eventos a un objeto... 744

Adaptadores.. 746

Responder a los eventos.. 748

ACCEDER A LA WEB.... 749

PÁGINAS WEB.... 751

PÁGINAS WEB DINÁMICAS... 752

APPLETS... 753

Crear un applet. 754

Un ejemplo simple... 757

Restricciones de seguridad con los applets.. 761

Instalación de un applet en un servidor.. 762

SERVLETS... 763

Estructura de un servlet. 763

Software necesario para ejecutar un servlet. 768

Desplegar un servlet en el servidor.. 769

Invocando al servlet desde una página HTML.... 770

Descriptor de despliegue... 772

Ejecutar un servlet. 773

EJERCICIOS RESUELTOS... 773

EJERCICIOS PROPUESTOS... 776

 

PARTE 4.  APÉNDICES...................................................... 777

INSTALACIÓN DEL SOFTWARE.... 779

ENTORNO DE DESARROLLO INTEGRADO PARA JAVA..... 783

PLATAFORMAS UNIX/LINUX..... 817

FICHEROS JAR..... 819

JAVA COMPARADO CON C/C++.... 823

 

ÍNDICE ......................................................................................................... 827