Core Java

Código del Curso: CY420 Versión: 5.1

Guía del Estudiante

Libro 1: Core Java

IBM Training Worldwide Certified Material

Información Sobre la Publicación Esta publicación ha sido producida usando Microsoft Word 2000 y Microsoft PowerPoint 2000 para Windows. Marcas Registradas IBM ® es una marca registrada por International Business Machines Corporation. Otras compañías, productos, y nombre de servicios pueden ser marcas registradas o marcas de servicios de otros. Marcas Registradas de otras Compañías HotJava browser, Java Development Kit (JDK), Java, Java Servlet, Solaris, Enterprise Java Beans, Java Server Pages, JDK, JSP – Sun Microsystems, Microsoft MAKECAB, Windows operating system, ASP, VB, .NET, VC++, Microsoft Access, Microsoft SQL Server, Microsoft ODBC for Oracle – Microsoft Corp, WinZip – Nico Mak Computing, Inc., Time – Time Warner, JDBC – Javasoft, Oracle – Oracle Corporation, Sybase – Sybase Inc., UDB DB2 – IBM. Edición Octubre 2007 La información contenida en este documento no ha sido sometida a ninguna prueba formal de IBM y es distribuida básicamente “como es" sin ninguna garantía ya sea expresa o implícita. El uso de esta información o la implementación de cualquiera de estas técnicas es responsabilidad del comprador y dependerá de la habilidad de éste para su evaluación e integración en el ambiente operacional del comprador. A pesar de que cada tema ha sido revisado por IBM para su exactitud en una situación específica, no hay garantía de que obtener el mismo resultado o uno similar a éste en otra situación. Los compradores que intenten adaptar estas técnicas a sus propios ambientes lo hacen bajo su propio riesgo. Copyright International Business Machines Corporation, 2007. All rights reserved. Este documento no puede ser reproducido en su totalidad o en parte sin el previo permiso escrito de IBM. Instrucciones Especiales para la Impresión de este Curso: No elimine páginas en blanco que puedan aparecer al final de cada unidad o entre unidades. Estas páginas fueron insertadas intencionalmente.

.

Guía del Estudiante

Core Java

Contenido
Descripción del Curso: Core Java....................................................................iv Descripción de Unidades ................................................................................viii Volumen 1: Fundamentos de Java ....................................................................1 Unidad 1: Visión General de Java .....................................................................3
Objetivos del Aprendizaje 1. Introducción 2. Historia de Java 3. Comparación entre Java y C++ 4. Características de Java 5. La Plataforma Java 6. Impacto de Java en la WWW 7. Clases y Objetos 8. Orientación a Objetos en Java 9. Ejemplo de una Aplicación Java 10. Ejemplo de Applet Java Resumen Unidad 1: Examen de Autoevaluación Respuestas a la Unidad 1: Examen de Autoevaluación Objetivos del Aprendizaje 1. Introducción 2. Tipos de Datos en Java 3. Clases Envolventes 4. Math Clases Colaboradoras sobre los Tipos de Datos 5. Manejo de String 6. Identificadores 7. Declaración e Inicialización de Variables 8. Operadores en Java 9. Conversión de Tipos 10. Arreglos 11. Estructuras de Control Resumen Unidad 2: Examen de Autoevaluación
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

3 4 4 5 6 11 16 17 21 26 27 29 30 32 33 34 34 39 44 44 50 51 53 63 66 71 86 87
i

Unidad 2: Operadores, Expresiones y Control de Flujo................................33

Core Java

Guía del Estudiante

Respuestas a la Unidad 2: Examen de Autoevaluación Objetivos del Aprendizaje Ejercicios de Laboratorio

89 90 91

Unidad 3: Lab. de Operaciones, Expresiones y Control de Flujo.................90

Volumen 2: Programación Orientada a Objetos.............................................95 Unidad 1: Clases y Objetos..............................................................................97
Objetivos del Aprendizaje 1. Introducción 2. Clases y Objetos 3. Estructura de una Clase Java 4. Variables 5. Métodos 6. Modificadores de Acceso 7. Constructores de una Clase 8. Sobrecarga de Método 9. Clases Anidadas 10. Argumentos de Línea de Comandos 11. Ciclo de Vida de un Objeto 12. Manejo de la Memoria en Java 13. Enumeraciones Resumen Unidad 1: Examen de Autoevaluación Respuestas a Unidad 1: Examen de Autoevaluación Objetivos del Aprendizaje Ejercicios de Laboratorio Objetivos del Aprendizaje 1. Introducción 2. Sintaxis para Declarar Clases Usando Herencia en Java 3. Conceptos Esenciales de Herencia Resumen Unidad 3: Examen de Autoevaluación Respuestas a la Unidad 3: Examen de Autoevaluación Objetivos de Aprendizaje
© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

97 98 98 101 103 108 113 121 124 127 130 131 136 136 138 139 141 143 144 147 148 148 152 177 178 180 181
ii

Unidad 2: Laboratorio de Clases y Objetos..................................................143

Unidad 3: Herencia .........................................................................................147

Unidad 4: Laboratorio de Herencia ...............................................................181

Guía del Estudiante

Core Java

Ejercicios de Laboratorio Objetivos de Aprendizaje 1. Introducción 2. Clases Abstractas 3. Uso de Clases Abstractas 4. ¿Qué son las Interfaces? 5. Usar Interfaces Como Referencias 6. Heredar de una Interfaz 7. Opciones de Herencia en Java Resumen Unidad 5: Examen de Autoevaluación Respuestas a la Unidad 5: Examen de Autoevaluación Objetivos de Aprendizaje Ejercicios de Laboratorio Objetivos de Aprendizaje 1. Introducción 2. Necesidad de los Paquetes 3. Crear Paquetes en Java 4. Representación del Paquete en el Sistema de Archivos 5. Paquetes y Protección de Acceso 6. Usar Miembros de Paquetes 7. Agrupar Paquetes 8. Despliegue de Paquetes 9. Paquetes Incorporados en Java Usados Comúnmente Resumen Unidad 7: Examen de Autoevaluación Respuestas a la Unidad 7: Examen de Autoevaluación

182 183 184 184 186 194 202 205 208 210 211 213 215 216 219 220 220 222 224 227 235 239 239 245 248 249 251

Unidad 5: Clases Abstractas e Interfaces.....................................................183

Unidad 6: Laboratorio de Clases Abstractas e Interfaces...........................215

Unidad 7: Paquetes.........................................................................................219

iii © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

métodos abstractos y las interfaces. El tercer volumen del curso trata de las excepciones y los métodos para lanzar excepciones. del impacto de Java en la Web. los componentes Swing. las clases lectoras y escritoras. Los estudiantes aprenderán cómo distinguir entre las excepciones verificadas y no verificadas. Se proporciona una introducción a ciertas clases fundamentales de Java. declaración de variables y su inicialización. Trata de los archivos y los flujos. Proporciona una descripción de los miembros de una clase Java. además de asociarlos al contenedor. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. El segundo volumen del curso se ocupa de la programación orientada a objetos.Core Java Guía del Estudiante Descripción del Curso: Core Java Nombre del Curso Core Java Duración La duración del curso es de 108 horas. Los estudiantes aprenderán sobre los fundamentos de la herencia. los flujos de caracteres. El primer volumen del curso se ocupa de los fundamentos de Java. obtendrán información sobre el modelo de delegación de eventos y el manejo de eventos. Se ocupa de las clases y contenedores de AWT. Los estudiantes aprenderán sobre las características de Java. del uso de los métodos de clase y del manejo de la memoria en Java. el API de Java 2D y la representación en 2D. operadores y estructuras de control. También trata los métodos heredados por los componentes de AWT de las clases componente y contenedor. . métodos de dibujo y manejo de eventos. Los estudiantes aprenderán sobre los administradores de diseño. Propósito Este curso ofrece a los estudiantes un estudio del lenguaje Java. El cuarto volumen del curso proporciona una descripción de las capacidades para entrada/salida. la orientación a objetos en Java. También aprenderán sobre los paquetes incorporados comúnmente usados de Java. Se ocupa de la arquitectura MVC y las clases Swing. de la interfaz serializable y de la interfaz externalizable. También aprenderán sobre cómo crear y usar excepciones definidas por el usuario. dibujo y actualización de los componentes de la interfaz del usuario. de clases. Se ocupa del ciclo de vida de un applet. las diferencias entre AWT y Swing. carga de un applet. El quinto volumen del curso provee una descripción de las interfaces de usuario usando AWT y Swing. iv © Copyright IBM Corp. Los estudiantes estudiarán la clase ObjectOutputStream y la clase ObjectInputStream. El sexto volumen del curso introduce a los applets. Adicionalmente. prueba de applets. además de los archivos de acceso aleatorio. convenciones de nombres. También se ocupa de la serialización de objetos.

Guía del Estudiante Core Java Los estudiantes aprenderán conceptos tales como: usar el API de applet. Profesionales y Gente de Negocios. mostrar documentos en un navegador web. El octavo volumen de este curso presenta una descripción del API de colecciones. También se ocupa de la sincronización de hilos. además de la comunicación entre hilos. procesamiento de múltiples conjuntos de resultados. envío y recepción de datagramas. de las interfaces e implementaciones de las colecciones. Prerrequisitos CY410. comunicación con otros applet y restricciones de seguridad en applets. Se ocupa del marco de trabajo para colecciones de Java. tales como: las consideraciones de seguridad cuando se trabaja con programas Java. además de los pasos que implica el acceso a base de datos. los Java beans y los conceptos de la internacionalización. Los estudiantes aprenderán sobre procedimientos almacenados. soporte de cursores. . CY350 v © Copyright IBM Corp. Audiencia Estudiantes. El curso incorpora varias sesiones de laboratorios donde los estudiantes obtendrán experiencia práctica en los conceptos de Core Java. Para finalizar se discute acerca de las características avanzadas. realizar subclases de la clase de hilo e implementar la interfaz Runnable. de los métodos y sentencias sincronizadas. creación y funcionamiento. Estudia el ciclo de vida de los hilos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. entre otras funcionalidades de JDBC. Presenta la conectividad a la base de datos en Java y las sentencias SQL usadas en los programas Java. Los estudiantes aprenderán sobre el trabajo con URLs y programación de conectores. clases orientadas a conexión en Java. localizar y cargar archivos de datos. El séptimo volumen del curso contiene una introducción a multihilos y redes. manejo de la transacción.

Describir algunas clases útiles y algunos GUI en AWT. Explicar los métodos y sentencias sincronizadas. Definir y explicar cómo implementar una interfaz. Explicar los conceptos de hilos y multihilos. Describir las propiedades de la apariencia de Swing. vi © Copyright IBM Corp. Describir el manejo de excepciones en Java. Explicar los conectores orientados a conexión y no orientados a conexión. usted será capaz de: • Entender las características principales de Java. Explicar la necesidad y el uso de los constructores de una clase. Explicar el manejo de excepciones en JDBC. Exponer los URLs y las excepciones de URL. Describir los algoritmos polimórficos del JDK que operan en las colecciones. Explicar la variable classpath y describir su uso. Describir los métodos para agregar componentes de UI. Discutir las excepciones y las técnicas tradicionales para el manejo de errores. Describir cómo crear jerarquías de herencia. Explicar la interfaz Serializable y la clase ObjectInputStream. Discutir el API de JDBC. Describir el concepto de sincronización. Describir la arquitectura MVC. capturadas y manejadas. Explicar cómo crear hilos desde la clase Thread y desde la interfaz Runnable. Examinar las diferentes formas en las que las excepciones pueden ser lanzadas. Mencionar las ventajas del API Applet. Describir cómo se realiza el manejo de la memoria en Java. • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • Explicar los principios de orientación a objetos en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Describir las interfaces de colecciones. Explicar cómo escoger un administrador de diseño y sus responsabilidades. Exponer la clase File.Core Java Guía del Estudiante Objetivos Al completar este curso. Explicar cómo implementar el mecanismo de delegación de eventos. Explicar los diferentes flujos de caracteres y de byte. Explicar los administradores de diseño definidos en Swing. . Explicar las diferentes estructuras de control usadas en Java. Establecer las diferencias entre un applet y una aplicación.

Explicar el empaquetamiento de componentes Java. Exponer el API Java 2D. Agenda Cada unidad en este curso es de 2 horas de duración. Mencionar algunas de las clases de soporte de JDBC en Java. Exponer las características de seguridad cuando se trabaja con programas Java. .Guía del Estudiante Core Java • • • • • • Explicar el uso de PreparedStatement y CallableStatement en JDBC. vii © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Explicar la manipulación de objetos de una clase.

También proporciona una ruta de experiencia práctica acerca de los paquetes. cómo declarar variables miembro. la protección de acceso mientras se usan los paquetes. También cubre la plataforma de Java y su efecto en la WWW. diferentes tipos de operadores en Java y de la precedencia de operadores. Finalmente. También se discuten las conversiones de tipo y las estructuras de control en Java. También le permite al estudiante tener una visión general de los paquetes intrínsecos de Java más usados. el ciclo de vida de un objeto y los constructores de una clase son algunos de los tópicos tratados en esta unidad. viii © Copyright IBM Corp. Esta actividad se realiza a través de un pequeño conjunto de ejercicios. como operaciones aritméticas. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Expresiones y Flujo de Control Esta unidad se ocupa de los elementos fundamentales de Java: tipos de datos y variables. Expresiones y Flujo de Control Esta unidad de Laboratorio permite al estudiante poner en práctica algunos de los aspectos fundamentales de Java. la manera de acceder a las clases utilizando métodos estáticos. Unidad 3: Herencia El principal objetivo de esta unidad es entender los aspectos básicos de la herencia. Unidad 2: Laboratorio de Clases y Objetos En esta unidad se desarrollan ejercicios de laboratorio para crear clases y objetos. También se discute el uso de la palabra clave final para evitar la sobreescritura y para evitar la herencia. Volumen 2: Programación Orientada a Objetos Unidad 1: Clases y Objetos El concepto de una clase. Unidad 3: Laboratorio de Operadores. Esta unidad también examina las especificaciones para el control del acceso. Unidad 2: Operadores. métodos sobrecargados y argumentos en la línea de comandos. se ofrece una visión general sobre el recolector de basura. .Core Java Guía del Estudiante Descripción de Unidades Volumen 1: Fundamentos de Java Unidad 1: Visión General de Java Esta unidad introductoria proporciona una visión general de Java. cómo utilizar el modificador súper. miembros de paquetes y cómo importar paquetes. operadores de bits y lazos en Java. métodos miembro. cómo crear la herencia multi-nivel y los fundamentos del método de sobreescritura. llamar métodos de una clase y sobrecargar métodos de una clase. fundamentos básicos de la Programación Orientada a Objetos y aspectos básicos de Java. el CLASSPATH y su utilización. incluyendo la historia del desarrollo de Java.

capturadas y manipuladas. como usar las cláusulas ix © Copyright IBM Corp. Unidad 7: Paquetes Los paquetes son un aspecto importante en el estudio de Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java Unidad 4: Laboratorio de Herencia Esta unidad de laboratorio permite al estudiante tener una mejor comprensión del concepto de herencia y cómo llamar a los métodos de la clase base. métodos para manejar excepciones y las diferentes formas en que las excepciones pueden ser lanzadas. las declaraciones try y catch. Proporciona una breve visión del manejo de excepciones en los lenguajes de programación y cómo se aplica en Java. También explica cómo utilizar los paquetes miembro. Unidad 3: Laboratorio de Lanzamiento y Manejo de Excepciones Basándose en las unidades 1 y 2. esta unidad de Laboratorio proporciona una ruta para experimentar en forma práctica cómo manejar excepciones. las variables de una interfaz y cómo heredar desde una interfaz. su jerarquía en Java. Volumen 3: Manejo de Excepciones Unidad 1: Manejo de Excepciones y Tipos de Excepciones El lenguaje Java proporciona algunos mecanismos sofisticados para el manejo de excepciones. También se discute el método mediante el cual se crean y usan las excepciones definidas por el usuario. el uso de interfaces y referencias. Se examinan los tipos de excepciones. su implementación total o parcial. Unidad 2: Lanzamiento y Manejo de Excepciones Esta unidad trata con los métodos de lanzamiento de excepciones. . Unidad 5: Clases Abstractas e Interfaces En esta unidad se discute acerca del modificador abstract y las clases y métodos abstractos. en comparación con otros lenguajes de programación modernos. Esta unidad establece qué es una excepción y discute la importancia del manejo de excepciones. así como la cláusula finally en Java. Unidad 6: Laboratorio de Clases Abstractas e Interfaces Esta unidad de laboratorio le ofrece parcialmente al estudiante una exposición del uso de las clases abstractas y la necesidad de usar interfaces. además de la protección de acceso mientras se usan los paquetes. También se discuten las interfaces. cómo importar paquetes y se explican algunos de los paquetes intrínsecos de Java más utilizados. el CLASSPATH y su utilización. En esta unidad se define qué es un paquete. Proporciona una visión de las excepciones en tiempo de ejecución (runtime) y los diferentes métodos para el lanzamiento y propagación de excepciones.

la interfaz Externalizable. . lectura y escritura desde y hacia archivos. algunas clases útiles en AWT y algunos componentes GUI en AWT. Unidad 2: Laboratorio de Archivos y Flujos Esta unidad provee un conjunto de ejercicios para aprender acerca de creación de archivos. x © Copyright IBM Corp. sus responsabilidades y las reglas para su aplicación y uso. Unidad 4: Laboratorio de Serialización de Objetos Esta unidad de laboratorio se construye sobre la base conceptual de la unidad 3 y le permite al estudiante aprender a realizar la serialización de Objetos en Java. Unidad 3: Serialización de Objetos La serialización de Objetos es un tópico importante en Java y esta unidad trata sobre ese tema. la interfaz Serializable. flujos. También permite al estudiante aprender a escribir excepciones definidas de usuario. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Volumen 5: Crear Interfaces Usando AWT y Swing Unidad 1: Componentes y Contenedores AWT En esta unidad se discute el ‘abstract window toolkit –AWT.Core Java Guía del Estudiante throw y catch aparte de dominar el uso de la cláusula throws. Unidad 2: Laboratorio de Componentes y Contenedores AWT Este laboratorio le permite al estudiante aprender a usar varios controles que se incluyen en el AWT.(grupo de programas de ventana abstracta). flujos de caracteres. Volumen 4: Facilidades de Entrada / Salida Unidad 1: Archivos y Flujos Esta unidad trata los conceptos File. la clase ObjectOutputStream y la clase ObjectInputStream. FileDescriptor. a crear y manejar ventanas y a usar las clases MenuBar. Unidad 3: Administradores de Diseño (Layout Managers) Esta unidad ofrece una amplia cobertura de los manejadores de diseño y su selección. Se discuten los diferentes administradores de diseño. Menu y FileDialog. También provee ejercicios para acceder a directorios y subdirectorios. flujos byte y acceso aleatorio de archivos.

los cuales interactúan con el usuario y realizan comunicaciones entre applets a través del programa Cliente-Servidor. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Se incluyen detalles de todas las clases y ejemplos dados. Se discuten los métodos para responder a eventos (milestones). los applets son uno de los tópicos más interesantes y significativos. TextArea. el uso de los métodos para dibujar y manejar eventos. los estudiantes aprenden a desarrollar applets sencillos. Unidad 8: Componentes Swing Esta unidad trata con las clases swing. La mayoría de los componentes se analizan en detalle. los métodos para añadir componentes UI y la aplicación y ventajas del API en un applet. las propiedades look y feel (Apariencia) de Swing y el API Java 2D. Unidad 6: Laboratorio de Modelo de Delegación de Eventos y Manejo de Eventos En esta unidad de laboratorio el estudiante aprende el mecanismo de manejo de eventos y el uso de la clase PopupMenu. xi © Copyright IBM Corp. Unidad 9: Laboratorio de Componentes Swing En esta unidad de Laboratorio. . También provee una manera de implementar el mecanismo de conducción de eventos. Unidad 2: Laboratorio de Escribir y Desplegar Applets En esta unidad.Guía del Estudiante Core Java Unidad 4: Laboratorio de Administradores de Diseño (Layout Managers) En esta unidad de laboratorio. Volumen 6: Applets Unidad 1: Escribir y Desplegar Applets En el lenguaje Java. Esta unidad establece qué es un applet y lo que puede hacer. su ciclo de vida y cada una de sus fases significativas. Unidad 7: Arquitectura MVC y Clases Swing En esta unidad se discuten en gran detalle la arquitectura MVC y los componentes Swing. Unidad 5: Modelo de Delegación de Eventos y Manejo de Eventos Esta unidad examina el Modelo de Conducción de Eventos. Provee un resumen de los applets. con ejemplos ilustrativos. los estudiantes practican el uso de varios manejadores de diseño y trabajan en la creación de varios controles como TextField. se espera que los estudiantes entiendan el uso del componente Swing y las características de las clases Swing. CheckboxGroup y Button. los ‘Listeners’ (Oyentes) y ‘Adapters’ (Adaptadores).

Unidad 5: URLs y Programación de Conectores (Sockets) Esta unidad trata acerca del ‘Uniform Resource Locators –URLs’ (Localizadores de Recursos Uniformes). y cómo escribir a un objeto URLConnection. También se cubren propiedades especiales de los hilos como establecer prioridades y el ThreadGroup. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. También discute algunos algoritmos polimórficos de JDK operando en colecciones y algunas implementaciones de colecciones. Unidad 4: Laboratorio de Sincronización de Hilos Esta unidad ha sido diseñada para bosquejar el entorno teórico en términos de sincronización de hilos y reforzar el aprendizaje del uso de la sincronización de hilos en la solución de problemas usando Java. el API Thread y el método de crear hilos de la clase Thread y la interfaz Runnable. Por otra parte. . leyendo directamente desde un URL. el modo orientado a conexiones de operación de sockets. xii © Copyright IBM Corp.0. Unidad 2: Laboratorio Crear Hilos Esta unidad proporciona ejercicios para fortalecer la base conceptual presentada en la unidad 1 de creación de hilos y ayudar a escribir programas que apliquen hilos en Java. cómo leer desde un objeto URLConnection. métodos sincronizados y sentencias sincronizadas. Volumen 8: Conceptos Avanzados Unidad 1: API de Colecciones Esta unidad ayuda a entender el marco de trabajo de las colecciones de Java. etc. cómo analizar un URL. el ciclo de vida de los hilos. Unidad 3: Sincronización de Hilos En esta unidad se examinan los conceptos de sincronización. Unidad 6: Laboratorio de URLs y Programación de Conectores Esta unidad de laboratorio permite a los estudiantes practicar el uso de Java trabajando con URLs y realizar trabajos con conectores en el ámbito de programación. cómo conectarse a un URL.Core Java Guía del Estudiante Volumen 7: Multihilos y Sistema de Redes Unidad 1: Crear Hilos Java es conocido por su poder en términos de hilos. En esta unidad se discuten los conceptos de hilos y multihilos (threads y multithreading). la creación de un URL y la creación de un URL relativo a otro URL. las interfaces de colecciones y el impacto que produjo la inclusión de los Genéricos en Java 5. abarca los diferentes modos de operaciones de socket. También se discuten los interbloqueos o puntos muertos (deadlocks) y provee una visión de comunicación entre hilos. También se discuten los tópicos de MalformedURLException.

como por ejemplo el manejo de transacciones. También ayuda a usar la clase iterator y sus métodos. los objetivos consisten en la capacitación del trabajo con imágenes y gráficos. procedimientos almacenados (stored procedures) y otras funcionalidades JDBC. Unidad 4: Laboratorio de JDBC Existen algunos ejercicios en esta unidad para ayudar a los estudiantes a conectarse a una base de datos a través de un programa Java. además de facilitar la comprensión acerca de la forma en que trabaja la administración de transacciones. cómo usar ArrayList. Discute las sentencias SQL usadas en los programas de Java y cómo funciona el manejo de excepciones. Unidad 6: Laboratorio de JDBC Avanzado Esta unidad permite al estudiante escribir código en Java para crear y usar los procedimientos almacenados. También se explican los Java beans y cómo realizar la invocación remota de métodos. Unidad 5: JDBC Avanzado Se explican algunos conceptos avanzados de JDBC tales como usar las clases heredadas de Statement. HashSet y TreeSet. los estudiantes aprenderán a convertir un programa Java usando internacionalización y trabajarán con la invocación de métodos remotos. incorporar elementos de seguridad mientras se trabaja con programas en Java y aprender el concepto de internacionalización en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. además de entender cómo acceder a la base de datos una vez que se establece una conexión. . Unidad 7: Características Avanzadas En esta unidad. xiii © Copyright IBM Corp. Unidad 3: JDBC Esta unidad trata la conectividad de base de datos en Java y el API JDBC de Java. y el uso de las interfaces SortedSet. Unidad 8: Laboratorio de Características Avanzadas En esta unidad.Guía del Estudiante Core Java Unidad 2: Laboratorio del API de Colecciones Esta unidad proporciona ejercicios para ayudar a entender la interfaz collection.

.

. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java Volumen 1: Fundamentos de Java Libro 1: Core Java Volumen 1: Fundamentos de Java 1 © Copyright IBM Corp.

.

Guía del Estudiante Core Java Unidad 1: Visión General de Java Objetivos del Aprendizaje Al final de esta unidad. Libro 1: Core Java Volumen 1: Fundamentos de Java 3 © Copyright IBM Corp. Definir clases y objetos. Describir el impacto de Java en WWW. Explicar los principios de orientación a objetos en Java. Discutir las características principales de Java. Explicar la plataforma Java. Comparar Java con C++. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. usted será capaz de: • • • • • • • Discutir la evolución de Java. .

Desarrollaron un dispositivo llamado StarSeven (*7). algunas de sus características han solventado las limitaciones de estos dos lenguajes. Este grupo intentó mercadear él *7 a la industria de televisión por cable. Introducción Antes que Java existiera. Sun decidió crear una filial. antes de continuar. este nuevo lenguaje evolucionado fue llamado Java. Algunos de los miembros del grupo FirstPerson mostraron el lenguaje Unidad 1: Visión General de Java Libro 1: Core Java 4 © Copyright IBM Corp. Afortunadamente para el grupo creador del *7. permitía transferir pequeñas aplicaciones dinámicas a través de la red en la forma de applets de Java. La Internet tenía una configuración de red similar al *7. a un lenguaje que permitía escribir código ejecutable que podía ser distribuido en Internet. denominada FirstPerson Inc. se presenta un breve resumen de la evolución de Java. Adicionalmente. C es un lenguaje de programación estructurada. Java ha simplificado muchas de las estructuras complicadas y ambiguas de C++. Se aprenderá acerca de estas características en detalle en las próximas secciones. y estaba siendo usada cada vez más para la transferencia de texto. además de mostrar animaciones simultáneamente. Tras unos comienzos dudosos. *7 usaba un procesador independiente del lenguaje llamado Oak para adaptarse a una variedad de plataformas y dispositivos de uso doméstico. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. esencialmente datos estáticos. Otra ventaja fundamental es que Java trajo el concepto de la independencia de plataforma. Internet se estaba volviendo popular en ese momento. Java permitía a los usuarios de Internet transferir contenido estático a través de la misma. para dar margen de maniobra al equipo responsable del proyecto. mientras que C++ brinda soporte tanto a la programación estructurada como a la programación orientada a objetos.. este dispositivo era capaz de controlar una variedad de plataformas de entretenimiento y dispositivos de uso doméstico. Aunque Java no fue diseñado como solución a los problemas encontrados en C o C++. transformándolo en un lenguaje que permitía al programador escribir programas que corrían en una gran variedad de dispositivos.Core Java Guía del Estudiante 1. El objetivo de este proyecto era anticiparse a la revolución en el mundo de la computación que estaba por llegar. . Sin embargo. gráficos y video. Uno de los objetivos principales detrás de la creación de Java fue tener un lenguaje orientado a objetos que fuera poderoso. En el año 1995. C y C++ eran los lenguajes de programación más usados. Historia de Java Patrick Naughton. Estos dos lenguajes de programación son complejos y tienen algunas limitaciones inherentes. pero la tecnología usada para desarrollar él *7 estaba adelantada a la tecnología existente en la industria de televisión por cable y por esto no fue aceptado. El equipo FirstPerson amplió Oak. 2. Mike Sheridan y James Gosling de SUN Microsystems iniciaron un proyecto secreto llamado "Proyecto Verde" (Green Project) a finales de 1990. El equipo decidió intentar introducirse en el mercado de la electrónica de consumo y desarrollar programas para pequeños dispositivos electrónicos. pero simple.

un lenguaje de programación igualmente poderoso. al mismo tiempo. Existen algunas deficiencias en C++.1. y publicó el código fuente Java gratuitamente en Internet. Sus características y funcionalidades asombraron a los participantes. No es necesario para un programa en C++ tener una clase. incluyendo la transferencia de animaciones a través de la Internet. A continuación se va a comparar Java y C++. El lenguaje es independiente de la plataforma. para descubrir que ha hecho a Java tan popular. Todas las declaraciones de variables y métodos deben estar dentro de la definición de la clase. Java Es tanto un lenguaje de programación como una plataforma de software. una vez escrito. Una clase no puede heredar directamente de más de una clase. El código Java. que es un lenguaje puramente orientado a objetos. ya que la tecnología proveía un método más sencillo para transferir datos en la Internet. Esto ha sido eliminado en Java. una vez escrito para una plataforma. C++ Es sólo un lenguaje de programación.Guía del Estudiante Core Java y sus nuevas características. En poco tiempo. El código C++. y el código objeto reenlazado para ser ejecutado en otra plataforma diferente. Es un lenguaje puramente orientado a objetos. Comparación entre Java y C++ Java simplifica muchas de las ambigüedades encontradas en C++. Libro 1: Core Java Volumen 1: Fundamentos de Java 5 © Copyright IBM Corp. Maneja la memoria automáticamente. por el hecho de que permite programación estructurada. Se da soporte a la herencia múltiple usando interfaces. Los programadores tienen que hacerse cargo de liberar la memoria no utilizada. y es. . 3. en la Conferencia de Diseño. Las declaraciones de variables y funciones pueden estar presentes fuera de las definiciones de las clases. ambos lenguajes de programación orientado a objetos. Tecnología y Entretenimiento en Monterrey. el número de usuarios de la tecnología Java se incrementó rápidamente. Da soporte a características como sobrecarga de operadores y conversiones automáticas en ambos sentidos. Una clase puede heredar directamente de más de una clase. puede ser ejecutado en cualquier plataforma. No se soporta características como sobrecarga de operadores y conversiones automáticas en ambos sentidos. Sus rutinas de librerías no son extensibles. Las principales diferencias entre C++ y Java se listan en la Tabla 1. Tiene rutinas de librerías extensibles. Se ha visto con anterioridad las ventajas del paradigma de programación orientada a objetos. necesita ser compilado de nuevo. El equipo pronto construyó el navegador HotJava. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Da soporte tanto a la programación estructurada como a la programación orientada a objetos.

que no brinda soporte incorporado para programación de redes. a menos que se usen APIs de terceros. . 4. que pueden usarse para transmitir información en Internet. ni como un reemplazo para C++. excepto por las restricciones inherentes al ambiente de Internet. Características de Java Java puede usarse para desarrollar dos tipos de programas: Aplicaciones: Las aplicaciones son programas independientes que pueden correr en una computadora. Los objetos pueden ser accedidos a través de la red usando URLs. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Ahora se estudiarán las diversas características ofrecidas por Java. Applets: Los applets son programas especiales Java. Java no debe ser interpretado como la versión Internet de C++. usando la plataforma Java con el soporte del sistema operativo de la computadora. Los applets pueden ser incrustados en una página HTML usando la etiqueta Applet. es un lenguaje. Los apuntadores se usan internamente. Implementa arreglos verdaderos. y pueden ejecutarse en un navegador web con soporte para Java.1: Comparación entre C++ y Java Aunque las construcciones de programación de Java (sintaxis) son similares a las de C++. El equipo FirstPerson contó con programadores expertos para asegurar que Java permitiera a los programadores tener un control completo sobre la ejecución del programa. La Figura 1. Los programadores pueden usar apuntadores. Se implementan los arreglos con aritmética de apuntadores. Los applets pueden adaptarse a la entrada del usuario inteligentemente. Tabla 1. Guía del Estudiante La programación para redes es compleja.1 muestra las diferentes características de Java.Core Java La programación de redes es más fácil. C++. Unidad 1: Visión General de Java Libro 1: Core Java 6 © Copyright IBM Corp. Los programadores no pueden usar apuntadores. Las aplicaciones Java y los applets pueden ser compilados y ejecutados usando el Kit de Desarrollo de Java (Java Development Kit JDK).

. y soporta la mayoría de las características ofrecidas por C++.1: Características de Java 4. De aquí que. los programadores no encontrarán Java muy difícil de entender y usar. los usuarios de Internet temían descargar programas ejecutables debido al daño alarmante causado por la difusión de virus. Había también programas maliciosos que recababan información acerca de tarjetas de crédito. 4. ya que se implementan los conceptos en una forma mucho más sencilla que en C++. por supuesto. Esto fue. Los usuarios pueden estar usando diferentes Libro 1: Core Java Volumen 1: Fundamentos de Java 7 © Copyright IBM Corp. Java proporcionó un modelo de seguridad. Las personas que descargaban archivos eran muy cautelosas de revisar estos archivos cuidadosamente antes de usarlos. desastroso para las personas que navegan por la Internet. Un programador con un buen conocimiento de los conceptos de orientado a objetos puede sacar el máximo provecho a Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. palabras clave. etc.2 Seguridad Inicialmente. y así bloquear cualquier intento malicioso. del sistema de archivos local.1 Simple de Usar El estilo de programación en Java está basado en C++. cuando la Internet comenzó y Java no era tan conocido.3 Portabilidad Existen muchas ocasiones en donde los usuarios de Internet pueden querer descargar programas y ejecutarlos dinámicamente. que previene el acceso a los recursos del sistema. 4.Guía del Estudiante Core Java Figura 1.

Realiza la funcionalidad de traducir los bytecodes de Java. Java soporta la portabilidad. a una forma entendible por la máquina. se necesita de un mecanismo para crear código ejecutable que sea portable entre varias plataformas.2. El ambiente de tiempo de ejecución de Java es el ambiente en donde es posible que los programas puedan ser compilados y ejecutados. El compilador Java (javac) primero convierte el código fuente (archivo con extensión . El sistema de tiempo de ejecución de Java es específico a la plataforma en la cual se ejecuta. porque los bytecodes son interpretados antes de la ejecución. Existe otro componente llamado el compilador ‘Just-In-Time (JIT)’.Core Java Guía del Estudiante tipos de plataformas. . para permitirles descargar programas y ejecutarlos dinámicamente. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. estos bytecodes son interpretados por el intérprete de Java. Java solventa este inconveniente de portabilidad con el uso de bytecodes. La Figura 1. y convertidos a una forma ejecutable que la entiende la plataforma en la cual el sistema de tiempo de ejecución de Java se está ejecutando. La Máquina Virtual de Java (JVM) es la capa entre el microprocesador y los archivos class de Java. explica cómo Java logra la portabilidad. Figura 1.java) a bytecodes (archivo con extensión .class). Este ambiente administra el manejo de la memoria y otras necesidades en tiempo de ejecución durante la ejecución del programa. que puede entender el sistema de tiempo de ejecución de Java o la Máquina Virtual de Java (Java Virtual Machine JVM).2: JVM e Independencia de la Plataforma Unidad 1: Visión General de Java Libro 1: Core Java 8 © Copyright IBM Corp. haciéndolos más rápidos que la interpretación hecha por la JVM. El compilador JIT compila los bytecodes a código máquina.

3 muestra como trabaja el compilador JIT. 4. Estas plataformas diversas tenían demandas diferentes por parte de las aplicaciones para que se ejecutaran apropiadamente y por tanto. la aplicación tenía que ocuparse de todas estas demandas. y usa tipos de datos simples no objetos.4 Distribuido La computación distribuida es muy útil en el ambiente de la Internet. La Figura 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. en vez de ser interpretado como actualmente lo es. sus diseñadores y desarrolladores no quisieron que Java fuera compatible al nivel de código fuente con ningún otro lenguaje. Cuando Java estaba siendo diseñado. la aplicación debía de ser robusta Libro 1: Core Java Volumen 1: Fundamentos de Java 9 © Copyright IBM Corp.3: Compilador JIT y la JVM 4. donde los módulos de los programas pueden estar presentes en diferentes computadoras alrededor del mundo. asegurando un alto rendimiento.6 Robusto A medida que los usuarios de Java en Internet comenzaron a incrementarse en número. Este permite a programas que se ejecutan en una JVM invocar un método en una clase Java ejecutándose en otra JVM. creció también la necesidad de ejecutar una aplicación en diversas plataformas. Java fue diseñado para brindar soporte TCP/IP. 4. soportaría la portabilidad. De este modo. tuvieron la opción de crear un lenguaje orientado a objetos que hace uso de un modelo de objetos simple. Aún si Java hubiese sido diseñado para ser compilado justo antes de la ejecución. El soporte a redes de Java permite construir aplicaciones cliente/servidor. Este método de compilación usado para convertir bytecodes a código nativo se llama compilación ‘justo a tiempo’ (Just In Time JIT). Por lo anterior. Para poder hacer esto. Los bytecodes de Java también son útiles al mejorar el nivel de seguridad ofrecido por Java.Guía del Estudiante Core Java El sistema de tiempo de ejecución Java previene que el código acceda a cualquier recurso fuera de él. Figura 1. adicionalmente Java tiene el paquete de Invocación de Métodos Remota (Remote Method Invocation RMI).5 Orientado a Objetos C++ tenía que mantener las características y ser compatible con C. el sistema de tiempo de ejecución mejora las características de seguridad ya provistas por Java. . Esto se debe a que la ejecución del programa está todavía en manos del sistema de tiempo de ejecución de Java.

4. Los objetos que se crean y usan en un programa son verificados y resueltos en tiempo de ejecución.10 Arquitectura Neutral Al compilar un programa en Java. Esto a su vez da seguridad a los programadores para predecir el comportamiento del programa en diversas situaciones. 4. Java provee manejo de excepciones para ocuparse de los errores de una manera sofisticada. verifica errores de codificación tanto en tiempo de compilación como en tiempo de ejecución. Java fue diseñado de forma que si se comete cualquier error en una invocación de método. Los lenguajes interpretados tienen limitaciones de rendimiento comparados con los lenguajes que son compilados.Core Java Guía del Estudiante El diseño de Java hace posible que los programadores identifiquen errores en la misma etapa de desarrollo. 4. La robustez del manejo de excepciones de Java ayuda a construir programas confiables. Por esta razón. Funciones como la recolección automática de basura en Java hace que los programas sean menos propensos a errores relacionados con la memoria. Java combina las ventajas de la compilación e interpretación.7 Dinámico Java enlaza el código dinámicamente. Por lo tanto. Esta característica es útil cuando se quiere actualizar el bytecode en un sistema en ejecución. El código puede ser revisado para asegurar confiabilidad colocando restricciones en ciertas áreas claves de la programación y teniendo un diseño para evitar los errores más comunes de programación. . Java está diseñado para ser un lenguaje estrictamente tipado. se mostrará un mensaje de error al programador en tiempo de compilación. De esa manera Java logra ser un lenguaje que no depende de una arquitectura computacional definida. Java fue implementado para usar los datos disponibles en los archivos class en tiempo de ejecución. solamente hay que implementar un intérprete para cada plataforma. Este código es interpretado por diferentes computadoras de igual manera. 4. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Unidad 1: Visión General de Java Libro 1: Core Java 10 © Copyright IBM Corp.9 Interpretado Los bytecodes de Java son interpretados por la JVM en el lenguaje nativo de la plataforma subyacente. el código resultante es un tipo de código binario conocido como bytecode. los programadores no necesitan preocuparse de cometer errores no detectables en las invocaciones de métodos.8 Fuertemente Tipificado Java es fuertemente tipificado. El compilador Java JIT puede ayudar a superar las limitaciones de rendimiento asociadas a la JVM.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Los programadores pueden hacer uso de esto para crear aplicaciones de red interactivas.11 Ambiente Multihilos Java brinda soporte a la programación multihilos. se discute a continuación la plataforma de Java.4. 5. que permite que un único programa lleve a cabo varias tareas concurrentemente. Una implementación particular de esta máquina virtual. El sistema en tiempo de ejecución de Java (JVM) se implementó de forma eficiente. Ahora que se conocen las características principales de Java. . La Plataforma Java Una plataforma es el entorno sobre el cual se ejecutan los programas. que a su vez facilitan la programación interactiva. Figura 1. La plataforma Java esta conformada por dos componentes. Libro 1: Core Java Volumen 1: Fundamentos de Java 11 © Copyright IBM Corp.Guía del Estudiante Core Java 4. para permitir la fácil sincronización de hilos. La plataforma Java es una plataforma de sólo software. llamados la JVM y el API de Java.4: Los dos Componentes de la Plataforma Java 5. como se muestra en la Figura 1. Esto es lo que hace a Java independiente de la plataforma. Una plataforma puede ser una plataforma de software. aún brindará soporte al API general de Java. que es escrita para operar en un entorno particular. la cual se puede ejecutar en varias plataformas de hardware así como en varios sistemas de operativos.1 JVM La JVM es una aplicación ejecutable que representa a un procesador genérico en el cual corren los bytecodes de Java. una plataforma de hardware o una combinación de ambos.

java) es convertido en bytecodes (archivo . se va a mostrar brevemente el flujo de un programa Java. Esto se muestra en la Figura 1. La instancia de tiempo de ejecución (la instancia de una JVM que está en ejecución actualmente) soporta la ejecución de los programas Java. El código fuente de Java (archivo . los archivos .java y .5: Diferentes Aspectos de la JVM La especificación Java define la especificación abstracta de la JVM.class son portables a cualquier implementación de la máquina virtual. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. De aquí que.class. Instancia en tiempo de ejecución. Implementación concreta. La implementación concreta de la JVM es la implementación actual de la especificación abstracta. Para entender la diferencia entre los archivos .Core Java Guía del Estudiante La JVM consta de los siguientes tres aspectos: • • • Especificación abstracta. Figura 1. que se necesita para permitir que los programas se ejecuten en ella. Unidad 1: Visión General de Java Libro 1: Core Java 12 © Copyright IBM Corp. Estos bytecodes son luego convertidos a código de máquina nativo por alguna JVM que sea específica a una plataforma en particular.class) por el compilador Java.5. .

que compila el código fuente Java (archivo . Dado que la confiabilidad del código fue verificada. El modelo de seguridad de Java provee una ‘caja de arena’ (sandbox) que es configurable. el bytecode es objeto del mismo proceso de verificación.SecurityManager) es una clase definida en Java. Una vez compilado. Se revisa cualquier manipulación ilegal de apuntadores. el programador debe regresar al editor. una vez que el bytecode sea descargado. la JVM en la máquina del usuario inicia un proceso de verificación del bytecode. corregir los problemas. y ejecutar nuevamente javac hasta que todos los errores sean solucionados y se obtenga una compilación limpia. y si el bytecode descargado pasa todas las otras pruebas que el verificador impone. Si existe un error. uso ilegal de objetos. Durante este proceso. Actualmente. entonces el bytecode es tratado como un código confiable. El bytecode puede provenir del sistema local o haber sido descargado de la Internet. es una operación insegura o sensible.lang. • • Se ha discutido que los bytecodes Java obtenidos después de la compilación en cualquier JVM pueden ser transferidos a cualquier otra JVM ejecutándose en cualquier otra plataforma y ser ejecutado allí. esto asegura la confiabilidad del código y también protege al intérprete Java. . el administrador de seguridad de Java juega un papel fundamental. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. También se pueden obtener más detalles de la operación. y si la operación se realiza dentro de un contexto de seguridad que permita a la aplicación llevar a cabo esa operación. hay un pequeño problema. Sin importar la fuente.class que podrá ser usado con cualquier JVM ejecutándose en cualquier plataforma. ésta protege a las aplicaciones y applets Java de ser atacados por virus. y para ejecutar el archivo . El comando java se usa para iniciar el intérprete Java. Si no se encuentran ninguna de las violaciones anteriores. El administrador de seguridad (clase java. se produce un archivo . los bytecodes descargados no tienen que haber sido producidos por un compilador Java estándar.java) a bytecodes. el verificador de bytecode no realiza ninguna suposición acerca del bytecode que recibe. Cuando una aplicación Java implementa esta política de seguridad. etc. suponiendo que no hay errores en tiempo de compilación. Sin embargo. Cuando surge un aspecto vinculado con la seguridad en Java. los fragmentos del bytecode son probados para verificar su validez. El comando javac se usa para iniciar el compilador Java. Para resolver este problema. tiene la capacidad de determinar si la operación que está a punto de realizarse. violación de restricciones colocadas para acceder a las variables y métodos de las clases. Esta característica ayudará a los usuarios a descargar bytecodes Java de la Internet y ejecutarlos en sus JVM sin riesgos de seguridad.class. Libro 1: Core Java Volumen 1: Fundamentos de Java 13 © Copyright IBM Corp. el intérprete Java opera a toda capacidad sin tener que revisar cualquier aspecto de seguridad. que permite a las aplicaciones Java implementar una política apropiada de seguridad.Guía del Estudiante Core Java • • El código fuente Java se ingresa usando un editor. por lo que estos bytecodes pueden estar erróneos.

Las clases definidas por el usuario pueden ser creadas derivando de la clase java. las aplicaciones y applets Java pueden descargar cualquier código de cualquier máquina. En este modelo de caja de arena. simplemente se puede usar las cajas de arena estándar que otros crean.lang. se usa la caja de arena que viene con el navegador Web. Las aplicaciones y applets Java pueden realizar cualquier operación que este bajo la supervisión de la caja de arena y nada más. Asuma que MiClase carga otras clases tales como OtraClase1 y OtraClase2. La caja de arena evita que un virus o código no confiable realicen operaciones maliciosas. mientras que el objeto cargador de clase es un objeto que se usa para cargar una clase.SecurityManager y sobrescribiendo los métodos necesarios. Objetos Cargadores de Clases. Estas dos clases son actualmente cargadas a través del mismo cargador de clases que ha cargado a MiClase. Actualmente. El cargador de clases primordial carga solamente clases confiables. son estos: el administrador de seguridad y el cargador de clases. El administrador de seguridad puede ser personalizado al escribir clases definidas por el usuario. ni necesita revisar por virus en el código. el administrador de seguridad. que pueden ser personalizados para cargar clases específicas. La caja de arena de Java incluye las características de seguridad provistas por la JVM. . El cargador de clases primordial en principio no confía de las clases cargadas por estos objetos cargadores de clases. por ejemplo. Si se quiere ejecutar un applet en un navegador Web. Si el código proviene de una máquina no confiable. el cargador de clases y el verificador de archivos class. Es posible escribir objetos cargadores de clases propios. No se tienen que escribir nuestra propia caja de arena personalizada para las aplicaciones y applets Java que se escriben día a día. La caja de arena se puede personalizar en dos de sus componentes. Considere una clase MiClase que es cargada por un objeto cargador de clases. estos objetos cargadores de clases son sólo aplicaciones Java que se ejecutan en la JVM. El cargador de clases primordial es actualmente una parte de la implementación de la JVM. A continuación se discute el cargador de clases que es el otro componente que puede personalizarse de la caja de arena. porque mientras se ejecuta el código. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Estos administradores de seguridad personalizados son útiles cuando se quieren cargar clases que no son completamente confiables. La ventaja del modelo de caja de arena es que la aplicación Java no necesita revisar si el código es confiable. El cargador de clases carga las clases en la JVM. El código no se revisa por virus. Unidad 1: Visión General de Java Libro 1: Core Java 14 © Copyright IBM Corp. se evita realizar cualquier operación que pueda dañar al sistema. la caja de arena revisa si viene de una máquina confiable o no. Los cargadores de clases pueden ser de dos tipos: • • Cargador de Clases Primordial. incluyendo las clases definidas en el API Java que están disponibles en el sistema local.Core Java Guía del Estudiante que son difundidos a través de programas descargados de máquinas no confiables.

sólo puede existir una clase con un nombre dado. applets y Servlets. Cada cargador de clases puede estar asociado a un espacio de nombre diferente. las clases son agrupadas dentro de paquetes. El término espacio de nombres se refiere a la entidad que mantiene los nombres de las clases. a menos que el cargador de clase expresamente permita esa interacción. . La misma clase puede ser cargada a través de diferentes cargadores de clases que están asociados a diferentes espacios de nombres. A estas clases se les restringirá el acceso a otra clase que esté en un nombre de espacios diferente. puede existir cualquier número de cargadores de clases dentro de una JVM. se puede usar esta arquitectura de cargador de clase para evitar cualquier daño causado por código malicioso. El API de Java ayuda al desarrollo y ejecución de estos diferentes tipos de programas mediante una amplia librería. Sin embargo. Dentro de un espacio de nombres en particular. Éstas son básicamente librerías o paquetes de componentes relacionados. Así. En Java hay diferentes tipos de programas tales como aplicaciones. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La Figura 1.6 muestra las características provistas por el núcleo del API de Java.Guía del Estudiante Core Java En Java. El soporte de las diversas características de Java se realiza a través del API.2 El API de Java El API (Application Programming Interface) de Java es una muy buena colección de componentes de software apropiadas para el desarrollo de programas Java. Se pueden diferenciar las clases descargadas de la red desde diferentes máquinas en diferentes espacios de nombres.6: Características Provistas por el Núcleo del API Java Libro 1: Core Java Volumen 1: Fundamentos de Java 15 © Copyright IBM Corp. cada paquete tiene un conjunto de clases. Figura 1. No puede haber ninguna interacción entre cargadores de clases que están presentes en diferentes espacios de nombres. 5. Java usa paquetes para este propósito. es decir.

. Considere la Figura 1. Java comenzó de una manera modesta al permitir que los programas se ejecutaran en la Internet usando los applets de Java. Impacto de Java en la WWW Los usuarios de la WWW hacen uso de varios tipos de máquinas.7. tecnologías como los Java Servlets. los usuarios hasta hace poco. se logra este punto. Enterprise Java Beans (EJB). 6. Así que el problema clave es hacer que la información en la Internet sea compatible con todas las plataformas. el mismo programa puede ser ejecutado en diferentes plataformas. con resultados predecibles. Por esto. Usando la característica de portabilidad. las cuales se usan en muchos portales en Internet para atraer clientes.Core Java Guía del Estudiante Se ha visto cómo Java evolucionó como una aplicación de Internet. Debido a que Java permite la portabilidad. Unidad 1: Visión General de Java Libro 1: Core Java 16 © Copyright IBM Corp. Java también hace la programación de aplicaciones interactivas muy fácil. Debido a la amplia difusión de los virus y programas que pueden capturar información como palabras claves y detalles de las tarjetas de crédito del sistema de archivos local. la cual muestra como las diferentes tecnologías Java se usan para alcanzar varias funcionalidades en un ambiente Internet. Sin embargo. etc. han otorgado al programador mucho más poder para construir aplicaciones robustas y escalables para Internet. Los programas Java no tienen permiso de acceder a cualquier recurso fuera del alcance de la JVM. A continuación se discute el impacto que Java ha tenido sobre Internet y la WWW. La información no necesita ser replicada para soportar diferentes plataformas. Existen varias tecnologías basadas en Java que se usan para obtener funcionalidades especializadas. Por ejemplo. . y tienen diferentes plataformas. estaban temerosos de descargar cualquier programa ejecutable desde máquinas no confiables. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. la JVM controla los intentos de romper la seguridad a través de programas Java. Java Server Pages (JSP). esto ha crecido hasta alcanzar un mayor poder de funcionalidad. El otro tema principal de los usuarios de la WWW enfrentan es la seguridad.

están basadas en la ejecución sobre la JVM de una máquina en vez de la JVM de un navegador.7: Tecnologías Java en Internet Nota: Todas las tecnologías listadas en la Figura 1. Por lo tanto. Computador comp. Clases y Objetos Una clase es un prototipo que se usa para definir las características y los comportamientos que son comunes a todos los objetos de un mismo tipo. Las variables se usan para representar las características de los objetos y los métodos se usan para representar el comportamiento de los objetos.Guía del Estudiante Core Java Figura 1. excepto la tecnología applet. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. se puede declarar objetos especificando lo siguiente: • Tipo (nombre de clase).7. • Nombre de Objeto. A continuación se estudian las diferentes clases y objetos en Java. Similarmente. . int a. 7. Se puede declarar una variable especificando su tipo de datos y el nombre de la variable. Libro 1: Core Java Volumen 1: Fundamentos de Java 17 © Copyright IBM Corp. sólo los applets tienen restricciones en acceder los recursos del sistema fuera de la JVM.

8.8 muestra una clase llamada Cliente y objetos con los nombres ObjetoA. ObjetoB y ObjetoC de este tipo. La Figura 1. mantiene los datos del cliente. muestra más de un objeto de una misma clase.Core Java Guía del Estudiante En el fragmento de código anterior.8: Clases y Objetos Java La Figura 1. Típicamente. Se define una clase en Java usando la palabra reservada class. etc. se pueden declarar muchos objetos del mismo tipo (muchos objetos de la misma clase). el nombre del cliente. Similarmente. . La clase Cliente es una representación orientada a objetos del cliente del mundo real. comp es el nombre del objeto. es decir. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. a es el nombre de la variable. Se pueden declarar muchas variables del mismo tipo de datos. como el ID del cliente. La sintaxis es la siguiente: class NombreClase { // variables miembro // funciones miembro } Unidad 1: Visión General de Java Libro 1: Core Java 18 © Copyright IBM Corp. la clase tendrá variables miembro para mantener información. e int es su tipo de datos. y Computador es el tipo del objeto. Figura 1. el nombre de la clase. Similarmente.

A su vez. se pueden tener parámetros de la línea de comandos usando int argc y char* argv[]. En Java. Los constructores en Java tienen la misma funcionalidad que en C++. teclado y mouse. los programas Java pueden aceptar parámetros por la línea de comandos. que tiene el código Java para la clase Computador. La sintaxis es la siguiente: NombreClase objecto = new NombreClase(). Se verán otros tipos de especificadores de acceso en el Volumen 2. Además. Se pueden crear dos instancias de la clase Computador que tengan diferentes valores para estos atributos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Ambos deben aparecer dentro del bloque de definición de la clase. monitor. como en C o C++. como en C++. como en C y C++. y la definición de la función miembro apareciendo libremente. Los objetos en Java se crean usando la palabra clave new. La función main() tiene la siguiente declaración de función: public static void main(String args[]){ // El código principal va aquí } Así como en C y C++. En Java. se tiene que main() es el punto de inicio del programa Java también. es obligatorio que los argumentos de la línea de comandos estén declarados en la función main() de Java. La palabra clave public es un tipo de especificador de acceso en Java. Estas dos instancias están representadas por comp1 y comp2.Clases. y las funciones miembros como los métodos de una clase. donde la función main() es el punto de inicio del programa.1. Los constructores en Java pueden aceptar nombres de variables y tipos de variables como argumentos. que tiene los atributos cpu. la sintaxis del código no es importante. No se puede tener la declaración de la clase separada. En C o C++. dado que el punto ahora es entender la relación entre clases y objetos. el main()de Java puede tomar estos argumentos. Libro 1: Core Java Volumen 1: Fundamentos de Java 19 © Copyright IBM Corp. debe estar presente dentro de una clase Java. Las variables miembro son conocidos como miembros. Objetos y Referencias. Unidad 1 . En este momento. mientras en C o C++ es opcional para la función main() tomar argumentos desde la línea de comandos. Nota: La función main() en Java no puede ser global. se toman como un arreglo de objetos String. .Guía del Estudiante Core Java Considere la clase Computador. Observe el Ejemplo 1.

String monitor. El código Java comienza aquí.monitor = "Negro". 22. 15. 11. comp1. mouse. y Unidad 1: Visión General de Java Libro 1: Core Java 20 © Copyright IBM Corp. /*Definicion de la clase Computador comienza aqui*/ class Computador { boolean cpu. 12. 14. comp1. comp1. La clase ComputadorEjemplo crea dos objetos de tipo Computador.Core Java Guía del Estudiante Ejemplo 1. comp2. 2. 3.cpu = true. comp1. 5.monitor = "Blanco y negro". 8. 13. teclado. 7.mouse = true. 16. comp2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Computador comp2 = new Computador(). comp2. 6. se tienen dos clases. comp2. Computador y ComputadorEjemplo..cpu = true.1 Aquí. 1 El siguiente programa representa una computadora. 24. 9.. 23.teclado = true. }/* El metodo main termina aqui */ 25. 10. 19. .mouse = false. 21. 20. 18. }/*Definicion de la clase ComputadorEjemplo termina aqui*/ El código Java termina aquí Fin del Ejemplo 1. }/*Definicion de la clase Computador termina aqui*/ /*Definicion de la clase ComputadorEjemplo comienza aqui*/ public class ComputadorEjemplo { /*El metodo main comienza aqui */ public static void main(String[] args) { //Crear la instancia de la clase Computer Computador comp1 = new Computador().teclado = true. La clase Computador define el prototipo para un conjunto de objetos que tienen los mismos atributos. 1. 17. 4.

Figura 1. Se describen los objetos del mundo real usando sus atributos y comportamiento. se tiene un prototipo llamado clase. Similarmente se describen los objetos de software usando variables y métodos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. de la cual se pueden crear muchos objetos de software del mismo tipo. Se tiene un prototipo a partir del cual se crean objetos del mismo tipo del mundo real. 8. Orientación a Objetos en Java Se sabe que Java brinda soporte a la programación orientada a objetos. Similarmente. Considere la Figura 1. Java implementa la orientación a objetos a través de tres importantes propiedades. En la programación orientada a objetos. que son: Libro 1: Core Java Volumen 1: Fundamentos de Java 21 © Copyright IBM Corp. que son modelados como los objetos del mundo real. .9: Múltiples Objetos de una Clase A continuación se discuten los principios de la programación orientada a objetos usados en Java.Guía del Estudiante Core Java también se muestra que estos dos objetos pueden contener diferentes valores para sus atributos.9 para entender mejor el código anterior. los programadores crean objetos de software.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. No necesita conocer ningún detalle del funcionamiento interno de la caja.10. Unidad 1: Visión General de Java Libro 1: Core Java 22 © Copyright IBM Corp. Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos. A continuación se discuten en detalle cada uno de ellos. pero innecesaria para los demás objetos) a las otras clases que componen la aplicación.1 Encapsulación La capacidad de presentación de información dentro de un objeto se divide en dos partes bien diferenciadas: • Interna: la información que necesita el objeto para operar y que es innecesaria para los demás objetos de la aplicación. . Estas propiedades se denominan públicas y corresponde a la información que necesitan conocer los restantes objetos de la aplicación respecto del objeto definido para poder operar. Herencia. Si se introducen datos por la entrada automáticamente obtendrá un resultado en la salida. Polimorfismo. Estos atributos se denominan privados y tienen como marco de aplicación únicamente a las operaciones asociadas al objeto. • Se puede imaginar la encapsulación como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida. Esto se ilustra en la Figura 1. 8.Core Java Guía del Estudiante • • • Encapsulación. El término encapsulación indica la capacidad que tienen los objetos de construir una cápsula a su alrededor. ocultando la información que contienen (aquella que es necesaria para su funcionamiento interno.

Los usuarios pueden acceder a la información pertinente solo a sus cuentas. Se puede ir a un ATM a retirar dinero. Considere la Figura 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. revisar el saldo de una cuenta. a los usuarios no se les da acceso a saber cómo trabaja el ATM. y depositar dinero. Libro 1: Core Java Volumen 1: Fundamentos de Java 23 © Copyright IBM Corp. y no están preocupados por la implementación.11.Guía del Estudiante Core Java Figura 1. Tome el ejemplo de un ATM. Un objeto Direccion es instanciado y un método es invocado. telecajero. La clase que se muestra es Direccion. Ellos no saben cómo estas funcionalidades están implementadas.10: Encapsulación en una Clase Esta característica está disponible en Java y se llama encapsulación. Estas son las funcionalidades proporcionadas a los usuarios. . El código que es privado en la clase Direccion no es visible para la clase ServicioCliente. Ellos no pueden acceder a la información de otros usuarios. que muestra como la encapsulación se lleva a cabo en una clase Java.

que hereden los atributos y comportamiento comunes a todos los profesores. Cuando se modela este ejemplo usando objetos de software.Core Java Guía del Estudiante Figura 1. Algunos lenguajes como C++.11: Encapsulación en el Objeto Direccion 8. Unidad 5 – Clases Abstractas e Interfaces. En Java. Subsecuentemente. MonoPatin y Moto tienen propiedades que son comunes a todos los Unidad 1: Visión General de Java Libro 1: Core Java 24 © Copyright IBM Corp. desde la clase Profesor. La Figura 1. se pueden definir dos clases ProfesorFisica y ProfesorMatematica. De esta figura. Ambos pertenecen a una categoría general llamada profesores. Las interfaces serán tratadas en detalle en el Volumen 1. Ellos tienen ciertos atributos y comportamiento que son comunes a todos los profesores. una clase sólo puede tener una súper clase. Sin embargo. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. se puede deducir que Bicicleta. Esto significa que una clase en Java no puede directamente derivar de varias clases.2 Herencia Considere el ejemplo de un profesor de física y uno de matemáticas.12 muestra un ejemplo de herencia. Java soporta herencia múltiple indirectamente usando interfaces. ellos tienen ciertos atributos especiales que son comunes a todos los profesores de física y matemáticas. se puede tener una clase llamada Profesor que defina todos los atributos y comportamiento comunes a todos los profesores. . permiten la herencia múltiple en la cual una clase puede heredar de varias clases. Adicionalmente. la clase Profesor será la súper clase de las clases ProfesorFisica y ProfesorMatematica y estas serán subclases de la clase Profesor. En este caso.

Figura 1. a este método se le llamará desplazar(). a su vez.Guía del Estudiante Core Java vehículos de dos ruedas. Los Ejemplos 1. para otros el desplazamiento natural será nadar. ‘poly’ y ‘morphus’. Se encontrará entonces conque para algunos mamíferos el desplazamiento se realizará por medio de caminar. mientras que Carro. tienen propiedades que son comunes a los vehículos. es el que permita a tales mamíferos desplazarse de forma natural. La palabra ‘poly’ significa muchos y 'morphus' significa formas. suponga también que uno de los métodos que se desea implementar para esta clase. Libro 1: Core Java Volumen 1: Fundamentos de Java 25 © Copyright IBM Corp. se va a comenzar la programación en Java escribiendo la aplicación HolaMundo.3 tienen algunos elementos sintácticos. pero tienen diferentes implementaciones basadas en los parámetros que le son pasados. o en los objetos sobre los cuales son invocados. Esto se denomina polimorfismo. Estos ejemplos simplemente ayudarán a exponer al usuario a la sintaxis Java. como en el caso de los delfines e inclusive para otros. que escribe la cadena Hola Mundo en la salida estándar. polimorfismo significa una sola interfaz y múltiples implementaciones. Se usa el mismo nombre del método para invocar sus diferentes implementaciones. Suponga que se desea implementar a la clase Mamiferos. En otras palabras. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. como sucede con los murciélagos. Estos elementos serán cubiertos en las próximas unidades. En programación orientada a objetos. los nombres de métodos son los mismos. . que no se han visto en detalle hasta ahora.12: Herencia: Clases Como Especialización de la SuperClase Vehiculo 8.3 Polimorfismo Se pueden tener muchas situaciones cuando se quieren hacer varias operaciones similares unas con otras dependiendo de la entrada que se obtenga. Autobus y Camion tienen propiedades que son comunes a todos los vehículos de cuatro ruedas. los vehículos de dos y cuatro ruedas. el desplazamiento se logrará por medio de volar. formado de dos raíces griegas.2 y 1. como es en el caso de las personas. Además. Ahora.

class. se debe compilar el programa y ejecutarlo. public class HolaMundo { 3. 1.out. La compilación se realiza usando el comando javac.2. }/*Definicion de la clase HolaMundo termina aqui*/ El código Java termina aquí En este programa. Esta clase define un prototipo.java. Todo archivo Java puede tener solamente una clase.println("Hola Mundo!"). public static void main(String[] args) { 5. /*El metodo main comienza aqui */ 4. y entonces ejecutados. }/* El metodo main termina aqui */ 7.java Esto produce un archivo con el nombre HolaMundo. Este método tiene una instrucción que imprime Hola Mundo! en la salida estándar (el monitor) cuando se ejecuta. el nombre del archivo será el mismo que el nombre de la clase que contiene el método main(). . /*Definicion de la clase HolaMundo comienza aqui*/ 2. System. como se muestra a continuación: java HolaMundo La salida del programa en el monitor será: Hola Mundo! Unidad 1: Visión General de Java Libro 1: Core Java 26 © Copyright IBM Corp.. Usualmente. 6. Ejemplo de una Aplicación Java Observe el Ejemplo 1. El programa debe ser almacenado en un archivo bajo el nombre HolaMundo. que sea public. Estos bytecodes son interpretados por el interprete Java. El archivo tendrá una extensión . El intérprete Java se inicia usando el comando java.class).java..Core Java Guía del Estudiante 9. Ahora que se tiene el código fuente listo. y se puede crear cualquier número de objetos de este tipo instanciando esta clase. La aplicación Java HolaMundo de este ejemplo imprime la cadena de caracteres Hola Mundo! en la salida estándar. tienen un método (comparable a una función en C o a una función miembro en C++) con el nombre main. Ejemplo 1. como sigue: javac HolaMundo. HolaMundo es el nombre de la clase.2 El código Java comienza aquí. El próximo paso es compilar el programa para obtener los bytecodes (archivo . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. ya que la ejecución del programa usualmente comienza con el método main(). que contiene los bytecodes.

4. La programación de Applets será discutida en el Volumen 6. Esto significa que la clase HolaMundo hereda sus características de la clase Applet. 10.. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. seguida del nombre de la clase Applet.applet. 7. import java. 25). primero se tienen las instrucciones import. Unidad 3 Herencia.Applet.awt. Unidad 1 Applets. /*Definicion de la clase HolaMundo comienza aqui*/ 5. Esta definición de la clase usa la palabra reservada extends.Graphics. }/* El metodo paint termina aqui */ 12. se tiene la definición de la clase. Esta clase tiene un método con el nombre de paint. se presenta cómo escribir un applet Java que imprime la cadena de caracteres Hola Mundo!. imprime la cadena de caracteres Hola Mundo! en el área del applet. public class HolaMundo extends Applet { 6. 1. 11. 3. /*El metodo paint comienza aqui */ public void paint(Graphics g) { // Llamar al metodo drawString // del objeto Graphics g.drawString("Hola Mundo!". Ejemplo de Applet Java El applet Java HolaMundo que se presenta a continuación. Ejemplo 1.. Se aprenderá más acerca de herencia en el Volumen 2. 10. . Estas son esenciales para un programa applet. 25. 8. El código de este ejemplo también muestra el uso de los comentarios en Java. con el nombre de la clase HolaMundo. }/*Definicion de la clase HolaMundo termina aqui*/ El código Java termina aquí En este applet Java. Son los siguientes: Libro 1: Core Java Volumen 1: Fundamentos de Java 27 © Copyright IBM Corp.3 El código Java comienza aquí. Hay básicamente tres tipos de comentarios que se usan en Java. 9.2 En la próxima sección. import java. Luego. que imprime Hola Mundo!.Guía del Estudiante Core Java Fin del Ejemplo 1. 2. que se usan para importar las clases Applet y Graphics.

y ejecutarlo. Comentarios de Implementación: Comienzan con //.class) y el archivo HTML en el mismo directorio.3 Unidad 1: Visión General de Java Libro 1: Core Java 28 © Copyright IBM Corp. se puede ejecutar el applet usando el siguiente comando: appletviewer HolaMundo.class" width=200 height=50> </applet> </body> </html> El código HTML termina aquí El parámetro incluido en la etiqueta <applet> se usa para invocar el archivo HolaMundo. Estos comentarios se usan típicamente dentro de la implementación del método para explicar una expresión o una lógica de implementación compleja. Bloques de Comentarios: Encerrados dentro de /* */. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.html La ventana del visualizador de applet se abre.class. Se necesita escribir un archivo HTML para visualizar este applet. Estos comentarios se usan para generar documentación en las clases en Java. <html> <head> <title>Hola Mundo</title> <body> <applet code="HolaMundo.Core Java Guía del Estudiante Comentarios de Documentación: Encerrados dentro de /** … */. El código para el archivo HTML requerido para ejecutar el applet HolaMundo se muestra a continuación: El código HTML comienza aquí..html. Se necesita tener ambos el applet(archivo . Este archivo se llamará HolaMundo. y la salida del applet será la siguiente: Hola Mundo! Fin del Ejemplo 1.. una vez hecho esto. . Estos comentarios se usan típicamente antes de un método o clase para describir su funcionalidad.

Comparar Java con C++. Definir clases y objetos. usted debe ser capaz de: • • • • • • • Discutir la evolución de Java. Explicar la plataforma Java. Mencionar las principales características de Java. Libro 1: Core Java Volumen 1: Fundamentos de Java 29 © Copyright IBM Corp. que ha completado esta unidad. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Explicar los principios de orientación a objetos en Java. Describir el impacto de Java en la WWW.Guía del Estudiante Core Java Resumen Ahora.

una clase puede tener cualquier número de súper clases. a) Verdadero b) Falso 6) ¿Cuáles de los siguientes programas puede acceder a recursos fuera de la JVM? a) Aplicaciones Java b) Applets Java c) Servlets Java d) Ninguno de los anteriores Unidad 1: Visión General de Java Libro 1: Core Java 30 © Copyright IBM Corp.Core Java Guía del Estudiante Unidad 1: Examen de Autoevaluación 1) ¿Cuál de los siguientes lenguajes visualiza los componentes del programa como objetos? a) Lenguaje Procedimental b) Lenguaje Orientado a Objetos c) Lenguaje de Máquina d) Ninguno de los anteriores 2) ¿Cuál de las siguientes características describe la arquitectura del lenguaje Java? a) Orientado a Procedimientos b) Abstracto c) Independiente de Plataforma d) Específico 3) ¿Cuál método deben tener todos los programas de aplicación Java? a) start() b) begin() c) main() d) main(String args[]) 4) ¿Cuál es el comando para ejecutar un programa compilado en Java? a) javac b) java c) run d) execute 5) En Java. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

javax d) .javac c) .Guía del Estudiante Core Java 7) ¿Cuál es la extensión usada para guardar los archivos fuente Java? a) .java b) .src 8) ¿Cuál de los siguientes es usado para referirse a una subclase? a) Clase Interna b) Clase Anidada c) Clase Derivada d) Clase Oculta 9) ¿Cuál de las siguientes opciones ha hecho popular a Java a través de la Internet? a) Applets Java b) Aplicaciones Java c) Bytecodes Java d) Ninguna de las anteriores 10) ¿Cuál de las siguientes afirmaciones es cierta acerca de Java? a) Tiene solo un compilador b) Tiene solo un interpretador c) Tiene ambos un compilador y un interpretador d) Interpreta y luego compila Libro 1: Core Java Volumen 1: Fundamentos de Java 31 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. .

Core Java Guía del Estudiante Respuestas a la Unidad 1: Examen de Autoevaluación 1) b 2) c 3) d 4) b 5) b 6) a y c 7) a 8) c 9) a 10) c Unidad 1: Visión General de Java Libro 1: Core Java 32 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. .

Libro 1: Core Java Volumen 1: Fundamentos de Java 33 © Copyright IBM Corp. Discutir los diferentes operadores usados en Java. Explicar las diferentes estructuras de control usadas en Java. Explicar la precedencia de operadores en Java.Guía del Estudiante Core Java Unidad 2: Operadores. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Expresiones y Control de Flujo Objetivos del Aprendizaje Al final de esta unidad. usted será capaz de: • • • • • • Mencionar los tipos de datos primitivos usados en Java. Describir la declaración e inicialización de variables en Java. Definir los tipos de conversiones automáticas y explícitas en Java.

se encontrarán muchas similitudes entre la sintaxis de Java y C++. En lugar de especificar una lista. La Figura 2.1: Tipos de Datos en Java Unidad 2: Operadores. Antes de aprender acerca de la sintaxis de programación de Java.1 muestra los tipos de datos que Java soporta. Introducción En esta unidad.2 etc. ‘a’. 2. se discute la sintaxis básica de Java. se discuten los tipos de datos que provee el lenguaje Java. Figura 2. también existen los genéricos que nos permiten especificar el tipo de elemento de un Colección en tiempo de compilación. 12. Expresiones y Control de Flujo Libro 1: Core Java 34 © Copyright IBM Corp. Además de los tipos de datos en Java. por ejemplo: Double (doble). Tipos de Datos en Java Los tipos de datos en Java son de dos tipos: • • Tipos Primitivos: Tipos de datos que mantienen valores primitivos como 10. especificamos su contenido. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Tipos Referencias: Tipos de datos que mantienen valores de referencia como objetos y arreglo de referencias.Core Java Guía del Estudiante 1. .

nombre[20] denota a nombre definido por el usuario como tipo arreglo. se les coloca identificadores definidos por el usuario al escribir código Java. La Tabla 2. Libro 1: Core Java . y char.1: Tamaño Ocupado por los Tipos de Datos Primitivos en la Memoria A continuación se discute cada uno de los ocho tipos de datos en Java.Guía del Estudiante Core Java En la Figura 2. Java provee ocho tipos de datos primitivos. 2. es decir. La Figura 2. El rango de valores que estos tipos de datos primitivos pueden almacenar se muestra a continuación: • • byte short -27 hasta 27 – 1 -215 hasta 215 – 1 Volumen 1: Fundamentos de Java 35 © Copyright IBM Corp. Por ejemplo. long. 2.1. A continuación se verá en detalle los tipos de datos primitivos usados en Java.1.1 muestra cinco tipos diferentes de tipos de datos enteros.1 proporciona el nombre del tipo de dato primitivo y el tamaño ocupado por cada tipo de dato primitivo en memoria. Tipo de Dato Primitivo boolean byte char short int Long Float Double Tamaño Ocupado en Memoria 1 byte 1 byte 2 bytes 2 bytes 4 bytes 8 bytes 4 bytes 8 bytes Tabla 2. int. arreglos.1 Tipos Primitivos Los tipos de datos primitivos se usan para definir variables en Java. clases e interfaz. El tipo de dato especificado junto con un identificador en el momento de la declaración de la variable define el rango de valores que puede ser almacenado en esta variable. se tienen ocho tipos de datos. comenzando con los tipos de datos enteros. Los tres tipos referencia. bajo los tipos primitivos.1 Tipos de Datos Enteros Los tipos de datos enteros se usan para almacenar valores enteros. Los nombres mostrados en la figura son las palabras claves usadas en Java para denotar estos tipos de datos. estos son: byte. short. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Unicode provee números únicos a los caracteres. Los literales son valores constantes que son asignados a las variables. char ch = ‘a’. int i = 1. Expresiones y Control de Flujo Libro 1: Core Java 36 © Copyright IBM Corp. Todas las secuencias de escape en Java comienzan con el caracter ‘\’. Debido a que se usan números para almacenar caracteres en la máquina. . Los literales de carácter se definen usando la comilla simple. El siguiente código muestra la declaración de una variable char. mientras que las cadenas de caracteres se definen usando comillas dobles. Estos caracteres deben ser caracteres Unicode. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Java también usa secuencias de escape. short s = 1. en los caracteres. Una secuencia de escape es un conjunto especial de caracteres que tienen algún significado especial. que permanecen igual en cualquier plataforma o lenguaje. El rango del tipo de datos char se muestra a continuación: char 0 hasta 215 Java reserva 2 bytes para almacenar el valor de un char. long l = 1.caracter \ \’ – comilla simple ’ \" – comilla doble ” Unidad 2: Operadores. a todas las variables se les ha asignado el valor del literal entero 1. A continuación se muestran algunas secuencias de escape en Java: • • • • • • • • \r – retorno de carro \n – nueva línea \t – tabulador \b – borrado a la izquierda \f – comienzo de página \\ .Core Java Guía del Estudiante • • int long -231 hasta 231 – 1 -263 hasta 263 – 1 Las diferentes variables de los tipos de datos enteros se declaran como se muestra en el siguiente código: byte b = 1. el tipo de datos char esta dentro de la categoría de tipos de datos enteros. En las declaraciones anteriores. El tipo de dato char se usa para almacenar caracteres.

Figura 2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.1f. 2. . Los dos tipos de tipos de datos para punto flotante son float y double. Las variables literales float deben terminar con f o F. boolean bool = true.4 * 1038 hasta 3.8 * 10308 hasta 1.2 muestra literales que se pueden asignar a float y double. a menos que se programen cada conjunto de caracteres separadamente.8 * 10308 El siguiente código muestra la declaración de dos variables pertenecientes al tipo de datos de punto flotante. float a = 1. true o false. es decir. La Figura 2. double d = 1.1.1.2: Literales Asignados a float y double 2.1. La palabra clave boolean se usa para denotar el tipo de datos booleano. El siguiente código muestra la declaración de una variable boolean. El rango de estos tipos de datos primitivos es el siguiente: float double -3.4 * 1038 -1. lo cual no es posible en C o C++. Libro 1: Core Java Volumen 1: Fundamentos de Java 37 © Copyright IBM Corp.Guía del Estudiante Core Java Un programa Java puede interactuar con caracteres internacionales.3 Tipo de Datos boolean El tipo de datos boolean se usa para almacenar valores booleanos.2 Tipos de Datos de Punto Flotante Los tipos de datos de punto flotante se usan para almacenar valores de punto flotante.

en cambio ocupa 4 bytes en otros. Tipo de Datos Valor Aceptable 2 (se asume int) 2L 0777 (octal) 0xa5fd (hexadecimal) ‘a’. solo se mencionará que una referencia es un elemento de datos que mantiene la dirección de una posición de memoria. 2.0d 2. Los arreglos son tipos referencia. Para los tipos de datos caracteres. el valor por defecto es \u0000. Por ejemplo.5 Tamaños de los Tipos de Datos en C.12E4 2e12 2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. que son similares a las clases. false Tabla 2. donde el identificador que se usa para identificar al arreglo contiene la dirección del arreglo. Para los tipos de datos de punto flotante.2 Tipos de Referencia Los tres tipos de referencia provistos por Java son los arreglos. El tamaño de cada tipo de datos primitivo es el mismo sin importar la plataforma. clases e interfaz. No se entrará en una discusión detallada de estos tres tipos de datos ahora. el valor por defecto es 0.0. el tipo de datos entero siempre ocupa 4 bytes en cualquier implementación válida de la JVM. C++.2 muestra algunos ejemplos de valores aceptables para los diferentes tipos de datos primitivos en Java.0F Entero Punto Flotante Boolean true. Java también permite la creación de interfaces. Los identificadores usados para Unidad 2: Operadores. ‘\udddd’ 3. Por ejemplo. En Java. y Java En lenguajes como C y C++. y por esto todo el esfuerzo en la programación esta alrededor de la creación de clases. Para los tipos de datos enteros. sin embargo. ‘\n’. Java es un lenguaje de programación orientado a objetos. Un valor por defecto está siempre asociado con los tipos de datos primitivos. el valor por defecto es siempre 0. el tipo de datos entero ocupa 2 bytes en ciertos compiladores de C. Expresiones y Control de Flujo Libro 1: Core Java 38 © Copyright IBM Corp.Core Java Guía del Estudiante 2. el tamaño del tipo de datos es independiente de la plataforma en la cual la aplicación se ejecuta.14 (se asume double) 3. El valor por defecto para los boolean es false.1. Los arreglos en Java no son referidos como tipos de datos estructurados como en C o C++. el tamaño del tipo de datos puede variar entre plataformas y es dependiente de la máquina.2: Algunos Ejemplos de Valores para los Tipos de Datos en Java 2. Estos serán tratados en detalle en una sección posterior en esta unidad.1.4 Valores Aceptables Para Diferentes Tipos de Datos Primitivos en Java La Tabla 2. .

se va a aprender acerca de clases envolventes (wrapper classes).Conceptos Avanzados. Los genéricos le permiten hacer abstracciones de tipos de datos. toString() y hashCode() que son sobrescritos de la clase java. que esencialmente envuelven los tipos de datos primitivos en clases. Libro 1: Core Java Volumen 1: Fundamentos de Java 39 © Copyright IBM Corp. es una clase envolvente para el tipo primitivo boolean. Unidad 1 – API de Colecciones. Clases Envolventes Se han discutido varios tipos de datos primitivos de Java. que requieren de un objeto en vez de una variable de tipo de dato primitivo. Los objetos de las clases envolventes se pueden usar también para este propósito. .0 introduce nuevas funcionalidades al lenguaje de programación Java. Seguidamente.3 Genéricos Java 5. por lo tanto. se usan las clases envolventes y se proveen funciones primitivas dentro de las clases envolventes.Boolean La clase Boolean es la representación en objeto del tipo de dato primitivo boolean. Una clase envolvente da la funcionalidad de una clase para un tipo de datos primitivo. que vienen como parte de la librería de Java. Unidad 5 – Clases Abstractas e Interfaces.1 La Clase java. 3.lang. Se discute a continuación las ocho clases envolventes en Java. Hay ciertas clases. comenzando por la clase envolvente Boolean. 3.Object. También tiene ciertos métodos que se pueden usar para manipular el valor del boolean almacenado internamente. La clase Boolean tiene el método booleanValue(). Estas clases envolventes tienen métodos que permiten manipular el tipo de dato primitivo correspondiente que ellos envuelven. 2. Unidad 1 – Clases. Java también provee clases envolventes para cada uno de estos tipos de datos primitivos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.lang. También tiene los métodos equals(). Sin embargo. que retorna el valor del boolean que está envuelto en este objeto. Una de esas funcionalidades son los genéricos. A continuación se muestra una breve descripción sobre los genéricos. Esta clase. Java provee clases envolventes para los ocho tipos de datos primitivos. tiene un miembro del tipo boolean. Estos serán tratados en detalle en el Volumen 8 . Objetos y Referencias y las interfaces en el Volumen 2. Puede que usted encuentre construcciones similares en otros lenguajes pero verá que hay diferencias importantes entre ellas. cuando se quiere proveer algunas funciones utilitarias para un tipo de dato en particular.Guía del Estudiante Core Java identificar a las clases e interfaces mantienen la dirección de la posición de la memoria. Las clases son analizadas en detalle en el Volumen 2. Los tipos de datos primitivos tienen conjuntos de operaciones que se pueden usar con ellos.

Object. float o double.Object. Esta clase. por ser una clase envolvente para el tipo de dato primitivo byte. float o double. Estos métodos son los siguientes: • • • equals() toString() hashCode() Además de estos métodos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Esto se hace usando los siguientes métodos: • • • • • byteValue() shortValue() intValue() floatValue() doubleValue() de la clase La clase Byte también tiene métodos que son sobrescritos java. la clase Byte tiene el método static valueOf() para convertir una representación de objeto String en un valor byte. por ser una clase envolvente para el tipo primitivo short. toString() y hashCode() que son sobrescritos de la clase java.lang. Esto se hace usando los métodos: • • • • • byteValue() shortValue() intValue() floatValue() doubleValue() La clase Short también tiene los métodos equals(). tiene un miembro del tipo short.lang.2 La Clase java.lang.3 La Clase java. 3.Byte La clase Byte es la representación en objeto del tipo de dato primitivo byte. Esta clase tiene métodos que permiten obtener el valor del short almacenado en el objeto Short en la forma de byte. short. Esta clase. 3. int. short.lang. Esta clase tiene métodos que permiten obtener el valor del byte almacenado en el objeto Byte en la forma de byte. int. tiene un miembro del tipo byte. Expresiones y Control de Flujo Libro 1: Core Java 40 © Copyright IBM Corp.Core Java Guía del Estudiante La clase Boolean tiene el método static valueOf() para convertir una representación de objeto String en un valor Boolean. Unidad 2: Operadores.Short La clase Short es la representación en objeto del tipo de dato primitivo short. .

Se puede usar el método charValue() de esta clase para obtener el valor char almacenado por el objeto en la forma del tipo de dato primitivo char. se debe proveer información más específica. Libro 1: Core Java Volumen 1: Fundamentos de Java 41 © Copyright IBM Corp.5 La Clase java. 3. Es posible usar los métodos provistos por esta clase para manipular variables que mantienen valores del tipo primitivo int. Estos serán convertidos al momento de la asignación de valores. Algunas de las funciones importantes provistas por esta clase dan la posibilidad de determinar el tipo de carácter y convertir un carácter en minúscula a mayúscula y viceversa. Si se quiere que la JVM “piense” que es del tipo long. se debe usar una "L" después del entero. floatValue() y doubleValue() respectivamente. Cuando se usa un número como 2. shortValue(). Así. Un objeto Integer tiene un campo. Si se quiere que la JVM lo interprete como algo diferente a un int. . La clase Character. Los métodos definidos en la clase Character están basados en la tabla de atributos Unicode. float o double usando los métodos byteValue(). siempre y cuando el valor pertenezca al rango válido para un byte.Character La clase Character es la representación en objeto del tipo de dato primitivo char.Integer La clase Integer es la representación en objeto del tipo de dato primitivo int. Los caracteres están encerrados dentro de comillas simples. short. int.4 La Clase java. Esta tabla asocia a cada código Unicode definido con un nombre. y de un String a un int usando el método parseInt(String s). Esta clase tiene métodos que permiten obtener el valor del int almacenado en el objeto Integer en la forma de byte. la sentencia byte b = 120. 3. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. ‘a’ es el carácter a.lang. los interpretará como enteros. Se pueden obtener caracteres especiales usando secuencias de escape. Así. ‘\n’ es la secuencia de escape para el carácter de nueva línea.Guía del Estudiante Core Java La clase Short tiene el método static valueOf() para convertir una representación del objeto String en un valor Short. la JVM asume que es del tipo int. que es del tipo primitivo int. al ser una clase envolvente. convertirá 120 de int a byte. Algunas de las funciones más importantes provistas por esta clase son la posibilidad de convertir un int a un String con el método toString(). Los otros tipos de datos enteros byte y short no pueden ser especificados. Cuando la JVM encuentra valores int en el código. intValue().lang. tiene un campo del tipo primitivo char. Se pueden usar los métodos provistos por esta clase para manipular variables que mantienen valores del tipo primitivo char.

Core Java

Guía del Estudiante

3.6 La Clase java.lang.Long
La clase Long es la representación en objeto del tipo de dato primitivo long. Esta clase, por ser una clase envolvente del tipo primitivo long, tiene un miembro del tipo long. Esta clase tiene métodos que permiten obtener el valor del long almacenado en el objeto Long en la forma de byte, short, int, float o double usando los métodos byteValue(), longValue(), intValue(), floatValue() y doubleValue() respectivamente. La clase Long tiene también los métodos equals(), toString() y hashCode() que son sobrescritos desde la clase java.lang.Object. La clase Long tiene un método static valueOf() para convertir una representación del objeto String en un valor Long.

3.7 La Clase java.lang.Float
La clase Float es la representación en objeto del tipo de dato primitivo float. Esta clase, por ser una clase envolvente del tipo primitivo float, tiene un miembro del tipo float. También tiene métodos que permiten obtener el valor del float almacenado en el objeto Float en la forma de byte, short, int, float o double usando los métodos byteValue(), shortValue(), intValue(), floatValue(), longValue() y doubleValue() respectivamente. La clase Float también tiene los métodos equals(), toString() y hashCode() que son sobrescritos de la clase java.lang.Object. La clase Float tiene el método static valueOf() para convertir una representación del objeto String en un valor Float.

3.8 La Clase java.lang.Double
La clase Double es la representación en objeto del tipo de dato primitivo double. Esta clase, por ser una clase envolvente para el tipo primitivo double, tiene un miembro del tipo double. También tiene métodos que nos permiten obtener el valor del double almacenado en el objeto Double en la forma de byte, short, int, float o double usando los métodos byteValue(), shortValue(), intValue(), floatValue() y doubleValue() respectivamente. La clase Double también tiene los métodos equals(), toString() y hashCode() que son sobrescritos de la clase java.lang.Object, así como el método static valueOf() para convertir una representación del objeto String en un valor Double. Considere el Ejemplo 2.1, que muestra el uso de las clases envolventes en Java. Ejemplo 2.1 El código Java comienza aquí...
Unidad 2: Operadores, Expresiones y Control de Flujo Libro 1: Core Java 42

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

1. /*Definicion de la clase EnvolventesEjemplo comienza aqui*/ 2. public class EnvolventesEjemplo { 3. /*El metodo main comienza aqui */ 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. public static void main(String args[]) { Integer i = new Integer(5); String s = "250.47"; System.out.println("Valor de i es: " + i.toString()); System.out.println("Valor de s es: " + Float.parseFloat(s)); Float f = Float.valueOf(s); float primitivoFloat = f.floatValue(); int primitivoInt = f.intValue(); System.out.println("Valor del primitivo float es: " + primitivoFloat); System.out.println("Valor del primitivo int es: " + primitivoInt); }/* El metodo main termina aqui */ }/*Definicion de la clase EnvolventesEjemplo termina aqui*/

El código Java termina aquí El código anterior usa varios métodos estáticos y métodos de instancia en las clases envolventes. El programa muestra el uso de las clases envolventes para Integer y Float. La salida del código anterior es la siguiente: Valor de i es: 5 Valor de s es: 250.47 Valor del primitivo float es: 250.47 Valor del primitivo int es: 250 Fin del Ejemplo 2.1 Existen otras dos clases en Java, una de ellas se ocupa de los enteros de precisión arbitraria inmutables, y la otra de números decimales con signo de precisión arbitraria inmutables. La primera clase esta representada por java.math.BigInteger y la segunda clase por java.math.BigDecimal. Dado, que ambas clases tratan también con números en Java, se van a discutir acerca de ellas brevemente.

Libro 1: Core Java

Volumen 1: Fundamentos de Java 43 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

4. Math Clases Colaboradoras sobre los Tipos de Datos
Java provee un número de paquetes. Los paquetes son contenedores para las clases, los cuales serán tratados en detalle en el Volumen 2, Unidad 7 – Paquetes. Los tipos primitivos enteros de Java no pueden efectuar operaciones sobre números largos, por esto Java provee un paquete llamado Math, que tiene dos clases, son estas: BigInteger y BigDecimal, para realizar operaciones matemáticas sobre números largos. Se aprenderá a continuación acerca de estas dos clases, BigInteger y BigDecimal.

4.1 La Clase java.math.BigInteger
Esta clase provee la abstracción de enteros de un ‘tamaño de palabra infinito’ representados por el tipo de datos int. Esta clase es inmutable, lo que significa que el valor representado por esta clase no puede cambiar; representa enteros de precisión arbitraria. BigInteger se representa usando la forma de complemento a dos, como en el caso del tipo de dato primitivo int. Todos los operadores que se pueden usar con el tipo de dato primitivo entero tienen operadores análogos que se pueden usar con BigInteger. Usando BigInteger, se pueden realizar manipulaciones de bits, verificar si un número es primo, generar un número de primo, calcular el Máximo Común Divisor, etc.

4.2 La Clase java.math.BigDecimal
Esta clase se usa para representar dígitos a la derecha del punto decimal en una escala de un entero de 32-bit. BigDecimal usa un valor sin escala que es entero de precisión arbitraria. Esta clase provee métodos que permiten realizar operaciones aritméticas básicas y manipulaciones de escala, también ayuda a comparar dos valores BigDecimal y a convertir el formato de los valores BigDecimal. La clase BigDecimal también permite especificar el comportamiento del redondeo para los valores decimales proporcionando ocho modos de redondeo. En C o C++, se usan arreglos de caracteres para representar cadenas de caracteres (strings). Java, por el contrario, provee la clase String, que se puede usar para almacenar y manipular cadenas de caracteres. Se va a examinar el manejo y manipulación de String.

5. Manejo de String
El manejo de cadenas de caracteres (string) en Java se hace usando las clases String o StringBuffer, ambas clases se usan para almacenar y manipular cadenas de caracteres. Sin embargo, hay una diferencia principal entre estas dos clases en la forma en la que son manejados por el sistema de tiempo de ejecución de Java. Se va a profundizar en estas dos clases para entender la diferencia.

Unidad 2: Operadores, Expresiones y Control de Flujo

Libro 1: Core Java 44

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

5.1 La Clase String
El literal string se usa para almacenar valores string (cadena de caracteres). La clase String se usa para denotar un literal string. Se puede especificar strings al encerrar el texto dentro de comillas dobles, es importante notar la diferencia entre comillas simples y dobles: ‘z’ no es equivalente a “z”. La primera es el carácter z, la segunda es una cadena de caracteres (string) de un carácter. El siguiente código muestra la declaración de una variable String. String str = "Hola"; El fin de una cadena de caracteres es usualmente indicado por ‘\0’. La clase String es inmutable, lo que significa que su valor no puede ser cambiado una vez que se crea un objeto del tipo String. Se pueden usar métodos definidos en la clase String para hacer lo siguiente: • • • • Examinar los diferentes caracteres que componen una cadena de caracteres. Buscar una sub-cadena dentro de una cadena de caracteres. Comparar dos cadenas de caracteres. Crear otra cadena de caracteres que tenga todos los caracteres de la primera cadena de caracteres en mayúsculas o minúsculas.

Dos cadenas de caracteres pueden ser concatenadas usando el operador "+" como se muestra en la Figura 2.3. Como String es inmutable, esta concatenación es actualmente implementada usando internamente la clase StringBuffer por Java. En la próxima sección, se discute la clase StringBuffer. String uno = "abcde"; String dos = "fghij"; String tres; tres = uno + dos; System.out.println(tres);
Figura 2.3: Uso de la Clase String

El objeto tres es creado y tiene el valor abcdefghij. 5.1.1 El paquete java.util.regex Este paquete está constituido por dos clases: la clase Matcher y la clase Pattern y por una excepción, PatternSyntaxException. Las clases son usadas para hacer corresponder secuencias de caracteres con patrones especificados por expresiones regulares.

Libro 1: Core Java

Volumen 1: Fundamentos de Java 45 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

Una instancia de la clase Pattern representa una expresión regular que es especificada en forma de secuencias de caracteres con una sintaxis similar a la usada por Perl. Las instancias de la clase Matcher son usadas para hacer corresponder secuencias de caracteres con un patrón dado. La entrada (Input) es proporcionada a las clases Matcher a través de la interface CharSequence con el fin de soportar la correspondencia con caracteres procedentes de una amplia variedad de fuentes de entrada (archivos, string, etc). 5.1.2 Las clases Pattern y Matcher La clase Pattern: Es una representación compilada de una expresión regular, es decir, representa la expresión regular que necesita ser compilada. Pertenece al paquete java.util.regex. La clase Pattern implementa la interfaz Serializable. Para crear una instancia de la clase Pattern, se puede compilar una expresión regular, especificada como una cadena de caracteres (String). El patrón resultante luego puede ser usado para crear un objeto Matcher que puede hacer corresponder secuencias de caracteres arbitrarios con la expresión regular. Todo el estado involucrado en la realización de una correspondencia (match) reside en el objeto. Por lo tanto, muchos objetos Matcher pueden compartir el mismo patrón. Una secuencia de invocación típica es: Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches(); El método matches esta definido por esta clase como un recurso para cuando una expresión regular sea usada sólo una vez. Este método compila una expresión y hace la correspondencia (match) de una secuencia de entrada con ésta, en una invocación sencilla. La siguiente sentencia
boolean b = Pattern.matches("a*b", "aaaaab");

es equivalente a las tres sentencias anteriores aunque para correspondencias repetidas es menos eficiente ya que no permite que el patrón compilado sea reutilizado. Las instancias de la clase Pattern son inmutables y seguras para ser usadas por múltiples hilos concurrentes. Las instancias de la clase Matcher no son seguras para tal uso.

Unidad 2: Operadores, Expresiones y Control de Flujo

Libro 1: Core Java 46

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Esta clase es un motor que realiza operaciones de correspondencia sobre una secuencia de caracteres interpretando un patrón. • El método find. con el patrón. Este método retorna verdadero si y sólo si la secuencia de entrada completa se corresponde con este patrón de Matcher. Este método retorna verdadero si y sólo si una subsecuencia de la secuencia de entrada se corresponde con el patrón de este Matcher. este método siempre comienza al principio de la región. Este método comienza al principio de la región de la clase Matcher. Cada uno de estos métodos retorna un boolean indicando éxito o fracaso. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. y group. Si la correspondencia tiene éxito. intenta encontrar la próxima subsecuencia de la secuencia de entrada que se corresponde con el patrón. • El método lookingAt intenta hacer corresponder la secuencia de entrada. Se puede obtener más información acerca de una correspondencia exitosa haciendo una consulta del estado del matcher. end. Si la correspondencia tiene éxito entonces se puede obtener más información por medio de los métodos start. Una vez creada. o si una invocación anterior del método fue exitosa y el matcher no ha sido reestablecido (reset) desde entonces. La diferencia de ese método es que no requiere que el patrón completo sea correspondido. una clase Matcher puede ser usada para realizar tres tipos diferentes de operaciones de correspondencia: • El método matches intenta hacer corresponder la secuencia de entrada completa con el patrón. Libro 1: Core Java Volumen 1: Fundamentos de Java 47 © Copyright IBM Corp. Una instancia de la clase Matcher es creada a partir de un patrón mediante la invocación del método matcher de la clase Pattern. Este método retorna verdadero si y sólo si la secuencia de entrada se corresponde con este patrón de Matcher. comenzando desde el principio de la región. Si la correspondencia tiene éxito. en el primer caracter no correspondido por la anterior correspondencia. end.Guía del Estudiante Core Java La clase Matcher: La clase Matcher implementa MatchResult. end. y group. entonces se puede obtener más información por intermedio de los métodos start. Como el método matches. y group. entonces se puede obtener más información por intermedio de los métodos start. .

El estado explícito de una clase Matcher incluye los índices de inicio y culminación de la correspondencia exitosa más reciente. la cual es inicialmente cero y es actualizada por el método appendReplacement. Si se intenta hacer una consulta de cualquier parte de éste antes de una correspondencia exitosa esto causará que una IllegalStateException sea lanzada. actualmente se implementa a través de la creación de objetos StringBuffer. La región puede ser modificada por intermedio del método region y consultada a través de los métodos regionStart and regionEnd. . El estado implícito de una clase Matcher incluye la secuencia de caracteres de entrada así como la posición append. El estado explícito de una clase Matcher es computarizada de nuevo por cada operación de correspondencia. Los métodos appendReplacement y appendTail pueden ser usados sucesivamente para recoger el resultado dentro de un buffer de cadena de caracteres existente. 5. Es posible que una clase Matcher sea reestablecida explícitamente al invocar su método reset() o. StringBuffer juega un rol vital en la concatenación de cadenas de caracteres. La forma en que los límites de la región interactúan con algunos constructores de patrones puede ser cambiada. Por defecto. y luego Unidad 2: Operadores. Cuando se reestablece una clase Matcher.2 La Clase StringBuffer La clase StringBuffer es similar a la clase String y se usa para denotar a un literal string. su método reset(CharSequence). ya que no son seguras.Core Java Guía del Estudiante Una clase Matcher encuentra correspondencias en un subconjunto de su entrada (input) llamado la región. También incluye los índices de inicio y culminación de la subsecuencia de entrada capturada por cada grupo de captura en el patrón así como un conteo total de tales subsecuencias. la región contiene toda la entrada de Matcher. computados a partir del resultado de la correspondecia. a diferencia de la clase String. Esto significa que los valores almacenados por objetos de esta clase pueden ser cambiados. si se desea. Expresiones y Control de Flujo Libro 1: Core Java 48 © Copyright IBM Corp. El estado explícito de una clase Matcher inicialmente no está definido. si se desea una nueva secuencia de entrada. La clase Matcher también define métodos para reemplazar subsecuencias correspondidas con nuevas cadenas de caracteres cuyos contenidos pueden ser. Ver useAnchoringBounds y useTransparentBounds para más detalles. Las instancias de esta clase no deben ser usadas por múltiples hilos concurrentes. StringBuffer es mutable. se elimina la información de su estado explícito y se establece la posición append en cero. también se proveen métodos para retornar estas subsecuencias capturadas en forma de caracteres de cadena. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Como una conveniencia. o el método replaceAll más conveniente puede ser usado para crear una cadena de caracteres en la cual cada subsecuencia correspondida en la secuencia de entrada es reemplazada. Sin embargo.

cuando son sobrecargados para aceptar datos de cualquier tipo. si x refiere a un objeto StringBuilder que contiene “lava”. Las instancias StringBuilder no son seguras para el uso con múltiples hilos. El método append agrega siempre estos caracteres al final de la secuencia de caracteres en construcción.insert(sb. 5. Estos valores son almacenados usualmente en la memoria de la pila. mientras que x.“nos”) alteraría la construcción de la secuencia para contener “lavanosmanos”. Libro 1: Core Java Volumen 1: Fundamentos de Java 49 © Copyright IBM Corp. Los objetos StringBuffer se pueden usar en aplicaciones multihilos. Cada uno convierte con eficacia un dato dado a un string y añade o inserta los caracteres de ese string al string en construcción.Guía del Estudiante Core Java se usa el método append() sobre los objetos creados. se recomienda que esta clase sea utilizada preferiblemente en lugar de StringBuffer pues será más rápida en la mayoría de los casos. . Cada constructor de StringBuilder tiene una capacidad de almacenamiento. Generalmente si sb refiere a una instancia de StringBuilder.append(x) tiene el mismo efecto que sb. Se han discutido varios tipos de datos soportados por Java. Mientras la longitud de la secuencia de caracteres contenida en el StringBuilder no exceda la capacidad.insert(4. entonces sb. Se aprenderá acerca de los interbloqueos en detalle en el Volumen 7. Los nombres de las variables o identificadores se usan para localizar estos valores. Si se necesita o requiere la sincronización entonces se recomienda que StringBuffer sea utilizado. x). Si desborda el buffer interno. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. ya que los métodos que operan en estos objetos pueden ser sincronizados para evitar la ocurrencia del interbloqueo. no es necesario asignar un nuevo buffer interno. Las operaciones principales en StringBuilder son los métodos append e insert. automáticamente se hace más grande. En lo posible. después de la llamada x. Unidad 3 – Sincronización de Hilos. el método insert agrega los caracteres en un punto especificado. Esto es una alternativa mejor que usar el operador + sobre dos objetos String. Por ejemplo. los cuales representan varios tipos de valores que se pueden usar en programas Java.3 La Clase StringBuilder Esta clase proporciona un API compatible de StringBuffer.append(“manos”) del método haría que la secuencia construida contenga “lavamanos”. Fue diseñada para usarla como el reemplazo de StringBuffer en donde el string sea utilizado por un solo hilo (generalmente es el caso). A continuación se discuten los nombres de variables o identificadores.length(). y se pueden cambiar cualquier número de veces dentro de un mismo programa Java. pero no se garantiza su uso bajo escenarios de sincronización.

Identificadores Cuando se escribe un programa se necesita almacenar los valores usados en el programa. La única diferencia entre StringBuffer y StringBuilder es que StringBuilder es asíncrono mientras que StringBuffer es síncrono. Por esto se usa un identificador o variable para referirnos a estas posiciones en memoria. Si el texto puede cambiar. se necesita tener un método simple para acceder a estas posiciones en la memoria. . utilizar un StringBuilder porque StringBuilder no es síncrono. StringBuilder y StringBuffer String es inmutable mientras que StringBuffer y StringBuilder pueden cambiar sus valores. Criterios para elegir entre String. Unidad 2: Operadores. StringBuilder es más eficiente que StringBuffer. No debe haber espacio entre los caracteres. Los nombres de variables pueden contener letras. StringBuffer y StringBuilder: • • • Si el texto no va a cambiar usar la clase String porque un objeto String es inmutable. utilizar un StringBuffer porque StringBuffer es síncrono. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Para una mejor legibilidad. La primera letra de la variable será siempre en minúsculas y las primeras letras de las palabras subsecuentes en mayúsculas (Ejemplo: numeroCuenta). Estas son: • • • • • • Los nombres de variables deben comenzar con una letra. el subrayado (_) y el carácter dólar ($). Sin embargo. Si el texto puede cambiar y es accedido solamente por un hilo. números. subrayado (_) o dólar ($). los nombres de variables deben componerse de dos o más palabras significativas. Las palabras clave de Java no pueden usarse como nombres de variables. Expresiones y Control de Flujo Libro 1: Core Java 50 © Copyright IBM Corp.Core Java Guía del Estudiante 5. no hay restricción en el número de letras que se pueden usar. 6.4 Diferencias entre String.1 Convenciones de Nombres Hay algunas reglas que tienen que seguirse al momento de nombrar variables en Java. Por lo tanto cuando una aplicación necesita funcionar solamente con un hilo entonces es mejor utilizar StringBuilder. y es accedido por múltiples hilos. 6. No hay límite en la longitud del nombre de la variable. Estos valores se almacenan en la memoria.

4: Declaración e Inicialización de Variable A continuación se discute el alcance de las variables.Guía del Estudiante Core Java • En el caso de nombres de clase. Declaración e Inicialización de Variables Java es un lenguaje fuertemente tipificado. La inicialización de la variable se muestra a continuación: edad = 18. . la declaración y la inicialización de la variable. • Inicializar la variable. donde el valor inicial es especificado. int es el tipo de dato de la variable. Unidad 7 – Paquetes). es decir. éstas tienen que ser declaradas. 7. toda variable debe tener un tipo de dato asociado. Libro 1: Core Java Volumen 1: Fundamentos de Java 51 © Copyright IBM Corp. como se muestra a continuación: int edad. en un mismo paso. Ahora. Se discute a continuación cómo se usa una variable.4. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. como se muestra en la Figura 2. para usar las variables. Se pueden combinar ambas. La declaración e inicialización consiste de los dos pasos siguientes: • Especificar el tipo de dato de la variable. Esto ayuda a saber el tipo del dato almacenado dentro de la variable o el tipo de dato que necesita ser almacenado dentro de la variable. Figura 2. que serán discutidas en el Volumen 2.1 Alcance de una Variable Todas las sentencias de Java están especificadas dentro de un bloque (excepto para las sentencias package e import. Aquí. y edad es el identificador. todas las palabras que son parte del nombre de la clase deben comenzar con una letra mayúscula (Ejemplo: StringBuffer). 7. seguido por el identificador.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.2 El código Java comienza aquí.println(a). estos se denominan bloques anidados. Un bloque puede contener otro bloque (o cualquier número de bloques) dentro de él. . El rango de bloques dentro de la cual una variable se puede usar se conoce como alcance de una variable. entonces puede ser usada dentro del bloque del medio y del interno. 3. b = 20.println(b).out. System.5: Alcance de Variables El bloque externo contiene al bloque del medio. }/* Fin del 1er bloque */ El código Java termina aquí Del código anterior. 6. Considere el caso de tres bloques anidados.. Suponga que una variable llamada edad se declara dentro del bloque del medio. se puede ver que las variables a y b. declaradas en el primer bloque (el bloque externo). public class BloquePrueba { 2. Expresiones y Control de Flujo Libro 1: Core Java 52 © Copyright IBM Corp.out. 5. que a su vez contiene al bloque interno. System. pero no dentro del bloque externo. también son visibles en el segundo bloque (el bloque Unidad 2: Operadores. 10.2 ilustra el alcance de una variable en un programa Java Ejemplo 2. como se muestra en la Figura 2. System. con el correspondiente carácter ‘}’. /* Comienza el 1er bloque */ static int a = 10. 8. Figura 2. y el fin del bloque. 7. 9.Core Java Guía del Estudiante El inicio de un bloque se marca con un carácter ‘{‘.println(c).. 1.5. El Ejemplo 2. }/* Fin del 2do bloque */ 11. 4.out. public static void main(String args[]) { /* Comienza el 2do bloque */ int c = 30.

se usan numerosas expresiones para calcular algunos valores específicos. Operadores Relacionales. La palabra clave static se usa para especificar que estas variables son variables de clase. lo contrario no es cierto. substracción. división y módulo. y los operadores que requieren tres operandos se llaman operadores ternarios (ejemplo:.? :). Las variables usadas en estas expresiones se llaman operandos. Fin del Ejemplo 2. 8. multiplicación. Java soporta los siguientes tipos de operadores: • • • • • • Operadores Aritméticos. +).1 Operadores Aritméticos Los operadores aritméticos se usan para indicar operaciones aritméticas como adición. Estas expresiones hacen uso de varios operadores y son similares a expresiones aritméticas que usan muchos operadores. Operadores de Bits. Sin embargo. Los operadores que requieren dos operandos se llaman operadores binarios (por ejemplo.2 Se discute a continuación acerca de varios operadores usados en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.6.Guía del Estudiante Core Java interno). . Figura 2. El alcance de una variable está limitado al bloque en la cual es declarada. Existen algunos operadores que solo necesitan un operando. Los operadores aritméticos se muestran en la Figura 2.6: Operadores Aritméticos Libro 1: Core Java Volumen 1: Fundamentos de Java 53 © Copyright IBM Corp. son llamados operadores unarios (ejemplo: ++). Operadores Condicionales. Operadores Ternarios. Operadores de Asignación. 8. Operadores en Java Cuando se escribe un programa. las variables declaradas dentro del segundo bloque no son visibles dentro del primer bloque.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La siguiente expresión ilustra el uso del operador /: a / b %: El operador % se usa para indicar la operación de módulo. Permite adicionar valores almacenados en dos o más variables. Se puede concatenar un entero con un string. el operador + está sobrecargado. ambos str3 y str4 tendrán ambos el string "Pedro Perez apoyado sobre una pared.b *: El operador * se usa para indicar la operación de multiplicación.Core Java Guía del Estudiante • +: El operador + se usa para indicar la operación de adición. Aquí str2 tendrá el string "Numero de dias de la semana es: 7". La siguiente expresión ilustra el uso del operador +: a + b -: El operador – se usa para indicar la operación de substracción. Pedro Perez tuvo una gran caida". Permite substraer un valor almacenado en una variable de un valor almacenado en otra variable. La siguiente expresión ilustra el uso del operador %: a % b • • • • Entre estos operadores aritméticos. Este operador se usa para concatenar dos cadenas de caracteres. Expresiones y Control de Flujo Libro 1: Core Java 54 © Copyright IBM Corp. El siguiente fragmento de código ilustra esto: String str1 = "Pedro Perez apoyado sobre una pared. String str4 = "Pedro Perez apoyado sobre una pared. String str2 = str1 + dias. int dias = 7. En el código anterior. Unidad 2: Operadores. " + "Pedro Perez tuvo una gran caida". String str2 = "Pedro Perez tuvo una gran caida". . como se muestra en el siguiente código: String str1 = "Numero de dias de la semana es: ". String str3 = str1 + str2. La siguiente expresión ilustra el uso del operador –: a . Permite multiplicar valores almacenados en dos variables. Permite dividir un valor almacenado en una variable entre un valor almacenado en otra variable. La siguiente expresión ilustra el uso del operador *: a * b /: El operador / se usa para indicar la operación de división. ". Permite encontrar el residuo resultante de dividir un valor almacenado en una variable entre el valor almacenado en otra variable.

el resultado de esta operación es ‘true’. caso contrario el resultado es ‘false’. dos números. el resultado de esta operación es ‘true’. Cuando esta condición se satisface. caso contrario el resultado es ‘false’. • • • 35 < 65 35 > 65 resulta en true resulta en false 35 <= 65 resulta en true Libro 1: Core Java Volumen 1: Fundamentos de Java 55 © Copyright IBM Corp.Guía del Estudiante Core Java 8. La siguiente expresión ilustra el uso de este operador: a <= b >=: El operador mayor o igual que >= se usa para determinar si el valor almacenado en una variable es mayor o igual que el valor almacenado en otra variable. caso contrario el resultado es ‘false’. el resultado de esta operación es ‘true’. La siguiente expresión ilustra el uso de este operador: a > b <=: El operador menor o igual que <= se usa para determinar si el valor almacenado en una variable es menor o igual que el valor almacenado en otra variable. caso contrario el resultado es ‘false’. Cuando esta condición se satisface. La siguiente expresión ilustra el uso de este operador: a == b !=: El operador de no igual != se usa para determinar si el valor almacenado en una variable es diferente al valor almacenado en otra variable. Cuando esta condición se satisface. Cuando esta condición se satisface. el resultado de esta operación es ‘true’. caso contrario el resultado es ‘false’. La siguiente expresión ilustra el uso de este operador: a != b • • • • • Tómese como ejemplo. el resultado de esta operación es ‘true’. 35 y 65. y determine que sucede cuando se usan los diferentes operadores relacionales en ellos. Los diferentes operadores relacionales se listan a continuación: • <: El operador menor que < se usa para determinar si el valor almacenado en una variable es menor que el valor almacenado en otra variable. La siguiente expresión ilustra el uso de este operador: a < b >: El operador mayor que > se usa para determinar si el valor almacenado en una variable es mayor que el valor almacenado en otra variable. Cuando esta condición se satisface.2 Operadores Relacionales Los operadores relacionales se usan para comparar dos valores almacenados en variables. caso contrario el resultado es ‘false’. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La siguiente expresión ilustra el uso de este operador: a >= b ==: El operador de igualdad == se usa para determinar si el valor almacenado en una variable es igual al valor almacenado en otra variable. Cuando esta condición se satisface. . el resultado de esta operación es ‘true’.

Considere este ejemplo. entonces el resultado de la operación es true. false en caso contrario. Primero se evalúa el resultado de la condición a la izquierda del operando.Core Java Guía del Estudiante • • • 35 >= 65 resulta en false 35 == 65 resulta en false 35 != 65 resulta en true A veces durante la ejecución. Expresiones y Control de Flujo Libro 1: Core Java 56 © Copyright IBM Corp. la condición a la derecha del operador no es evaluada. y el resultado de la operación es true. entonces la condición a la derecha no es evaluada. La siguiente expresión ilustra el uso de este operador: (a < b) && (b < c) ||: El operador || (OR) se usa para determinar si al menos uno de las dos condiciones en alguno de los lados de este operador es true. y al contrario. el caso que la operación es false. Si la condición a la izquierda de este operador es true. asumiendo que mc es un objeto definido y MiClase es una clase Java. si resulta en true. la operación completa es true. entonces la condición a la derecha es evaluada. mc instanceof MiClase La sentencia anterior retorna true si es una instancia. el operador instanceof se usa como sigue para saber si mc es una instancia de la clase MiClase. . El operador instanceof devuelve true o false basado en si el operando izquierdo es una instancia del operando derecho. Si la condición a la izquierda del operador resulta en false.3 Operadores Condicionales Generalmente los operadores condicionales se usan en combinación con los operadores relacionales para determinar si una condición es true o false. y la operación completa resulta en false. Si el resultado de una operación es true. Si ambas condiciones resultan en true. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 8. Los tres operadores condicionales se listan a continuación: • &&: El operador && (AND) se usa para determinar si las condiciones a ambos lados del operador resultan en true o false. Si la condición a la izquierda de este operador resulta en false. entonces esta operación también resulta en true. La siguiente expresión ilustra el uso de este operador: (a < b) || (b < c) !: El operador ! (NOT) se usar para negar el resultado obtenido en una operación. entonces el resultado de la condición a la derecha del operador es evaluado. La siguiente expresión ilustra el uso del operador NOT: !(a < b) • • Unidad 2: Operadores. entonces el resultado de esta operación después de aplicar el operador ! es false. puede ser necesario encontrar la clase a la que un objeto pertenece. si esta última condición resulta en true.

mayor = (var1 > var2) ? var1 : var2 Se entenderá el uso del operador ternario al tomar diferentes valores para var1 y var2. Se tienen dos variables var1 y var2. La sintaxis general de este operador es la siguiente: variable = expresion ? operando1 : operando2 Aquí. es decir. Los operadores de bits son los siguientes: • &: El operador & (AND) se usa para comparar los patrones de bits de los operandos a la izquierda y a la derecha bit-por-bit. se le asigna a mayor. Java tiene un solo operador ternario llamado operador ? : . La Tabla 2.e. La expresión var1 > var2 evalúa a false ya que 12 es mayor que 6. Libro 1: Core Java Volumen 1: Fundamentos de Java 57 © Copyright IBM Corp. y asignarla a mayor. entonces operando1 se le asigna a variable. Se presenta un ejemplo de código para entender mejor este operador. La operación resulta en un conjunto de bits donde las posiciones de los bits que tienen 1 indica que las posiciones correspondientes en los operandos izquierdo y derecho también tienen el valor de 1. La tabla de la verdad de un operador da el resultado de aplicar ese operador a las diferentes combinaciones de entradas. el valor de var2. en un operador ternario aparecen tres operandos. Si expresion retorna true. el valor de var1. 5.Guía del Estudiante Core Java Estos operadores requieren dos operandos.4 Operador Ternario Como se mencionó anteriormente. var1 = 5 y var2 = 3. se le asigna a mayor. Si expresion retorna false. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Por lo tanto. 12. entonces operando2 se le asigna a variable.5 Operadores de Bits Los operadores de bits se usan para realizar operaciones de bits (operaciones sobre diferentes conjuntos de bits). i. por esto se denominan operadores binarios. Por lo tanto. se quiere calcular cuál de las dos es más grande. . expresion es evaluada.2 muestra la tabla de la verdad para el operador de bits &. 8. var1 = 6 y var2 = 12. 8. La expresión var1 > var2 evalúa a true ya que 5 es mayor que 3.

2: Tabla de la Verdad del Operador de Bits AND (&) Sea a = 3 cuyo patrón de bits es 00000011. . c = a & b.7. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Expresiones y Control de Flujo Libro 1: Core Java 58 © Copyright IBM Corp.7: Operador de bits & • |: El operador | (OR) se usa para comparar bit-por-bit los conjuntos de bits a ambos lados del operador. El resultado se obtiene al realizar la operación & en cada bit de a con el correspondiente bit de b.3: Tabla de la Verdad del Operador de Bits OR (|) Sea a = 3 su patrón de bits es 00000011. el resultado almacenado en c es 2 cuyo patrón de bits es 00000010. como se muestra en la Figura 2. Cuando se efectúa la operación de bits &. El resultado se obtiene al realizar la operación Unidad 2: Operadores. sea b = 10 cuyo patrón de bits es 00001010. Cuando se efectúa la operación de bits |. y resulta en un conjunto de bits que indica si uno de los patrones de bits tiene 1 en esa posición. sea b = 10 su patrón de bits es 00001010. el resultado almacenado en c es 11 cuyo patrón de bits es 00001011.Core Java Guía del Estudiante Patrón de Bits 1 0 0 1 1 Patrón de Bits 2 0 1 0 1 Resultado 0 0 0 1 Tabla 2. Figura 2. La Tabla 2.3 muestra la tabla de verdad para el operador de bits OR Patrón de Bits 1 0 0 1 1 Patrón de Bits 2 0 1 0 1 Resultado 0 1 1 1 Tabla 2. c = a | b.

4: Tabla de la Verdad del Operador de Bits XOR (^) Sea a = 3 su patrón de bits es 00000011.9: Operador de bits ^ Operadores de desplazamiento de bits: Los tres tipos de operadores de desplazamiento se basan en el mismo concepto que consiste en desplazar los bits del operando de la izquierda (A) tantas veces como lo indica el operando de la derecha (B). La Tabla 2. el resultado almacenado en c es 9 cuyo patrón de bits es 00001001.4 muestra la tabla de la verdad para el operador de bits ^. y resulta en un conjunto de bits que indica en que posiciones solo uno de los patrones de bits tiene un 1. c = a ^ b. Figura 2.8: Operador de bits | • ^: El operador ^ (XOR) se usa para evaluar los conjuntos de bits a ambos lados del operador. El resultado se obtiene al realizar la operación ^ en cada bit de a con el correspondiente bit de b.8. como se muestra en la Figura 2. Cuando se efectúa la operación de bits ^.9: Figura 2.Guía del Estudiante Core Java OR en cada bit de a con el correspondiente bit de b. . Patrón de Bits 1 0 0 1 1 Patrón de Bits 2 0 1 0 1 Resultado 0 1 1 0 Tabla 2. como se muestra en la Figura 2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Libro 1: Core Java Volumen 1: Fundamentos de Java 59 © Copyright IBM Corp. sea b = 10 su patrón de bits es 00001010.

hay que recordar que el tipo de dato int es de 32 bits. en cada desplazamiento el bit de mayor orden se pierde y se coloca un cero a la derecha del número. que muestra el uso de los operadores de desplazamiento de bits. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. • Si al desplazar bits de un valor numérico. la cantidad (n) de bits a mover supera o iguala el máximo de bits representable por el tipo de dato (32 bits para int y 64 bits para long). Vea los ejemplos mostrados en la Figura 2.5: Tabla de Operadores de Desplazamiento de bits Para realizar cualquier tipo de desplazamiento. Unidad 2: Operadores. >>: El operador de desplazamiento hacia la derecha >> desplaza a la derecha un conjunto de bits una determinada cantidad de veces.10. • • <<: El operador de desplazamiento hacia la izquierda << desplaza a la izquierda un conjunto de bits una determinada cantidad de veces. y el tipo long. en cada desplazamiento se rellena el bit más significativo con su contenido previo y el bit menos significativo se pierde. Expresiones y Control de Flujo Libro 1: Core Java 60 © Copyright IBM Corp.Core Java Guía del Estudiante Operador Sintaxis Operación << A<<B >> A>>B >>> A>>>B Desplaza los bits de A hacia la derecha B veces. los bits a desplazar serán n módulo (%) de 32 o de 64. en cada desplazamiento el bit de menor orden se pierde y se coloca un 0 a la derecha del número. sin signo Desplaza los bits de Desplaza los bits de A A hacia la izquierda B hacia la derecha B veces veces Tabla 2. 64 bits y tanto short como byte son promovidos a int para ser representados en 32 bits para estas operaciones. este desplazamiento se denomina “Desplazamiento sin Signo”. >>>: El operador de desplazamiento hacia la derecha >>> desplaza a la derecha un conjunto de bits una determinada cantidad de veces. Si él operando (A) es un número negativo entonces la representación de A se hace a través de complemento a dos. .

Guía del Estudiante Core Java Figura 2.6 Operadores de Asignación Los operadores de asignación se usan para asignar valores a las variables. Por lo tanto se necesita evaluar la expresión para encontrar su valor.7 Precedencia Entre Operadores Una expresión puede estar compuesta de muchos operadores y operandos. Los diferentes operadores de asignación se muestran en la Tabla 2.var2 var1 = var1 * var2 var1 = var1 / var2 var1 = var1 % var2 var1 = var1 & var2 var1 = var1 | var2 var1 = var1 ^ var2 var1 = var1 << var2 var1 = var1 >> var2 var1 = var1 >>> var2 Tabla 2. A mayor número de operadores y operandos en una expresión mayor su complejidad. El lado izquierdo de la asignación es la variable a la cual se le quiere asignar un valor. En el lado derecho se puede tener un valor o una expresión que resultará en el valor requerido. 8.6: Operador = += -= *= /= %= &= |= ^= <<= >>= >>>= Uso var1 = var2 var1 += var2 var1 -= var2 var1 *= var2 var1 /= var2 var1 %= var2 var1 &= var2 var1 |= var2 var1 ^= var2 var1 <<= var2 var1 >>= var2 var1 >>>= var2 Equivalente var1 = var2 var1 = var1 + var2 var1 = var1 . . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Existe una convención Libro 1: Core Java Volumen 1: Fundamentos de Java 61 © Copyright IBM Corp.10: Operadores de desplazamiento de bits 8.6: Tabla de Operadores de asignación A continuación se discute el orden de precedencia entre estos operadores.

el primer operador. Cuando se tienen operadores con igual precedencia en una expresión. Unidad 2: Operadores. la precedencia decrece. Conforme se baja en la lista. Los operadores con igual precedencia se muestran en la misma línea. .Core Java Guía del Estudiante que se sigue que especifica la precedencia de cada operador sobre los otros. tiene mayor precedencia. La lista siguiente muestra la precedencia de operadores.11 ilustra la precedencia de los diferentes operadores en Java. El operador con más alta precedencia encabeza la lista. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Figura 2. de izquierda a derecha en la expresión. Esto se llama precedencia de operadores. Expresiones y Control de Flujo Libro 1: Core Java 62 © Copyright IBM Corp. Se aprenderá a continuación cómo se permiten las conversiones en Java. La Figura 2.11: Precedencia de Operadores en Java Las conversiones de un tipo de datos en otro es un punto importante en la programación en Java.

y se puede hacer de dos formas: • • Conversión Automática. no hay que preocuparse por errores de incompatibilidad de tipos.Guía del Estudiante Core Java 9. pero tiene que ser asignado a una variable de un tipo diferente. Conversión Explícita. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Observe la Figura 2. y asignarlo a la variable del tipo de dato más pequeño. El compilador Java automáticamente convierte el valor byte de b a un valor int y se lo asigna a a. que tiene el valor de 1. //Valor de b convertido a int automáticamente 9. El ejemplo será como sigue: int a. Por ejemplo. a = b.2 Conversión Explícita Para asignar un valor de un tipo de dato de un tamaño más grande a un tipo de dato más pequeño. Conversión de Tipos Puede haber situaciones donde el resultado de una expresión será de un tipo en particular. Esto se llama conversión de tipos. Algunas veces. 9.12. además de cuando se requiere la conversión explícita. Considere una variable b. el programador tiene que explícitamente especificar que el valor debe ser convertido al valor correspondiente en el tipo de dato más pequeño. y le asigna el valor a la variable del tipo de dato más grande. byte b = 1. Esta conversión de tipos también es conocida como coerción automática. Esto se llama casting de tipos. del tipo byte. se quiere realizar una operación entre dos valores de diferentes tipos. el compilador Java automáticamente convierte el valor del tipo de dato más pequeño al valor correspondiente en el tipo de dato más grande. Se puede querer convertir un valor de un tipo en otro tipo.1 Conversión Automática Cuando se intenta asignar un valor de un tipo de dato más pequeño a un tipo de dato más grande. Cuando se intenta asignar esta variable b a una variable a del tipo int. que muestra los tipos de datos donde la coerción automática de tipos toma lugar. . se puede querer asignar el valor de una variable de punto flotante a una variable entera. Libro 1: Core Java Volumen 1: Fundamentos de Java 63 © Copyright IBM Corp.

13 muestra varios ejemplos de combinaciones de tipos de datos. int b = 1. en algunos se aplica la coerción automática.//Valor de b convertido a int explícitamente La Figura 2. no hay que preocuparse por errores de incompatibilidad de tipos. Expresiones y Control de Flujo Libro 1: Core Java 64 © Copyright IBM Corp. al realizar la conversión explícita. del tipo int. en otros se requiere la conversión de tipos explícita. La expresión será la siguiente: byte a. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Figura 2. que tiene el valor de 1. el compilador Java convierte el valor int de b a un valor byte.Core Java Guía del Estudiante Figura 2.13: Conversión Automática y Conversión Explícita Unidad 2: Operadores. . a = (byte) b. Cuando se intenta asignar esta variable b a una variable a del tipo byte. y se lo asigna a a.12: Conversión Automática y Casting Explícito Considere una variable b.

} // Fin del ciclo While Volumen 1: Fundamentos de Java 65 © Copyright IBM Corp. // Comparacion sobre objeto Integer if (vuelta > 5) break. 8. 13. public static void main(String[] args) { 5. 1.3 ilustra el uso auto-boxing y auto-unboxing en Java 5.println(" Tiempo: " + vuelta * tiempo). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Auto-unboxing: Se refiere a las conversión automática de una clase envolvente a su correspondiente tipo de dato primitivo. 6. int tiempo = 2. Bajo este esquema se introducen los siguientes terminos: Auto-boxing: Se refiere a las conversión automática de un tipo de dato primitivo a su correspondiente clase envolvente.0 ha incorporado un nuevo tipo de conversión automática entre las clases envolventes y los tipos de datos primitivos.out. /*Definicion de la clase comienza aqui*/ 2. 19.out. public class ConversionEnvolventePrimitivoEjemplo { 3. 15. Este tipo de conversión se realizaba manualmente por métodos proporcionados en las clases envolventes (clases Wrappers). 12.Guía del Estudiante Core Java Java 5. 20. 17.El proceso manual se tornaba mecánico y tedioso. Ejemplo 2. while (true) { // Utilizando auto-incremento sobre objeto Integer System. Libro 1: Core Java . 11. El Ejemplo 2..3 El código Java comienza aquí. // Contador de vueltas como objeto con // asignacion de un primitivo Integer vuelta = 0. 7. // Operacion entre objeto Integer y primitivo int System. 18.5. /*El metodo main comienza aqui */ 4. // Parametros double kilometros = 2.print(" Distancia: " + vuelta * kilometros). 21. 9. 16.print("Vuelta: " + vuelta++). 22. 14. 10. por ello fueron integrados los mecanismos de auto-boxing y auto-unboxing para permitir la conversión de valores primitivos hacia sus respectivos objetos envolventes de manera directa y sin mayores complicaciones.out.. // Operacion entre objeto Integer y primitivo double System.0.

y así sucesivamente. Fin del Ejemplo 2. Arreglos Los arreglos se usan para almacenar varios valores de un mismo tipo de datos.3 Se han estudiado los tipos de datos primitivos en Java.0 Tiempo: 8 Vuelta: 4 Distancia: 12. el índice del primer elemento será 0. A continuación se aprenderá acerca de los arreglos que son uno de los tipos referencias en Java. será 1. dentro del bloque while se realizan operaciones matemáticas e incremento en reiteradas ocasiones. 10. Por lo tanto. Los arreglos son útiles en estas situaciones. debido a que no se tiene que declarar. sin la necesidad de usar el operador new. }/* El metodo main termina aqui */ 24. Asuma que se necesita almacenar los nombres de 100 empleados de una compañía.Core Java Guía del Estudiante 23.0 Tiempo: 4 Vuelta: 2 Distancia: 7.5 Tiempo: 10 Vuelta: 5 Distancia: 15.0 Tiempo: 12 Del código anterior se puede observar que no fue necesario hacer ningún tipo de conversión explicita entre un primitivo y un objeto envolvente en varias ocasiones. Unidad 2: Operadores. para finalizar con la comparación sobre el objeto Integer con un primitivo de tipo int. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.5 Tiempo: 6 Vuelta: 3 Distancia: 10. En el ejemplo anterior. se tendrían que usar 100 variables diferentes para almacenar los nombres de los empleados. Expresiones y Control de Flujo Libro 1: Core Java 66 © Copyright IBM Corp. Lo primero fue la asignación de un entero de tipo int al objeto Integer. Luego. se puede acceder al nombre de un empleado específico fácilmente usando el índice correspondiente al empleado. }/*Definicion de la clase termina aqui*/ El código Java termina aquí Salida: Vuelta: 0 Distancia: 2. que representa los índices en arreglos en Java.14. inicializar y recordar 100 nombres de variables. Vea la Figura 2. el índice del segundo. . Si no se usan arreglos.5 Tiempo: 2 Vuelta: 1 Distancia: 5. El índice del 100th elemento será 99. El índice en un arreglo se usa para identificar cada elemento del arreglo.

int x[] = new int[5]. están separados por 4 bytes. Por lo que ellos deben crearse usando la palabra clave new. a diferencia en C o C++. Los arreglos sólo pueden almacenar un tipo de valor. cada entero toma 4 bytes en la memoria. mezcla. si se tiene un arreglo de caracteres. 4000 5000 12000 6000 7500 Tabla 2. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 800 1000 2400 1200 1500 Tabla 2. Libro 1: Core Java Volumen 1: Fundamentos de Java 67 © Copyright IBM Corp. donde tipo es cualquier tipo de datos presente en Java. Considere el caso de un arreglo de enteros. La Renta Permitida se calcula como el 20% del pago básico del empleado. La Tabla 2.14: Índices de Arreglos en Java En los arreglos también se pueden realizar funciones como ordenamiento. los elementos adyacentes están separados por 2 bytes.7 muestra un arreglo de enteros usada para almacenar el pago básico de cinco empleados. búsqueda.1 Crear Arreglos en Java En Java.8 muestra un arreglo de enteros usado para almacenar la Renta Permitida para cada empleado. elementos adyacentes en el arreglo. Los arreglos son objetos propios de Java.8: Arreglo de Renta Permitida por Empleado (Una Dimensión) 10. Por lo que. Similarmente. se tiene más de una forma de crear un arreglo.7: Arreglo de Pago Básico a Empleados (Una Dimensión) La Tabla 2.Guía del Estudiante Core Java Figura 2. ya que el carácter ocupa 2 bytes cuando se almacena en la memoria. etc.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.15. {5. Considere la Figura 2.4 El código Java comienza aquí… 1. que resume las diferentes formas de crear arreglos en Java. // Arreglo sueldo basico emppleado double empSueldo[] = {4000. que ya ha sido creado. Unidad 2: Operadores. Las instrucciones anteriores inicializan un arreglo con tres valores enteros. 5000. . int size = x. Figura 2. Se puede también simultáneamente crear y asignar valores en los arreglos. a diferencia de en C o C++. public class ArregloUnidimensionalEjemplo { 3. Los arreglos tienen un miembro llamado length.15: Crear de Arreglos en Java El programa a continuación declara dos arreglos unidimensionales.4 ilustra como acceder a cada elemento del arreglo. El tamaño está implícito en este caso. que retorna el tamaño del arreglo. Nota: Los arreglos en Java mantienen sus tamaños individuales. int x[] = {5. String[] s1 = {"uno". Un arreglo se usa para almacenar el pago básico de cinco empleados (inicializados con su salario base).0}. Esto se hace de la siguiente manera: String [] s = new String[] {"uno". Ejemplo 2. 2. Expresiones y Control de Flujo Libro 1: Core Java 68 © Copyright IBM Corp. El Ejemplo 2. String[] s2 = new String[]{"uno". public static void main(String args[]) { 5. Hay también otras formas de crear arreglos en Java.length. float arregloFloat[] = new float[10]. /*El metodo main comienza aqui */ 4.Core Java Guía del Estudiante Los arreglos necesitan ser inicializados antes de ser usados. Considere lo siguiente: int x[] = int []x = {5. 6.2. /*Definicion de la clase comienza aqui*/ 2. 12000.2. "dos"}. La Renta Permitida de cada empleado se almacena en el segundo arreglo en el índice correspondiente donde se almacena el salario base. "dos"}. 0}. "dos"}.0}. El siguiente comando retornará la longitud del arreglo x.

0 2400. En lugar de usar dos arreglos unidimensionales.out.0 7500. // Arreglo renta permitida por emppleado double empRenta[] = new double[5]. 12. i++) { empRenta[i] = .0 1200.0 800. i < 5. 10.0 Fin del Ejemplo 2. }// Fin del ciclo for System.Guía del Estudiante Core Java 7. . i < 5. }// Fin del ciclo for }/* El metodo main termina aqui */ 21. 20. Libro 1: Core Java Volumen 1: Fundamentos de Java 69 © Copyright IBM Corp. como se muestra en la Tabla 2. i++) { System.0 12000. 16. int i.out. 11.0 1500. Este arreglo bidimensional puede ser visualizado como una tabla con cinco filas (una por cada empleado) y dos columnas (una para el salario base y otra para la Renta Permitida). 13. }/* Definicion de la clase termina aqui */ El código Java termina aquí La salida del código anterior es la siguiente: Detalle Sueldo basico y Renta 4000. 15. 17. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Estos son arreglos unidimensionales.println(empSueldo[i] + "\t" + empRenta[i]).println("Detalle Sueldo basico y Renta"). 6000.0 6000.9.0 5000. 8.4 En el programa anterior se usan dos arreglos separados para almacenar el salario base y la Renta Permitida de los empleados. 18. for (i = 0. 19.2 * empSueldo[i]. 7500}. puede usar un arreglo bidimensional. 14. 9. for (i = 0.0 1000.

6.0. 0}. { 5000. 11. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.5 El código Java comienza aquí. i < 5. 7. Expresiones y Control de Flujo Libro 1: Core Java 70 © Copyright IBM Corp.Core Java Guía del Estudiante 4000 5000 12000 6000 7500 800 1000 2400 1200 1500 Tabla 2. /*Definicion de la clase comienza aqui*/ 2. 1.2 * basico. public class ArregloBidimensionalEjemplo { 3. 0} }. public static void main(String args[]) { 5. 17. j < 2. 15. 16. 13. double basico = 0. Ejemplo 2.. // Arreglo sueldo basico y renta // permitida por emppleado double empArreglo[][] = { { 4000. 14. { 6000. i++) { for (j = 0. for (i = 0. 0}. else empArreglo[i][j] = 0. j. /* Metodo main comienza aqui */ 4. 20. { 7500. j++) { if (j == 0) basico = empArreglo[i][j]. 18. 0}. 19. int i. . 22.5 muestra como trabajar con arreglos de dos dimensiones en Java.9: Arreglo de Salario Base y Renta Permitida por Empleado (Bidimensional) El Ejemplo 2. 10. 12. {12000.. 8. 23. }// Fin lazo for Unidad 2: Operadores. 9. 0}. 21.

31.0 5000.5 El programa anterior ilustra la creación y el uso de un arreglo bidimensional en Java. do while y switchcase.0 6000. i++) { for (j = 0.0 7500. }// Fin lazo for }/* Metodo main termina aqui */ }/* Definicion de la clase termina aqui */ El código Java termina aquí La salida del código anterior es como sigue: Detalle Sueldo basico y Renta 4000.0 2400. 26. 28.0 800. }// Fin lazo for System. for. Seguidamente se estudiará la forma en la cual se pueden añadir más dimensiones a un arreglo en Java. A continuación se aprenderá acerca de ellos. la sentencia que sigue a la construcción if es ejecutada. break y continue. 29. 11.0 12000.0 1200.out. j++) System. .out. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. while.0 Fin del Ejemplo 2. Java provee estructuras de control como otros lenguajes de programación. j < 2. Si la condición evaluada es verdadera.0 1000. Asociadas con estas construcciones están las sentencias. Las diferentes estructuras de control (llamadas también construcciones) disponibles en Java son: if-else. 25.println("Detalle Sueldo basico y Renta").out. 33.0 1500. 30. for (i = 0. Libro 1: Core Java Volumen 1: Fundamentos de Java 71 © Copyright IBM Corp.print(empArreglo[i][j] + "\t").println(). 27.Guía del Estudiante Core Java 24. Estructuras de Control Las estructuras de control en Java le permiten al programador controlar el flujo de ejecución del programa. 32.1 La Construcción if–else La construcción if-else se usa cuando se necesita decidir cual de los caminos disponibles va a ser tomado basados en cierta condición. System. i < 5. 11.

La estructura general de la sentencia if-else se muestra a continuación: if(booleanExp){ sentencia1. Java requiere que el resultado de booleanExp sea de tipo Booleano. . por el otro lado. sentenciaN. } Nota: El punto y coma se usa como delimitador para todas las sentencias en Java. y por esto se les considera como un bloque. . . } else{ sentencia1. Si la condición que es evaluada es falsa. . entonces las sentencias que siguen a la construcción else son ejecutadas. conjuntos de sentencias que están encerradas dentro de llaves se denominan sentencias compuestas. . sentencia2. Expresiones y Control de Flujo Libro 1: Core Java 72 © Copyright IBM Corp. Se puede tener una construcción if-else dentro de otra. . sentenciaN. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . else sentencia2. Las sentencias compuestas son un conjunto de sentencias simples que tienen una funcionalidad común. La sintaxis de la construcción if…else es como sigue: if (booleanExp) sentencia1.Core Java Guía del Estudiante La sintaxis de la construcción if es como sigue: if (booleanExp) sentencia. Una sentencia que termina con un punto y coma se llama una sentencia simple. Esto se conoce como sentencias if-else anidadas. sentencia2. No existe restricción en el nivel de complejidad de esta Unidad 2: Operadores. en caso contrario el compilador de Java genera un error.

sentencia2. } Considere el segmento de código mostrado en la Figura 2. . . . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.16. . } else{ if(booleanExp2){ sentencia1. if(condicion2){ sentencia1. Libro 1: Core Java Volumen 1: Fundamentos de Java 73 © Copyright IBM Corp. . sentenciaN. La estructura general de una sentencia if-else anidada se muestra a continuación: if(booleanExp1){ . else sentencia1. que ejemplifica el uso de la construcción if-else. } else sentencia1. sentenciaN.Guía del Estudiante Core Java construcción. . .

El ciclo for usa un contador para llevar el número de veces que el ciclo ha sido ejecutado.16: Uso de la Construcción if-else 11. El contador es revisado contra la condición requerida antes que las sentencias en el cuerpo del ciclo sean ejecutadas. encerradas dentro de { }. siendo éstas: inicialización.2 El Ciclo for El ciclo for se usa para realizar un conjunto de operaciones repetidamente hasta que alguna condición se satisfaga o para realizar un conjunto de operaciones infinitamente. donde el incremento toma lugar. expresión booleana. . Si la condición resulta Unidad 2: Operadores. incrementoExp) sentencia. expresión de incremento y cuerpo. incrementoExp){ sentencia1. La sintaxis general del ciclo for se muestra a continuación: for (inicializacion. El ciclo for puede también tener sentencias compuestas. sentencia2. sentenciaN. La sintaxis anterior muestra sólo una sentencia dentro del ciclo for. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . booleanExp. La estructura general de un ciclo for con más de una sentencia se muestra a continuación: for(inicializacion. y es actualizado en la parte de actualización. Expresiones y Control de Flujo Libro 1: Core Java 74 © Copyright IBM Corp. booleanExp.Core Java Guía del Estudiante Figura 2. Este contador es inicializado a un valor apropiado en la parte de inicialización. . } Se puede ver que el ciclo for tiene cuatro partes. .

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. la sentencia siguiente al final del ciclo for se ejecuta. No hay restricción en el número de ciclos for que se pueden tener dentro de un ciclo for. como sigue: for( . . que muestra el uso del ciclo for en Java. en los cuales se tiene un ciclo for dentro de otro. Se pueden tener ciclos for anidados. 4. booleanExp. for (int i = 0. 3. i<a. las sentencias en el cuerpo del ciclo for son ejecutadas. } .println("suma = " + suma). sentenciaN. } Considere la Figura 2.17: Uso del Ciclo for Se puede tener un ciclo infinito también. sentencia2.length. . } System. Libro 1: Core Java Volumen 1: Fundamentos de Java 75 © Copyright IBM Corp. for(inicializacion. 2. Figura 2. . La estructura general de un ciclo for anidado se da a continuación: for(inicializacion. booleanExp.17. i++){ suma = suma = a[i]. ){ sentencia1. . int a[] = {1. incrementoExp){ sentencia1. sentencia2.Guía del Estudiante Core Java en true. 5}. incrementoExp){ sentencia1. El ciclo for que se muestra a continuación calcula la suma de todos los elementos de un arreglo. . int suma = 0.out. . . sentenciaN. y si resulta en false.

para hacer referencia a la expresión de incremento del contador del ciclo. Java 5. } En la discusión de la construcción for. sentencia2. int suma = 0. sentenciaN. Unidad 2: Operadores. 3. . 5}. for (int numero : a) { suma = suma + numero. . //suma += numero. 4. } Observe el siguiente ejemplo. que muestra el uso del ciclo for en Java 5. El ciclo for que se muestra a continuación hace lo mismo que el ejemplo de la Figura 2. se ha estado usando incrementoExp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.0 ha incorporado una nueva sintaxis para el ciclo for.17. . Expresiones y Control de Flujo Libro 1: Core Java 76 © Copyright IBM Corp. .0 con la nueva sintaxis. con el cual se pretende simplificar su uso.Core Java Guía del Estudiante sentencia2. 2. sentenciaN. pero esta expresión también puede ser usada para decrementar este contador. El uso de las Colecciones serán tratadas en detalle en el Volumen 8 – Conceptos Avanzados. La nueva sintaxis del ciclo for se muestra a continuación: for ([Tipo] identificador : arreglo|coleccion){ sentencia1. } System. También se puede alcanzar la misma funcionalidad de ciclos usando los ciclos while en Java. Unidad 1 – API de Colecciones. int a[] = {1. .out.println("suma = " + suma).

. sentencia2. . La estructura general del ciclo while. es la siguiente: while(booleanExp){ sentencia1. el ciclo while puede también tener más de una sentencia en el cuerpo del ciclo. Como en el ciclo for. y si resulta en false. La Figura 2. las sentencias en el cuerpo del ciclo son ejecutadas.Guía del Estudiante Core Java 11. Libro 1: Core Java Volumen 1: Fundamentos de Java 77 © Copyright IBM Corp. Un segmento de código escrito usando el ciclo for puede ser convertido en un ciclo while y viceversa. o para realizar un conjunto de operaciones infinitamente. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. sentenciaN. . .3 El Ciclo while El ciclo while se usa para realizar un conjunto de operaciones repetidamente hasta que alguna condición es satisfecha.18 muestra el uso del ciclo while para encontrar la suma de todos los elementos de un arreglo. La sintaxis general del ciclo while es la siguiente: while (booleanExp) sentencia. donde el cuerpo del ciclo tiene más de una sentencia. } Si la condición booleanExp resulta en true. la sentencia que sigue al final del ciclo while es ejecutada.

3. como sigue: while( true ){ sentencia1. i = i + 1. en los que se tiene un ciclo while dentro de otro. } System. sentenciaN. 2. sentencia2.println("suma = " + suma). . No hay restricción en el número de ciclos while que se pueden tener dentro de un ciclo while. } . .Core Java Guía del Estudiante int a[] = {1. . while(booleanExp2){ sentencia1.out. 4. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. while (i < a. sentencia2. 5}. // suma += a[i++].18: Uso del Ciclo while Se pueden tener ciclos while anidados. Unidad 2: Operadores. . sentenciaN. . } También se puede tener un ciclo while infinito. Expresiones y Control de Flujo Libro 1: Core Java 78 © Copyright IBM Corp. int i = 0. .length){ suma = suma + a[i]. sentencia2. La estructura general de esta forma del ciclo while se da a continuación: while(booleanExp){ sentencia1. . int suma = 0. Figura 2.

sentencia2. }while(booleanExp). . sentenciaN. en donde si la condición no es cumplida la primera vez nunca se ejecutan las sentencias ubicadas dentro de estos ciclos.Guía del Estudiante Core Java . las sentencias en el cuerpo del ciclo do-while son ejecutadas nuevamente. Se puede comparar el ciclo do-while con el ciclo for. muestra el uso del ciclo do-while para calcular la suma de todos los elementos de un arreglo. Esto garantiza que las sentencias en el cuerpo del ciclo do-while son ejecutadas al menos una vez. El código escrito usando el ciclo do-while puede ser convertido en un ciclo while o a un ciclo for y viceversa. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Considere la Figura 2. Si la condición resulta en true.19. o un ciclo while. } 11. y si el resultado es false. la sentencia que esta después del final del ciclo do-while es ejecutada. } while (booleanExp). Note que las sentencias se ejecutan antes de preguntar por la condición. La estructura general de un ciclo do-while que tiene más de una instrucción en su cuerpo se da a continuación: do{ sentencia1. a diferencia del ciclo while y el ciclo for.4 El Ciclo do-while El ciclo do-while se usa para realizar un conjunto de operaciones repetidamente hasta que alguna condición sea satisfecha. Libro 1: Core Java Volumen 1: Fundamentos de Java 79 © Copyright IBM Corp. . sentenciaN. o para realizar un conjunto de operaciones infinitamente. La siguiente instrucción muestra la sintaxis general del ciclo do-while. do { sentencia.

4. . Expresiones y Control de Flujo Libro 1: Core Java 80 © Copyright IBM Corp. int i = 0.println("suma = " + suma). en el cual se tienen ciclos dowhile dentro de otros.length).out.Core Java Guía del Estudiante int a[] = {1. do{ sentencia1. } while(booleanExp2). Unidad 2: Operadores. sentenciaN } while(booleanExp). i = i + 1. . sentenciaN. sentencia2. Figura 2. .19: Uso del Ciclo do-while Se pueden tener dos o mas ciclos do-while anidados. como sigue: do { sentencia1. Se puede tener un ciclo do-while infinito también. do{ suma = suma + a[i]. . // suma += a[i++]. No hay restricción en el número de ciclos do-while que se pueden tener dentro de otro ciclo do-while. int suma = 0. . }while (i < a. La estructura general de los ciclos dowhile anidados se muestra a continuación: do{ sentencia1. 2. 3. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. sentencia2. sentencia2. . . 5}. System.

default: sentencia1. sentencia2.5 La Construcción switch-case La construcción switch-case se usa para realizar una (o algunas) de varias operaciones basadas en el resultado de una condición. Libro 1: Core Java Volumen 1: Fundamentos de Java 81 © Copyright IBM Corp. . . . sentenciaN break. La estructura general de la construcción switch-case se da a continuación: switch(valor){ case val1: sentencia1 sentencia2 . . sentenciaN break. . } while( true ). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. .Guía del Estudiante Core Java . sentenciaN break. case valN: sentencia1 sentencia2 . . 11. case val2: sentencia1 sentencia2 . sentenciaN.

i++){ sentencia1. 11. } 11. El siguiente código muestra el uso de la sentencia break en un ciclo for para sacar el flujo de control fuera del ciclo. } Aquí. se usa la sentencia break después de que todas las instrucciones dentro de un case particular son ejecutadas. sentenciaN. que muestra las sentencias break y continue.6 La Sentencia break La sentencia break se usa para sacar el control del flujo de ejecución del bloque más interno donde es ejecutado de forma que la sentencia siguiente al bloque sea ejecutada. sentenciaN } Considere la Figura 2. if(condicion) continue. A continuación se aprenderá acerca de las sentencias break y continue. i<10. if(booleanExp) break. i<10.7 La Sentencia continue La sentencia continue se usa para regresar el flujo de ejecución al inicio del bloque más interno donde es ejecutada. for(int i = 0. i++){ sentencia1 . La sentencia break ocasiona que el flujo de control salga de la construcción switch-case. todas las sentencias que están después del case que concuerde hasta el fin del bloque. El siguiente código muestra el uso de la sentencia continue en un ciclo for. Unidad 2: Operadores. Lleva el flujo de control al inicio del ciclo. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Expresiones y Control de Flujo Libro 1: Core Java 82 © Copyright IBM Corp. for(int i = 0. . sentenciaN. serán ejecutadas.20.Core Java Guía del Estudiante . Si no se usa la sentencia break.

La sintaxis de una sentencia continue con etiqueta es la siguiente: continue etiquetaDos. La sentencia que se identifica se refiere a cualquier sentencia simple o bloque de sentencias. La diferencia es que esta instrucción hace que el flujo de control se dirija a una sentencia identificada mediante una etiqueta... Esto se hace ubicando antes de la sentencia un nombre seguido por dos puntos (:).20: Uso de las Sentencias break y continue 11. Como se recordará la sentencia break cambia el control del flujo de ejecución para que se dirija fuera del ámbito donde se ubicaba dicha sentencia. //etiquetaUno identifica a un ciclo De igual manera la sentencia continue se puede utilizar como una sentencia etiquetada.Guía del Estudiante Core Java Figura 2. //etiquetaDos identifica a un ciclo Una particularidad de la sentencia continue en comparación con la sentencia break es que siendo o no etiquetada sólo puede estar ubicada dentro de ciclos iterativos. Ya se ha estudiado el uso de la sentencia break. El código Java comienza aquí. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Libro 1: Core Java Volumen 1: Fundamentos de Java 83 © Copyright IBM Corp. Su forma general es: etiqueta:sentencia. El siguiente extracto de código muestra como se utilizan el break y el continue con etiquetas. Existe otra modalidad de break que hace que el flujo de control salte fuera de un ciclo identificado con una etiqueta. . La sintaxis general se muestra a continuación: break etiquetaUno.8 Las Sentencias break y continue con Etiquetas Las etiquetas permiten identificar las sentencias.

9. etiquetaUno: for(int i=0. } El código Java termina aquí Salida: En Ciclo Uno En Ciclo Dos En Ciclo Dos Cuando j sea igual a 0. 8. if(j==0) continue. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.println("En Ciclo Dos"). el control de flujo sale fuera del ciclo principal y en consecuencia fuera del ciclo más interno. 5. 11. 2. if(j==2) 12. 4. continue etiquetaUno. Unidad 2: Operadores.println("En Ciclo Uno"). 6. el control de flujo sale fuera del ciclo más interno únicamente.Core Java Guía del Estudiante 1. if(j==1) break etiquetaUno. } 14. es decir. Cuando j es igual a 1. . Expresiones y Control de Flujo Libro 1: Core Java 84 © Copyright IBM Corp. terminado así con la ejecución del código.out. el control de flujo permanecerá en el ciclo más interno y continuará la ejecución para la iteración donde j es igual a 1. 3. 7.j<2.j++ ){ System. etiquetaDos: for(int j=0. permitiendo que el ciclo más externo realice las dos iteraciones establecidas por su condición.i++){ System. La variable j nunca valdrá 2. La salida al ejecutar dicha aplicación será: En En En En En En Ciclo Ciclo Ciclo Ciclo Ciclo Ciclo Uno Dos Dos Uno Dos Dos Cuando j es igual a 1.i<2. para i =0 e i =1 respectivamente.out. 10. Si la línea (10) del fragmento de código anterior se sustituye por la línea: break etiquetaDos. 13.

Guía del Estudiante Core Java Nota: Sí la línea (8) del fragmento de código anterior se sustituye por la línea: continue etiquetaUno. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La salida al ejecutar dicha aplicación será: En En En En Ciclo Ciclo Ciclo Ciclo Uno Dos Uno Dos Libro 1: Core Java Volumen 1: Fundamentos de Java 85 © Copyright IBM Corp.

Expresiones y Control de Flujo Libro 1: Core Java 86 © Copyright IBM Corp. Unidad 2: Operadores. Mencionar los diferentes operadores usados en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. usted debe ser capaz de: • • • • • • Discutir los tipos de datos primitivos en Java.Core Java Guía del Estudiante Resumen Ahora que ha completado esta unidad. Describir la declaración e inicialización de variables en Java. Definir los tipos de conversiones automática y explícita en Java. Explicar las diferentes estructuras de control usadas en Java. . Explicar la precedencia de operadores en Java.

a) Verdadero b) Falso 2) ¿Cuáles de los siguientes pertenecen al tipo de datos entero? a) array b) double c) char d) byte 3) ¿Cuál de las siguientes codificaciones se usa para codificar caracteres en Java? a) Unicode b) ASCII c) Bytecode d) Codificación Internacional 4) ¿Qué tipo de operador es '|'? a) Operador de Bits b) Operador Lógico c) Operador Condicional d) No existe este operador 5) ¿Cuál de los siguientes grupos de operadores tienen una prioridad más alta que los operadores de igualdad? a) Unarios b) Relacionales c) De Bits d) De desplazamiento 6) ¿Para cuál de los siguientes tipos primitivos están disponibles clases envolventes? a) int b) byte c) float d) char Libro 1: Core Java Volumen 1: Fundamentos de Java 87 © Copyright IBM Corp. una variable boolean puede almacenar un valor de 0 o 1. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java Unidad 2: Examen de Autoevaluación 1) En Java.

) en un programa Java? a) Ocurre un error de compilación b) No se entra al ciclo c) El ciclo se ejecuta infinitas veces d) Ninguna de las anteriores 8) ¿Cuál de las siguientes sentencias se usa para salir de un ciclo? a) break b) continue c) exit d) Todas las anteriores 9) ¿Cuál ciclo en Java evalúa la expresión boolean al final del ciclo? a) while b) for c) switch d) do-while 10) Un ciclo do-while se ejecuta al menos una vez aún si la condición revisada es false. . a) Verdadero b) Falso Unidad 2: Operadores. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Expresiones y Control de Flujo Libro 1: Core Java 88 © Copyright IBM Corp.Core Java Guía del Estudiante 7) ¿Qué pasa cuando se usa for(.

.Guía del Estudiante Core Java Respuestas a la Unidad 2: Examen de Autoevaluación 1) b 2) c y d 3) a 4) a 5) a. c y d 7) c 8) a 9) d 10) a Libro 1: Core Java Volumen 1: Fundamentos de Java 89 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. b. b y d 6) a.

de Operaciones. Expresiones y Control de Flujo Objetivos del Aprendizaje Al final de esta unidad. Trabajar con ciclos en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Core Java Guía del Estudiante Unidad 3: Lab. . usted será capaz de: • • • • Trabajar con operadores aritméticos. Expresiones y Control de Flujo Libro 1: Core Java 90 © Copyright IBM Corp. Usar arreglos en Java. Unidad 3: Lab. de Operaciones. Usar operadores de bits.

Extraiga cada dígito de la variable contadora. además de otros caracteres y los muestre de la siguiente forma: Ejemplo : Entrada Salida : Letras Dígitos Libro 1: Core Java : ¡Muéstrelos (:. dígitos y caracteres especiales. Verifique si la suma de los cubos es igual a la variable contadora. un ciclo while o un do-while. Eleve al cubo cada uno de los dígitos y súmelos. 2) Escriba un programa en Java usando. Se requiere que se escriba un programa de Java que cuente el número de letras. Expresiones y Control de Flujo 91 © Copyright IBM Corp. Realice un AND (&).) en una forma adecuada! : 31 : 0 Unidad 3: Lab. La oración puede contener letras. | y ^). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Consejos Útiles: • • • • Cree una clase llamada Calculadora. Escriba un ciclo for con el valor de la variable contadora variando desde 100 hasta 999. Un número Armstrong es aquel que satisface la siguiente condición: a3 + b3 + c3 = abc. para imprimir el conjunto completo de los números Armstrong de tres dígitos. multiplique y divida estas dos variables e imprima los resultado en la salida estándar. Sume.*. Si son iguales.Guía del Estudiante Core Java Ejercicios de Laboratorio 1) Escriba un programa para crear una clase llamada Calculadora que usa operadores aritméticos y también operadores de bits (&. reste. Este es un ejemplo de un número Armstrong : 13 + 53 + 33 = 153 Consejos Útiles: • • • • • • Cree una clase llamada NumerosArmstrong. imprima el mensaje ‘Este es un número Armstrong’. 3) Se da como entrada para un programa Java una oración larga terminada con un carácter nuevalinea.. espacios en blanco. de Operaciones. OR (|) y un XOR (^) bits en estas dos variables e imprima los resultado en la salida estándar. etc. . Inicialice las variables con cualquier valor aceptable de su elección y demuestre el uso de estos operadores. Declare dos variables enteras e inicialícelas con dos valores (por ejemplo 10 y 5). dígitos.

Si el monto es 1239. Declare una variable String. • • • • • 4) Escriba un programa que encuentre el mínimo número de billetes tipo moneda requeridos para formar un monto específico (no se necesita tomar la entrada del usuario) asuma que los billetes moneda de denominaciones 500.100.*. Si el carácter en el arreglo no es ni una letra. ni un espacio en blanco. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. El programa debe imprimir: Monedas de 500: 2 Monedas de 100: 2 Monedas de 50: 0 Monedas de 20: 1 Monedas de 10: 1 Monedas de 5: 1 Monedas de 2: 2 Monedas de 1: 0 Unidad 3: Lab.) en una forma adecuada!\n”. dígitos.50.Core Java Guía del Estudiante Espacios en blanco : 6 Otros : 10 Consejos Útiles: • • • • Escriba una clase llamada Contador. str e inicialícela con la oración por ejemplo.20. Cuente el número de caracteres clasificados como otros. Use el método Character. que opere con el arreglo de caracteres y asigne cada uno de los elementos en una variable Character llamada caracter.isDigit() para revisar si un carácter en el arreglo es un dígito y cuente el número de dígitos. y 1 dólar están disponibles. se clasifica como otros.2. Use el método Character. usando el método toCharArray() de String. de Operaciones. “¡Muéstrelos (:. Use el método Character. Cree un ciclo for (haciendo uso de su nueva sintaxis). Forme un arreglo de caracteres a partir de la variable str. espacios en blanco y otros caracteres en la salida estándar. Expresiones y Control de Flujo Libro 1: Core Java 92 © Copyright IBM Corp.10. Imprima el número de letras.. etc.isWhitespace() para revisar si un carácter en el arreglo es un espacio en blanco y cuente el número de espacios en blanco.5. ni un dígito.isLetter() para revisar si un carácter en el arreglo es una letra y cuente el número de letras. .

100. 5. Escriba una clase llamada MinimoMonedas. la cual requiere de la clase Character que está disponible en el paquete java. 10. de Operaciones. Expresiones y Control de Flujo 93 © Copyright IBM Corp. 20. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 50. Consejos Útiles: • • • 5) Calcule la denominación de 500. . Libro 1: Core Java Unidad 3: Lab. Declare una variable entera llamada numero e inicialícela con un entero válido (por ejemplo 54321).Guía del Estudiante Core Java Consejo: Puede usar algunos métodos relacionados a caracteres en la cuarta pregunta. 2 y 1 billetes de dólar que formarán el 54321 e imprímalos en la salida estándar.lang.

.

.Guía del Estudiante Core Java Volumen 2: Programación Orientada a Objetos Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 95 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

.

Definir y usar clases anidadas. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Exponer el uso de Enumeraciones. . Explicar cómo los métodos en una clase Java pueden ser sobrecargados. Describir el manejo de memoria en Java. Definir variables y métodos en Java. Explicar la necesidad de y uso de constructores para una clase. Discutir acerca de la estructura y miembros de una clase Java.Guía del Estudiante Core Java Unidad 1: Clases y Objetos Objetivos del Aprendizaje Al final de esta unidad. Explicar los modificadores de acceso. usted será capaz de: • • • • • • • • • • • Explicar los conceptos de clases y objetos. Discutir cómo Java maneja los argumentos de línea de comandos. Explicar el ciclo de vida de un objeto. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 97 © Copyright IBM Corp.

Unidad 1: Clases y Objetos Libro 1: Core Java 98 © Copyright IBM Corp. los valores de los atributos serán diferentes y específicos para cada persona. en clases y objetos de software. el carro de John y el de Edna pertenecen a una categoría llamada carro. Cualquier instancia creada a partir de la plantilla se denomina un objeto. 2. se tuvo una visión general de la programación en Java. El proceso a través del cual una instancia (objeto) se crea se llama instanciación. nombre. En un escenario orientado a objetos. dado anteriormente. Los atributos se representan como variables y el comportamiento como métodos en una clase Java.Core Java Guía del Estudiante 1. expresiones y sentencias de control de flujo. carrera estudiando. Similarmente. John y Edna son objetos de la clase estudiante y sus carros son objetos de la clase carro. y así sucesivamente. nombre. Aunque ellos comparten este conjunto de atributos. cursos registrados.1 muestra el modelo de software de un estudiante en una clase Estudiante. En esta unidad. cursos registrados. edad. Algunos de los atributos comunes a esta categoría son: número de placa del carro. estatus del estudiante. fecha de fabricación. John Davenport y Edna Smith son estudiantes en una universidad. Se estudiaron los operadores. etc. Se tendrá una clase Estudiante que define atributos como: género. son empleados numerosos objetos en nuestras vidas. Introducción En el volumen anterior. calificaciones obtenidas y otros. Clases y Objetos Una vez vistos algunos ejemplos del mundo real de clases y objetos. se les va a definir formalmente. Por ejemplo. algunos de los cuales tienen ciertas características comunes que los hacen pertenecer a una categoría particular. A continuación se aprenderá más acerca de clases y objetos. se discuten clases y objetos en Java. estatus. Todos los días. Ambos tienen algunos atributos en común como el nombre. número de identidad. nombre de la universidad. Una clase es una entidad auto contenida que provee una plantilla (framework) para definir atributos y comportamiento encontrados comúnmente en objetos de software pertenecientes a un tipo en particular. calificaciones obtenidas. carrera estudiante. que son comunes a cualquier estudiante. Se puede modelar el ejemplo de Estudiante. edad. número de estudiante. número de identificación del estudiante. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. tipo de carro. La Figura 1. .

Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 99 © Copyright IBM Corp. Un constructor también inicializa el objeto con valores por defecto. se pueden crear cualquier número de objetos de ella. se listan algunos de los atributos de la clase Estudiante. llamado estudiante. En el ejemplo anterior.1: Modelo de un Estudiante del Mundo Real como Clase En la figura anterior. que tiene el mismo nombre de la clase. Una variable entera se usa para almacenar la edad del estudiante. Para crear un objeto de la clase. se necesita un constructor. se puede usar el método Estudiante() para crear un objeto de la clase Estudiante. El género del estudiante se almacena como carácter (m para indicar masculino y f para indicar femenino). El código Java que permite hacer esto se muestra a continuación: Estudiante estudiante = new Estudiante(“Edna Smith”). Una vez modelada la clase. Esto se verá en detalle en la sección Constructores de una Clase. para representar a la estudiante Edna Smith. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java Figure 1. Un objeto creado de esta forma. Un constructor es un método (un método es similar a una función en C o C++).2. que pueden ser definidos dentro del constructor. . El atributo nombre de este objeto será el nombre de estudiante Edna Smith. Aquí una variable String se usa para almacenar el nombre del estudiante. se muestra en la Figura 1.

De aquí que sean llamadas instancias de la clase. A continuación se presenta la estructura de una clase Java. etc. etc. McDonald and T.) y se les puede asignar valor a los atributos mediante los métodos setter (métodos que comienzan con la palabra set.3 muestra tres objetos creados de la clase Estudiante para representar tres estudiantes: Edna Smith.2: Un Objeto de la Clase Estudiante Se pueden obtener los atributos del objeto estudiante usando los métodos getter (métodos que comienzan con la palabra get. La Figure 1. J.3: Objetos Creados de la Clase Estudiante Estos objetos son diferentes entre sí.Core Java Guía del Estudiante Figure 1. Los datos en cada uno de estos objetos son diferentes. getEdad. .). Figura 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. setEdad. Se ha visto que una clase tiene variables y métodos. Los métodos que están disponibles en estos objetos son los mismos. Unidad 1: Clases y Objetos Libro 1: Core Java 100 © Copyright IBM Corp. aunque las variables en las que se almacenan tengan el mismo nombre. como: setNombre. Hughes. como: getNombre.

4 muestra la estructura general de la definición de una clase Java. Las sentencias import son seguidas por la definición de la clase. La Figura 1. Estas clases pueden estar relacionadas unas con otras.Paquetes. Un archivo Java debe tener el mismo nombre que la clase que tenga el método main(). las sentencias package e import son opcionales. como sigue: class NombreClase{ } Un programa Java puede tener más de una clase. Estructura de una Clase Java Una clase Java consiste de una sentencia package. con la extensión . Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 101 © Copyright IBM Corp. se requiere sólo la palabra reservada class seguida por el nombre de la clase. Puede haber más de una sentencia import en el mismo programa Java. Las otras clases son importadas usando la siguiente sintaxis: import NombreClase. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La sentencia import importa otras clases Java que la clase que esta siendo definida puede querer usar. y una definición de clase. La sentencia package es la primera sentencia de un programa Java. . Se profundizará la definición package en la Unidad 7. En estos casos. De acuerdo a la sintaxis general de una clase. De éstas.Guía del Estudiante Core Java 3. se debe tener una clase con el método main(). La sentencia import va a continuación de la sentencia package. para que la ejecución del programa comience con esa clase. sentencia import.java siempre y cuando esta clase sea declarada como public.

se continúa con los miembros de una clase Java. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Unidad 1: Clases y Objetos Libro 1: Core Java 102 © Copyright IBM Corp.Core Java Guía del Estudiante Figura 1.4: Estructura de Definición de una Clase Java Habiendo comprendido la estructura de una clase Java.

variables de clase. nombre es una variable de instancia. método o clase.5 muestra los miembros de una clase. son estos. los objetos creados a partir de una clase almacenan sus datos en variables. Figura 1. J McDonald and T Hughes. Estas son llamadas variables de instancia.6 muestra una definición de variables de instancia en una clase Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Por ejemplo. Un modificador de acceso especifica el acceso a una a variable. 4. Observe cada una de ellas en detalle.5: Miembros Principales de una Clase Se discuten a continuación en las secciones siguientes los miembros principales de una clase. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 103 © Copyright IBM Corp. Variables Las variables disponibles en una clase pueden ser de varios tipos. Esencialmente. Aquí. métodos y modificadores de acceso.1 Miembros de una Clase Java Una clase Java tiene variables miembro y métodos miembro. La Figura 1. 4. La Figura 1.1 Variables de Instancia Algunas variables tienen diferentes valores para diferentes instancias de la clase. Una clase Java usa modificadores de acceso para otorgar permiso a otras clases para acceder a una variable o método en particular. . variables de instancia. variables transient y variables volatile. la variable nombre en la clase Estudiante tiene diferentes valores para objetos diferentes. Un objeto permite que otros objetos tengan acceso a sus datos a través de métodos. como: Edna Smith. Un objeto puede también esconder datos a otros objetos a través de varios modificadores de acceso.Guía del Estudiante Core Java 3. son estos. variables final. variables.

Las variables static son usualmente privadas en la clase. nombre. Para tener acceso a una variable de clase no se necesita crear una instancia de la clase. el máximo ID de estudiante asignado hasta ahora se mantiene como una variable de clase y se incrementa en cada instanciación. Por ejemplo. Las variables de clase a veces se les llaman variables static. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . es incrementado cuando un nuevo estudiante ingresa a la universidad. que asigne un único ID a cada estudiante. que es almacenado en algún sitio.2 Variables de Clase En algunas ocasiones es necesario tener una variable que tenga el mismo valor para todas las instancias de la clase. genero y edad son variables de instancia del objeto Estudiante. Estas se acceden usando la instancia o el objeto creado. Sólo habrá una copia de una variable de clase en la memoria independientemente del número de instancias creadas de la clase. Así independientemente del número de objetos creados. ¿Por qué se necesitan variables de clase cuando se puede obtener la misma funcionalidad usando variables de instancia? Puede haber situaciones en las cuales una variable necesita ser especificada como una variable de clase. Estas variables se denominan variables de clase. Se puede acceder a una variable de clase directamente por su nombre junto con el nombre de la clase.Core Java Guía del Estudiante public class Estudiante { // Variables de Instancia String nombre. Una variable llamada maxIdAsignado podría crearse para este caso. maxIdAsignado se mantiene como una variable de clase y se incrementa en el constructor del objeto luego de asignar su valor al ID del estudiante. Se usa el modificador static para declarar que una variable es una variable de clase. char genero. Así si el valor es cambiado en alguna instancia. } Figura 1. Unidad 1: Clases y Objetos Libro 1: Core Java 104 © Copyright IBM Corp. El ID de estudiante es un número secuencial.6.6: Variables de Instancia en una Clase Java Las variables de instancia se usan para representar los atributos de datos de un objeto particular. 4. Las variables de instancia son creadas cuando el objeto es instanciado.7 muestra como una variable de clase es creada y accedida en Java. int edad. considere una universidad. La Figura 1. se reflejará en todas las instancias de la clase. En la Figura 1.

El modificador volatile previene al Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 105 © Copyright IBM Corp. Los valores por defecto son aquellos que son asignados cuando el programador no inicializa explícitamente una variable. en tiempo de compilación.0 false (carácter en blanco) 0 4. Recuerde que para acceder a las variables de clase no es necesario crear una instancia de la misma. .Guía del Estudiante Core Java public class Estudiante { // Variables de clase static int maxIdAsignado. // Contructor para la clase Estudiante public Estudiante() { this.id = maxIdAsignado++. Note que aquí se coloca el nombre de la clase seguido por un punto y luego el nombre de la variable de clase.7: Variables de Clase en Java El valor de maxIdAsignado también podría accederse fuera del ámbito de la clase como se muestra a continuación: Estudiante. Los valores por defecto para los ocho tipos de datos en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. realiza muchas optimizaciones para mejorar el desempeño de un programa.0 0. para variables de clase y de instancia son los siguientes: boolean char byte short integer long float double 0 0 0 0. } } Figura 1.3 Variables Volátil (Volatile) El compilador Java. Java provee valores por defecto para las variables de instancia y las variables de clase.maxIdAsignado++. // Variables de Instancia int id.

Unidad 3 – Serialización de Objetos. La sintaxis para declarar variables transient en Java es la siguiente: transient int var = 100. en un programa multihilos. dos o más hilos pueden compartir la misma variable de instancia. Este tipo de variable se denomina una variable final. El compilador. 4. Por ejemplo. El objeto puede ser de-serializado recuperando el dato almacendo usando la clase DataInputStream.4 Variables Transitorias (Transient) El modificador transient se usa en una declaración de variable para especificar al sistema de tiempo de ejecución de Java que la variable no debe ser serializada. Esta variable miembro se denomina variable volatile. Cada hilo puede tener su propia copia privada de una variable compartida. los procesos de serialización y de-serialización pueden acelerarse si variables cuyos datos que no se desea serializar se declaran como transient. que no son necesarios al momento de reconstruir el objeto desde flujos a través de la de-serialización. Le dice al compilador que el valor de la variable puede ser cambiado inesperadamente por otras partes del programa. La serialización es un proceso mediante el cual. La serialización y de-serialización serán tratados en detalle en el Volumen 4. La copia maestra de la variable reflejará su estado actual. Un objeto puede tener datos basura. Como se muestra aquí: Unidad 1: Clases y Objetos Libro 1: Core Java 106 © Copyright IBM Corp.5 Variables Final El modificador final indica que el miembro tiene un valor constante. Las variables transient se pueden usar para almacenar datos que no serán usados durante el proceso de serialización. se denomina variable transient. . Un objeto puede contener ambas variables transient y no transient. La sintaxis se muestra a continuación: volatile int var = 100. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Así. Una variable que no puede ser serializada y que tiene especificado el modificador transient. El nombre de una variable final se representa en letras mayúsculas por convención. entonces se generará un error en tiempo de compilación. El modificador volatile se coloca antes de la declaración de la variable. no realiza optimizaciones en estas variables. 4. Un miembro con un valor constante no puede ser modificado. El acceso a la copia maestra debe ser autorizado en el mismo orden en el que se acceden las copias privadas. En caso de que se trate de cambiar el valor de una variable final en el programa.Core Java Guía del Estudiante compilador de realizar ciertas optimizaciones sobre una variable miembro. los campos no transient de un objeto son almacenados usando una clase llamada DataOutputStream.

se va estudiar cómo declarar estas variables. public static final double PI = 3. … } Aquí. y su tipo de dato es String. Las variables miembro final deben ser inicializadas con un valor en el momento de su declaración. La Figura 1.}. double b){.14.6).. Figura 1. El modificador static puede ser combinado con la variable final para declarar constantes de librerías. El modificador private indica que nombre como una variable sólo puede ser accedida dentro de los constructors y métodos de la clase Estudiante. diciendo que la variable puede no haber sido inicializada. El nombre de la variable miembro es nombre. porque la declaración se hace dentro del cuerpo de la clase y fuera de cualquier método o constructor de la clase.. E.8: Uso de los Modificadores static and final para Constantes de Librería A continuación. 4.Guía del Estudiante Core Java final float PI = 3. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.. Si no. public static final double E = 2. .718281828459046. el compilador arrojará un mensaje de error. Esta combinación es particularmente útil al declarar constantes como: PI.8 muestra el uso de los modificadores final y static para declarar constantes de librerías. public static final long redondear(double a){. nombre es declarada como una variable miembro. etc. public static final double potencia(double a.6 Declaración de Variables Miembro En la clase Estudiante (referirse a la Figura 1.141592653589793. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 107 © Copyright IBM Corp. A continuación se examinan los métodos en Java.}. vimos que la variable nombre fue declarada como sigue: public class Estudiante { private String nombre..

for (int arg : args) System. } Unidad 1: Clases y Objetos Libro 1: Core Java 108 © Copyright IBM Corp. recuperar. Para lograr esto.println(arg).getNombre(). Seguidamente.. se presenta un ejemplo de ello: // Error // OK public void hacerCualquierCosa(int … args) { for (int arg : args) System. Las variables locales pueden ser de tipo primitivo o referencias a objeto. mc = new MiClase(). también el método puede declarar otras variables locales dentro de ella.out.println("a: " + a). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. public void hacerCualquierCosa() { MiClase mc.out. no se puede usar mc. los métodos se usan para asignar..out. Un ejemplo se presenta a continuación. } Observe que el identificador args se convierte en un arreglo que contiene los valores que fueron enviados cuando fue invocado el método hacerCualquierCosa().println(arg).Core Java Guía del Estudiante 5. int … args) { System. Ellas no pueden ser referenciadas antes de ser declaradas y no pueden usarse sin haber sido inicializadas.0 se permite establecer un número variable de parámetros en los métodos.. Usualmente. o cambiar los valores almacenados en una variable. } Antes de inicializar mc. En Java 5. mc. Los parámetros pasan a ser variables locales del método. al igual que C. El compilador genera un error. Se presenta un ejemplo de lo dicho anteriormente: public void hacerCualquierCosa(String a. con la restricción de que la declaración del parámetro variable solo se puede hacer al final de la lista de argumentos del método. Métodos Los métodos en Java se usan para tener acceso y manipular las variables. . mc.getNombre(). También se puede combinar el uso de parámetros variables con parámetros no variables. se hace uso de la expresión . La definición de métodos establece el tipo y nombre de los parámetros de entrada.

} Figura 1. Un método getter se usa para obtener el valor de una variable de instancia y normalmente comienza con la palabra get. Estos métodos se denominan métodos de instancia.9 muestra como el método getter se usa para recuperar el valor almacenado en la variable nombre. además de realizar otras actividades para la clase.Guía del Estudiante Core Java En Java. son estos. métodos de instancia y métodos de clase. public String getNombre(){ return nombre. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Un método de instancia. Ellos también pueden tener acceso a las variables de clase de esa clase. La Figura 1. Se verán estos dos tipos en detalle a continuación. Variables de clase. Los métodos setter se inician con la palabra set. los métodos son de diferentes tipos. } Figura 1.10: Método Setter Que Asigna un Valor a una Variable de Instancia Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 109 © Copyright IBM Corp.9: Método Getter para Recuperar el Valor de una Variable de Instancia Un método setter se usa para asignar valor a variables privadas. puede obtener y asignar valores a las variables de instancia. public void setNombre(String nuevoNombre){ nombre = nuevoNombre. Las siguientes variables y métodos pueden ser accedidos por un método de instancia: • • • • Variables de instancia. . 5. Métodos de clase.10 muestra como el método setter se usa para asignar valor a la variable nombre. Otros métodos de instancia.1 Métodos de Instancia Ciertos métodos definidos en una clase operan en variables de instancia de la instancia actual de una clase. La Figura 1.

los métodos definidos en la clase Math pueden usarse directamente. que también están definidas como métodos estáticos. Estos métodos se conocen como métodos de clase o métodos estáticos.length. System.println("Valor: "+actual). 12. System.out.parseInt("6"). Se pueden invocar éstos métodos directamente usando el nombre de la clase sin necesidad de crear una instancia.println("Redondeo hacia abajo: "+Math. -12. -13. i<valores.11: Uso del Método Estático parseInt()Definido en la Clase Integer La clase Math tiene muchas funciones de librería.Core Java Guía del Estudiante 5. Acceder a variables o métodos no estáticos desde un método estático genera un error en tiempo de compilación.5. i++){ double actual = valores[i]. aunque un método de clase puede ser accedido a través de una instancia. for(int i=0. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.5. La librería Math y las clases envolventes (wrapper) tienen varios métodos estáticos. } Figura 1. Un método de clase no puede acceder a variables de instancia o métodos de instancia.floor(actual)). Se puede acceder al método de clase directamente.out. double valores[] = {11.12 muestra el uso de métodos estáticos definidos en la clase Math. La Figura 1.out. Por ejemplo. System. int radio = Integer.miMetodoDeClase() El modificador static se usa en la declaración del método de clase. Para acceder a un método de clase.2 Métodos de Clase Otros métodos definidos en la clase operan solo en variables de clase.ceil(actual)).11 muestra el uso del método estático parseInt definido en la clase Integer.out. //PI es una constante (variable de la clase puplica Math) Figura 1. Así. System. La Figura 1.println("Redondeo hacia arriba: "+Math.5.round(actual)+"\n"). .println("Redondeo: "+Math. no se necesita crear una instancia de la clase.PI. un método de clase miMetodoDeClase() de MiClase puede ser invocado como: MiClase.5}. //parseInt() es un metodo de la clase Integer double circunferencia = 2 * radio * Math.12: Uso de Métodos Estáticos Definidos en la Clase Math Unidad 1: Clases y Objetos Libro 1: Core Java 110 © Copyright IBM Corp.

no habrá código a ser ejecutado. /*El metodo agregar comienza aqui */ static public void agregar(int j. 7. 8. /*Definicion de la clase StaticEjemplo comienza aqui*/ 2. agregar(53. En este caso. El código Java comienza aquí. }/* El metodo main termina aqui */ 15. otros objetos pueden ser instanciados. 4. Sin una referencia a objetos.3 Uso de Métodos de Clase para Acceder a la Clase Cuando una declaración de un método tiene el modificador static.. No se tiene que instanciar la clase para usar sus métodos estáticos. pueden ser invocados directamente sin ninguna referencia a un objeto de la clase. 12. Los métodos estáticos solo pueden invocar otros métodos estáticos Si el constructor de una clase se declara como private. indica que el método es un método de clase y no un método de instancia.Guía del Estudiante Core Java Cuando un usuario inicia una aplicación.out. 9. Java supera esto proveyendo el método main. 10. 1. 5. Ejemplo 1. y debe ser usado antes de que cualquier objeto de la clase sea creado.1 El siguiente código muestra el uso de métodos estáticos. System. 14. se puede acceder a métodos estáticos para usar los métodos y variables disponibles en la clase. Un método de clase se puede usar independientemente del objeto. }/*Definicion de la clase StaticEjemplo termina aqui*/ Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 111 © Copyright IBM Corp. }/* El metodo agregar termina aqui */ /*El metodo main comienza aqui */ public static void main(String[] args) { 13.1. que muestra como los métodos estáticos se pueden usar en un programa Java. static int n. no se puede crear un objeto de la clase. que es un método estático. public class StaticEjemplo { 3. 74). int k) { n = j + k. algún código debe ser ejecutado. . Dentro del método main. 5. Este método estático main es independiente de un objeto. Sea el Ejemplo 1.. Un método de instancia solamente se puede usar cuando se crea un objeto. El método main de la clase es un método estático. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. A continuación se aprenderá a cómo usar los métodos de clase para acceder a la clase. 6. 11.println(n).

Una subclase puede proveer una implementación diferente para un método heredado de su superclase. Aunque los métodos abstractos son métodos de instancia. Finalmente se imprime el valor de n en la salida estándar. Métodos Nativos.agregar(). se puede acceder directamente al método agregar() de la clase StaticEjemplo sin crear un objeto de la clase ya que el método agregar() ha sido declarado como estático. Este método es llamado método abstracto. Esto se conoce como sobre Unidad 1: Clases y Objetos Libro 1: Core Java 112 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.4 Métodos Abstractos El modificador abstract se usa para denotar que la implementación de un método no está en la clase en la cual el método es declarado.1 Si el método agregar() en el ejemplo anterior fuese declarado como público. Métodos Sincronizados. 5. La clase que hereda se denomina subclase. La clase desde la cual las variables y métodos son heredados se denomina superclase. que son usados para propósitos específicos: • • • • Métodos Abstractos. podría ser accedido desde otras clases como se muestra a continuación: StaticEjemplo. No hay necesidad de crear un objeto StaticEjemplo para invocar al método estático. Antes de concluir la discusión de métodos en Java. Métodos Final. A continuación se discuten los métodos final. 5. los otros tres pueden ser métodos de instancia o de clase.Core Java Guía del Estudiante El código Java termina aquí En la clase anterior.5 Métodos Final Una clase puede heredar variables y métodos definidos en otra clase. Dentro del método agregar. . se resume brevemente como Java permite a los programadores trabajar con los siguientes tipos de métodos. se suman dos enteros pasados como argumentos y se almacena en una variable estática n de la clase. Fin del Ejemplo 1. Los métodos abstractos son declarados solo dentro de una clase abstracta (una clase declarada con el modificador abstract) como se muestra a continuación: public abstract int mostrarSalida(int a). que son los que no pueden ser sobrescritos por una subclase.

para asegurar que la información accedida por los hilos está controlada y realizada a salvo de hilos. Si no se quiere que un método sea sobreescrito por sus subclases. puede también acceder a variables y métodos public de una clase. que Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 113 © Copyright IBM Corp. los objetos de cualquier clase pueden accederlos. Los modificadores de acceso permitidos por Java son: public. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. protected. Modificadores de Acceso Se pueden usar los modificadores de acceso de Java para proteger las variables y métodos de una clase de ser accedidos sin garantía por parte de otras clases. package y private. La clase que esta haciendo el acceso no necesita ser una subclase de la clase accedida o estar presente en el mismo paquete que la clase accedida. public native int mostrarSalida(int a). se usa el modificador native para especificar que la implementación de este método no fue hecha en Java. 5. como sigue: public final int mostrarSalida(int a). Los métodos que se usan para operar sobre los mismos datos simultáneamente se declaran como synchronized. Se discuten a continuación. public synchronized int mostrarSalida(int a). A continuación se discuten los métodos sincronizados.7 Métodos Sincronizados En un ambiente multihilos. 6. A continuación se discute acerca de los métodos nativos. que juegan un papel fundamental en aplicaciones multihilos. 6. Una clase sin ninguna relación. . se puede usar el modificador final en la declaración del método. que está en un paquete diferente. Se debe tener cuidado antes de declarar una variable o método como public para asegurar que no habrá ningún acceso malicioso por parte de un objeto de una clase externa. Se va a iniciar la revisión con el modificador de acceso public. estos son modificadores de acceso.Guía del Estudiante Core Java escritura de método. Cuando las variables y métodos de una clase son declarados como public. Se ha visto el uso de los modificadores public y private en algunos de los ejemplos anteriores. varios hilos pueden estar operando sobre los mismos datos simultáneamente.1 El Modificador de Acceso public El modificador public no coloca ninguna restricción en las variables y métodos de una clase. que permiten que se use el código escrito en otro lenguaje.6 Métodos Nativos Cuando se quiere usar una librería de funciones escritas en otro lenguaje como C o C++. 5.

//Definicion de la clase ClaseNoRelacionada comienza aqui 6. 6. public int secretoAbierto. PublicEjemplo pe = new PublicEjemplo(). . package miPaquete.Core Java Guía del Estudiante pueden colocar a los objetos de la clase accedida en un estado inconsistente. 4. 9. que es totalmente diferente del paquete en el cual está la clase PublicEjemplo. package otroPaquete. } 12. 5. Ejemplo 1. 3.. /*Definicion de la clase PublicEjemplo comienza aqui*/ 3. 2.*. El código Java comienza aquí. }//Definicion de la clase ClaseNoRelacionada termina aqui El código Java termina aquí Unidad 1: Clases y Objetos Libro 1: Core Java 114 © Copyright IBM Corp. 10. que ilustra el uso de variables y métodos public.2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Considere el Ejemplo 1. 5. 1. import miPaquete. } 8. }/*Definicion de la clase PublicEjemplo termina aqui*/ El código Java termina aquí Se va a escribir una clase llamada ClaseNoRelacionada en otroPaquete. void accesoSecreto() { 8.. public void abrirMetodoSecreto() { System. 1.. El código Java comienza aquí.println("abrirMetodoSecreto").abrirMetodoSecreto().. public class PublicEjemplo { 4.secretoAbiert = 35. 2. 11.2 La clase PublicEjemplo que se muestra a continuación tiene una variable y un método public.out. 7. pe. pe. class ClaseNoRelacionada { 7.

3.2 El Modificador de Acceso protected Este modificador permite que variables y métodos de una clase en particular sean accedidas por la clase en la que están definidas. Cuando se representa este tipo de información como objetos de software creados usando Java. se puede querer que cierta información sea compartida solo por nuestra familia o amigos cercanos. que extiende de la clase ProtectedEjemplo.Guía del Estudiante Core Java La clase ClaseNoRelacionada no tiene ninguna relación con (no es una subclase de) la clase PublicEjemplo. Por ejemplo.3 Considere el siguiente ejemplo de la clase ProtectedEjemplo. }/*Definicion de la clase ProtectedEjemplo termina aqui*/ El código Java termina aquí Ahora. Observe: Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 115 © Copyright IBM Corp. el modificador protected puede ser usado. No se quiere que nadie más sepa acerca de esto.2 A continuación se discute el modificador de acceso protected. Esto se explica en el Ejemplo 1. 3. 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. protected int secretoFamiliar. 6. 7. Fin del Ejemplo 1. considere la clase ProtectedHijo. pero la clase ProtectedHijo no puede acceder la variable protected o invocar al método protected de un objeto de la clase ProtectedEjemplo.println("metodoSecretoFamiliar"). /*Definicion de la clase ProtectedEjemplo comienza aqui*/ 4. . A pesar de esto. se puede acceder a la variable y al método public definidos en la clase PublicEjemplo. la clase ProtectedHijo implícitamente obtiene todos los métodos definidos en ProtectedEjemplo. Ejemplo 1. 2.out. En este caso. 6. Tiene una variable protected y un método protected. que no es tan permisivo como el modificador de acceso public. 8. sus subclases y las clases presentes en el mismo paquete. public class ProtectedEjemplo { 5.. El código Java comienza aquí. pero que está presente en un paquete otroPaquete que es diferente del paquete en el cual ProtectedEjemplo fue declarada.. protected void metodoSecretoFamiliar() { System. package miPaquete. } 9.

*.secretoFamiliar = 53. ProtectedHijo ph) { 8. pe. pe. // error ph.Core Java Guía del Estudiante El código Java comienza aquí. 4. 12. 3. 2. package miPaquete. 3. class AmigoDeLaFamilia { 5. 6. //Definicion de la clase AmigoDeLaFamilia comienza aqui 4. pe. package otroPaquete. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. pe. import miPaquete. 1. class ProtectedHijo extends ProtectedEjemplo { 7.secretoFamiliar = 53. 7.metodoSecretoFamiliar(). }//Definicion de la clase AmigoDeLaFamilia termina aqui El código Java termina aquí Se puede ver que AmigoDeLaFamilia puede acceder legalmente a las variables y métodos protected de ProtectedEjemplo. 10. 8. ph. //Definicion de la clase ProtectedHijo comienza aqui 6. void accederSecreto(ProtectedEjemplo pe. }//Definicion de la clase ProtectedHijo termina aqui El código Java termina aquí Ahora se va a considerar otra clase AmigoDeLaFamilia que está en el paquete miPaquete y no es una subclase de ProtectedEjemplo. } 13. void accederSecreto() { ProtectedEjemplo pe = new ProtectedEjemplo().metodoSecretoFamiliar(). 1. // error 9.metodoSecretoFamiliar(). Fin del Ejemplo 1.secretoFamiliar = 33.. 5. 2.3 Unidad 1: Clases y Objetos Libro 1: Core Java 116 © Copyright IBM Corp. 11.. 9.. } 10. El código Java comienza aquí.. .

2. 1. Todas las clases presentes en el paquete miPaquete tienen acceso a la variable secretoEntreAmigos y al método metodoSecretoEntreAmigos(). 1. . Ada fue uno de los primeros lenguajes en introducir el concepto de un paquete en los lenguajes de programación.println("metodoSecretoEntreAmigos"). El código Java comienza aquí. 6. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 117 © Copyright IBM Corp.out. Un paquete es similar a un módulo. 8. Esto significa que todas las clases que están presentes en el mismo paquete pueden acceder a las variables y métodos de la clase accedida.4 La clase PackageEjemplo que se muestra a continuación tiene una variable y un método con acceso package. Ahora. Si no se especifica el nivel de acceso de una variable o un método o una clase usando un modificador de acceso. entonces. public class PackageEjemplo { 5... 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. /*Definicion de la clase PackageEjemplo comienza aqui*/ 4. que ilustra el modificador de acceso package. por defecto. }/*Definicion de la clase PackageEjemplo termina aqui*/ El código Java termina aquí La clase PackageEjemplo tiene acceso a la variable secretoEntreAmigos y al método metodoSecretoEntreAmigos(). el nivel de acceso se asume como package. 3.4. 2. } 9. void metodoSecretoEntreAmigos(){ 7. package miPaquete..3 El Modificador de Acceso package El modificador de acceso package se usa cuando no se especifica ni public. Ejemplo 1. que está presente en miPaquete. ni protected. package miPaquete.. int secretoEntreAmigos. Considere el Ejemplo 1.Guía del Estudiante Core Java 6. System. considere la clase PackageAmigo. ni private como nivel de acceso. El código Java comienza aquí.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Considere el siguiente código. /*Definicion de la clase PackageAmigo comienza aqui*/ 4.. 2. pe. 1. class PackageAmigo{ 5.secretoEntreAmigos = 25.secretoEntreAmigos = 25. 3.metodoSecretoEntreAmigos().Core Java Guía del Estudiante 3.metodoSecretoEntreAmigos(). }/*Definicion de la clase PackageAmigo termina aqui*/ El código Java termina aquí La clase PackageAmigo puede acceder a secretoEntreAmigos y metodoSecretoEntreAmigos porque PackageAmigo y PackageEjemplo están en el mismo paquete. 7. . entonces no podrá acceder a secretoEntreAmigos o metodoSecretoEntreAmigos de PackageEjemplo. Fin del Ejemplo 1.. 8. }/*Definicion de la clase PackageHijo termina aqui*/ El código Java termina aquí El código anterior muestra que si hay una subclase de PackageEjemplo en un paquete diferente. package otroPaquete. class PackageHijo extends PackageEjemplo { 7. PackageEjemplo pe = new PackageEjemplo(). 10.4 Unidad 1: Clases y Objetos Libro 1: Core Java 118 © Copyright IBM Corp. // error pe. 5. void accederMiembrosDePackage(){ 8. PackageEjemplo pe = new PackageEjemplo(). pe.*. void accederSecretoPackage(){ 6. import myPackage. pe. /*Definicion de la clase PackageHijo comienza aqui*/ 6. // error 11. } 12. El código Java comienza aquí. 9. } 10. 4. 9.

private int secreto.metodoSecreto(). .. public class NivelAccesoEjemplo { 3. Esto se explica en el Ejemplo 1. definida a continuación. 6.secreto = 364.4 El Modificador de Acceso private El modificador de acceso private se usa para proteger información muy confidencial.println("metodoSecreto"). que es el más restrictivo de todos los modificadores de acceso. 6. class Hacker { 3.out.Guía del Estudiante Core Java A continuación se discute el modificador de acceso private. Usando variables y métodos privados en una clase se provee la máxima protección. /*Definicion de la clase Hacker comienza aqui*/ 2. /*Definicion de la clase NivelAccesoEjemplo comienza aqui*/ 2.. private void metodoSecreto(){ 5. }/*Definicion de la clase NivelAccesoEjemplo termina aqui*/ El código Java termina aquí Sólo el código dentro de la clase NivelAccesoEjemplo puede leer o modificar la variable secreto e invocar metodoSecreto(). Ejemplo 1. } // error Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 119 © Copyright IBM Corp. nae. 1. El código Java comienza aquí.5 Aquí la clase NivelAccesoEjemplo tiene una variable private y un método private. Por ejemplo. 6. 7. 5. la clase Hacker. public static void main(String[] args) { NivelAccesoEjemplo nae = new NivelAccesoEjemplo().. 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 4.5.. El código Java comienza aquí. El código dentro de otra clase no puede acceder o modificar la variable secreto o invocar a metodoSecreto(). no puede acceder a secreto o a metodoSecreto de NivelAccesoEjemplo. Puede haber ocasiones cuando no se quiere que métodos o variables de una clase en particular accedan a ciertas variables o métodos de otra clase específica. 4. // error nae. } 7. System.

Core Java

Guía del Estudiante

8. }/*Definicion de la clase Hacker termina aqui*/

El código Java termina aquí Cuando se intenta compilar la clase Hacker, el compilador imprimirá un mensaje de error, similar a este: Hacker.java:4: secreto has private access in NivelAccesoEjemplo nae.secreto = 364; // error ^ Hacker.java:5: metodoSecreto() has private access in NivelAccesoEjemplo nae.metodoSecreto(); // error ^ 2 errors

Nota: Un objeto del tipo NivelAccesoEjemplo puede acceder a los miembros private de otro objeto de NivelAccesoEjemplo. Esto se muestra en el siguiente fragmento de código: El código Java comienza aquí... 1. /*Definicion de la clase PrivateEjemplo comienza aqui*/ 2. class PrivateEjemplo { 3. private int secreto; 4. boolean verificarAccesoPrivado(PrivateEjemplo pe){ 5. 6. 7. if (this.secreto == pe.secreto) return true; else

8. return false; 9. } 10. }/*Definicion de la clase PrivateEjemplo termina aqui*/

El código Java termina aquí En este caso, la clase PrivateEjemplo tiene un método de instancia que compara el objeto actual PrivateEjemplo (this) con otro objeto PrivateEjemplo pe, basado en sus variables secreto. Esto es posible porque objetos del mismo tipo pueden acceder a miembros private del otro siempre y cuando estén dentro de la clase. Fin del Ejemplo 1.5
Unidad 1: Clases y Objetos Libro 1: Core Java 120

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

Se van a discutir a continuación los constructores en Java.

7. Constructores de una Clase
Un constructor se usa esencialmente para inicializar un nuevo objeto creado de un tipo en particular. Se puede identificar fácilmente el constructor y diferenciarlo de otros métodos en la clase porque el constructor tiene el mismo nombre de la clase. Los constructores también son métodos, pero están definidos para realizar la tarea de inicialización al momento de creación de objetos. Todas las clases en Java tienen al menos un constructor. Si el programador no define ningún constructor para una clase, entonces la clase tendrá un constructor por defecto creado por el sistema de tiempo de ejecución de Java. El constructor por defecto no acepta ningún argumento. Tiene una implementación vacía y no realiza nada. Java permite tener tantos constructores como se requiera para una clase, la única diferencia será en el número o el tipo de argumentos para una clase. Esto se denomina sobrecarga del constructor, que será discutida en detalle en la próxima sección. La Figura 1.13 muestra los constructores para la clase Student. Se definen tres constructores, cada uno toma diferentes parámetros.

public Estudiante(){} public Estudiante(int nuevoId){ id = nuevoId; } public Estudiante(int nuevoId, String nuevoNombre){ id = nuevoId; nombre = nuevoNombre; }
Figura 1.13: Constructores para la Clase Estudiante

Si el programador define un constructor para una clase, el constructor por defecto no estará disponible para la clase. Si una clase necesita un constructor que no acepte argumentos, el programador debe explícitamente definir un constructor sin argumentos. En la clase Estudiante anterior, se proveen los constructores Estudiante(int), Estudiante(int, String), por esto el constructor por defecto sin argumentos no estará disponible, y se encontrará el constructor Estudiante() sin parámetros explícitamente definido. Se va a considerar otro ejemplo para entender mejor los constructores en Java. Para una clase llamada Fibonacci, se tiene el siguiente constructor:

Libro 1: Core Java

Volumen 2: Programación Orientada a Objetos 121 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

public Fibonacci() { n = 0; }

// constructor

Este es un ejemplo de un constructor sin argumentos. Se va a definir otro constructor para Fibonacci: public Fibonacci(int numeroDeTerminos) { n = numeroDeTerminos; } // constructor

Ambos constructores tienen el mismo nombre, la única diferencia es la lista de parámetros aceptada por estos constructores. El compilador los diferencia dependiendo del número y tipos de argumentos que aceptan. El primer constructor no acepta ningún parámetro, mientras que el segundo constructor acepta un argumento de tipo int . Usualmente el constructor usa sus argumentos para inicializar las variables (estado) del nuevo objeto creado. Cuando se instancia una clase para crear un objeto, se debe escoger el constructor cuyos argumentos reflejen mejor la forma en que se quiere inicializar el nuevo objeto. Dependiendo del número de argumentos y el tipo de argumentos que se pasa al constructor, el compilador busca el constructor apropiado para usarlo. Por ejemplo, cuando se usa el siguiente código, el compilador sabe que debe elegir el constructor sin argumentos. new Fibonacci(); De manera similar, cuando se usa la expresión new Fibonacci(53); el compilador escoge el constructor que acepta un sólo entero como su argumento. El código que se presenta a continuación invoca el constructor de la superclase de la clase Fibonacci. void Fibonacci() { super(); } No se ha hecho a Fibonacci una subclase de otra clase. Por defecto, todas las clases creadas en Java son subclases de la clase Object disponible en el paquete java.lang. Así, en el código anterior, el constructor de la clase Object es invocado. Usualmente el constructor de una clase toma ventaja del código proporcionado en el constructor de su superclase. Suponga que se quiere usar el constructor de la superclase, entonces la sentencia que invoca al constructor de su superclase debe ser la primera sentencia de su constructor, debido a que debe realizar primero un nivel superior de inicialización. De la discusión en esta sección, se puede ver que en la declaración de una clase, es obligatorio especificar la palabra reservada class y también el nombre de la clase. El resto de los componentes de una declaración de clase son opcionales. Si una
Unidad 1: Clases y Objetos Libro 1: Core Java 122

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

declaración de clase no tiene estos elementos opcionales, los valores por defecto que usa el compilador Java son: no-public, no-final, no-abstract y sub-clase de la clase Object. La clase java.lang.Object es la superclase de todas las clases Java por defecto. Se estudiará en detalle super clases en la Unidad 3 - Herencia de este volumen. El compilador Java también asume que una clase no implementa ninguna interfaz. Considere el Ejemplo 1.6, un programa que imprime los primeros cinco términos de la serie de Fibonacci. Ejemplo 1.6 Se va a crear una clase en este programa de ejemplo. Se usará esta clase en las siguientes secciones. El código Java comienza aquí... 1. /*Definicion de la clase Fibonacci comienza aqui*/ 2. public class Fibonacci { 3. public int a = 0, n; /* variable */ 4. private int b = 1, c, contador = 2; /* variables */ 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. /* Constructor Fibonacci comienza aqui */ public Fibonacci(int numeroDeTerminos) { n = numeroDeTerminos; }/* Constructor Fibonacci termina aqui */ /* Metodo cambiarNumeroDeTerminos comienza aqui */ void cambiarNumeroDeTerminos(int numeroDeTerminos) { n = numeroDeTerminos; }/* Metodo cambiarNumeroDeTerminos termina aqui */ /* Metodo mostrarSeries comienza aqui */ public void mostrarSeries() { if (n <= 0) { System.out.println("Entrada invalida"); System.exit(0); } if (n >= 1) System.out.println(a); if (n >= 2) System.out.println(b); while (contador < n) {
Volumen 2: Programación Orientada a Objetos 123 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Libro 1: Core Java

Core Java

Guía del Estudiante

27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.

c = a + b; System.out.println(c); a = b; b = c; contador++; } }/* Metodo mostrarSeries termina aqui */ /* Metodo main comienza aqui */ public static void main(String args[]) { Fibonacci fib = new Fibonacci(5);// 5 términos

38. fib.mostrarSeries(); 39. }/* Metodo main termina aqui */ 40. }/* Definicion de la clase Fibonacci termina aqui */

El código Java termina aquí Este programa de ejemplo imprime los números de la serie de Fibonacci, hasta el número de términos que son requeridos (cinco, en este caso). El número de términos de la serie a ser impresos se pasa como argumento al constructor. El constructor asigna el parámetro recibido a una variable de instancia n. cambiarNumeroDeTerminos() se usa para cambiar el valor de n, si se desea hacerlo después que el objeto ha sido creado. El método mostrarSeries() se usa para imprimir la serie de números Fibonacci en la salida estándar. Se puede ver que hay dos componentes principales que nos dan la implementación de la clase, que son, la declaración de la clase y el cuerpo de la clase. La declaración del ejemplo anterior es simple. Indica que el nombre de la clase es Fibonacci y que es una clase public. A veces de la declaración, se puede también identificar la superclase de esa clase y si esta clase puede ser derivada. Fin del Ejemplo 1.6 Así como los constructores pueden ser sobrecargados, otros métodos también pueden ser sobrecargados en Java. Se va a discutir la sobrecarga de métodos, mediante la cual se pueden tener varias implementaciones para el mismo método.

8. Sobrecarga de Método
En la sección anterior se vio que más de un constructor puede ser creado para una clase. De manera similar, Java permite tener dos o más métodos con el mismo nombre dentro de la misma clase. Como con los constructores, los métodos sobrecargados

Unidad 1: Clases y Objetos

Libro 1: Core Java 124

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

} void mostrarEnPantalla(int a. 12. 13. char b){ System. y el orden en el cual son aceptados. 6. 19. son iguales. El código Java comienza aquí.. Pero si la diferencia entre dos métodos es sólo en cuanto a sus tipos de retorno. Esta característica de Java se llama sobrecarga de métodos.println(a).out. Sin embargo. 11. 20.println(b+"\n"). esto no se considera una sobrecarga de métodos. int b){ System. System. /*Definicion de la clase comienza aqui*/ 2. 5. 18. 7. 10. public class MetodoSobrecargadoEjemplo { 3. número. 4. int b){ System. 15. int b. Ejemplo 1. Si dos métodos son diferentes solo en sus tipos de retorno. 8. el compilador no distinguirá entre los dos métodos. Libro 1: Core Java . char c){ System. y tipo de argumentos aceptados por el método. System. 1.out. pero difieren en el orden de los tipos de datos aceptados por los dos métodos..out.out. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Los métodos sobrecargados pueden tener diferentes tipos de datos de retorno. } void mostrarEnPantalla(int a. El compilador detectará un error en tiempo de compilación si dos métodos en una clase tienen el mismo nombre y el mismo número y tipo de parámetros.println(a). si existen dos métodos que aceptan el mismo número de argumentos y el mismo tipo de argumentos.out.println(b). Volumen 2: Programación Orientada a Objetos 125 © Copyright IBM Corp. System.out.println(a).out.7 El siguiente programa ilustra la sobrecarga de métodos.out.Guía del Estudiante Core Java deben también tener un número diferente de parámetros o diferentes tipos de datos en los parámetros. 16. 9. entonces sí se considera una sobrecarga de métodos. void mostrarEnPantalla(int a. Ésta es una forma de lograr polimorfismo en Java. } void mostrarEnPantalla(char a.println(b+"\n"). 17. 14. el nombre.println(b+"\n").println(a). System.

println(c+"\n"). 30. System. 36. 27.out. 39. .out. msce. }/*Definicion de la clase termina aqui*/ El código Java termina aquí La salida del programa se muestra a continuación: 53 8965 68 g f 74 64 36 h Unidad 1: Clases y Objetos Libro 1: Core Java 126 © Copyright IBM Corp.println(b). 38. String d){ System. 26.out.mostrarEnPantalla(53. msce. 37. 22. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 32.out.println(c). 31. 34. 24.out.Core Java Guía del Estudiante 21. 29. 36. msce.mostrarEnPantalla(85. } void mostrarEnPantalla(int a. 'd'.println(d+"\n"). 'g'). 35. 'h').mostrarEnPantalla('f'. (float) 745.3. System. 74). msce. } 40. float c. } public static void main(String[] args) { MetodoSobrecargadoEjemplo msce = new MetodoSobrecargadoEjemplo(). char b. 33. "true"). 25. 23. msce.println(a). System.mostrarEnPantalla(64.mostrarEnPantalla(68. System. 28.8965).

Si se encuentra esa correspondencia. se llama a esa versión particular del método. Fin del Ejemplo 1. Se invocó esa versión y por lo tanto se obtuvo la salida anterior.3 true En la salida del programa anterior se puede ver en la línea 37 de la clase MetodoSobrecargadoEjemplo que a pesar que el tercer argumento pasado al método fue el carácter ‘h’. Ellas pueden ser final o abstract. tanto del número de argumentos como del tipo de dato de los argumentos. siempre que esa conversión se permita en Java. no existe una correspondencia directa cuando dos enteros y un carácter son pasados como argumentos. Clases Anidadas Una clase anidada es una clase cuya definición está dentro de otra clase. En un programa. . Ahora como miembro también puede ser private. es conocida como clase exterior. cuando ambas condiciones corresponden con una versión sobrecargada particular del método. 9. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Estas clases son consideradas miembro de la clase contenedora. En la ausencia de tal correspondencia. el compilador convierte implícitamente el tipo de dato de los argumentos a algún otro tipo de dato. Esto se debe a que el compilador primero busca por la correspondencia exacta de ambos. protected.Guía del Estudiante Core Java 85 d 745. Si una clase contiene a una clase anidada. ese carácter no se imprimió y que en su lugar se imprimió el valor ASCII del carácter. además de public o package que es una posibilidad para cualquier clase. En el ejemplo anterior. hubo una correspondencia con la versión del método mostrarEnPantalla. la cual toma tres enteros como argumentos. Las clases anidadas tienen acceso total a los miembros de su clase exterior. que es 104. La forma general de una clase exterior que contiene a una clase anidada se muestra a continuación: class ClaseExterna{ Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 127 © Copyright IBM Corp. Así que el tercer argumento se convirtió implícitamente a un int (Java permite tal conversión. de int a char y viceversa). esta versión particular del método sobrecargado será invocada. Sin embargo. incluso a los miembros privados. el compilador busca por una correspondencia exacta para el conjunto de tres tipos de datos.7 A continuación se va a entender el concepto de clases anidadas.

10. 9. 7. 4. } Unidad 1: Clases y Objetos Libro 1: Core Java 128 © Copyright IBM Corp. /*Definicion de la clase Carro comienza aqui*/ 2. Una instancia de alguna clase interna sólo puede existir si una instancia de la clase contenedora existe. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. • Un ejemplo de clase anidada se muestra a continuación: Ejemplo 1. 8.. 12. . 1. El código Java comienza aquí. private String placa. private String nombre. La clase interna no puede tener miembros estáticos propios. 14. public class Carro { 3. Clase Interna: Esta clase se declara como miembro no-estático de la clase exterior y tienen todas las características de cualquier otro miembro de instancia.Core Java //miembros de ClaseExterna public static class ClaseAnidadaEstatica { //miembros de ClaseAnidadaEstatica } private class ClaseInterna { //miembros de ClaseInterna } } Guía del Estudiante Existen dos tipos de Clases Anidadas: • Clase Anidada Estática: esta clase se declara como miembro estático (static) de la clase exterior y tiene todas las características de cualquier otro miembro estático. /* Definición de clase anidada */ class Acelerador { private int velocidadMaxima. 6. 5. private String marca. Acelerador() { velocidadMaxima = 180. 11..8 El siguiente programa ilustra una clase anidada. 13. private int velocidadActual.

24.new Acelerador(). "KAA-87X"). public void acelerar(int velocidad) { if ((velocidad + velocidadActual) < velocidadMaxima){ velocidadActual = velocidadActual + velocidad. 32. 26. 28. 41. 21. 25. Fin del Ejemplo 1. } }/* Fin de la clase anidada Acelerador */ /* Constructor Carro comienza aqui */ Carro(String mar. }/* Definicion de la clase Carro termina aqui */ El código Java termina aquí Note que en la línea 38 se necesita la instancia de la clase Carro para poder crear una instancia de Acelerador. 35. 30. 29.8 Una clase interna también puede estar definida dentro de algún método de una clase externa. "Focus". 38.imprimirVelocidad(). debido a que esta última es un miembro de instancia de la clase Carro. nombre = nom. }/* Constructor Carro termina aqui */ /* Metodo main comienza aqui */ public static void main(String[] args) { Carro miCarro = new Carro("Ford". miAcelerador. 17. 31. Acelerador miAcelerador = miCarro. }/* Metodo main termina aqui */ 42. 39. String nom. 22. 23. 34. 16. } } public void imprimirVelocidad() { System. String pla) { marca = mar. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.out. miAcelerador. . velocidadActual = 0. Esta representación es como sigue: public class ClaseExterna{ Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 129 © Copyright IBM Corp. 18.acelerar(100).println("Velocidad: " + velocidadActual). 20. 19. 27. 40. 36. 33. placa = pla. 37.Guía del Estudiante Core Java 15.

Es posible declarar clases internas con o sin nombre. public class LineaDeComandosEjemplo { 3. . inclusive puede modificarlos.print(" es args[" + i + "]"). i++) { 5. 6. Estos argumentos de línea de comando se guardan en un arreglo de string pasado al método main(). public void metodoExterno(final int y){ final int z=12.length.out. La construcción general para los argumentos de línea de comandos es como sigue: java nombreClase argumento1 argumento2 etc… Se pueden dar cualquier número de argumentos de línea de comandos. i < args.out. } } } } Guía del Estudiante Este tipo de clase interna puede acceder a todos los miembros de la clase contenedora.out. Argumentos de Línea de Comandos Los argumentos de línea de comandos se pueden usar para suministrar entradas a un programa durante su ejecución.. 10. class ClaseInterna{ public void metodoInterno(){ x=3-y+z. ‘y’ y ‘z’. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Ejemplo 1. Las clases internas sin nombre son conocidas como Clases Internas Anónimas y serán discutidas para el manejo de eventos en la Unidad 5 – Modelo de Delegación de Eventos y Manejo de Eventos del Volumen 5. 1. Sin embargo sólo tiene acceso a las variables final del método que la contiene. System.print("Argumento " + (i+1)). for (int i = 0. System. public static void main(String[] args) { 4. Libro 1: Core Java 130 Unidad 1: Clases y Objetos © Copyright IBM Corp. A continuación se va a entender cómo tomar entradas del usuario a través de argumentos de la línea de comandos. /*Definicion de la clase comienza aqui*/ 2.. System. en el ejemplo.Core Java int x.println(x).9 El siguiente programa ilustra el uso de los argumentos de línea de comandos: El código Java comienza aquí.

los recursos que mantenía son liberados. Una vez que se completa el objetivo para el cual fue creado el objeto. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.9 Todos los argumentos de la línea de comandos son interpretados como strings en Java. 11. .14 muestra el ciclo de vida de un objeto. se crean objetos de varias clases. A continuación se discuten las diferentes etapas en el ciclo de vida de un objeto. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 131 © Copyright IBM Corp. El objeto es entonces destruido. System. Estas clases interactúan entre sí a través de mensajes. está listo para recolección como basura. Ciclo de Vida de un Objeto Usualmente. La Figura 1. }/* Definicion de la clase termina aqui */ El código Java termina aquí El programa se ejecuta como sigue: java Estos son argumentos pasados por linea de comandos La salida del programa se muestra a continuación. } } 10.Guía del Estudiante Core Java 7. 9. en un programa Java. El programador puede usar las funciones de conversión para convertirlos a sus valores numéricos usando los métodos proporcionados en la clase String. Una vez que el recolector de basura toma el objeto. para permitir que otros objetos puedan hacer uso de ellos.out. Salida: Argumento 1 es args[0]: Estos Argumento 2 es args[1]: son Argumento 3 es args[2]: argumentos Argumento 4 es args[3]: pasados Argumento 5 es args[4]: por Argumento 6 es args[5]: linea Argumento 7 es args[6]: de Argumento 8 es args[7]: comandos Fin del Ejemplo 1.println(": " + args[i]). 8.

línea la instanciación del objeto.1 Crear Objetos Como se mencionó anteriormente. se crea una variable que puede guardar los objetos del tipo definido por la clase. fib = new Fibonacci(). son estas. El código anterior realiza tres acciones. La segunda línea usa el operador de instanciación new para crear un nuevo objeto del tipo Fibonacci. Unidad 1: Clases y Objetos Libro 1: Core Java 132 © Copyright IBM Corp.6. Al invocar al constructor inicializa el nuevo objeto creado. instanciación del objeto e inicialización del objeto. El objeto de una clase se conoce como instancia. El operador new que se usa para instanciar una clase. Se puede usar el operador new para instanciar una clase. el proceso de crear objetos de una clase se denomina instanciación.Core Java Guía del Estudiante Figura 1. Java permite usar clases e interfaces en forma similar para tipos de datos. En el ejemplo anterior. Esta parte del código invoca al constructor de la clase Fibonacci. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. la variable fib sirve para guardar objetos del tipo Fibonacci. En la etapa de declaración. El operador new es seguido por el constructor de la clase instanciada. Fibonacci fib. La inicialización del objeto se hace usando la parte de código después del operador new. Esto es posible dado que ambos son tipos referencia. reserva la memoria requerida pare el nuevo objeto creado. Aquí. Fibonacci(). la primera línea es la declaración del objeto y la segunda. declaración del objeto. que efectúa la inicialización. como sigue: Fibonacci fib = new Fibonacci(). como se muestra a continuación. La declaración del objeto y la instanciación del objeto pueden realizarse en pasos separados. . es decir. 11.14: Ciclo de Vida de un Objeto A continuación se verá la creación e instanciación de objetos. Tome de nuevo el Ejemplo 1. Esta variable no puede ser usada para referenciar otro objeto simultáneamente.

cambiar el estado de sus variables. la referencia al objeto (fib en este caso). Esta es una manera de acceder a la variable. Aquí. se crea un nuevo objeto. Ahora. pero su referencia no es almacenada. la variable n del objeto fib1 tendrá un valor de 10 (el valor de fib1. se muestra a continuación: int valorN = new Fibonacci(20). Se examinará la segunda forma de acceder a variables en la próxima sección. es la sintaxis usada para acceder a la variable. o el constructor). Se pueden manipular sus variables a través de los métodos definidos en su clase.3 Variables Referencia en un Objeto Hay dos formas de tener acceso a la variable n. porque ha sido implementado para asignar el valor de su argumento a n.6. La segunda forma es a través de un método (el método cambiarNumeroDeTerminos(). El primer método es acceder a la variable directamente. . Considere las siguientes líneas de código: Fibonacci fib1 = new Fibonacci(10).n es 10) y la variable n de fib2 tendrá un valor de 20 (el valor de fib2. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 133 © Copyright IBM Corp.Guía del Estudiante Core Java 11. Observe de nuevo la clase Fibonacci del Ejemplo 1. también se puede modificar el valor de la variable invocando al constructor de la clase. Otra forma de acceder a una variable sin que la referencia al objeto sea creada. Fibonacci fib2 = new Fibonacci(20). no necesariamente tienen el mismo valor en sus variables. o realizar alguna tarea. se puede usar el objeto para obtener alguna información. seguida por ‘.2 Uso de Objetos Una vez que se crea un objeto de un tipo en particular (clase). se puede acceder a ella como sigue: fib. Las referencias a objetos apuntando al mismo tipo de objetos. Esencialmente. 11. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.n es 20). En este caso. luego por el nombre de la variable.n = 20. que es parte de la instancia de la clase Fibonacci. Aquí.’. es similar a acceder a variables a través de un método. Instanciando la clase Fibonacci como sigue: Fibonacci fib = new Fibonacci(15). se tiene la referencia al objeto. se puede modificar el valor de la variable n accediéndola directamente.n. a la variable n se le asigna el valor de 15 por el constructor. si se quiere cambiar el valor de la variable n del objeto fib. porque la referencia no será usada posteriormente. En este caso.

El método cambiarNumeroDeTerminos() es un método provisto por la clase Fibonacci para modificar el valor de n. la segunda forma de poder cambiar el valor de la variable n. Este método asigna el valor 64 a la variable n del objeto. fib es la referencia al objeto Fibonacci. Como en el caso de las variables. se crea un objeto del tipo Fibonacci y se tiene la variable fib como la referencia al objeto creado. mediante la referencia al objeto accedemos al método cambiarNumeroDeTerminos() del objeto. se usa el nombre del método seguido por su lista de argumentos. Fibonacci fib = new Fibonacci(10). seguida por el nombre del método con un punto entre ellos. En esta sección se presenta cómo lograr lo mismo invocando el método disponible en el objeto de la clase. En caso de que el método no tome argumentos. En la siguiente sentencia. Estos para indicar que el nombre que le sigue a la referencia al objeto es de un método y no de una variable. la tercera forma es invocando a un método de la clase que permita cambiar el valor de n.4 Invocando los Métodos de un Objeto En la sección anterior se estudió cómo se puede cambiar el valor de la variable n accediéndola directamente. Considere la misma clase Fibonacci del Ejemplo 1.cambiarNumeroDeTerminos(64). Una vez que el valor ha sido asignado a la variable usando el constructor. En este ejemplo. Los paréntesis que abren y cierran () deben seguir al nombre del método. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. y se asigna como el nuevo valor para n.cambiarNumeroDeTerminos(64).6. con un punto entre ellos. Aquí. Una forma es cuando se instancia el objeto.Core Java Guía del Estudiante A continuación se aprenderá a invocar métodos en un objeto. Un valor entero es pasado como argumento del método. Después del nombre de la referencia. . es accediéndola directamente. se usa la referencia seguida por el nombre del método. Se accede al método dentro del objeto en forma similar a la que se usa para acceder las variables del objeto. con un punto entre la referencia al objeto y el nombre del método. y se pasa 64 (un valor entero) como argumento del método. Primero. fib. se obtiene la referencia al objeto. Hay tres formas de asignarle valor a n. Se puede llamar al método printSeries() del objeto Fibonacci directamente. Se puede asignar un valor entero a la variable n pasándole un valor entero como un argumento al constructor. para imprimir 10 términos de la serie de números Fibonacci como se muestra a continuación: Unidad 1: Clases y Objetos Libro 1: Core Java 134 © Copyright IBM Corp. para acceder a los métodos de un objeto también se puede usar una expresión que retorne una referencia a un objeto. como se muestra a continuación: new Fibonacci(10). 11.

Suponga que se tiene un método que retorna un valor y se quiere guardar el valor retornado. int exito = fib.out. . contador++. se hace como sigue: int exito = new Fibonacci(10).mostrarSeries(). } if(n>=1) System. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.println(c). System. En el segundo caso.Guía del Estudiante Core Java new Fibonacci(10). public int mostrarSeries() { // método if(n<=0) { System. a=b.out. o 0 para indicar lo contrario. la referencia al objeto Fibonacci debe ya estar disponible en la variable fib como se discutió anteriormente en esta sección..out. } return(1). El código Java comienza aquí. b=c.println(b).mostrarSeries(). if(n>=2) System.. se puede hacer como se muestra a continuación: (Asuma que el método mostrarSeries() retorna un valor entero).mostrarSeries(). o Fibonacci fib = new Fibonacci(10). } El código Java termina aquí En el caso anterior el método mostrarSeries() retorna 1 para indicar que la operación fue exitosa. Si se quiere guardar el valor retornado por el método en una variable. Invocar un método en un objeto es similar a enviar un mensaje a ese objeto. Si se tienen dos variables de Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 135 © Copyright IBM Corp.out. El método mostrarSeries() no retorna ningún valor (indicado por la palabra clave void).println(a). while(contador<n) { c=a+b.println("Entrada invalida"). return(0).

invocar el mismo método en ambos objetos puede retornar resultados diferentes. MIERCOLES. int exito1 = fib1. int exito = fib. La memoria asignada al objeto es liberada y puede ser usada por otros objetos. se presenta un ejemplo de ello: enum Semana {DOMINGO. Se puede usar esta referencia para examinar y manipular al objeto.Core Java Guía del Estudiante referencia (digamos.1 El Recolector de Basura Para usar un objeto en un programa Java. A continuación se estudia el recolector de basura en detalle. Después que el objeto se usa en un programa. Enumeraciones En Java 5. 13. JUEVES.0. Seguidamente. Manejo de la Memoria en Java En Java. Un objeto que está actualmente en uso en un programa es accesible por alguna parte del programa en su etapa actual de ejecución. aparece la palabra reservada enum que permite definir un conjunto de valores constantes bajo un mismo espacio de nombres que lo hace ser más coherente y legible. el recolector de basura se encarga de liberar la memoria no utilizada. LUNES. El recolector de basura es un hilo de baja prioridad que se mantiene ejecutando en segundo plano en una JVM. MARTES. SABADO} Unidad 1: Clases y Objetos Libro 1: Core Java 136 © Copyright IBM Corp. Esto significa que la memoria asignada a un objeto está disponible para este. debido a que fib y fib1 son referencias a diferentes objetos de la misma clase. Cuando el objeto se torna inalcanzable por cualquier tipo de referencia. se necesita una referencia al objeto. . Un objeto es alcanzable si es accesible en el programa. la memoria se asigna cuando un objeto es creado a partir de una clase. es reclamado para destrucción. 12. exito y exito1 pueden tener diferentes valores.mostrarSeries(). 12. En Java. Una referencia al objeto se usa para encapsular la referencia de los nuevos objetos creados. Este proceso es conocido como recolección de basura. En este caso. el recolector de basura lo reclama y la memoria asignada a éste es liberada. mientras el objeto este siendo usado en el programa Java. Se mantiene revisando que un objeto sea alcanzable por cualquier tipo de referencia. fib y fib1) apuntando a diferentes objetos de la misma clase Fibonacci. A continuación se discute el manejo de la memoria en Java. Java da soporte a un manejo de memoria automático. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.mostrarSeries(). En lenguajes de programación como C y C++. VIERNES. la memoria dinámicamente asignada tiene que ser explícitamente liberada.

Las enumeraciones proveen el método values(): Retorna un arreglo con la lista de las constantes de la enumeración. Cada constante de enumeración tiene su propia copia de las variables de instancia.1 Características de las Enumeraciones A continuación se presentan las características más relevantes de las enumeraciones: • • Las enumeraciones son clases: Cada constante de enumeración es un objeto del tipo de la clase enumeración. Sólo aquellas instancias definidas por enum están disponibles para su uso.Guía del Estudiante Core Java public void diasSemana() { for (Semana dia : Semana.println(dia).Serializable. .Comparable y • • • • • • Las enumeraciones definen el método valueOf(): Devuelve el valor de la constante de enumeración basado en el String pasado por parámetro. } 13.lang. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 137 © Copyright IBM Corp.Enum. Sus valores pueden ser comparados con == o equals().Enum: Todas las enumeraciones extienden implicitamente de java. Además. Las enumeraciones implementan java. No es posible crear una enumeración que herede de otra clase debido a la definición de la clase Enum: abstract class Enum<E extends Enum<E>> • • Sus valores no son tipo de datos enteros: Cada valor declarado es una instancia de la clase enumeración en sí mismo. No tienen un constructor público: Esto elimina la posibilidad de crear instancias adicionales no definidas en tiempo de compilación. java.out. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Las enumeraciones pueden tener constructores.values()) System.io. Sus valores son public.lang. static y final: Impide que sus valores puedan ser sobreescritos o cambiados. variables de instancia y métodos: Los contructores son llamados automáticamente cuando se declara cada constante de enumeración. impide que estos objetos sean superclases de otras.lang. Las enumeraciones extienden de java.

Definir variables y métodos en Java. Explicar los modificadores de acceso. Unidad 1: Clases y Objetos Libro 1: Core Java 138 © Copyright IBM Corp.Core Java Guía del Estudiante Resumen Ahora que ha completado esta unidad. Explicar la necesidad y uso de los constructores de las clases. Explicar el ciclo de vida de un objeto. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Exponer el uso de Enumeraciones. Discutir acerca de la estructura y miembros de una clase Java. usted debe ser capaz de: • • • • • • • • • • Explicar los conceptos de clases y objetos. Mencionar cómo Java maneja los argumentos de la línea de comandos. . Describir el manejo de la memoria en Java. Explicar cómo los métodos en una clase Java pueden ser sobrecargados.

a) Verdadero b) Falso 2) Se puede usar el valor de retorno del operador new para acceder a las variables del objeto recién creado como sigue: new Fibonacci(10). es obligatorio declarar la variable que será usada para contener la referencia al objeto.Guía del Estudiante Core Java Unidad 1: Examen de Autoevaluación 1) Cuando se crea una instancia de una clase. está definida en el paquete p2. ¿Qué tipo de variables declaradas en X pueden ser accedidas por un objeto de Y? a) private b) protected c) public d) package Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 139 © Copyright IBM Corp.n. que es una subclase de X. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La clase Y. ¿cuál de las siguientes es la forma correcta de definir un constructor sin argumentos? a) int MiClase() {…} b) void MiClase() {…} c) MiClase(int miObjetoDeClase) {…} d) MiClase() {…} 4) ¿Cuál de los siguientes debe estar necesariamente presente en una definición de una clase? a) Sentencia import b) Nombre de la superclase c) Palabra reservada class d) Interfaces implementadas 5) La clase X está definida en el paquete p1. a) Verdadero b) Falso 3) Para una clase llamada MiClase.

int metodo1(int k. int j). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . int k).Core Java Guía del Estudiante 6) ¿Cuál de los siguientes tipos de variables en Java no pueden ser serializadas? a) transient b) volatile c) final d) protected 7) ¿Cuál de los siguientes tipos de métodos pueden usar código en C en un programa Java? a) static b) volatile c) final d) native 8) ¿Qué tipo de método puede invocar un método estático? a) final b) volatile c) private d) static 9) ¿Es posible para una clase tener dos métodos como los siguientes? void metodo1(int j." ¿Cuál de las siguientes es correcta? a) args[0] tiene "MiClase " b) args[0] tiene "hola" c) args[1] tiene "hola" d) Ninguna de las Anteriores Unidad 1: Clases y Objetos Libro 1: Core Java 140 © Copyright IBM Corp. "java MiClase hola mundo. a) Verdadero b) Falso 10) Cuando un programa Java con una clase MiClase es ejecutado usando la expresión.

Guía del Estudiante Core Java Respuestas a Unidad 1: Examen de Autoevaluación 1) b 2) a 3) d 4) c 5) b y c 6) a 7) d 8) d 9) b 10) b Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 141 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. .

.

Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 143 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . Sobrecargar métodos en una clase.Guía del Estudiante Core Java Unidad 2: Laboratorio de Clases y Objetos Objetivos del Aprendizaje Al final esta unidad. usted será capaz de: • • • Crear clases y objetos. Invocar métodos de una clase.

14 * radio * radio Área del triangulo = 0. Declare variables para almacenar el nombre del empleado. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. CalcularSueldo crea instancias de la clase Empleado. Empleado y CalcularSueldo. triángulo. Sugerencias Útiles: • • Cree una clase llamada Area. Cree una instancia de Empleado y valores de muestra de los detalles del empleado se pasan como parámetros al constructor. Use el constructor de la clase Empleado para asignar valores a las diferentes variables. código de empleado. La clase Area tiene métodos estáticos sobrecargados con el nombre area()que pueden ser usados para calcular el área de un circulo. rectángulo y un cilindro. Escriba una clase llamada Usuario que invoque las diferentes versiones de area() en la clase Area con valores de prueba como parámetros. Sugerencias Útiles: • • Escriba una clase llamada Empleado. Escriba una clase llamada CalcularSueldo. obtiene los detalles del empleado para calcular los pagos y los imprime en la salida estándar. código. Escriba cuatro métodos sobrecargados llamados area que tomen diferentes números y tipos de datos como parámetros. El valor retornado se imprime en la salida estándar.Core Java Guía del Estudiante Ejercicios de Laboratorio 1) Escriba un programa en Java que tenga dos clases. Usuario usa los métodos de Area para calcular el área de diferentes figuras geométricas y la imprime en la salida estándar. rectángulo y cilindro. El constructor de Empleado toma las variables declaradas como parámetros y tiene el código para inicializar estas variables. horas trabajadas y pago por hora. Área del Círculo = 3. Empleado tiene los siguientes detalles acerca del empleado: nombre.14 * radio * radio * altura • • • • • Unidad 2: Laboratorio de Clases y Objetos Libro 1: Core Java 144 © Copyright IBM Corp. triangulo. 2) Escriba un programa en Java que tenga las clases Area y Usuario. horas trabajadas y pago por hora. . • • El sueldo del empleado se calcula a partir de los detalles del empleado y se imprime en la salida estándar.5 * base * altura Área del rectángulo = largo * ancho Área del cilindro = 3. Estos métodos se usan para calcular el área de un círculo.

Escriba métodos para obtener los valores de estas variables y asignar valores a estas variables. Cree instancias de las clases Instructor. Curso tiene número del curso y el nombre del curso. Cree una clase llamada CursoInstructor que tenga dos miembros de datos. 4) Cree una enumeración llamada Curso con los nombres de los cursos de su preferencia. número de ID del instructor y disciplina. Volumen 2: Programación Orientada a Objetos 145 © Copyright IBM Corp. Libro 1: Core Java .Guía del Estudiante Core Java 3) Cree dos clases llamadas Instructor y Curso.. Curso y CursoInstructor Use el método setter para inicializar las variables de cada clase con valores de prueba. Escriba una clase llamada Curso. Escriba métodos que le permitan guardar y obtener los datos. defina un método estático que reciba varios cursos usando la notación ‘. Declare variables para almacenar el número y nombre del curso. son estos. Escriba el método main que cree objetos de las tres clases y establezca datos en todos estos objetos. Cree una clase llamada Programa y defina un método estático que reciba un número variable de cursos e imprima un mensaje particular para cada uno. Sugerencias Útiles: • • • Escriba una enumeración llamada Curso y definale los cursos de su preferencia. Escriba una clase llamada CursoInstructor Declare variables para almacenar el número del curso y el ID del instructor. Considere un número de curso de prueba como entrada y use la clase CursoInstructor para encontrar al instructor que enseña ese curso e imprimirlo en la salida estándar. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. número de curso y número de ID del instructor. Escriba métodos para obtener los valores de estas variables y asignar valores a estas variables. ID y disciplina. Declare variables para almacenar el nombre del instructor. Instructor tiene el nombre del instructor. Sugerencias Útiles: • • • • • • • • • • • • Escriba una clase llamada Instructor. dado el número de curso. En la clase anterior. Escriba métodos para guardar y obtener los datos. Escriba métodos para obtener los valores de estas variables y asignar valores a estas variables.’.. Cree una clase llamada Programa. El programa debe ser capaz de buscar e imprimir el nombre de un instructor que enseña un curso.

• Unidad 2: Laboratorio de Clases y Objetos Libro 1: Core Java 146 © Copyright IBM Corp. Pruebe el funcionamiento del método pasandole varias enumeraciones de Curso. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. .Core Java Guía del Estudiante • • Escriba un for que recorra el conjunto de cursos. cree un switch que muestre un mensaje en particular para cada curso definico en la enumeración Curso. Dentro del cuerpo de la anterior estructura iterativa.

usted será capaz de: • • • • • Entender los fundamentos de la herencia. Explicar cómo sobrescribir los métodos. Describir cómo crear una jerarquía de herencia. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 147 © Copyright IBM Corp. .Guía del Estudiante Core Java Unidad 3: Herencia Objetivos del Aprendizaje Al final de esta unidad. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Explicar el uso de la palabra reservada final. Explicar el uso de las palabras reservadas this y super.

Sintaxis para Declarar Clases Usando Herencia en Java La sintaxis general para declarar una clase que hereda de una superclase es la siguiente: class NombreSubClase extends NombreSuperClase { // cuerpo de la SubClase } Una clase no puede ser su propia superclase. Asuma que quiere crear una clase llamada ArbolDePino. la clase ArbolDePino obtiene implícitamente todas las variables y métodos que tengan acceso protected. Introducción La herencia es uno de los fundamentos de la programación orientada a objetos. Sin embargo. Así. además de algunas características adicionales. . De acuerdo con este concepto. La clase que define los atributos y el comportamiento común se denomina superclase. que tiene las mismas características que la clase Arbol. ArbolDePino puede añadir sus propias características especiales además de las características de la clase Arbol. Todas las clases que son parte de este grupo específico pueden heredar los atributos y el comportamiento de esta clase común. Dado que ArbolDePino hereda de la clase Arbol. Las clases que heredan atributos y comportamiento de la clase general (superclase) se denominan subclases. Una forma de hacerlo es rescribiendo las variables miembro (atributos) y los métodos (comportamiento) que ya estaban disponibles en la clase Arbol. Una superclase es una clase que es heredada por otras clases. la clase ArbolDePino puede ser una subclase de la clase Arbol. Java proporciona una forma elegante de hacer lo anterior. Se va a entender que es la herencia tomando un ejemplo de la vida real. 2. Una clase puede tener cualquier número de subclases. usando el concepto de herencia. Se puede tener una clase que define los atributos y comportamiento comunes a un grupo específico de clases. Adicionalmente. también en la clase ArbolDePino.Core Java Guía del Estudiante 1. y luego añadir las características especiales a la clase ArbolDePino. Cada subclase de una clase será una forma especializada de su superclase. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Unidad 3: Herencia Libro 1: Core Java 148 © Copyright IBM Corp. puede ser llamado un ‘tipo de’ Arbol. pero sólo puede tener una única superclase. public y package. A continuación se discute cómo declarar clases usando la herencia en Java. Permite crear una jerarquía entre un grupo de clases que tiene características similares.

. 13. 1. 4. 9.Guía del Estudiante Core Java En el ejemplo anterior. private boolean conFlores. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 21. 25. 14. 20.1 El ejemplo ilustra como se realiza la herencia en Java. 7. public String getNombre() { return nombre. El código Java comienza aquí. Libro 1: Core Java .. El código en el Ejemplo 3. que hereda de la clase Arbol. Para especificar que la clase ArbolDePino hereda de Arbol. 16. /*Definicion de la clase Arbol comienza aqui*/ 2. La clase ArbolDePino hereda de la clase base Arbol. 23. 15. y la clase ArbolDePino se llama una subclase de Arbol. private String nombre. la clase Arbol se llama superclase de la clase ArbolDePino. 22. } Volumen 2: Programación Orientada a Objetos 149 © Copyright IBM Corp. 17. 24. 8. 6. 18. } public void setEdad(int nuevaEdad) { edad = nuevaEdad. 11. } public int getEdad() { return edad.1 muestra la declaración de ambas clases. 5. } public boolean isConFlores() { return conFlores. 19. se debe usar la siguiente declaración de clase: class ArbolDePino extends Arbol {…} Se va a volver a revisar el ejemplo de la clase ArbolDePino. class Arbol { 3. 10. } public void setNombre(String nuevoNombre) { nombre = nuevoNombre. Ejemplo 3. 12. private int edad.

public ArbolDePino() { setNombre("Pino").getNombre(). } 30. String nombreSub. 61. /* Definicion de la clase ArbolDePino comienza aqui */ 33. 52. 60. 27. /* Definicion de la clase HerenciaEjemplo comienza aqui */ 47.Core Java Guía del Estudiante 26. nombreSub = subClase. 36. 53. conifero = true.println("Edad Arbol: " + superClase. 62.setEdad(36). 29. public void setConFlores(boolean nuevoConFlores) { conFlores = nuevoConFlores. superClase. 55.println("Nombre Arbol: " + nombreSuper). Unidad 3: Herencia Libro 1: Core Java 150 © Copyright IBM Corp. class ArbolDePino extends Arbol { 34.println("Contenido de Super Clase:"). 59. 40. nombreSuper = superClase. 28. 35. Arbol superClase = new Arbol().out. ArbolDePino subClase = new ArbolDePino(). 32. 38. 56. public static void main(String[] args) { 49. . 54. } public boolean isConifero() { return conifero. 57. 39. System. subClase.out. } 44. 50. 43. System. 37. 46.getNombre(). }/* Definicion de la clase ArbolDePino termina aqui */ 45. 41. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 51. }/* Definicion de la clase Arbol termina aqui */ 31. String nombreSuper. 58. System.out.setEdad(68). private boolean conifero. public class HerenciaEjemplo { 48.getEdad()). 42.

. que muestra una jerarquía de herencia. Una subclase. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. System.println("\nContenido de Sub Clase:"). System. usa la palabra reservada extends. Adicionalmente. Por lo tanto.isConifero()). Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 151 © Copyright IBM Corp. } 68. Fin del Ejemplo 3. También se puede ver que la clase Arbol es una clase autónoma completamente independiente.out. Por eso la subclase ArbolDePino también tiene las variables de instancia nombre. }/* Definicion de la clase HerenciaEjemplo termina aqui */ El código Java termina aquí La salida del programa anterior es como sigue: Contenido de Super Clase: Nombre Arbol: null Edad Arbol: 36 Contenido de Sub Clase: Nombre Arbol: Pino Edad Arbol: 68 Conifero: true De la salida del programa anterior se puede ver que la subclase ArbolDePino obtiene implícitamente todos los miembros de su superclase Arbol.out. seguida por el nombre de la superclase para especificar su superclase. Considere la Figura 3. edad y conFlores de su superclase.out.println("Nombre Arbol: " + nombreSub). una superclase de una subclase puede ser usada por su cuenta. en su declaración.println("Edad Arbol: " + subClase.Guía del Estudiante Core Java 63.getEdad()). Esto se llama jerarquía de herencia. 64.out. Se puede construir la jerarquía de subclases de una superclase en particular. System.1 Se ha visto como se hereda de una clase en Java. 65. 66.1. El atributo conifero es una característica especial de la clase ArbolDePino. System.println("Conifero: " + subClase. 67. ArbolDePino tiene su propia característica especial.

se puede acceder a este miembro privado. ExamenPracticoAleatorio es una subclase de ExamenPractico. Así. A continuación se examinan algunos de los principales conceptos de herencia en Java. en Java están más simplificados y existe menos ambigüedad que en C++. Sólo usando un método getter provisto en la clase base.1 se puede implementar en Java usando la palabra reservada extends. Unidad 3: Herencia Libro 1: Core Java 152 © Copyright IBM Corp. 3. La jerarquía mostrada en la Figura 3. Los constructores de la clase base no son heredados.Core Java Guía del Estudiante Figura 3. 3. también conocidas como campos y los métodos de la clase base son heredados. Note que ExamenPractico es la superclase de ExamenPracticoAleatorio. Los modificadores de acceso controlan la accesibilidad de los miembros. la clase Examen es la superclase de ExamenSimple. ExamenPractico y ExamenCertificacion.1 ¿Qué es Heredado? Las variables miembro. El primer concepto que se va a entender es qué componentes de una clase son heredados.1: Jerarquía de Herencia En esta figura. La herencia no implica automáticamente visibilidad o accesibilidad a los miembros de la clase base en la clase que hereda. un miembro de datos privado de la clase base a pesar de que es heredado por la subclase no es accesible en forma directa por la subclase. . Conceptos Esenciales de Herencia La herencia en Java tiene los mismos conceptos que en C++. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Sin embargo. y otros conceptos de herencia.

14. que están disponibles para todas las clases.equals(sb2). cualquier clase creada por el programador es una subclase de la clase Object. }/* Definicion de la clase CompararEjemplo termina aqui */ Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 153 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. }/* Metodo main termina aqui */ 15. System. System. /* Metodo main comienza aqui */ public static void main(String[] args) { StringBuffer sb1 = new StringBuffer("Palabra"). Si las dos referencias a objetos comparadas usando el método equals() apuntan a objetos diferentes. 12. public class CompararEjemplo { 3. iguales = sb1. Java provee ciertos métodos en la clase Object. 3. Así.println(iguales). 13.Guía del Estudiante Core Java Se aprenderá ahora acerca de la clase Object. 3. /*Definicion de la clase CompararEjemplo comienza aqui*/ 2. Este método devuelve true sólo si las dos referencias a objetos que son comparadas refieren al mismo objeto. Dado que Object es la clase base de todas las clases Java.lang. . sb2 = new StringBuffer("Palabra"). 8. Hay varios métodos útiles definidos en java.println(iguales).2. 10.1 El Método equals() El método equals() se usa para comparar dos referencias a objetos en relación con los valores que mantienen los objetos. de lo contrario devuelve false.2 La Clase Object Todas las clases en Java heredan de la clase java. 4. que tienen el mismo valor.Object por defecto. El código Java comienza aquí… 1. Dos de ellos. el método equals() retorna false. Considere el Ejemplo 3. 11.equals(sb2). StringBuffer sb2 = sb1.2.Object. se estudiaran estos dos métodos. 7. ampliamente utilizados son: equals() y toString().out.2 El ejemplo muestra el uso del método equals(). 5. 9.lang.out. que compara dos referencias a objeto StringBuffer sb1 y sb2. 6. Ejemplo 3. boolean iguales = sb1.

En este caso.lang.Object. aún cuando el valor almacenado es el mismo ("Palabra"). El código Java comienza aquí.3 Este ejemplo muestra como el método equals() se usa en la clase String. Considere el Ejemplo 3. y retorna el valor como true. /* Metodo main comienza aqui */ Libro 1: Core Java 154 Unidad 3: Herencia © Copyright IBM Corp. Si dos referencias apuntan a la misma instancia de objeto. que muestra este concepto. iguales tendrá el valor false. que determina si dos referencias hacen referencia al mismo objeto o no. 1.Core Java Guía del Estudiante El código Java termina aquí Después de ejecutar la sentencia sb1. . Otra forma de comparar objetos es usar el operador ==. Por ejemplo. boolean iguales = (sb1 == sb2). chequeará la referencia a objeto de dos objetos..equals(sb2) retorne false. porque sb1 y sb2 refieren a dos objetos StringBuffer diferentes. la clase String tiene una implementación sobrecargada de equals() para comparar el valor en estos objetos.2 El método equals() realiza una comparación profunda. En este caso iguales tendrá true ya que s1 y s2 refieren a la misma instancia de la cadena de caracteres "Hola" creada en el repositorio de constantes de string. Por defecto. considere el siguiente código: StringBuffer sb1 = new StringBuffer("Palabra"). iguales tendrá un valor true. puede ser sobreescrito para revisar los valores almacenados en los objetos. sb2 tiene una nueva referencia a objeto. creados usando dos operaciones new. String s2 = "Hola". 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. de aquí que sb1. El método equals compara las dos referencias a objeto. y no sólo la referencia. el operador == retornará true.. /*Definicion de la clase StringEjemplo comienza aqui*/ 2. Por ejemplo. Después de ejecutar la sentencia sb2 = new StringBuffer("Palabra"). Fin del Ejemplo 3. StringBuffer sb2 = new StringBuffer("Palabra"). boolean iguales = (s1 == s2). compara los valores almacenados por dos objetos. Ejemplo 3.3. Se puede sobreescribir la implementación de equals que está en la clase java. public class StringEjemplo { 3.equals(sb2). Considere el siguiente código: String s1 = "Hola". Sin embargo.

str2 = new String("Palabra").3 Palabras Reservadas super y this En el ejemplo de las clases Arbol y ArbolDePino discutido anteriormente. 11. 9. De ahí que. Por lo tanto.out. Aún en este caso.equals(str2). ArbolDePino es una subclase de la clase Arbol. La implementación de toString() en la clase Object da el nombre de la clase seguido por el carácter @. String str2 = str1.Guía del Estudiante Core Java 4. public static void main(String[] args) { String str1 = new String("Palabra").out. }/* Definicion de la clase StringEjemplo termina aqui */ El código Java termina aquí Después de ejecutar la segunda sentencia str1. 8. La palabra reservada super se usa para acceder a los miembros de la superclase desde la subclase. }/* Metodo main termina aqui */ 15. str2 tiene una nueva referencia a objeto. y la palabra reservada this se usa para acceder a los miembros del Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 155 © Copyright IBM Corp.println(iguales).2. 13. se han visto los diferentes métodos dentro de la clase Object. boolean iguales = str1. iguales retorna true.println(iguales).2 El Método toString() El método toString() se usa para obtener información textual acerca de un objeto. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. después de ejecutar la sentencia str2 = new String("Palabra"). Fin del Ejemplo 3. . 5. 3. 12. los valores son comparados.equals(str2). 14.equals(str2). Se considera a continuación el uso de las palabras reservadas this y super. iguales = str1. System.3 3. Este ejemplo no usa ningún constructor para inicializar sus variables miembro.equals(str2) devuelve true. System. las variables miembro no son inicializadas con ningún valor por defecto en el programa. 6. 7. Cuando se escriben las clases se puede sobrescribir este método para dar información textual acerca de la clase de la forma que se quiera. que a su vez es seguido por la representación hexadecimal sin signo del código hash asociado con el objeto. ellas tienen los valores por defecto proporcionados por el sistema. Hasta ahora. str1. 10.

que se muestra en la Figura 3. Ahora se rescriben las clases Arbol y ArbolDePino ya discutidas para incluir constructores en ellas. Ésta ha sido inicializada llamando al constructor de la superclase. Desde el constructor de ArbolDePino se puede acceder a la variable de Unidad 3: Herencia Libro 1: Core Java 156 © Copyright IBM Corp. se puede utilizar la palabra reservada super para invocar al constructor de la superclase.Core Java Guía del Estudiante objeto actual. Figura 3. la clase Arbol tendrá algunos valores por defecto establecidos para los objetos de tipo Arbol. Considere por un momento otro ejemplo. Se hizo llamando a super(new Date()). usando la palabra reservada super. En este caso. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. para entender el uso de la palabra reservada super. .2.2: Uso de la Palabra Reservada super() La clase ExamenCertificacion extiende de la clase Examen. El constructor de ExamenCertificacion inicializa variables de instancia como idVale y idEstudiante. Por lo tanto. La clase ArbolDePino puede reutilizar los valores por defecto establecidos en la clase Arbol. ArbolDePino hereda las variables de instancia nombre y edad de Arbol. La variable de instancia fecha está definida como un miembro privado en Examen.

nombre. 5. 19. 18. porque el parámetro no pertenece al objeto. Libro 1: Core Java . class Arbol { 3. se puede acceder a la variable de instancia nombre heredada por ArbolDePino desde Arbol. El parámetro nombre se accede sin usar la palabra reservada this. 14. usando la palabra reservada this en la superclase. } public Arbol(Arbol arbol) { this.edad.nombre).nombre = arbol. /*Definicion de la clase Arbol comienza aqui*/ 2. 8.edad = edad. 17.nombre = "Roble". Dentro del constructor se puede acceder tanto a la variables nombre como al parámetro nombre. 13. 6. 7. 9. this. En el programa en el Ejemplo 3. 16.edad = arbol.4. se accede a la variable de instancia nombre usando la palabra reservada this (this. la variable nombre es pasada como parámetro a uno de los constructores de la clase Arbol. Para diferenciar entre la variable de instancia y el parámetro.nombre = nombre. public Arbol(String nombre. } public Arbol() { this. this. Si el nombre de una variable de instancia no es el mismo que el de un parámetro de un constructor. sino que es una variable local del método. 10. this. 4.4 Este ejemplo ilustra como trabajan las palabras reservadas super y this en la clase que hereda. 11. Similarmente. Volumen 2: Programación Orientada a Objetos 157 © Copyright IBM Corp. no hay necesidad de usar la palabra reservada this para acceder a las variables de instancia. private String nombre. private boolean conFlores. El código Java comienza aquí… 1. Ejemplo 3.edad = 100.Guía del Estudiante Core Java instancia nombre declarada en Arbol usando la palabra reservada super. private int edad. 12. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. int edad) { this. se puede también usar la palabra reservada super dentro del constructor para invocar a un método declarado en la superclase. 15.

39. 54. 55. . 36. 28. 21. 35. 34. 31. 22.nombre = nombre. } public String getNombre() { return nombre. 23. Unidad 3: Herencia Libro 1: Core Java 158 © Copyright IBM Corp. 26. conifero = true. 47. 53. } public void setNombre(String nombre) { this. 44. 29. 24.conFlores = conFlores. 38. 32. this. /* Definicion de la clase ArbolDePino comienza aqui */ 48. } public void setConFlores(boolean conFlores) { 43. public ArbolDePino() { super(). } public void setEdad(int edad) { this. } private boolean conifero. 56.edad = edad. 42. }/* Definicion de la clase Arbol termina aqui */ 46. 50. } public boolean isConFlores() { return conFlores. setNombre("Pino"). 40. class ArbolDePino extends Arbol { 49. } public int getEdad() { return edad. 27. 30. 25. 33. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 37. } 45. 41. 51.Core Java Guía del Estudiante 20. 52.

58.println("Nombre Arbol: " + arbol3.println("Nombre Arbol: " + arbol2. 67. System. 93.getNombre()). 77.out. System. System. 65. Arbol arbol2 = new Arbol("Mango". 61. 81.out.out.getEdad()). Libro 1: Core Java . 87.conifero.getEdad()).out. Arbol arbol3 = new Arbol(arbol2). /* Definicion de la clase SuperEjemplo comienza aqui */ 73.out.println("\nContenido de arbol2:"). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 88. 69. 64). 86. System. System. 75. 66. 80. System. 62. 84. System. } public ArbolDePino(ArbolDePino arbolDePino) { super(arbolDePino).out. 72. 85. public class SuperEjemplo { 74. 76. System. 83. System. } 70. } public boolean isConifero() { 68. 59.getNombre()).println("Contenido de arbol1:"). 91.out.Guía del Estudiante Core Java 57. public static void main(String[] args) { Arbol arbol1 = new Arbol(). conifero = conico.out. edad).println("Edad Arbol: " Volumen 2: Programación Orientada a Objetos 159 © Copyright IBM Corp. 78. conifero = arbolDePino.println("Edad Arbol: " + arbol1. 92. return conifero. 79.out. 89. boolean conico) { super("Pino". 60.println("\nContenido de arbol3:"). 63.println("Nombre Arbol: " + arbol1.println("Edad Arbol: " + arbol2. }/* Definicion de la clase ArbolDePino termina aqui */ 71. public ArbolDePino(int edad. 82. 64.getNombre()). 90.

105.getNombre()).println("Conifero : " + pino3.out. 116.println("Nombre Arbol: " + pino2. 113. System. 95. 111. 104. + arbol3. 119.println("Nombre Arbol: " + pino3. 120. ArbolDePino pino2 = new ArbolDePino(35. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. System. System. 117.getEdad()). 103.out.getNombre()).println("Edad Arbol: " + pino2.getEdad()). System. ArbolDePino pino1 = new ArbolDePino(). 121. System. .getEdad()). 100.getEdad()).isConifero()).out. System.out. System.out. 122.out. 106. 115. 114.out. 107.println("\nContenido de pino1:"). } 123. true).getNombre()).isConifero()). 109.out. }/* Definicion de la clase SuperEjemplo termina aqui */ El código Java termina aquí La salida de este programa es la siguiente: Contenido de arbol1: Nombre Arbol: Roble Edad Arbol: 100 Unidad 3: Herencia Libro 1: Core Java 160 © Copyright IBM Corp.isConifero()). System.out. System. 98.out.println("\nContenido de pino2:"). 110.out. 102. 97. ArbolDePino pino3 = new ArbolDePino(pino2).println("Conifero : " + pino2.println("\nContenido de pino3:"). System.println("Conifero : " + pino1. 112.println("Nombre Arbol: " + pino1.out.println("Edad Arbol: " + pino1.println("Edad Arbol: " + pino3. 108. 99.Core Java Guía del Estudiante 94. 118. System. 96. System. 101.

El uso de la segunda forma de la palabra clave super será ilustrado posteriormente.1 Usar super en Clases Derivadas – Un Enfoque Detallado En términos generales.3. 3. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La palabra reservada super puede usarse en dos formas diferentes. .4 Teniendo una idea general de la palabra reservada super. la clase Arbol define tres constructores sobrecargados diferentes. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 161 © Copyright IBM Corp. ArbolDePino usa los tres constructores cuando define sus constructores usando super(). En el programa del Ejemplo 3. Fin del Ejemplo 3. La primera forma se usa cuando se invoca al constructor de la superclase. una subclase se puede referir a su superclase inmediata usando la palabra reservada super. se verá en detalle su uso en la herencia.4 se vio que el uso de la primera forma de la palabra clave super.Guía del Estudiante Core Java Contenido de arbol2: Nombre Arbol: Mango Edad Arbol: 64 Contenido de arbol3: Nombre Arbol: Mango Edad Arbol: 64 Contenido de pino1: Nombre Arbol: Pino Edad Arbol: 100 Conifero : true Contenido de pino2: Nombre Arbol: Pino Edad Arbol: 35 Conifero : true Contenido de pino3: Nombre Arbol: Pino Edad Arbol: 35 Conifero : true En este programa. mientras que la segunda se usa para acceder a las variables miembro de la superclase que han sido ocultadas por las variables miembro de la subclase.

4. esto se debe a que una variable referenciando a un objeto de la superclase también puede usarse para referenciar al objeto de una clase que deriva de ella. el compilador busca por la correspondencia exacta en la lista de parámetros de los diferentes constructores de la superclase. La forma general de la palabra reservada super usada por el constructor de la subclase para llamar al constructor de la superclase es como sigue: super(listaDeParametros). ArbolDePino(ArbolDePino ap) { super(ap). Se verá en un ejemplo como acceder a un método de la superclase desde un método en la subclase en la sección Sobrescritura de Métodos. } En este código. Véase el siguiente constructor definido por la clase ArbolDePino. nombreDeMiembro puede referir tanto a una variable como a un método de instancia de la superclase. super() se usa con un objeto del tipo ArbolDePino y no del tipo Arbol. La herencia tiene un comportamiento diferente cuando se usa junto a un modificador de acceso. el objeto arbol puede acceder solamente a los miembros presentes en la clase Arbol. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. De esta forma. entonces será la primera sentencia en el constructor de una subclase. se invoca al constructor de la forma Arbol(Arbol arbol). se puede pasar el objeto ArbolDePino al constructor Arbol(Arbol arbol). Aquí super() permite referir al constructor de la superclase inmediata (Arbol) de la clase actual (ArbolDePino). Por lo tanto. el miembro conifero se le asigna valor por separado en el constructor ArbolDePino() después de invocar al constructor de la clase Arbol mediante super(). A continuación se considera ese aspecto. de lo contrario el compilador generará un error. Cuando una subclase usa la palabra reservada super en la forma descrita. No conoce acerca de los miembros adicionales de la clase ArbolDePino.nombreDeMiembro Aquí. Pero aún así. conifero = ap. se usa ese constructor particular. Unidad 3: Herencia Libro 1: Core Java 162 © Copyright IBM Corp. Este uso de la palabra reservada super es similar al uso de la palabra reservada this. La palabra reservada super también sirve para referir a las variables miembro o a los métodos miembro de la superclase.conifero. .Core Java Guía del Estudiante Una subclase puede ocultar una variable de su superclase teniendo su propia variable con el mismo nombre que el de la superclase. Usualmente si se usa super(). La forma general del uso de super se da a continuación: super. En este caso. como se ilustró en el programa del Ejemplo 3. Si se encuentra una correspondencia.

el atributo nombre de Arbol no es accesible por ArbolDePino. Una subclase puede acceder a todas las variables y métodos declarados como public y protected de su superclase. ArbolDePino puede.3. Para más información sobre éstos modificadores de acceso refiérase a la Unidad 1 – Clases y Objetos de este volumen. Una solución mejor será usar el método setNombre. y así sucesivamente. En la Figura 3. pero dado que Arbol provee una forma de acceder al atributo nombre a través de los métodos getNombre() y setNombre(). entonces la subclase puede acceder a todas las variables y métodos declarados como package en su superclase. y asignarle el valor de "Arbol" dentro de su constructor.2 Herencia y Modificadores de Acceso A continuación se va a entender si una subclase tiene acceso o no a todas las variables (atributos) y métodos (comportamiento) declarados en su superclase. Figura 3.3. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. o la superclase de su superclase.3: Herencia y Modificadores de Acceso Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 163 © Copyright IBM Corp. . esto no está permitido. porque está declarado como private. el constructor de ArbolDePino accede a la variable private nombre de Tree. En el Ejemplo 3. Si la superclase está presente en el mismo paquete que la subclase.Guía del Estudiante Core Java 3. Las variables declaradas como private no pueden accederse desde la clase derivada.1. indirectamente acceder al atributo.

} public String getNombre() { return nombre. En esta sección. que consiste de una superclase y una subclase. 17. 13.edad = edad. ArbolConifero será una subclase de Arbol. Se va a alterar el programa del ejemplo anterior para ilustrar una jerarquía de herencia multinivel. 9. } Libro 1: Core Java 164 Unidad 3: Herencia © Copyright IBM Corp.3. será una superclase de otra.4 Jerarquía de Herencia Se aprendió acerca de jerarquía de herencia simple. 12. 14. Los métodos se proporcionan para destacar los puntos esenciales de la herencia multinivel. 3.Core Java Guía del Estudiante A continuación se discute acerca de herencia múltiple y jerarquía de herencia en Java. Esto significa que una clase no puede tener más de una superclase directa. 6.3 Herencia Múltiple en Java Java no soporta directamente la herencia múltiple. 7. Java indirectamente ayuda a implementar la herencia múltiple a través del uso de interfaces. 1. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. y ArbolDePino será una subclase de ArbolConifero . Esto será tratado en detalle en la Unidad 5 – Clases Abstractas e Interfaces en este volumen. protected int edad. protected String nombre. 15. 3. public Arbol(String nombre. 5. 4. this. class Arbol { 3. 10. . en la cual una clase que es una subclase de una clase. Sin embargo.5 Este ejemplo muestra como crear una jerarquía de herencia multinivel usando tres clases. /*Definicion de la clase Arbol comienza aqui*/ 2. 8. 11. se verá como escribir programas Java que construyen una jerarquía de herencia multinivel. Este ejemplo da una completa descripción para las tres clases. 16.. int edad) { this..nombre = nombre. El código Java comienza aquí. Ejemplo 3. } public int getEdad() { return edad.

edad). 38. 31. 52. } public boolean isConifero() { return conifero.Guía del Estudiante Core Java 18. /* Definicion de la clase ArbolDePino comienza aqui */ 35. 43. int edad. 30. 50. public static void main(String[] args) { Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 165 © Copyright IBM Corp. 46. 41. class ArbolDePino extends ArbolConifero { 36.lugarDondeCrece = lugarDondeCrece. class ArbolConifero extends Arbol { 22. . 47. 48. public ArbolConifero(String nombre. edad). private String lugarDondeCrece. 39. conifero = true. }/* Definicion de la clase ArbolDePino termina aqui */ 51. 23. 45. public class JerarquiaHerenciaEjemplo { 54. 49. 42. private boolean conifero. int edad) { super(nombre. } 32. 24. 37. 44. /* Definicion de la clase comienza aqui */ 53. }/* Definicion de la clase ArbolConifero termina aqui */ 33. this. 25. 40. 28. 29. 20. String lugarDondeCrece) { super(nombre. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 26. }/* Definicion de la clase Arbol termina aqui */ 19. 34. } public ArbolDePino( String nombre. 27. /* Definicion de la clase ArbolConifero comienza aqui */ 21. } public String getLugarDondeCrece() { return lugarDondeCrece.

System. La clase ArbolDePino hereda las características de ambas clases Arbol y ArbolConifero y añade su variable miembro lugarDondeCrece. } 65.getEdad()). edad). 64.println("Arbol: " + pino.getLugarDondeCrece()).Core Java Guía del Estudiante 55. El constructor de ArbolDePino invoca al constructor de su superclase usando super(nombre. En el método main se crea un objeto ArbolDePino. Unidad 3: Herencia Libro 1: Core Java 166 © Copyright IBM Corp.5 Se discute a continuación el orden de construcción de los objetos. cuando un objeto de una subclase se crea en la jerarquía. Se puede ver del programa anterior que super()se refiere a la superclase inmediata de la clase que invoca. }/* Definicion de la clase termina aqui */ El código Java termina aquí La salida de este programa es la siguiente: Arbol: Pino Edad: 23 Conifero: true Lugar donde crece: Malaysia Del programa anterior se puede ver que la clase ArbolConifero hereda todas las características de la clase Arbol y añade aquellas características que le resultan especiales (boolean conifero).println("Conifero: " + pino. System. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 63.out.1 Orden de Construcción de los Objetos En una jerarquía de herencia. ArbolDePino pino = new ArbolDePino( "Pino". 56. 58. System. El constructor de la clase base (superclase) se llama primero. "Malaysia"). también se puede ver que todos los parámetros del constructor de la superclase son pasados cuando se invoca.out.println("Edad: " + pino. 59. en el mismo orden en el cual las subclases fueron creadas.4.isConifero()). 3.out. . 23.println("Lugar donde crece: " + pino. Estos parámetros son pasados hacia arriba. System. 57. seguido por los constructores de las subclases. 62.out. a pesar de que el constructor de la subclase puede no requerir todos estos parámetros. desde el nivel más bajo al más alto nivel en la jerarquía. 60. es importante saber el orden de construcción de los objetos. Fin del Ejemplo 3. 61.getNombre()).

} 27. }/* Definicion de la clase Y termina aqui */ 14. .println("Objeto de la clase Y construido!").Guía del Estudiante Core Java Ejemplo 3. 26. /*Definicion de la clase Y comienza aqui*/ 9. public Y() { System.out. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.out. } 20. 22. /*Definicion de la clase Z comienza aqui*/ 16.println("Objeto de la clase X construido!"). public static void main(String[] args) { 25. class X { 3. public X() { 4. 15.6 El ejemplo muestra como se construyen los objetos. 8. 19. public Z() { 18.out. /*Definicion de la clase X comienza aqui*/ 2. System. class Z extends Y { 17. 5. }/* Definicion de la clase X termina aqui */ 7. new Z(). }/* Definicion de la clase termina aqui */ El código Java termina aquí… La salida del código anterior será la siguiente: Objeto de la clase X construido! Objeto de la clase Y construido! Objeto de la clase Z construido! Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 167 © Copyright IBM Corp. System. /*Definicion de la clase comienza aqui*/ 23.println("Objeto de la clase Z construido!"). } 13. 11. class Y extends X { 10. }/* Definicion de la clase Z termina aqui */ 21. 12. } 6. public class OrdenConstruccionObjetosEjemplo { 24. El código Java comienza aquí… 1.

}/* Definicion de la clase X termina aqui */ 14. X(int m. que un método en la superclase. 7. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. El sobrescribir métodos es otro concepto importante en herencia. /* Definicion de la clase Y comienza aqui */ 16. . 15. /*Definicion de la clase X comienza aqui*/ 2.. int d. siempre se refiere al método definido dentro de la subclase. 8. La versión del método que se encuentra en la superclase que está sobrescrita (oculta) puede ser accedido usando la palabra clave super dentro de la subclase. 6. el mismo número de argumentos y los mismos tipos de argumentos en el mismo orden). entonces el método en la superclase se dice que está sobrescrito (ocultado) por el método en la subclase. 3.7 Este ejemplo ilustra cómo se sobrescriben los métodos en las clases heredadas. seguidos por los objetos de Y y Z. 12. b. int a. 9. 11. int o) { Libro 1: Core Java 168 Unidad 3: Herencia © Copyright IBM Corp. donde una clase es una subclase de otra clase. } 13.6 El ejemplo anterior muestra que el objeto de la clase base X se construye primero. Y(int m. int n. c. class X { 3.5 Sobrescritura de Métodos En una jerarquía de clases. class Y extends X { 17. Cuando se invoca un método sobrescrito desde la subclase. } public int add() { return (c = a + b). int n) { a = m. 5. 4. 1. si un método en la subclase tiene la misma firma (el mismo nombre de método. 10.. El código Java comienza aquí. 18. b = n. 19.Core Java Guía del Estudiante Fin del Ejemplo 3. Ejemplo 3.

El método add() definido en su superclase está sobrescrito u oculto. n). } 44.23). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 32. Fin del Ejemplo 3.add()). return (c = s + d). 23. 35.35). 29. System. pueden usar la palabra reservada super como se mostró en el programa anterior.add() + d). } /* Metodo sobrescrito */ public int add() { int s = super.7 Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 169 © Copyright IBM Corp. public class SobrescrituraMetodosEjemplo { 34. 25. } 30.println( "Suma en la sub-clase: " + y.35. 39. }/* Definicion de la clase termina aqui */ El código Java termina aquí La salida del programa es la siguiente: Suma en la super clase: 77 Suma en la sub-clase: 100 Del programa anterior. 36. 26.Guía del Estudiante Core Java 20. public static void main(String[] args) { X x = new X(42.add(). // return (c = super. /* Definicion de la clase comienza aqui */ 33. Cuando los métodos dentro de la clase Y quieren acceder al método sobrescrito de la clase X.add()). 21. 27. 22. se puede ver que cuando se invoca el método add() en el objeto de la clase Y. 28.println( "Suma en la super clase: " + x. System. 40. d = o. 42. 43. super(m. 38. 41. 24.out. Y y = new Y(42. }/* Definicion de la clase Y termina aqui */ 31. se invoca al método add() definido en Y.out. . 37.

Core Java

Guía del Estudiante

Si un método en la superclase y en la subclase tienen el mismo nombre, pero sus firmas son diferentes, entonces los métodos son sobrecargados y no sobrescritos. En este caso, el método en la superclase no está oculto y es accesible directamente, sin usar la palabra reservada super.

3.6 Comportamiento Virtual y Herencia
En Java todos los métodos son virtuales por defecto. Por virtual se entiende que todos los métodos en Java son polimórficos por naturaleza. El comportamiento asociado con los métodos polimórficos se denomina comportamiento virtual, ya que el comportamiento correcto es determinado en tiempo de ejecución. La Figura 3.4 muestra dos clases, Examen y ExamenPractico que tienen una relación de herencia (es decir, la clase ExamenPractico hereda de la clase Examen). Referencias al objeto ExamenPractico pueden ser asignadas a objetos del tipo Examen. Ahora, cuando se invoca a un método de este objeto Examen, se llama al método de la clase derivada (ExamenPractico). El enlace se realiza en tiempo de ejecución. A una referencia a objeto de la superclase se le puede asignar una referencia a cualquier objeto de su subclase. Esto se usa ampliamente especialmente en el manejo de excepciones, que será discutido en el Volumen 3, Unidad 1 – Manejo de Excepciones y Tipos de Excepciones.

Unidad 3: Herencia

Libro 1: Core Java 170

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

Figura 3.4: Comportamiento Virtual en Java

El programa en el Ejemplo 3.8 se usa para ilustrar el comportamiento virtual discutido anteriormente, usando el ejemplo 3.1 de las clases Arbol y ArbolDePino. Ejemplo 3.8 Este ejemplo muestra como usar comportamiento virtual en un programa Java. El código Java comienza aquí... 1. /* Definicion de la clase comienza aqui */ 2. public class ComportamientoVirtualEjemplo { 3. public static void main(String[] args) { 4. ArbolDePino ap = new ArbolDePino(); 5. 6. 7. Arbol a = new Arbol(); ap.setEdad(75);

Libro 1: Core Java

Volumen 2: Programación Orientada a Objetos 171 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.

System.out.println( "Valores de la referencia de la sub clase: "); System.out.println("Nombre: " + ap.getNombre()); System.out.println("Edad: " + ap.getEdad()); System.out.println("Conifero: " + ap.isConifero()); /* Asignando la referencia del objeto ArbolDePino a la referencia del tipo Arbol */ a = ap; System.out.println( "Valores de la referencia de la super clase: "); System.out.println("Nombre: " + a.getNombre()); System.out.println("Edad: " + a.getEdad()); // Esto generaria un error // System.out.println("Conifero: " + a.isConifero()); }

25. }/* Definicion de la clase termina aqui */ El código Java termina aquí La salida del programa es la siguiente: Valores de la referencia de la sub clase: Nombre: Pino Edad: 75 Conifero: true Valores de la referencia de la super clase: Nombre: Pino Edad: 75 En este programa, ap es una referencia al objeto ArbolDePino, y a es una referencia al objeto Arbol. En la primera parte del programa, se usa directamente ap para acceder a sus métodos. En la segunda parte del programa, se le asigna ap a a en la línea 16 como sigue: a = ap; ArbolDePino es una subclase de Arbol y por eso se le puede asignar ap a a. Esto implica que la referencia a un objeto de la superclase se le puede asignar la referencia de su subclase. Cuando se accede a los métodos de ArbolDePino usando a, no se puede acceder a isConifero(), porque no está presente en la superclase Arbol.

Unidad 3: Herencia

Libro 1: Core Java 172

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

Todos los métodos definidos en la clase base son accesibles a través de a. Por lo tanto, cuando se asigna la referencia a la subclase a una referencia de superclase, solamente aquellos métodos que están disponibles en la superclase pueden ser accedidos usando la referencia. Fin del Ejemplo 3.8 El punto a destacar aquí es que la referencia al objeto de superclase que actualmente referencia a su subclase permite acceder solamente a aquellas variables de la subclase que han sido heredadas de la superclase. Por esto la referencia a no puede acceder al miembro conifero, que está presente solamente en ArbolDePino, y no en Arbol. Esto es así, porque la superclase no conoce de las características especiales añadidas por la subclase. Esta es la razón por la que la línea 23 de la función main, a.isConifero() está comentada. La asignación a = new ArbolDePino() es conocida como upcast y es legal en Java. Sin embargo, no se puede tener ap = new Arbol(), que es referido como downcast. Si se desea asignar a a ap después de hacer a = new ArbolDePino(), se debe realizar una conversión explícita como se muestra a continuación: ap = (ArbolDePino) a; A continuación se aprenderá acerca del uso de la palabra reservada final en el contexto de herencia.

3.7 Herencia y la Palabra Reservada final
Se puede declarar una variable que tenga un valor constante a través del programa usando el modificador final sobre la variable. Una variable final puede ser inicializada solamente una vez dentro de un programa Java, y mantendrá el mismo valor a través de todo el programa. No se puede cambiar el valor asignado a una variable final más adelante en el programa. Ejemplo 3.9 Este ejemplo ilustra como la palabra clave final se puede usar en las clases. El código Java comienza aquí… 1. /* Definicion de la clase comienza aqui */ 2. public class VariableFinalEjemplo { 3. /* El metodo main comienza aqui */ 4. 5. 6. 7. public static void main(String[] args) { final int contador = 10; int a = 10; System.out.println(

Libro 1: Core Java

Volumen 2: Programación Orientada a Objetos 173 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

8. 9. 10. 11. 12. 13. 14. 15. 16.

"Valor de la variable contador es: " + contador); a = a + contador; System.out.println( "Valor de la variable a es: " + a); contador++; // Error de compilacion contador = 25; // Error de compilacion }/* El metodo main termina aqui */

17. }/* Definicion de la clase termina aqui */ El código Java termina aquí En este programa se puede inicializar la variable final contador sólo una vez y usarla subsecuentemente dentro del programa sin alterar su valor. Cuando se intenta actualizar contador o asignarle un nuevo valor, se lanza un error de compilación como ocurre en las líneas 14 y 15. Fin del Ejemplo 3.9 El Ejemplo 3.9 muestra el uso de la palabra clave final para declarar constantes. El uso de final con las clases derivadas tiene un impacto diferente, que se verá a continuación. Uso de la Palabra Reservada final para prevenir la Herencia Cuando se quiere evitar que una clase se herede, se puede usar el modificador final en la declaración de la clase. Cuando se declara una clase como final, Java declara implícitamente todos los métodos de la clase también como final. No se puede declarar una clase abstract como final, dado que la clase abstracta requiere que sus subclases proporcionen las implementaciones completas para todos sus métodos. Este concepto será estudiado en detalle en la Unidad 5 – Clases Abstractas e Interfaces de este volumen. Ejemplo 3.10 El programa ilustra el uso del modificador final para una clase. El código Java comienza aquí… 1. 2. 3. 4. 5. 6. final class X { private int a; X(int m) { a = m; } public void setA(int m) {

Unidad 3: Herencia

Libro 1: Core Java 174

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

esto se llama enlace tardío (late binding). una característica importante en Java. mejorando el rendimiento del programa. } 13. Y no puede ser subclase de X */ 15. puede haber situaciones donde no se quiere que un método sea sobrescrito por sus subclases para mejorar el desempeño del programa.7. Esto se llama enlace temprano (early binding). public int b. Considere el Ejemplo 3. el compilador sabe que estos métodos final no serán sobrescritos por sus subclases. la clase Y no puede heredar de la clase X.1 Uso de la Palabra Reservada final Para Prevenir la Sobrescritura En esta sección veremos el uso de la palabra reservada final en la declaración de los métodos para evitar que el método sea sobrescrito. porque X fue declarada como final. Se modificará el programa del Ejemplo 3. 10. 20. 19. en este caso. Esto se debe a que. 9. 21. } a = m. } public int getA() { return (a). 11.11. class Y extends X { 16.11 Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 175 © Copyright IBM Corp. A pesar de que sobrescribir métodos es sin duda. Generalmente el compilador Java resuelve la invocación de métodos en tiempo de ejecución.Guía del Estudiante Core Java 7. } . y directamente remplaza el código fuente por el bytecode. 18. 17. /* error de compilación. 14. Y(int m. Se puede usar el modificador final al declarar métodos para conseguir el enlace temprano. 3. para ilustrar el uso de final en la declaración de métodos para prevenir el sobrescribir. 8. } El código Java termina aquí Como se discutió. b = n. 12. Ejemplo 3.10 A continuación se discute el uso de la palabra reservada final para evitar la sobrescritura de métodos de una superclase por su subclase. int n) { super(m).10. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Fin del Ejemplo 3.

El código Java termina aquí En este ejemplo.. int n) { a = m. 21. } 14. 3. return (c). 23. c = s + d. } final int add() { c = a + b. } } Y(int m. Fin del Ejemplo 3. 28. 17. 2. 26. dado que el método add() ha sido declarado como final en la clase X. 9. 4. b = n. 24. que se extiende de la clase X. b. int o) { super(m.11 Unidad 3: Herencia Libro 1: Core Java 176 © Copyright IBM Corp. d = o. int d. 25. 5. class Y extends X { 16. 8.add(). } 15. 13. se obtiene un error de compilación. Por lo tanto. no puede ser sobrescrito en la clase Y. n). 18. 7. } /* Error de compilacion: Metodo final no puede ser sobrescrito */ public int add() { int s = super.Core Java Guía del Estudiante El código Java comienza aquí. 10. 11. 1. 30. int n. 19. X(int m. 12. 27. 20. 22. class X { int a. c. 6. 29. return (c).. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 177 © Copyright IBM Corp. usted debe ser capaz de: • • • • • Explicar los fundamentos de la herencia. Describir cómo crear una jerarquía de herencia. Explicar el uso de la palabra reservada final. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Discutir cómo sobrescribir métodos. Explicar el uso de las palabras reservadas super y this.Guía del Estudiante Core Java Resumen Ahora que ha completado esta unidad.

b) X x = new X(). a) Verdadero b) Falso 5) Si X es la superclase de Y. a) Verdadero b) Falso 3) Por defecto. ¿desde cuál de las siguientes heredan todas las clases en Java? a) Clase Base b) Clase Super c) Clase Object d) Ninguna de las anteriores 4) Una clase puede tener cualquier número de superclases directas y subclases. el acceso está disponible sólo para los miembros que se definen en la superclase. Y y = new Y(). 6) Cuando a una variable de referencia de una superclase se le asigna una referencia a una subclase. Y y = new Y(). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. ¿cuál de las siguientes es un uso correcto? a) X x = new X(). y = x. x = y.Core Java Guía del Estudiante Unidad 3: Examen de Autoevaluación 1) ¿Cuál modificador debe usarse para modificar una variable para hacerla inaccesible por la subclase? a) protected b) public c) package d) private 2) Una clase que es subclase de una clase puede ser una superclase de alguna otra clase. . a) Verdadero b) Falso Unidad 3: Herencia Libro 1: Core Java 178 © Copyright IBM Corp.

Constructor de B. a) Verdadero b) Falso 8) A es la superclase de B.Guía del Estudiante Core Java 7) Cuando se usa el objeto de una subclase Y que deriva de una clase X. Constructor de A c) Constructor de A. ¿cuál es el orden en el que los constructores se invocan? a) Sólo el constructor de C es invocado b) Constructor de C. y B es la superclase de C. Constructor de B. . a) Verdadero b) Falso Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 179 © Copyright IBM Corp. Constructor de C 9) ¿Cuál es la palabra clave usada en Java para detener la sobrescritura de métodos en subclases? a) static b) stop c) final d) private 10) Cuando se usa la palabra clave final con una variable. ésta no puede ser ocultada por una subclase con una variable con el mismo nombre. Cuando un objeto de C es creado. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Constructor de C d) Constructor de A. se puede hacer referencia a los métodos de la clase X usando la palabra clave super con el objeto de la clase Y. en una clase externa Z.

.Core Java Guía del Estudiante Respuestas a la Unidad 3: Examen de Autoevaluación 1) d 2) a 3) c 4) b 5) a 6) a 7) b 8) c 9) c 10) b Unidad 3: Herencia Libro 1: Core Java 180 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

usted será capaz de: • • Trabajar con herencia. Invocar métodos de una superclase.Guía del Estudiante Core Java Unidad 4: Laboratorio de Herencia Objetivos de Aprendizaje Al final de esta unidad. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 181 © Copyright IBM Corp.

indicador. 2) Escribir un programa en Java que tenga una clase llamada Bicicleta con ruedas. "azul" y "verde". Si la verificación resulta en falso. velocímetro.Core Java Guía del Estudiante Ejercicios de Laboratorio 1) Escribir un programa en Java. y el método decrementaVelocidadCaja se sobrescribe para hacer los cambios desde 5 hasta 1. String getColor(). "índigo". Verde v). “verde”. Naranja y Rojo e imprime en la salida estándar sus atributos colorNombre. Una clase llamada BicicletaCarrera es subclase de la clase Bicicleta y sobrescribe el método incrementaVelocidadCaja para hacer los cambios desde 1 hasta 5. La clase Bicicleta también tiene un método llamado indicaGiro() que cambia el valor de la variable indicador en forma concordante. void activateAntiPrisma(Rojo r. Las clases Violeta. a y v son "rojo". Si es verdadero. Este método verifica si el atributo colorName de r. La clase Prisma tiene el siguiente método. Un Conductor (otra clase) maneja la Bicicleta y la BicicletaCarrera. La clase Color tiene un atributo colorNombre que es privado y los siguientes métodos. "naranja" y "rojo". Verde. crea un nuevo objeto Blanco e imprime el valor de su atributo colorNombre en la salida estándar. asiento. Unidad 4: Laboratorio de Herencia Libro 1: Core Java 182 © Copyright IBM Corp. frenoDelantero. Naranja y Rojo heredan de la clase Blanco. Azul. "amarillo". void activatePrisma(Color c). . Verde. La clase AntiPrisma tiene el siguiente método. Amarillo. Azul. que tenga una clase llamada Color. Todas estas clases tienen una variable privada llamada colorNombre que es inicializada con "violeta". frenoTrasero y velocidadCajaActual como atributos. Índigo. Este método verifica si el método getColor() retorna "blanco". Si es verdadero. crea instancias de las clases Violeta. "azul". 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Azul a. La clase Cientifico usa las clases Prisma y AntiPrisma. respectivamente. // la cadena retornada da el color La clase Blanco hereda de la clase Color y tiene su atributo (private) colorNombre establecido en “Blanco”. respectivamente. una después de la otra. También tiene un método llamado incrementaVelocidadCaja que realiza los cambios desde 1 hasta 4 y un método llamado decrementaVelocidadCaja que realiza los cambios desde 4 hasta 1. Amarillo. final void setColor(String color). Índigo.

Definir una interfaz. Describir cómo definir clases y métodos abstractos en Java. usted será capaz de: • • • • • Explicar clases abstractas. . Explicar cómo las interfaces son implementadas y usadas como referencia. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 183 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Guía del Estudiante Core Java Unidad 5: Clases Abstractas e Interfaces Objetivos de Aprendizaje Al final de esta unidad. Diferenciar entre clases abstractas y clases concretas.

Herencia. Estas clases se denominan así porque se pueden instanciar objetos de ellas. hasta la Unidad 3 – Herencia. en nuestro ejemplo. En caso de que la subclase no proporcione la implementación para todos los métodos abstractos definidos en la clase abstracta. se tratará el tema de clases abstractas e interfaces. Las clases que heredan de una clase abstracta implementan los métodos abstractos definidos en esa clase. Las clases abstractas se usan para definir las características generales de un concepto abstracto. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. y podemos visualizar cada uno de ellos. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 184 © Copyright IBM Corp. Las jirafas. se han discutido solamente las clases concretas. se pueden modelar estas especies como clases de software: Jirafa. no se implementa una gran parte de la clase (no se da la implementación de los métodos). Mamifero puede ser una clase abstracta. llamadas. las clases abstractas pueden implementar todos los métodos definidos en ella. delfines y ballenas. Una clase abstracta puede implementar algunos de los métodos definidos en ella. Introducción Se estudió la herencia en Java en la Unidad 3 . En esta unidad. un delfín o una ballena. Se conoce el aspecto de estos tres animales. sin embargo. . se pueden crear instancias de sus subclases. 2. Usualmente. el operador new no puede usarse en las clases abstractas. no se pueden crear instancias de Mamifero. obteniéndose una implementación parcial de su comportamiento. Las clases abstractas tienen las definiciones de métodos que justifican su comportamiento. Delfin y Ballena. Se pueden representar las características de los mamíferos en la forma de una clase llamada Mamifero. De lo contrario la cadena de clases abstractas continúa. Una clase abstracta puede ser usada para representar entidades que no pueden ser visualizadas. Por lo tanto. Considere tres especies de mamíferos: jirafas. Existe otro grupo de clases que no pueden instanciarse. ¿Cuándo se piensa en un mamífero se puede visualizar cómo luce?. No.Core Java Guía del Estudiante 1. se denominan clases abstractas. esto se debe a que un mamífero puede tener el aspecto de una jirafa. Delfin y Ballena. Jirafa. la subclase misma se declara como una clase abstracta y la clase que herede de esta subclase abstracta debe proporcionar la implementación para sus métodos abstractos. Una clase abstracta se usa para definir los atributos comunes y el comportamiento general de un grupo de clases. los delfines y las ballenas pertenecen a la categoría llamada mamíferos. Sin embargo. Se va a entender el concepto de clases abstractas con dos ejemplos generales. las cuales pueden usarse por la herencia. algunas veces. Clases Abstractas En todas las unidades anteriores.

El concepto de número es un concepto abstracto porque no existe un objeto llamado número en la realidad. que forma la clase base. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. De la discusión anterior está claro que existen algunos patrones genéricos de comportamiento de entidades del mundo real que pueden ser abstraídos en una sola clase. Pueden ser instanciadas. delfines y ballenas dan a luz a sus pequeños en ambientes diferentes. etc. Considere otro ejemplo. En el ejemplo anterior. ya que existe también sólo en abstracción en el mundo real. Sin embargo. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 185 © Copyright IBM Corp. No pueden ser instanciadas.Guía del Estudiante Core Java Una de las características comunes a los mamíferos es que ellos dan a luz a sus pequeños. Pueden o no proveer implementación para Deben proveer implementación para todos cualquiera de los métodos. las jirafas. No se puede usar para definir donde ellos dan a luz a sus pequeños. Por lo tanto. la cual forma la clase base para la herencia.. Definen métodos abstractos para los No definen métodos abstractos. Los dos ejemplos que se han discutido muestran como las clases abstractas son útiles para definir conceptos abstractos en Java. Real. la clase Mamifero se puede usar solo para definir las características que ellos dan a luz a sus pequeños. Otras clases concretas heredan de clases abstractas para concretizar su definición abstracta.1 ilustra las diferencias entre clases abstractas y concretas.1 Clases Abstractas vs.1: Clases Abstractas vs. lo que se tiene en el mundo real son enteros. cuales la implementación no es provista. Mientras la jirafa da a luz a su pequeño en tierra. sus métodos. Clases Concretas Se va a mencionar a continuación como Java provee mecanismos para definir y usar clases abstractas en programas. números reales. se van a resumir las diferencias entre clases abstractas y concretas. Clases Concretas La Tabla 5. un delfín y una ballena dan a luz en el agua. que forma la clase base para las subclases Entero. Tabla 5. Estas características pueden ser abstraídas en una clase llamada Numero. 2. . Antes de avanzar más en lo concerniente a clases abstractas. para generalizar Clases Concretas clases Se usan para representar objetos del mundo real. que comparten características o propiedades comunes. La clase Numero se define como clase abstracta. Clases Abstractas Se usan concretas. cuyos atributos y métodos podrán ser heredados por otras clases. etc. Mamifero es la clase abstracta.

Los métodos que no tienen implementación son métodos abstractos. se puede usar de dos formas. al cual el método abstracto pertenece.java:6: ClaseAbstracta is abstract. Cuando una clase tiene el modificador abstract en la declaración de la clase. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. La palabra clave abstract se usa antes de la palabra clave class para definir una clase como clase abstracta. El modificador abstract se usa con una clase para indicar que la clase no puede ser instanciada. el compilador mostrará el siguiente mensaje de error: InstanciacionClaseAbstractaEjemplo. ya sea con una clase o con un método. // error ^ 1 error Las clases abstractas pueden tener dos tipos de métodos: métodos que tienen implementación y métodos que no tiene implementación. 3. Indica que las subclases que hereden de la clase abstracta. entonces la subclase también se debe definir como una clase abstracta.1 Definición de Métodos Abstractos El modificador abstract. // error } } Cuando se intenta instanciar una clase abstract. Los métodos implementados en una clase abstracta son métodos concretos. El siguiente código muestra como declarar una clase abstract: abstract class ClaseAbstracta{ // . Uso de Clases Abstractas El modificador abstract que se aprendió en la Unidad 1 – Clases y Objetos. cuando se usa en una declaración de método. Si la subclase inmediata no provee implementación para el método abstracto de su superclase. como se hizo en la clase InstanciacionClaseAbstractaEjemplo. } class InstanciacionClaseAbstractaEjemplo{ public static void main(String args[]){ ClaseAbstracta ca = new ClaseAbstracta(). Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 186 © Copyright IBM Corp. . . cannot be instantiated ClaseAbstracta ca = new ClaseAbstracta(). se denomina clase abstracta.Core Java Guía del Estudiante 3. Se van a definir los métodos abstractos en Java. . proporciona un método abstract. deben proveer la implementación para el método. El modificador indica que la implementación del método no es provista en la clase.

se puede crear una referencia a ésta. La siguiente es la estructura general de la declaración de un método abstracto: abstract tipoRetorno nombreMetodo(argumentos). la clase debe ser declarada como abstracta. La palabra reservada abstract se usa antes de especificar el tipo de retorno del método. } class Concreta extends Abstracta { void m1() { System.out. Como se mencionó anteriormente. que permite que un objeto de una clase sea referenciado por una referencia a su superclase. } void m2() { System. no necesariamente debe contener un método abstracto. . Cuando una clase es declarada como abstracta.println("En m1").Guía del Estudiante Core Java Los métodos abstractos pueden estar presentes solamente dentro de una clase abstracta. referenciaAbstracta = c.2 Clases Abstractas y Referencias Aunque no se puede instanciar una clase abstracta. lo que significa que la implementación del método no se proporciona en la clase. 3. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 187 © Copyright IBM Corp. /* Referencia a la clase Abstracta */ Abstracta referenciaAbstracta. } } public class AbstractaEjemplo { public static void main(String args[]) { Concreta c = new Concreta(). Considere el siguiente fragmento de código: abstract class Abstracta { abstract void m1(). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.println("En m2"). Una clase abstracta puede contener cualquier número de métodos abstractos. también es posible tener una clase abstracta que de la implementación para todos los métodos definidas en ella y así no tenga ningún método abstracto. Antes de avanzar con ejemplos de clases y métodos abstractos.out. se va a ver como una referencia se puede usar para una clase abstracta. Se puede ver que el cuerpo del método está ausente. Sin embargo cuando existe un método abstracto dentro de la clase. Esto es posible porque Java soporta polimorfismo.

Una vez aprendido como definir clases y métodos abstractos.3: Representación de la Clase CuentaCorriente Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 188 © Copyright IBM Corp. Usando referenciaAbstracta en el código anterior. private double saldo. se va a considerar dos clases llamadas CuentaDeAhorros y CuentaCorriente.3. La representación gráfica de la clase CuentaDeAhorros y el código Java que la implementa se muestra en la Figura 5. se puede hacer referencia al método m1() definido en la clase abstracta. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. private double tasaInteres.2: Representación de la Clase CuentaDeAhorros En el diagrama de la clase CuentaCorriente y el código Java que la implementa se muestran en la Figura 5.m1(). private double comisionMensual public public public public public } double cargarComision() {…} void cerrar() {…} void credito(double cantidad){…} void debito(double cantidad){…} double getSaldo() {…} Figura 5.2. a esta referencia se le pueden asignar referencias de subclases de Abstracta. CuentaCorriente numero:String saldo:double comisionMensual:double cargarComision():double cerrar():void credito(double):void debito(double):void getSaldo():double public class CuentaCorriente { private String numero. Esta característica es muy útil para lograr el polimorfismo. public public public public public } void cerrar() {…} double calcularIntereses() {…} void credito(double cantidad){…} void debito(double cantidad){…} double getSaldo() {…} Figura 5. . } } En el código anterior. se crea una referencia referenciaAbstracta de la clase Abstracta. CuentaDeAhorros numero:String saldo:double tasaInteres:double cerrar():void calcularIntereses():double credito(double):void debito(double):void getSaldo():double public class CuentaDeAhorros { private String numero. private double saldo.Core Java Guía del Estudiante referenciaAbstracta.

esta clase se convierte en candidata para una clase abstracta. public abstract void cerrar(). Es posible crear instancias para ambas clases.3. sin la implementación. private double saldo. se puede crear una clase en común llamada CuentaBancaria. La forma de implementar las funcionalidades. que tenga funciones definidas en ella. El diagrama de la clase CuentaBancaria se muestra en la Figura 5. public double getSaldo() {…} } Figura 5.4: Clase Abstracta CuentaBancaria La definición en Java de la clase CuentaBancaria se muestra en la Figura 5. se pueden hacer las siguientes observaciones: • • • • Ambas clases tienen algunas funcionalidades en común.2 y 5. . Figura 5.Guía del Estudiante Core Java De las Figuras 5. Para estas clases. es sin embargo drásticamente diferente para ambas clases. Las definiciones abstractas están en letra itálica. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.5: Definición en Java de la Clase CuentaBancaria Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 189 © Copyright IBM Corp.5. Las similitudes entre estas clases permite definir una jerarquía de herencia.4. public abstract class CuentaBancaria { private String numero. public void credito(double cantidad) {…} public abstract void debito(double cantidad).

Figura 5.7: Definición en Java de la Clase CuentaCorriente Se van a escribir dos programas Java que usan clases y métodos abstractos. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 190 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Core Java Guía del Estudiante Las dos clases. Las implementaciones de los métodos se muestran en puntos suspensivos. . pueden ahora ser derivadas de la clase abstracta CuentaBancaria.6: Derivando de la Clase Abstracta CuentaBancaria Las dos clases: CuentaDeAhorros y CuentaCorriente extienden de la clase abstracta y proveen la implementación para los métodos definidos como abstractos. CuentaCorriente y CuentaDeAhorros. Figura 5. El código fuente para la clase CuentaCorriente se muestra en la Figura 5.7.

void metodo2() { System. 24. } 8.println( "Dentro de metodo1 en la clase V"). 6. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. class V extends U { 12. subClase. /* Definicion de la clase V comienza aqui */ 11. void metodo1() { 13. 22. se puede ver que a pesar de que no se creó un objeto de la clase U. 7.out. 4. subClase. 23.out. 14. /* Definicion de la clase AbstractaEjemplo comienza aqui */ 19. la clase V implícitamente tiene la implementación para el metodo2. }/* El metodo main termina aqui */ 26. 10. /* Definicion de la clase U comienza aqui */ 2. public static void main(String[] args) { V subClase = new V(). El código Java comienza aquí… 1. public class AbstractaEjemplo { 20.metodo2().metodo1(). abstract void metodo1(). }/* Definicion de la clase V termina aqui */ 17. abstract class U { 3. 25. /* El metodo main comienza aqui */ 21. }/* Definicion de la clase AbstractaEjemplo termina aqui */ El código Java termina aquí La salida del programa anterior es la siguiente: Dentro de metodo1 en la clase V Dentro de metodo2 en la clase U De la salida del programa anterior.println( "Dentro de metodo2 en la clase U"). System. 5. }/* Definicion de la clase U termina aqui */ 9. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 191 © Copyright IBM Corp.1 Este ejemplo muestra como un método abstracto se implementa en la subclase V. 15.Guía del Estudiante Core Java Ejemplo 5. . 18. } 16.

7. Poligono(float x.2 Usando la clase abstracta Poligono. } float area() { 21. side). Cuadrado(float side) { 17. Ejemplo 5. 10. 4. }/* Definicion de la clase Poligono termina aqui */ 13. dimension2 = y. El código Java comienza aquí… 1. Fin del Ejemplo 5.Core Java Guía del Estudiante Más aún. float dimension1. 20. 25. super(side. /* Definicion de la clase Cuadrado comienza aqui */ 15.1 El próximo ejemplo ilustra como usar una referencia a una clase abstracta. /* Definicion de la clase Triangulo comienza aqui */ Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 192 © Copyright IBM Corp. 14. abstract class Poligono { 3. pues es una clase abstracta. se crean tres subclases. se instancian tres objetos de estas tres clases y usando la referencia a la clase abstracta se invoca a los métodos en las subclases. float y) { dimension1 = x. lo cual es perfectamente aceptable. 9. 18. } 23. 12. 19. }/* Definicion de la clase Cuadrado termina aqui */ 24. . 22. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. no puede crearse un objeto de la clase U. También se puede notar que la clase abstracta proporciona la implementación para el método metodo2. 5. } abstract float area(). 11. /* Definicion de la clase Poligono comienza aqui */ 2. 6. class Cuadrado extends Poligono { 16. float dimension2. 8. return (dimension1 * dimension2).

super(base. System. public static void main(String[] args) { 52.area()). 43. Volumen 2: Programación Orientada a Objetos 193 © Copyright IBM Corp.out. } 46. 30. Cuadrado cu = new Cuadrado(7). /* Definicion de la clase AbstractaEjemplo comienza aqui */ 49.println( "Area del cuadrado es: " + poligono. Triangulo(float base. Triangulo t = new Triangulo(4. super(radio. poligono = cu. 58. }/* Definicion de la clase Triangulo termina aqui */ 35. class Cilindro extends Poligono { 38. 36. 31.5 * dimension1 * dimension2). return ((float) 0. class Triangulo extends Poligono { 27. 54. float altura) { 28. public class AbstractaEjemplo { 50. 59.Guía del Estudiante Core Java 26. /* El metodo main comienza aqui */ 51. 41. 48. /* Definicion de la clase Cilindro comienza aqui */ 37. poligono = t. 56. 29. Cilindro(float radio. 45. 60. 55. } float area() { return ((float) 3. 62. } 34. float altura) { 39. Cilindro ci = new Cilindro(6. 42. 53. 3). 33. 57. 61. 40. }/* Definicion de la clase Cilindro termina aqui */ 47.14 * dimension1 * dimension1 * dimension2). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. } float area() { 32. Poligono poligono. altura). altura). 44. Libro 1: Core Java . 5).

}/* El metodo main termina aqui */ 72. poligono = ci. ¿Qué son las Interfaces? Las interfaces son similares a las clases. Declarar el método area() como abstracto obliga a que todas sus subclases no abstractas implementen el método.2 En el programa anterior.println( "Area del cilindro es: " + poligono. pero no se crea un objeto del tipo Poligono. La variable poligono del programa anterior.Core Java Guía del Estudiante 63. en términos de sintaxis. es decir. 65. el método area() se declara como abstracto y su implementación se deja para sus subclases. esta variable permite referenciar objetos de sus subclases. Fin del Ejemplo 5.out.0 Area del triangulo es: 10. 71. 4. .out. System.println( "Area del triangulo es: " + poligono. Todos los métodos declarados en una interfaz son métodos abstractos.12 En el programa anterior se puede ver que las características de la clase abstracta Poligono son más significativas con la implementación que proporcionan sus subclases para el método abstracto area().area()). 69. 66. 70. Tanto las clases abstractas como las concretas pueden Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 194 © Copyright IBM Corp. no se les proporciona implementación. }/* Definicion de la clase AbstractaEjemplo termina aqui */ El código Java termina aquí La salida del programa anterior sería así: Area del cuadrado es: 49. 68.0 Area del cilindro es: 339. se crea una referencia a la clase abstracta Poligono. es sólo una referencia a la clase abstracta Poligono. Una interfaz especifica el prototipo o comportamiento de una clase. System. Por lo tanto. 64. No se puede tener una implementación significativa del método area() en un polígono de dos dimensiones. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. pero no soportan ninguna variable de instancia. Los métodos sobrescritos se resuelven en tiempo de ejecución usando la variable de referencia de la superclase. 67. Una interfaz no puede ser instanciada.area()). Una interfaz esencialmente captura los roles que juegan las diferentes clases que implementan las interfaces.

. Si la implementación no se proporciona para aunque sea uno de los métodos definidos en la interfaz entonces la clase deber ser declarada como clase abstracta. tipoDeRetorno nombreMetodo1(listaDeArgumentos). Cuando una interfaz se declara como public. También una misma interfaz puede ser implementada por cualquier número de clases. tipoDeRetorno nombreMetodoN(listaDeArgumentos). . Sin embargo. lo que significa que se puede crear una jerarquía de interfaces. ya que la implementación no es provista por ninguno de los métodos declarados en la interfaz. La definición de interfaz es similar a la definición de clases. ésta es una de las ventajas de usar interfaces. tipoDeDato nombreVarN = valor. La estructura general se muestra a continuación: modificadorDeAcceso interface nombreInterfaz { tipoDeDato nombreVar1 = valor. las clases que implementen la interfaz no pueden cambiar sus valores. el modificadorDeAcceso usado es public. Las interfaces pueden declarar variables que son final y static.Guía del Estudiante Core Java implementar una interfaz. cualquier otra interfaz o clase presente en cualquier paquete puede usarla. Clases no relacionadas pueden implementar la misma interfaz. Todas las funcionalidades requeridas por diferentes aplicaciones se guardan dentro de una interfaz. una interfaz no puede implementar otra interfaz. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . . de lo contrario no es mencionado. Las Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 195 © Copyright IBM Corp. Una clase puede implementar cualquier número de interfaces. El nombre de una interfaz se especifica en nombreInterfaz. se considera package por defecto. Una clase concreta que implemente la interfaz tiene que proveer la implementación para todos los métodos declarados en la interfaz. introduciéndose cierta relación entre las clases. . Cuando el modificadorDeAcceso no se menciona. . las interfaces actúan como sustitutos de la herencia múltiple. Por lo tanto. . } Usualmente. tipoDeDato nombreVar2 = valor. Las interfaces implementadas por una clase especifican la interfaz que puede ser usada para la comunicación entre la clase y otros objetos. De tal forma que. que es un identificador válido. Una interfaz puede extender de otra interfaz. tipoDeRetorno nombreMetodo2(listaDeArgumentos).

8. UML es un lenguaje de modelación para el análisis y diseño orientado a objetos. todas las variables y métodos en la interfaz tienen acceso público. Si la interfaz se declara como public. Considere la Figura 5.Core Java Guía del Estudiante variables definidas en una interfaz deben ser inicializadas con un valor constante. La Figura 5. Se discute el marco de trabajo para colecciones en el Volumen 8. .8 muestra la interfaz List definida en el paquete java. Esta figura sólo muestra algunos de los métodos más usados de la interfaz List. que muestra la definición de la interfaz List de Java 1. que es parte del marco de trabajo para colecciones de Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Unidad 1 – API Colecciones.9 presenta la definición de la interfaz List de java 1. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 196 © Copyright IBM Corp.8: Definición de la Interfaz List en Java 1. Figura 5.4 La Figura 5.4 en formato UML (Unified Modeling Language).4.util.

Guía del Estudiante Core Java Figura 5. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. se puede ver una línea punteada seguida Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 197 © Copyright IBM Corp. que implementa la interfaz List. En esta figura. La Figura 5.10: Definición de la Clase Vector que Implementa la Interfaz List La Figura 5.11 muestra la representación en UML para la clase Vector.9: Definición de la interfaz List en Formato UML UML hace uso del estereotipo <<interface>> para indicar que List es una interfaz y no una clase. que implementa la interfaz List. .10 muestra la clase Vector. Figura 5.

Se escoge implementar la interfaz como una mejor alternativa porque las interfaces definen un protocolo.Core Java Guía del Estudiante por un triangulo hueco. Se debe notar que la implementación de los métodos no se proporciona aquí. LinkedList y ArrayList. ya que todos los métodos definidos en una interfaz son abstractos por definición. 4. Una clase Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 198 © Copyright IBM Corp. Las clases que implementen esta interfaz deben proporcionar la implementación de los métodos. así. Una interfaz puede ser implementada por muchas clases. Dos otras clases.1 ¿Por qué usar Interfaces? En la sección anterior. LinkedList y ArrayList. Las funcionalidades pueden ser implementadas como métodos en la clase Vector. También se sabe que la clase Vector puede contener toda la funcionalidad que provee la interfaz List. De manera que si se entiende la interfaz List. sin tener que implementar la interfaz. esta es la notación UML para indicar que Vector implementa la interfaz List. Figura 5. se asegura que todas las clases que implementan la interfaz se adhieren al protocolo definido en la interfaz. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. se aprendió que la clase Vector implementa la interfaz List. } Esta es una declaración simple de interfaz con dos métodos. El siguiente código da un ejemplo de declaración de interfaz: interface ContestadorAutomatico { void grabarMensaje(String mensaje). . String getMensajeGrabado(). A continuación se entenderá por qué se usan las interfaces. getMensajeGrabado() y grabarMensaje() en ella. implementan también List.11: Representación UML de la Clase Vector que Implementa List No es obligatorio para los métodos definidos en una interfaz usar la palabra reservada abstract. se puede fácilmente entender la operación de las clases Vector.

/* El metodo grabarMensaje comienza aqui */ public void grabarMensaje(String mensaje) { System. puede ser implementada por una clase. interfaz2. remove. get. Ejemplo 5. una clase HashTable y cualquier otra clase que requiera el protocolo definido en la interfaz List puede implementar la interfaz List.out. 8. Los usuarios de estas clases saben que todas las clases que implementen la interfaz List proveerán los métodos add.. . 4. Los métodos que implementan las clases deben ser declarados como public y sus firmas del método deben coincidir con la firma del método declarado en la interfaz que ellas implementan.mensaje = mensaje. public class Telefono implements ContestadorAutomatico{ 3.. La siguiente es la estructura general de la declaración de clase para la clase que implementa una interfaz: modificadorDeAcceso class nombreClase [extends nombreSuperClase] [implements interfaz1. contains.] { // cuerpo de la clase } Considere el Ejemplo 5. isEmpty etc. 6.3 para entender cómo una clase implementa una interfaz. Si la clase implementa múltiples interfaces. El código Java comienza aquí… 1. this. Una vez que la declaración de la interfaz se completa. implementa la interfaz Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 199 © Copyright IBM Corp. 7. se aprendió a declarar una interfaz. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Si dos o más interfaces implementadas por una clase tienen la misma declaración de método.2 Implementación de Interfaces En la sección previa. La clase usa la cláusula implements para especificar las interfaces que implementa. la clase sólo necesita proveer una implementación para la declaración del método. porque la interfaz List declara estos métodos. . String mensaje.3 El ejemplo muestra como la clase Telefono ContestadorAutomatico antes mencionada. los nombres de las interfaces se separan por comas. 9.. 4.println("Mensaje grabado: " + mensaje). 5. String mensajeSaludo = "Regreso despues de las 11pm".Guía del Estudiante Core Java Vector. /* Definicion de la clase Telefono comienza aqui */ 2.

mensaje = mensaje. se sabe que implementa la interfaz ContestadorAutomatico. 9. boolean interlocutor1 = false. 15. String mensajeInterlocutor1. . muestra a la clase Telefono implementando los dos métodos declarados en la interfaz ContestadorAutomatico. 11. 16.Core Java Guía del Estudiante 10.out. También es posible que la clase Telefono desee definir otras funcionalidades además de los métodos declarados en la interfaz. public class Telefono implements ContestadorAutomatico{ 3. // . 13. /* El metodo grabarMensaje comienza aqui */ public void grabarMensaje(String mensaje) { System. Cuando se observa la declaración de la clase Telefono. 15. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. }/* El metodo getMensajeGrabado termina aqui */ 17. 12. 4. 5. String mensajeBasico = "Hola". String mensajeSaludo = "Regreso despues de las 11pm". String mensaje. 11. return mensajeSaludo. }/* Definicion de la clase Telefono termina aqui */ El código Java termina aquí Se debe notar que los métodos en la clase anterior Telefono se declaran como public dado que implementan los métodos de la interfaz ContestadorAutomatico. esto se ilustra en el siguiente extracto de código: El código Java comienza aquí… 1. 14. 13. . /* Definicion de la clase Telefono comienza aqui */ 2. lo que asegura que los dos métodos declarados en ContestadorAutomatico serán implementados. 7. 10. . 16. }/* El metodo grabarMensaje termina aqui */ /* El metodo getMensajeGrabado comienza aqui */ public String getMensajeGrabado() { System. 14.println("Mensaje Saludo: " + mensajeSaludo).out. String mensajeInterlocutor2. 6. this. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 200 © Copyright IBM Corp. boolean interlocutor2 = false.println("Mensaje grabado: " + mensaje). boolean respuestaEncendido = false. 8. El ejemplo anterior. 12.

3 A continuación se muestra cómo se usa una referencia a una interfaz. 21. 33. }/* El metodo grabarMensaje termina aqui */ /* El metodo getMensajeGrabado comienza aqui */ public String getMensajeGrabado() { System. 25. 24. enviarMensajeInterlocutor1(). 22. return mensajeSaludo. }/* El metodo recibirMensajeInterlocutor1 termina aqui */ /* El metodo enviarMensajeInterlocutor1 comienza aqui */ void enviarMensajeInterlocutor1(String mensaje) { mensajeInterlocutor2 = mensaje. 39. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 34. 32. 20. 41. etc. 19. 26. 43. 29. 27. }/* El metodo recibirMensajeInterlocutor2 termina aqui */ /* El metodo enviarMensajeInterlocutor2 comienza aqui */ void enviarMensajeInterlocutor2(String mensaje) { mensajeInterlocutor1 = mensaje. }/* Definicion de la clase Telefono termina aqui */ El código Java termina aquí El segmento de código anterior muestra que la clase Telefono tiene otros métodos. }/* El metodo getMensajeGrabado termina aqui */ /* El metodo recibirMensajeInterlocutor1 comienza aqui */ String recibirMensajeInterlocutor1() { return(mensajeInterlocutor1). 35. . 18. 23. 30. son estos.println("Mensaje Saludo: " + mensajeSaludo). }/* El metodo enviarMensajeInterlocutor2 termina aqui */ 44. }/* El metodo enviarMensajeInterlocutor1 termina aqui */ /* El metodo recibirMensajeInterlocutor2 comienza aqui */ String recibirMensajeInterlocutor2() { return(mensajeInterlocutor2).Guía del Estudiante Core Java 17. 40. recibirMensajeInterlocutor1(). 38. 28. 36. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 201 © Copyright IBM Corp. Fin del Ejemplo 5. 37. 31. 42.out.

getMensajeGrabado(). 5. La variable ca sólo puede usarse para acceder a los métodos definidos por la interfaz ContestadorAutomatico. a pesar que la variable ca se declara del tipo de la interfaz ContestadorAutomatico. 6. /* El metodo main comienza aqui */ 4. class Telefono2 implements ContestadorAutomatico{ Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 202 © Copyright IBM Corp.4. 7. . /* Definicion de la clase InterfazEjemplo comienza aqui */ 2.grabarMensaje("Llegare a las 11am – Pedro"). Cualquier otro método definido en la clase Phone no puede ser accedido por la variable ca. ca. 9. public class InterfazEjemplo { 3. Considere el Ejemplo 5. 8. Usar Interfaces Como Referencias Se ha visto como declarar una variable que referencia a un objeto de una clase. ContestadorAutomatico ca = new Telefono(). El código Java comienza aquí… 1. El programa dado no ilustra el poder polimórfico de una variable de referencia de interfaz. Esto se muestra en el siguiente código: El código Java comienza aquí… 1. se le asigna el objeto de la clase Telefono.out. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. }/* El metodo main termina aqui */ 11. /* Definicion de la clase Telefono2 comienza aqui */ 2. que referencia a una instancia de una clase que implementa esa interfaz. public static void main(String[] args) { String mensaje.4 El ejemplo muestra como se usa una referencia a una interfaz. }/* Definicion de la clase InterfazEjemplo termina aqui */ El código Java termina aquí La salida de este programa es la siguiente: Mensaje Saludo: Regreso despues de las 11pm Mensaje grabado: Llegare a las 11am – Pedro Mensaje recibido: Regreso despues de las 11pm En este programa. Similarmente.Core Java Guía del Estudiante 5. a pesar de que es asignado el objeto de la clase Telefono. Ejemplo 5. System.println("Mensaje recibido: " + mensaje). mensaje = ca. 10. se puede tener una variable de tipo interfaz.

28. ca = t2. /* El metodo main comienza aqui */ public static void main(String[] args) { String mensaje. 9. ContestadorAutomatico ca = new Telefono(). 35.grabarMensaje("Nos encontramos a la 1 pm – David"). Libro 1: Core Java . 7.println( "Mensaje grabado en Telefono2: " + mensaje). mensaje = ca. 21.mensaje = mensaje. 27. ca. mensaje = ca. 10. 17.out.Guía del Estudiante Core Java 3.out. 14. Volumen 2: Programación Orientada a Objetos 203 © Copyright IBM Corp. /* El metodo grabarMensaje comienza aqui */ public void grabarMensaje(String mensaje) { System. public class InterfazEjemplo2 { 26. System. 24. 32. 30. 13. 36. 19. 34. /* Definicion de la clase InterfazEjemplo2 comienza aqui */ 25.getMensajeGrabado(). .println( "Mensaje Saludo de Telefono2: " + mensajeSaludo). 37. }/* El metodo grabarMensaje termina aqui */ /* El metodo getMensajeGrabado comienza aqui */ public String getMensajeGrabado() { System. String mensaje. 15.out. 33. System. ca. 20.grabarMensaje("Nos encontramos a las 11am – Pedro"). Telefono2 t2 = new Telefono2(). return mensajeSaludo. 16. 5. }/* Definicion de la clase Telefono2 termina aqui */ 23. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 4.out.println("Mensaje recibido: " + mensaje). }/* El metodo getMensajeGrabado termina aqui */ 22. // . this. 12.println("Mensaje recibido: " + mensaje). . 29. 31. 6. 18. String mensajeSaludo = "Regreso despues de 1 hora". 8. 38. 39. 11.getMensajeGrabado().

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.5 Este ejemplo ilustra como una clase que provee implementación parcial de una interfaz. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 204 © Copyright IBM Corp. ya que sólo se realiza una implementación parcial de la interfaz. 8. }/* El metodo main termina aqui */ 41. Esta clase entonces debe ser declarada como una clase abstracta. 11. 9. . Ejemplo 5. 6.println( "Mensaje Saludo de Telefono3: " + mensajeSaludo). abstract public class Telefono3 3. Fin del Ejemplo 5.Core Java Guía del Estudiante 40. 12.4 Cuando una clase implementa una interfaz. 5. 7. El código Java comienza aquí… 1. /* El metodo getMensajeGrabado comienza aqui */ public String getMensajeGrabado() { System. Se muestra esto con un ejemplo. implements ContestadorAutomatico { String mensajeSaludo = "Regreso despues de 1 hora". /* Definicion de la clase Telefono3 comienza aqui */ 2. resulta en una clase abstracta. puede escoger proveer implementación sólo para algunos de los métodos declarados en la interfaz. 4. 10. }/* Definicion de la clase InterfazEjemplo2 termina aqui */ El código Java termina aquí La salida del programa es la siguiente: Mensaje Saludo: Regreso despues de las 11pm Mensaje recibido: Regreso despues de las 11pm Mensaje grabado: Nos encontramos a las 11am – Pedro Mensaje Saludo de Telefono2: Regreso despues de 1 hora Mensaje recibido: Regreso despues de 1 hora Mensaje grabado en Telefono2: Nos encontramos a la 1 pm – David Del programa anterior se puede ver que la versión de la implementación de ContestadorAutomatico llamada depende del tipo de objeto al que la variable ca esté haciendo referencia en tiempo de ejecución. return mensajeSaludo.out.

}/* El metodo getMensajeGrabado termina aqui */ 14. No implementa el método grabarMensaje() que está definido en la interfaz ContestadorAutomatico. porque ninguna existe. y no tiene acceso a ninguna variable declarada como final en la interfaz. Una clase que implemente una interfaz marcadora no necesita implementar ningún método. K puede añadir sus propias variables y métodos a las que ha heredado de J. Fin del Ejemplo 5. seguida por el nombre de la interfaz marcadora. Sólo una interfaz puede heredar de otra interfaz. Serializable y Cloneable son ejemplos de interfaces marcadoras. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . 6. en la cual una interfaz puede heredar de otra interfaz usando la palabra reservada extends. Esto permite que la clase tenga la funcionalidad para la cual se define la interfaz. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 205 © Copyright IBM Corp.Guía del Estudiante Core Java 13. 5. sus objetos pueden ser serializados y deserializados. Heredar de una Interfaz Se puede crear una jerarquía de interfaces (similar a una jerarquía de clases).5 Se discute a continuación qué son las interfaces marcadoras. La interfaz derivada añade sus propias variables y métodos. Si una clase implementa la interfaz Cloneable. Considere el Ejemplo 5. en su definición de clase. Una clase no puede heredar de una interfaz. debe declararse como una clase abstracta. Asuma que una interfaz K extiende de una interfaz J. puede crear clones (copias exactas) de objetos de la clase.1 Interfaces Marcadoras Las interfaces marcadoras son interfaces vacías sin ninguna declaración de variables o métodos. }/* Definicion de la clase Telefono3 termina aqui */ El código Java termina aquí La clase Telefono3 implementa sólo el método getMensajeGrabado() de la interfaz ContestadorAutomatico. Como Telefono3 sólo da una implementación parcial de la interfaz ContestadorAutomatico. Si una clase implementa la interfaz Serializable. La clase sólo necesita usar la palabra clave implements. Entonces. K implícitamente obtiene todas las variables y métodos declarados en J. A continuación se explica cómo crear una jerarquía de interfaces.6 que consta de un programa Java que extiende una interfaz de una interfaz existente.6 Este ejemplo muestra como una interfaz se extiende de una interfaz existente y añade variables y métodos. Ejemplo 5.

} 5. 35. void metodo3(). }/* El metodo metodo2 termina aqui */ /* El metodo metodo3 comienza aqui */ public void metodo3() { System. 27. .out. 20. 31. 34. 2. interface J { void metodo1(). }/* El metodo metodo3 termina aqui */ Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 206 © Copyright IBM Corp. 8. /* Definicion de la clase InterfazEjemplo comienza aqui */ 21.out. 28. 6. 18. 4.out. } 10. 13. 25.println("Dentro de metodo2"). } void metodo4(). void metodo6(). 11. 16. 29. class InterfazPrueba implements L.println("Dentro de metodo3"). 15. 30. 3. interface K extends J { 7. M { 22.println("Dentro de metodo1"). 14. 9. interface L extends K { 12. 26. } 19. }/* El metodo metodo1 termina aqui */ /* El metodo metodo2 comienza aqui */ public void metodo2() { System. interface M { 17. System. void metodo4(). public void metodo1() { 24. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 33. void metodo6(). 32. /* El metodo metodo1 comienza aqui */ 23. void metodo2(). 36.Core Java Guía del Estudiante El código Java comienza aquí… 1.

metodo1(). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. }/* El metodo metodo4 termina aqui */ /* El metodo metodo6 comienza aqui */ public void metodo6() { System. public class InterfazEjemplo { 50. }/* El metodo main termina aqui */ 59.metodo6(). 54. 58. 42. Tanto la interfaz L como M declaran el método metodo6. 43.println("Dentro de metodo4"). Esta clase tiene que proporcionar la implementación de los métodos metodo1. se ve que la interfaz K y la interfaz L declaran el mismo método metodo4. 57. 40. metodo3. 39. sin embargo Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 207 © Copyright IBM Corp. 44. public static void main(String[] args) { InterfazPrueba ip = new InterfazPrueba(). }/* Definicion de la clase InterfazEjemplo termina aqui */ 47. 41. /* Definicion de la clase InterfazEjemplo comienza aqui */ 49. La clase InterfazPrueba implementa las interfaces L y M.out. ip. ya que la interfaz L declara implícitamente todos los métodos anteriores. ip.println("Dentro de metodo6"). ip.metodo4(). metodo4 y metodo6. a pesar que la interfaz L hereda el metodo4 definido por K. }/* El metodo metodo6 termina aqui */ 46. /* El metodo metodo4 comienza aqui */ public void metodo4() { System. 45. 38. ip. ip.metodo2(). }/* Definicion de la clase InterfazEjemplo termina aqui */ El código Java termina aquí La salida del programa anterior es la siguiente: Dentro de metodo1 Dentro de metodo2 Dentro de metodo3 Dentro de metodo4 Dentro de metodo6 En este programa.metodo3(). . 53. 52. 56. 48. Esto es similar a sobrescribir métodos en el caso de clases. 55. /* El metodo main comienza aqui */ 51.Guía del Estudiante Core Java 37.out. metodo2. dado que los hereda de las interfaces J y K.

Opciones de Herencia en Java Existen tres tipos de opciones de herencia en Java: • • • Herencia con clases concretas.Core Java Guía del Estudiante la clase InterfazPrueba tiene que proporcionar sólo una implementación del método metodo6.12 ilustra las tres opciones de herencia. La superclase concreta puede ser instanciada y además debe implementar todos los métodos definidos en ella. entonces tiene que ser declarada como abstracta. se van a resumir las opciones de herencia en Java. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Fin del Ejemplo 5. puede proveer implementación para algunos de los métodos definidos en ella. aunque no se requiere que proporcione implementaciones para ninguno de sus métodos. La superclase abstracta no puede ser instanciada. abstractas y las interfaces.12: Opciones de Herencia en Java Cuando una clase hereda de otra clase concreta. Herencia con clases abstractas. usa la palabra reservada extends. . En caso de que la clase InterfazPrueba no proporcione implementación para alguno de los métodos declarados en las interfaces que implementa. Cuando una clase hereda de una clase abstracta. La Figura 5. La superclase abstracta puede tener variables de instancia definidas en ella. usa la palabra clave extends. “Herencia” Implementación de interfaces. Figura 5. La superclase concreta puede tener variables de instancia definidas en ella. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 208 © Copyright IBM Corp. 7.6 Una vez discutidas las clases concretas. de otro modo ocurre un error de compilación (duplicate method declaration error).

Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 209 © Copyright IBM Corp. La interfaz no puede definir variables de instancia. . La interfaz no puede ser instanciada y no provee implementación para ninguno de los métodos en ella. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Una clase puede implementar múltiples interfaces. usa la palabra reservada implements.Guía del Estudiante Core Java Cuando una clase implementa una interfaz.

Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 210 © Copyright IBM Corp. Explicar cómo las interfaces son implementadas y usadas como referencias. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.Core Java Guía del Estudiante Resumen Ahora que ha completado esta unidad. Discutir sobre clases abstractas. usted debe ser capaz de: • • • • • • Diferenciar entre herencia y agregación. Describir cómo se definen las clases y métodos abstractos en Java. Diferenciar entre clases abstractas y clases concretas. Definir una interfaz.

b) No se proporciona su implementación. d) Nunca pueden ser invocados. a) Un objeto de la clase abstracta b) Un objeto de la subclase de la clase abstracta c) La clase abstracta d) La subclase de la clase abstracta 5) Los métodos abstract de clases pueden estar presentes sólo dentro de una clase abstract. d) Ninguna de las anteriores 4) La variable de referencia que hace referencia a una clase abstracta puede ser inicializada con _______. a) Verdadero b) Falso 6) ¿Cuál de las siguientes son las maneras correctas de declarar una interfaz? a) public class X implements interface {} b) public interface X {} c) interface X{} d) public X implements interface {} Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 211 © Copyright IBM Corp.Guía del Estudiante Core Java Unidad 5: Examen de Autoevaluación 1) ¿Cuál de las siguientes opciones es falsa acerca de los métodos abstract? a) Pueden ser accedidos directamente sin crear un objeto de la clase que los contiene. x = new X(). c) X x. 2) Una clase abstracta debe contener al menos un método abstracto. c) Su implementación es proporcionada por sus subclases. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. a) Verdadero b) Falso 3) ¿Cuál de las siguientes es la forma correcta para crear una referencia a una clase abstracta X? a) X x. b) X x = new X().

.Core Java Guía del Estudiante 7) Las interfaces pueden declarar métodos abstract. Unidad 5: Clases Abstractas e Interfaces Libro 1: Core Java 212 © Copyright IBM Corp. a) Verdadero b) Falso 8) ¿Cuál de las siguientes es sintácticamente correcta cuando se implementa una interfaz X que declara dos métodos void m1() y m2()? a) class Y extends X { public void m1() {} public void m2() {} } b) class Y implements X { public void m1() {} } c) class Y extends X { void m1() {} } d) class Y implements X { public void m1() {} public void m2() {} } 9) Implícitamente. todas las variables en una interfaz son de la forma final y static. a) Verdadero b) Falso 10) ¿Cuál de las siguientes opciones es falsa acerca de una interfaz? a) Es posible crear una jerarquía de interfaces. d) Las interfaces pueden ser instanciadas. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. b) Una variable de tipo interfaz puede hacer referencia a un objeto de la clase que la implementa c) Una interfaz que contenga un método abstract declarado en ella no debe tener el modificador abstract en su declaración.

.Guía del Estudiante Core Java Respuestas a la Unidad 5: Examen de Autoevaluación 1) a 2) b 3) c 4) b 5) a 6) b y c 7) a 8) d 9) a 10) d Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 213 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

.

. Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 215 © Copyright IBM Corp.Guía del Estudiante Core Java Unidad 6: Laboratorio de Clases Abstractas e Interfaces Objetivos de Aprendizaje Al final de esta unidad. usted será capaz de: • • Usar clases abstractas. Usar interfaces. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Unidad 6: Laboratorio de Clases Abstractas e Interfaces Libro 1: Core Java 216 © Copyright IBM Corp. void setXCoordenada(int xcoord). Escena focoFoto(Escena). • La clase Fotografia tiene los atributos escena. • La clase Camara tiene los atributos abertura. contraste y enfoque y tiene los siguientes métodos: // No se proporciona implementación abstract Escena capturaEscena(Escena). // el int retornado es usado para establecer velocidadObturador int velocidadObturadorPrioridad(int velocidadObturador). velocidadSyn y velocidadPelicula. void buenaAfinaciónAbertura(int abertura). La clase Canon tiene el método. Camara setVelocidadPelicula(Camara). La clase Nikon tiene el método: void buenaAfinacionVelocidadObturador(int velocidadObturador).Core Java Guía del Estudiante Ejercicios de Laboratorio 1) Escribir un programa en Java que tenga una clase abstracta llamada Fotografia y una interfaz llamada Clicking. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. void setEnfoque(int enfoque). La interfaz Clicking tiene los siguientes métodos en ella. • La clase Escena tiene los atributos ancho. // el int retornado es usado para establecer abertura • Dos clases llamadas Canon y Nikon heredan de la clase Camara. coordenadaX y coordenadaY. Escena marcoFoto(Escena). void setEnfoque(int enfoque). void setContraste(int contraste). Tiene los métodos: void setAncho(int ancho). void setAlto(int alto). . void setClaridad(int claridad). velocidadObturador. alto. int aberturaPrioridad(int abertura). Camara setAbertura(Camara). Tiene el método: public static void setVelocidadSyn(int velocidadSyn). claridad. Camara setVelocidadObturador(Camara). void setYCoordenada(int ycoord).

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . • Libro 1: Core Java Volumen 2: Programación Orientada a Objetos 217 © Copyright IBM Corp. Cree una clase Prueba para verificar el funcionamiento de la Camara y el método de Fotografia. La clase Fotografo implementa la interfaz Clicking y usa las clases mencionadas para tomar una fotografía.Guía del Estudiante Core Java • La clase MiFotografia hereda de Fotografia.

.

Explicar los paquetes más usados que vienen incorporados con Java. Discutir las protecciones de acceso en los paquetes. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Libro 1: Core Java Unidad 7: Paquetes 219 © Copyright IBM Corp. Discutir cómo importar paquetes. Explicar cómo se representan los paquetes en el sistema de archivos. usted será capaz de: • • • • • • • Definir y crear un paquete. .Guía del Estudiante Core Java Unidad 7: Paquetes Objetivos de Aprendizaje Al final de esta unidad. Describir los miembros de los paquetes. Explicar las variables classpath y describir su uso.

. En esta unidad se aprenderá acerca de cómo las clases e interfaces pueden ser agrupadas usando el concepto de paquetes. Es un mecanismo de denominación así como de control de visibilidad. Un paquete es básicamente un mecanismo provisto por Java que ayuda a dividir el espacio de nombre de clase en bloques manejables. proporcionando acceso protegido y manejo de nombres de espacio. Un paquete es un contenedor que almacena la funcionalidad relacionada con clases e interfaces y otros paquetes. y una aplicación MiAplicacion usa ambas librerías. Considere la Figura 7. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. interfaces y otros paquetes en una categoría particular. se explicaron las clases abstractas e interfaces en Java. Se va a explicar la necesidad del uso de los paquetes y las tareas involucradas en el uso de paquetes. muchos programadores desarrollan varias clases Java simultáneamente. Un paquete no puede tener dos clases con el mismo nombre. Existe entonces la posibilidad de un conflicto de nombres entre clases desarrolladas por diferentes programadores. Un programador puede no estar al tanto de las clases desarrolladas por otro programador. Un paquete Java es como un directorio.1. Los paquetes son un medio para agrupar clases.1 Conflictos de Nombres Alrededor del mundo. Introducción En la unidad anterior. Unidad 7: Paquetes Libro 1: Core Java 220 © Copyright IBM Corp. 2. Necesidad de los Paquetes Existen varias razones por las cuales se necesita agrupar clases. 2. donde se muestran dos conjuntos de librerías que tienen ambas una clase Texto.Core Java Guía del Estudiante 1. Por lo que dos o más programadores pueden desarrollar clases con el mismo nombre. permite de una manera segura almacenar una clase dentro de él.

Las clases se identifican por nombres de paquete. 2. las clases desarrolladas por un programador para una aplicación específica pueden ser agrupadas bajo un cierto paquete.1: Conflictos de Nombres en Aplicaciones Cuando se usa la clase Texto en MiAplicacion. . Se deben crear clases para realizar operaciones matemáticas y operaciones de transferencias de archivos para estas aplicaciones. puede ser útil agrupar todas las clases relacionadas a las funciones matemáticas en un paquete y agrupar todas las clases relacionadas con las transferencias de archivos en otro paquete. 2. por ejemplo en un paquete p se identifica como p. Una clase Documento.3 Despliegue Asuma que se tiene que desarrollar una aplicación y entregarla al cliente. Los paquetes Java son similares a los nombres de espacio usados en C++. Ellos eliminan los conflictos de nombres. sino que permitirá en forma fácil reutilizar clases entre las aplicaciones Java. el sistema de tiempo de ejecución de Java no sabrá a cual clase llamar. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. A y B. tienen el mismo nombre de clase X.class). Libro 1: Core Java Unidad 7: Paquetes 221 © Copyright IBM Corp.Guía del Estudiante Core Java Figura 7.Documento. seguidas por el nombre de la clase en un programa Java. Todas las clases requeridas para desplegar un componente en particular de la aplicación pueden ser agrupadas bajo un paquete determinado. La aplicación completa comprende varios módulos y por tanto se tendrán muchos archivos de clases (. Este tipo de clasificación no solo nos ayudará a localizar una clase fácilmente. Asuma que dos librerías diferentes. esto ayudará al despliegue de los componentes fácilmente. Para evitar estos conflictos de nombres.2 Clasificación Suponga que se tiene que desarrollar varias aplicaciones Java. Si se le asigna a cada clase a un paquete diferente. no se tendrán conflictos de nombres entre las dos librerías. Por lo tanto.

2.2: Ventajas de los Paquetes en Java Ahora se procederá a ver como crear paquetes en Java. y dar acceso de paquete a los datos. Figura 7. se tiene que restringir el acceso a las clases que mantienen estos datos. Sin embargo. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Para resumir.Core Java Guía del Estudiante 2. asignar un nombre aleatorio y esperar que sea Unidad 7: Paquetes Libro 1: Core Java 222 © Copyright IBM Corp. se pueden agrupar todas las clases que mantienen datos en un paquete. Esto restringirá a otras clases de acceder a los datos. .4 Alcance de Clases Restringido A veces se quiere encapsular ciertos datos importantes usados por una aplicación. Crear Paquetes en Java El primer paso en la creación de un paquete es asignarle un nombre que sea universalmente único. En este caso. Para esto. las ventajas provistas por los paquetes se representa en la Figura 7. 3.

2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 3. usando un punto (. Cuando la instrucción de paquete es eliminada del archivo. un programador puede crear una jerarquía de paquetes. para aplicaciones finales. los nombres de clases son colocados en el paquete por defecto (default package). Este llevará el nombre de com.ibm. El paquete por defecto no tiene nombre y no es útil.). Una instrucción de paquete define un espacio de nombres para almacenar clases.ibm. el paquete exam puede contener varias clases o interfaces relacionadas funcionalmente. es por convención el tener todas las letras en minúsculas. 3. Esto puede hacerse dividiendo el nombre del paquete desde el paquete superior de uno directamente por encima.ibm. .ibm. El nombre puede contener más de una parte separada por puntos. IBM Learning Services (ILS) se añade a com. hay ciertos lineamientos que deben seguirse para nombrar un paquete. las librerías de clases que provee IBM tiene paquetes que comienzan por com. Usar la declaración de paquete al inicio del archivo asegura que todas las clases definidas dentro del archivo serán parte del paquete nombrado. En el ejemplo anterior.examen. Después se añade el nombre del departamento interno al cual el paquete pertenece. Ahora el nombre del paquete es com. • Después. el nombre de la aplicación se añade al nombre del paquete. el nombre del paquete creado es directorio.1 Nombrar un Paquete Las guías para nombrar un paquete son: • • Los nombres de los paquetes deben ser jerárquicos. por lo general. También. Una declaración de paquete debe ser la primera instrucción en el archivo fuente Java cuando se crea un paquete.2 Declaración de Paquetes Un paquete es declarado con la palabra reservada package.ils.ils.ibm. En esta instrucción.ils. El nombre de paquete debe comenzar con el nombre de dominio Internet en reversa. Por ejemplo. Aunque se permiten las letras mayúsculas. ambos examen y monitor estarán al mismo nivel en la jerarquía de nombres del paquete. Puede existir otro paquete dentro de ils llamado monitor. Por ejemplo.Guía del Estudiante Core Java universalmente único no es buena idea. Por ejemplo. • Nota: El nombre del paquete no tiene ninguna letra en mayúscula. com. Así.monitor. Se pueden usar el paquete por defecto para correr programas de prueba. La siguiente es la forma de una instrucción de paquete multinivel: Libro 1: Core Java Unidad 7: Paquetes 223 © Copyright IBM Corp. La siguiente es la forma general de la instrucción de paquete: package directorio.

Core Java

Guía del Estudiante

package directorio.lista.miembros; Cuando se especifica un nombre de paquete en un archivo, todas las clases definidas en el archivo pertenecen al paquete especificado. No es obligatorio tener una instrucción de paquete antes de toda definición de clase. Sin embargo, un archivo solamente puede tener una instrucción de paquete. Dentro de un programa Java, la instrucción de paquete aparece antes de las instrucciones import, que se usan para importar las clases requeridas por la aplicación, como se muestra en la Figura 7.3.

Figura 7.3: Declaración de Paquete en un Archivo Java

En la Figura 7.3, el paquete com.ibm.ils.examen.dominio contiene la clase PreguntaExamen. La figura ilustra solo una clase en el paquete. Sin embargo, puede haber más de una clase definida en un paquete. Todas las clases definidas, entonces, pertenecen al mismo paquete com.ibm.ils.examen.dominio. A continuación se discute como los paquetes se representan en el sistema de archivos.

4. Representación del Paquete en el Sistema de Archivos
Los paquetes se almacenan usualmente en directorios del sistema de archivos. Ellos están directamente relacionados a la estructura física de las carpetas. Por ejemplo, considere la clase C, que pertenece a un paquete, x.y a través de la siguiente instrucción: package x.y; public class C {
Unidad 7: Paquetes Libro 1: Core Java 224

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

} La clase C es compilada y colocada en la carpeta X\Y\ bajo algún directorio en el sistema, por ejemplo: C:\Ejemplos\x\y\C.class Así, los paquetes corresponden a la estructura física de carpetas. Una excepción a esto es cuando las clases son empaquetadas dentro de archivos JAR. Se aprenderá acerca de archivos JAR en la Unidad 9 – Características Avanzadas del Volumen 8. El nombre del directorio debe coincidir con el nombre del paquete letra por letra. Esta correspondencia es sensible a mayúsculas y minúsculas. Más de un archivo puede incluir la misma instrucción de paquete, porque la instrucción de paquete simplemente indica donde las clases definidas pertenecen, y no evita que otras clases en otros archivos pertenezcan al mismo paquete. Las clases en los desarrollos del mundo real están usualmente repartidas en varios archivos. Por ejemplo, considere el siguiente fragmento de código: package x.y; public class AA { } class BB { } class CC { } Este código se almacenará en un archivo llamado AA.class, que es diferente del anterior C.class, pero ambos tienen la misma instrucción de paquete al comienzo, y AA.class estará presente en la carpeta física C:\Ejemplos\x\y\. Así, es posible tener cualquier número de archivos con diferentes definiciones de clases perteneciendo al mismo paquete. Todo lo que se necesita es el mismo nombre de paquete al inicio del archivo. Los paquetes pueden ser comparados a los directorios usados para almacenar archivos en el sistema de archivos de un sistema de operativo. En el sistema de archivos, es posible tener subdirectorios dentro de un directorio. Pueden existir subdirectorios con el mismo nombre bajo diferentes directorios. Sin embargo, no se pueden tener dos subdirectorios con el mismo nombre bajo un mismo directorio. Reglas similares son aplicables para los paquetes. Considere la Figura 7.4, que representa los paquetes en el directorio en forma de árbol. El paquete representado en la figura es com.ibm.libreria.a, este paquete tiene dos archivos: Texto.java y Texto.class.

Libro 1: Core Java

Unidad 7: Paquetes 225 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

Figura 7.4: Representación de Paquete en el Sistema de Archivos

Asuma que hay un directorio llamado Root que tiene un subdirectorio llamado MiDirectorio, que a su vez tiene otro subdirectorio llamado MiSubDirectorio. Este subdirectorio tiene un archivo llamado miArchivo.txt. Se puede representar esta estructura como sigue: Root\MiDirectorio\MiSubDirectorio\miArchivo.txt Considere una estructura de paquete que tenga un paquete raíz com que tiene un subpaquete ibm, que a su vez tenga otro subpaquete libreria, con dos subpaquetes a y b. Esta estructura de paquete se puede representar como: com.ibm.libreria.a com.ibm.libreria.b A continuación se estudia como referenciar a las clases definidas en los paquetes.

4.1 Referencia a las Clases Definidas en los Paquetes
En un programa Java, si se quiere usar una clase ubicada en un paquete en particular, se debe usar con el nombre completamente calificado, usando el nombre del paquete. Considere dos clases, ambas llamadas Texto que están en dos paquetes diferentes, como se presenta a continuación: com.ibm.libreria.a com.ibm.libreria.b Estas dos clases son distintas y pueden contener dos implementaciones diferentes. Se debe referir a estas clases dentro del programa Java, como sigue: com.ibm.libreria.a.Texto com.ibm.libreria.b.Texto Esto se representa en la Figura 7.5.
Unidad 7: Paquetes Libro 1: Core Java 226

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Guía del Estudiante

Core Java

Figura 7.5: Referencia a Clases por su Nombre de Paquete

El programador tiene que tener en cuenta que la jerarquía de paquete también tiene que ser mantenida en el sistema de archivos del desarrollo en Java. Ahora, se estudiará como los paquetes ayudan a proteger el acceso a las clases.

5. Paquetes y Protección de Acceso
Los paquetes y las clases son maneras de encapsular datos importantes. Los paquetes encapsulan varias clases y las clases encapsulan variables y métodos. Como hemos mencionado, los paquetes son receptáculos para las clases y los sub paquetes que son parte de él, mientras que las clases mantienen datos y código. La visibilidad y la accesibilidad de los miembros de clase se ubican en una de las siguientes cuatro categorías: • • • • Sub-clases presentes en el mismo paquete. No sub-clases presentes en el mismo paquete. Sub-clases presentes en diferentes paquetes. Clases no relacionadas presentes en diferentes paquetes.

Existen diversas formas de producir los diferentes niveles de acceso requeridos por las categorías antes descritas. Los tres especificadores de acceso, private, public y protected, proveen los diferentes niveles de acceso. Cualquier miembro de clases declarado como public puede ser accedido desde cualquier sitio.

Libro 1: Core Java

Unidad 7: Paquetes 227 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Core Java

Guía del Estudiante

Un miembro en una clase sin especificación de acceso explícita será visible a las subclases y otras clases dentro del mismo paquete. Cuando un elemento se declara protected, será visible fuera del paquete actual, pero sólo para las clases que son subclases de la clase actual. Cualquier miembro de clases declarado como private no será visto fuera de su clase. Estos modificadores de acceso aplican a los miembros de las clases. Una clase (no anidada) solo tiene dos posibles niveles de acceso: default y public. Cuando no se indica el modificador de acceso en la declaración de la clase, implica que el nivel de acceso es el acceso por defecto. De aquí que todas las clases que son parte del paquete donde la clase esta presente, tienen acceso al código de esa clase. Si una clase es declarada como public, puede ser accedida por cualquier código fuera del paquete. No se puede declarar una clase (no anidada) como protected o private. Considere la Figura 7.6, donde se muestra un conjunto de clases en paquetes diferentes.

Figura 7.6: Clases en Paquetes Diferentes

En la figura anterior se definen cinco clases dentro de dos paquetes, com.ibm.ils.control y com.ibm.ils.modelo. Las clases A, B, y E están en com.ibm.ils.control y las clases C y D, en com.ibm.ils.modelo. La clase A tiene cuatro métodos con diferentes niveles de acceso, especificados por los modificadores de acceso public, protected y private. A continuación se explicará cuál de estos cuatro métodos puede ser accedido desde las clases A, B, C, D y E.
Unidad 7: Paquetes Libro 1: Core Java 228

© Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

/* Constructor MiClase comienza aqui */ public MiClase() { System. /* Definicion de la clase MiClase comienza aqui */ 4. 10. 18. Ejemplo 7. tres() y cuatro(). 22.. 16. y tres(). 1. 12. public int variablePublica = 40. 9. Desde la clase D solo un método puede accederse: uno(). 3. 14. Desde la clase C dos métodos pueden accederse: uno() y dos(). 13. package paquete1. Se presenta un ejemplo para entender mejor los especificadores de acceso. System. public class MiClase { 5. 19. 2. 15.. dos(). System.println( "variablePrivada = " + variablePrivada). 8. System. 20.println( "variablePublica = " + variablePublica).out. }/* Constructor MiClase termina aqui */ 23. 17. 11. dos(). Los métodos declarados como protected en la clase A pueden accederse por clases que sean subclases de A. 6. El código Java comienza aquí. y tres(). dos().out. Desde la clase B tres métodos pueden accederse: uno(). .println( "variableProtegida = " + variableProtegida). System.out.Guía del Estudiante Core Java • • • • • • Desde la clase A los cuatro métodos pueden ser accedidos: uno(). Desde la clase E tres métodos pueden accederse: uno(). 21. private int variablePrivada = 20. }/* Definicion de la clase MiClase termina aqui */ Libro 1: Core Java Unidad 7: Paquetes 229 © Copyright IBM Corp. 7. protected int variableProtegida = 30.println( "Dentro del constructor de MiClase").out. int variableDePaquete = 10. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.println( "variableDePaquete = " + variableDePaquete).out.1 El siguiente programa ilustra el efecto de diferentes especificadores de acceso sobre clases en diferentes paquetes.

out. 26. /* Constructor SinRelacionDelMismoPaquete comienza aqui */ 53.println( "variableProtegida = " + variableProtegida).out. 56. 55. 32.Core Java Guía del Estudiante 24. /* Constructor DeribadaDelMismoPaquete comienza aqui */ 29. System.println( "variableDePaquete = " + variableDePaquete). 30. /* Definicion de la clase comienza aqui */ 51.out.println( "variablePublica = " + variablePublica). 50. 45.out. 36. 38. 42. /* Las variables private son accesibles * solo dentro de la misma clase */ // System.println( // "variablePrivada = " + variablePrivada). . public SinRelacionDelMismoPaquete() { 54. MiClase mc = new MiClase(). }/* Definicion de la clase termina aqui */ 48.out. 57. /* Definicion de la clase comienza aqui */ 27.out. 33. 35. }/* Constructor DeribadaDelMismoPaquete termina aqui */ 47. 58. package paquete1. package paquete1. 44.println( Libro 1: Core Java 230 Unidad 7: Paquetes © Copyright IBM Corp.println( "Dentro del constructor de DeribadaDelMismoPaquete"). 41. 49. 31.println( "Dentro del constructor de " + "SinRelacionDelMismoPaquete"). 46. public class SinRelacionDelMismoPaquete { 52. System. 25. public DeribadaDelMismoPaquete() { System. System. System. System. 40. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 39. public class DeribadaDelMismoPaquete extends MiClase { 28. 34. 43. 59.out. 37.

85. 89. 88. System.out.Guía del Estudiante Core Java 60.out. 90. 77.variablePrivada). 62.variablePublica).out. /* Las variables Package son accesibles solo dentro * de la misma clase o dentro del mismo paquete */ //System. 93.println( // "variablePrivada = " + mc. package paquete2. 65. public class DeribadaDeDiferentePaquete extends MiClase{ 80. 76. 72. 94. System.println( 71.*. /* Las variables private son accesibles * solo dentro de la misma clase */ // System.out. 61.out. 69. }/* Definicion de la clase termina aqui */ 74.out. 84.println( Unidad 7: Paquetes 231 © Copyright IBM Corp. 83. "variablePublica = " + mc.println( "Dentro del constructor de " + "DeribadaDeDiferentePaquete"). System. 75.println( // "variablePrivada = " + variablePrivada). public DeribadaDeDiferentePaquete() { 82. import paquete1. 78. /* Constructor DeribadaDeDiferentePaquete comienza aqui */ 81. 92. 68. 87.out. "variableDePaquete = " + mc. 91. 86. 67. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. 66.variableProtegida). System. /* Definicion de la clase comienza aqui */ 79. 95.println( // "variableDePaquete = " + variableDePaquete). 70.variableDePaquete). 64. 96. /* Las variables private son accesibles * solo dentro de la misma clase */ // System. }/* Constructor SinRelacionDelMismoPaquete termina aqui */ 73. Libro 1: Core Java . 63.println( "variableProtegida = " + mc.

System.*.out. 131. MiClase mc = new MiClase().println( "Dentro del constructor de " + "SinRelacionDeDiferentePaquete"). package paquete2. 124. 129.out. 114. 127. 106. /* Las variables protected son accesibles dentro de * la misma clase o dentro del mismo paquete o dentro * de una la clase derivada */ //System.out.variableDePaquete). Unidad 7: Paquetes Libro 1: Core Java 232 © Copyright IBM Corp. 113. . 115. }/* Definicion de la clase termina aqui */ 103. 126.out. 98. 130. /* Las variables private son accesibles * solo dentro de la misma clase */ // System. 128. 123. /* Las variables Package son accesibles solo dentro * de la misma clase o dentro del mismo paquete */ comienza //System. 119. 105. "variableProtegida = " + variableProtegida). }/* Constructor DeribadaDeDiferentePaquete termina */ 102. 107. 104.println( // "variableProtegida = " + mc.variableProtegida). 121. import paquete1.println( // "variablePrivada = " + mc. 118.println( // "variableDePaquete = " + mc. 120. 116. /* Constructor SinRelacionDeDiferentePaquete aqui*/ 110. 112. public SinRelacionDeDiferentePaquete() { 111. public class SinRelacionDeDiferentePaquete { 109.println( aqui 100. 101. 117.variablePrivada). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. /* Definicion de la clase comienza aqui */ 108.out. System. "variablePublica = " + variablePublica). 99. 125.Core Java Guía del Estudiante 97. 122.

public static void main(String[] args) { MiClase mc = new MiClase(). }/* El metodo main termina aqui */ 148. public class MainPaquete1 { 140. 142. public class MainPaquete2{ 153. 147. }/* El metodo main termina aqui */ 160. SinRelacionDelMismoPaquete srm = 146. 144. 151. public static void main(String[] args) { DeribadaDeDiferentePaquete ddp = new DeribadaDeDiferentePaquete(). 150. termina 138. }/* Constructor SinRelacionDeDiferentePaquete aqui*/ 135. }/* Definicion de la clase MainPaquete2 termina aqui */ El código Java termina aquí Al ejecutar el programa MainPaquete1. 159. "variablePublica = " + mc. 134. 145. 157. /* Definicion de la clase MainPaquete1 comienza aqui */ 139. /* El metodo main comienza aqui */ 154.java se obtiene la siguiente salida: Dentro del constructor de MiClase variableDePaquete = 10 variablePrivada = 20 Libro 1: Core Java Unidad 7: Paquetes 233 © Copyright IBM Corp. . SinRelacionDeDiferentePaquete srd = new SinRelacionDeDiferentePaquete(). 137. new SinRelacionDelMismoPaquete(). }/* Definicion de la clase MainPaquete1 termina aqui */ 149. 158. package paquete2. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. DeribadaDelMismoPaquete dmp = new DeribadaDelMismoPaquete(). System. /* Definicion de la clase MainPaquete2 comienza aqui */ 152. }/* Definicion de la clase termina aqui */ 136. /* El metodo main comienza aqui */ 141.out. 156.variablePublica).println( 133. 143.Guía del Estudiante Core Java 132. 155. package paquete1.

Core Java Guía del Estudiante variableProtegida = 30 variablePublica = 40 Dentro del constructor de MiClase variableDePaquete = 10 variablePrivada = 20 variableProtegida = 30 variablePublica = 40 Dentro del constructor de DeribadaDelMismoPaquete variableDePaquete = 10 variableProtegida = 30 variablePublica = 40 Dentro del constructor de MiClase variableDePaquete = 10 variablePrivada = 20 variableProtegida = 30 variablePublica = 40 Dentro del constructor de SinRelacionDelMismoPaquete variableDePaquete = 10 variableProtegida = 30 variablePublica = 40 Al ejecutar el programa MainPquete2.java se obtiene la salida: Dentro del constructor de MiClase variableDePaquete = 10 variablePrivada = 20 variableProtegida = 30 variablePublica = 40 Dentro del constructor de DeribadaDeDiferentePaquete variableProtegida = 30 variablePublica = 40 Dentro del constructor de MiClase variableDePaquete = 10 variablePrivada = 20 variableProtegida = 30 variablePublica = 40 Dentro del constructor de SinRelacionDeDiferentePaquete variablePublica = 40 Unidad 7: Paquetes Libro 1: Core Java 234 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. .

1 Importar un Paquete Las clases estándar se almacenan en paquetes con nombres. Java tiene la sentencia import. Si se quiere invocar a las clases con sus nombres de paquetes. Se puede solventar. se tiene que ingresar el nombre largo para cada clase.dominio. que no ha sido importado. las clases son referidas por sus nombres cortos. Para evitar esto. 6. Considere una situación en la que se quiere usar la clase LinkedList. ninguna clase estándar existe en el paquete por defecto. 6.examen.util. se tiene que usar el nombre largo de la clase LinkedList. . o si el miembro del paquete se ha importado.LinkedList ll = new java. el nombre especificado en su declaración.1 Se va a discutir a continuación cómo usar las clases definidas en el mismo paquete.ils.*.Guía del Estudiante Core Java De esta salida se puede ver que el constructor de la clase MiClase se invoca cada vez que una clase intenta acceder a sus variables. En tales situaciones. A pesar de que los nombres largos hacen a un programa más difícil de leer y escribir. Libro 1: Core Java Unidad 7: Paquetes 235 © Copyright IBM Corp. Estos nombres se pueden usar en situaciones donde la clase que se está usando está presente en el mismo paquete que la clase actual. Fin del Ejemplo 7. pero sin haber importado el paquete java.util. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Sin embargo.ibm. con lo que se puede referenciar ciertas clases. sea una subclase o una clase no relacionada. considere una situación donde se quiere usar un miembro perteneciente a un paquete diferente. Usualmente. Usar Miembros de Paquetes Sólo los miembros públicos de un paquete son accesibles fuera del paquete en el que están definidos. Para acceder a un miembro público del paquete desde fuera de su paquete.LinkedList(). Cada uno de los procedimientos dados se ajusta a un tipo particular de situación. es decir. en vez de solo dominio Importar el miembro del paquete. a través del siguiente enfoque que se va a considerar donde se importan todas las clases definidas en un paquete en particular. o inclusive paquetes enteros. se debe seguir alguno de los siguientes pasos: • • • Referirse al miembro por su nombre completamente calificado como com.util. el nombre largo del miembro debe usarse. como se muestra a continuación: java. Importar el paquete completo del miembro. En ese caso.

public class Principal { 5. sin embargo. Después de paquete2. A continuación se da la forma general de la instrucción import: import paquete1[. que la sentencia import no es obligatoria para el programador.out. En Java 5.Core Java Guía del Estudiante Una vez que la clase es importada. 3. Aquí.println(pow(PI. System.out. Puede usarse en cualquiera de las siguientes formas. como se muestra a continuación: import java. y antes de cualquier definición de clase.Random.0. es un método conveniente de programación.lang. se presenta un ejemplo.print("PI("). A continuación. . más que el que impone el sistema de archivos. 2. 7. /* Definicion de la clase Principal comienza aqui */ 4. 1. se puede importar tanto las variables estáticas como los métodos estáticos que posee una clase.print(") elevado a la 2 es: ").paquete2]. o import java. 9.print(PI). puede ser referida directamente por su nombre. System. System.141592653589793) elevado a la 2 es: 9.. La jerarquía de paquetes no tiene un límite de profundidad en la práctica. la instrucción import viene inmediatamente después de la instrucción package. El código Java comienza aquí. import static java. es un paquete subordinado dentro del paquete externo. 2)).out. 8.Math. Esto nos ahorra colocar como prefijo el nombre de la clase que posee la variable o método estático. un nombre de clase explícito o (*) se especifica.. }/* Definicion de la clase Principal termina aqui */ La salida del código anterior es esta: PI(3.out. 6.util.(nombreClase/*). /* El metodo main comienza aqui */ public static void main(String[] args) { System. Debe tenerse en cuenta.2 El siguiente programa ilustra el uso del import estático.869604401089358 Unidad 7: Paquetes Libro 1: Core Java 236 © Copyright IBM Corp. }/* El metodo main termina aqui */ 12. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. paquete1 es el nombre del paquete de más alto nivel y paquete2. En un archivo fuente de Java. 11.*. Ejemplo 7. Esto indica que el compilador Java debe importar la clase especificada o el paquete completo.*.util. 10.

lang para todos los programas.* puede incrementar el tiempo de compilación. El compilador Java se confunde entre las dos clases. Usualmente.sql. Por lo tanto. Como se discutió no será eficiente importar todas las clases del paquete java. Considere el caso de la clase Date que está disponible en java.util.util. Esto es porque los programas Java.lang.Date java.Guía del Estudiante Core Java El código Java termina aquí Se puede ver que no fue necesario colocar la clase Math para hacer uso de la variable estática PI y del método estático pow. hay que referirse a estas dos clases a través de sus nombres completamente calificados. Cuando las clases Date definidas en los dos paquetes se usa dentro del mismo programa.lang.3 Libro 1: Core Java Unidad 7: Paquetes 237 © Copyright IBM Corp. como sigue: java.util. El formato general para importar java. se pueden importar sólo las clases Vector y Random del paquete java.Date Observe el Ejemplo 7.util. no pueden ejecutarse sin la funcionalidad de java.util y java. Ejemplo 7. Para evitar esto. cada paquete/clase a ser usado tiene que ser importado.lang se da a continuación: import java.Vector.sql.util. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. .util. Las funciones básicas del lenguaje son guardadas en otro paquete llamado java. Considere que se quiere usar las clases Vector y Random del paquete java. Esto es especialmente cierto si el usuario tiene que importar grandes paquetes. a pesar de que no afecta en ninguna forma el rendimiento en tiempo de ejecución o el tamaño de la clase. como se muestra a continuación: import java.3 para ver como el nombre del paquete se usa junto con el nombre de la clase durante la creación de una instancia de la clase.2 Un punto importante a tener en cuenta es que el uso del método asterisco import java.util.Random. Todas las clases estándar incluidas en Java son guardadas en un paquete llamado java.lang. ocurre un conflicto de nombres. existente en un paquete diferente. puede ser mejor nombrar las clases a ser usadas en vez de importar paquetes completos.* Asuma que se quiere importar una clase cuyo nombre es el mismo que otra. import java. En vez de eso. especificando también la jerarquía del paquete. pero el compilador implícitamente importa java. Fin del Ejemplo 7.

println("Mensaje: " + mensaje). } 9.println("Mensaje: " + mensaje). 8. public A() { 7. public class Principal { 25. public B() { System. 6. . 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. package paquete2. 22. /* El metodo main comienza aqui */ public static void main(String[] args) { /* Uso del nombre largo de la clase B */ paquete2. String mensaje = "Clase en paquete2". 30. 15. /* Definicion de la clase Principal comienza aqui */ 24. 11.B objPaquete2 = new paquete2. System. import paquete1. 3.A. package paquete1. 2. 28. }/* Definicion de la clase B termina aqui */ 19.out. 27. 23. /* Definicion de la clase B comienza aqui */ 13. 21. 17. /* Uso del nombre de la clase A sin su paquete */ A objA = new A(). 26.out..Core Java Guía del Estudiante Se usaran clases contenidas en diferentes paquetes para ilustrar lo que se discutió anteriormente. package paquete3.B(). 29. 12. /* Definicion de la clase A comienza aqui */ 4. } 18. }/* El metodo main termina aqui */ 32. El código Java comienza aquí. 31. public class B { 14. }/* Definicion de la clase Principal termina aqui */ Unidad 7: Paquetes Libro 1: Core Java 238 © Copyright IBM Corp. 16. public class A { 5. String mensaje = "Clase en paquete1".. 20. }/* Definicion de la clase A termina aqui */ 10. 1.

B. Se puede también empaquetar varios paquetes y desplegarlos juntos. Winzip y otros programas crean archivos zip. Pkzip. adicionalmente permite tener una unidad pequeña y sencilla para el despliegue (un único archivo de empaquetado). la estructura de árbol de directorios se almacena dentro de un archivo plano que preserva la estructura del directorio. estos archivos se usan normalmente cuando se trabaja con la implementación Java de Microsoft. Comprimen las clases y por tanto ocupan menos memoria. JAR comprime los datos usando un formato ZIP. entonces éstos miembros interdependientes deben ser desplegados juntos. Fin del Ejemplo 7. Los cargadores de clase. . extraen la estructura de árbol del directorio desde el archivo plano. Si un paquete tiene miembros interdependientes con otros paquetes. que pueden ser visualizados usando WinZip. La mayoría de las características de los JAR son similares a las de los archivos TAR usados en UNIX. Los archivos cab son creados con el utilitario de Microsoft MAKECAB. El empaquetado que soporta la mayoría de los ambientes de desarrollo Java es el JAR. Por otro lado. Agrupar Paquetes Las clases Java se almacenan en paquetes en aplicaciones de tiempo real. Libro 1: Core Java Unidad 7: Paquetes 239 © Copyright IBM Corp.A. A continuación se discute cómo el paquete es desplegado.3 A continuación se discute el empaquetado de paquetes que permite preservar la estructura de paquetes. JView. El empaquetado (archives) es ventajoso porque permite reducir los tiempos de carga de las clases. El cargador de clases de Java sabe como buscar otros dos tipos de empaquetados archivos zip y cab. cab es un acrónimo para archivos cabinet. en el momento de cargar las clases empaquetadas. a pesar de que no hay una sentencia import para la clase B del paquete paquete2. Por esto. 7. esto permite luego en la línea 9 usar el solo el nombre de la clase para acceder a ella.. Despliegue de Paquetes Un paquete puede ser desplegado como una única unidad. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Es difícil almacenar y manejar esta estructura de árbol del directorio de árbol debido a los aspectos de almacenamiento y rendimiento a considerar. estos paquetes usan una estructura de árbol de directorios cuando son instalados. 8. El empaquetamiento de paquetes es útil durante el despliegue.Guía del Estudiante Core Java El código Java termina aquí Se puede ver del programa anterior en la línea 3 de la clase Principal la sentencia import paquete1. en la línea 10 se puede acceder a esta clase usando su nombre largo paquete2.

Las Figuras 7. Figura 7.7: La Caja de Diálogo de Propiedades de Sistema en Windows 2000 Unidad 7: Paquetes Libro 1: Core Java 240 © Copyright IBM Corp.7 y 7.Core Java Guía del Estudiante Si una aplicación la componen varios paquetes. la aplicación o el servidor de aplicaciones actuará como un objetivo para el despliegue. Se puede especificar el classpath mediante una variable de ambiente (environment). 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. . El cargador de clases de la aplicación especifica los miembros de paquetes a través de un classpath.8 muestran como definir el classpath usando una variable de ambiente. Los objetivos para el despliegue pueden referirse a cualquier directorio o empaquetado para localizar miembros de un paquete.

Nótese que cada ruta esta separada por el carácter : También se puede especificar el classpath usando las opciones –cp o –classpath. donde ~ significa la ruta al directorio home del usuario. . Libro 1: Core Java Unidad 7: Paquetes 241 © Copyright IBM Corp. se procede a crear la variable de ambiente de la siguiente forma: • • Edite el archivo ~/.ils.ibm.bash_profile. Ejemplo: /home/estudiante1 En el archivo agregamos la siguiente línea.Guía del Estudiante Core Java Figura 7. se sustituyen por las rutas específicas de los paquetes que se deseen incluir. como sigue: java –cp c:\ilscs01\lib com.8: Definición del classpath Usando la Variable de Ambiente Bajo ambiente Linux.ils. export CLASSPATH=ruta1:ruta2 Donde ruta1 y ruta2.EjecutarExamen Esto ejecutará el método main de la clase EjecutarExamen en el paquete com.prueba.prueba. El cargador de la clase buscará el paquete en c:\ilscs01\lib.ibm. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

que es definida por defecto por el sistema de tiempo de ejecución de Java. . Luego compila MiClase. para guardar el archivo MiClase.class está ahora guardado en miDirectorio. como se sabe.Core Java Guía del Estudiante Existen varios tipos de despliegue que una aplicación Java puede usar. es decir. Las tres opciones se pueden usar en la misma aplicación Java y no necesitan estar en el mismo directorio. un jar o un zip. establece el tope de la jerarquía de clase. siempre que estén disponibles en el classpath.MiClase. Sin embargo.NoClassDefFoundError: MiClase (wrong name: miDirectorio/MiClase). Esto les permite compilar el código fuente y luego ejecutar el intérprete de Java usando el nombre de la clase en la línea de comandos. por defecto (. Se ha introducido el término classpath. cuando se ejecuta MiClase.java en él. Usualmente los programadores mantienen todas las clases en el paquete por defecto (sin nombre).lang. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Se va a aprender qué son y qué hacen en la próxima sección. y ya no puede ser llamada simplemente MiClase. el programador crea un directorio llamado miDirectorio bajo el directorio actual.). está usualmente en la variable de entorno classpath. 8. Asuma que un programador crea una clase llamada MiClase en el paquete miDirectorio. MiClase.class) pueden existir en el directorio. tiene que ser referida nombrando su jerarquía de paquetes. o como un archivo zip o como un archivo JAR. Ahora. El paquete por defecto se hace corresponder con la carpeta física que está en el directorio actual de trabajo Esto es factible debido a que el directorio actual de trabajo. como miDirectorio. la estructura de directorios debe coincidir con el nombre del paquete. El tipo de despliegue puede ser un subárbol de directorio. En vez de eso. aún esto mostrará un mensaje de error: Exception in thread "main" java. Los archivos de clase (.NoClassDefFoundError: miDirectorio/MiClase. Idealmente. No sucede lo mismo con paquetes. Unidad 7: Paquetes Libro 1: Core Java 242 © Copyright IBM Corp.lang. también crean dificultades al compilar y ejecutar programas. Aunque los paquetes resuelven problemas desde el punto de vista de control de acceso y conflictos de nombres. Esto ocurre porque la clase ahora está almacenada en un paquete llamado miDirectorio.java después de hacer a miDirectorio su directorio actual. Por lo tanto. El classpath. La razón para esto estriba en la definición de la variable classpath del sistema del programador.1 ¿Qué es el classpath? Un classpath almacena la ubicación particular que será usada por Java como la raíz de la jerarquía de paquetes. se muestra el siguiente mensaje de error: Exception in thread "main" java.

random() * 100000). El otro método es cambiar de directorio. public static void main(String[] args) { 20. si. p = (float) (Math. Ante esta coyuntura. 2. float calcularInteres( float principio. Por ejemplo.4 El siguiente programa ilustra los conceptos involucrados en torno al usar paquetes en Java. subiendo un nivel. /* Definicion de la clase Inversionista comienza aqui */ 17.Guía del Estudiante Core Java En este caso. /* El metodo main comienza aqui */ 19.MiClase o java miDirectorio/MiClase en la línea de comandos para ejecutar el programa. 8. 9. /* Definicion de la clase Interes comienza aqui */ 4. 10. 15. 16. package inversiones.. Observe el Ejemplo 7. y luego usar java miDirectorio. float anos. 21. Ejemplo 7.MiClase sin importar el valor de la variable de ambiente. }/* El metodo calcularInteres termina aqui */ 13. 3. si miDirectorio es un subdirectorio de C:\Java\Ejemplos. entonces C:\Java\Ejemplos se debe añadir a la variable classpath. class Interes { 5.4. 12. public class Inversionista { 18. float p. Unidad 7: Paquetes 243 © Copyright IBM Corp. no existe un directorio llamado miDirectorio en el directorio actual de trabajo debido a que el directorio actual del programador es miDirectorio. float tarifa) { return (float) principio * anos * tarifa / 100. Libro 1: Core Java . a. Esto le permite al programador usar java miDirectorio. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. }/* Definicion de la clase Interes termina aqui */ 14. 11. t. el programador puede hacer una de dos cosas: ya sea añadir el tope de su jerarquía de clases de desarrollo a la variable classpath.. 7. El código Java comienza aquí. package inversiones. 1. /* El metodo calcularInteres comienza aqui */ 6.

lang al inicio del programa para poder acceder a la clase Math disponible en el paquete. . }/* Definicion de la clase Inversionista termina aqui */ El código Java termina aquí El programa anterior calcula el interés simple cuando se da el monto principal. si = in.println("Interes simple: " + si). El método random() disponible en la clase Math del paquete java. Ahora se compila y ejecuta el programa para ver cómo trabaja.out. Sin embargo.println("Principio: " + p). 30. }/* El metodo main termina aqui */ 33. t). 27.println("Numero de anos: " + a). Luego se puede compilar el programa de dos formas.lang para que el programa trabaje.out. 31. es compilarlo desde un directorio un nivel superior al directorio investments como sigue: javac inversiones/Inversionista.Inversionista Unidad 7: Paquetes Libro 1: Core Java 244 © Copyright IBM Corp. Interes in = new Interes(). Se debe importar el paquete java.lang en tiempo de compilación de cualquier programa Java. Se puede compilar el programa desde el directorio inversiones como sigue: javac Inversionista. el compilador de Java importa implícitamente el paquete java. System. 23. a. 26.out. System. 24. java inversiones/Inversionista o java inversiones. 32.java Otra forma. 25.random() * 10).println("Tarifa de interes: " + t). no se necesita importar el paquete java. el número de años de inversión y la tasa de interés. que es creado como un subdirectorio del directorio actual. a = (float) (Math.random() * 20).out. 29. t = (float) (Math. System. Por lo tanto. Después de escribir el programa.Core Java Guía del Estudiante 22. se debe ir un nivel superior del directorio inversiones para ejecutar el programa y dar el siguiente comando en la línea de comandos. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.lang se usa para generar números aleatorios. System. 28.calcularInteres(p.java Después que el programa es compilado exitosamente. se tiene que guardar en un directorio llamado inversiones.

9.awt para diseñar interfaces de usuario para aplicaciones.beans Los componentes Java beans son reutilizables y ampliamente usados en aplicaciones y applets Java.io Se puede obtener entrada del usuario del teclado usando flujos de entrada. son también útiles cuando se usan gráficos e imágenes en las aplicaciones. 9. 9. La compilación puede hacerse desde cualquier directorio. Estos flujos también son útiles durante la serialización y la deserealización de objetos. adicionalmente se puede enviar la salida al monitor usando flujos de salida. Para el desarrollo y ejecución de estos componentes reutilizables se deben usar las clases disponibles en el paquete java.3 java. Paquetes Incorporados en Java Usados Comúnmente En esta sección se presenta una visión general de los paquetes que son ampliamente usados en Java. El contexto del applet es la aplicación que carga y corre el applet. La salida del programa anterior puede ser como sigue (dependiendo de los números aleatorios que son generados): Principio: 35830.2 java.4 Ahora.4 java.77 Fin del Ejemplo 7. 9.awt Se pueden usar las clases que están disponibles en el paquete java.applet definen las características de los applets de Java y permite que se programen. Se debe ir un nivel superior y luego ejecutar el programa.558226 Interes simple: 5469. así como cuando se lee de o se escribe a un archivo.1 java.beans. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Las clases en java. observe algunos paquetes comúnmente usados en programas Java. Libro 1: Core Java Unidad 7: Paquetes 245 © Copyright IBM Corp. 9. Estas clases también permiten que un applet se comunique con su contexto de applet. .io definen los diferentes flujos de entrada y salida usados para las funciones descritas anteriormente. El marco de trabajo de applets comprende el applet y el contexto del applet.applet Las clases disponibles en el paquete java.Guía del Estudiante Core Java No se puede ejecutar el programa desde el mismo directorio inversiones.254 Numero de anos: 3.349063 Tarifa de interes: 4.

text Este paquete contiene clases para manipular texto. hashCode(). float. NumberFormat. que permite manejar una colección (grupo) de objetos. Las clases están diseñadas para trabajar independientemente del lenguaje natural usado.lang tiene las clases que proveen la funcionalidad básica de Java. coseno. que es la raíz de todas las clases de errores y excepciones.util permiten generar números aleatorios.util Este paquete tiene esencialmente varias clases utilitarias que hacen el esfuerzo de la programación más simple. double.lang El paquete java. Unidad 7: Paquetes Libro 1: Core Java 246 © Copyright IBM Corp. 9. Puede haber situaciones cuando los tipos de datos primitivos como integer. y toString(). tangente. que proporciona la implementación estándar para muchas funciones matemáticas útiles como: raíz cuadrada. También tiene el marco de trabajo Collections.math El paquete math en Java contiene clases que nos ayudan a trabajar con aritmética sobre números enteros y decimales de precisión arbitraria.Core Java Guía del Estudiante 9. 9. como aplicar las políticas de seguridad. se necesitan en la forma de objeto. Este paquete tiene también muchas clases que permiten realizar operaciones de sistema. etc. que se usa en las interfaces de usuario de las aplicaciones. MessageFormat. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. También proporciona dos interfaces que realizan recorridos sobre datos textos. Algunas de las clases utilitarias disponibles en el paquete java. Este paquete también tiene la clase Math. Algunos métodos en esta clase proveen implementaciones estándares de algoritmos para equals(). Provee la clase Vector que almacena una colección de referencias a objetos. crear procesos externos. Este paquete tiene la clase Throwable. Las clases String y StringBuffer de este paquete tienen varias operaciones que pueden realizarse sobre cadenas de caracteres. etc. Provee dos clases BigInteger para enteros y BigDecimal para números decimales. exponente. para esto se tiene las clases envolventes (wrapper).6 java. que es la superclase de todas las otras clases en Java.7 java. seno.5 java. puede variar en tamaño y contener objetos de diferentes tipos. Algunas de las clases provistas en este paquete son: Annotation. DateFormat. Este paquete tiene la clase Object.8 java. etc. buscar la fecha y hora local de acuerdo a la región de la fecha y hora del sistema. números y mensajes. . etc. 9. etc. fechas. tiene clases que soportan el modelo de evento. que tienen un campo para almacenar el valor del tipo de dato primitivo.

También.10 java. Libro 1: Core Java Unidad 7: Paquetes 247 © Copyright IBM Corp.Guía del Estudiante Core Java 9.rmi La Invocación a Métodos Remota (Remote Method Invocation RMI) permite a un objeto ejecutándose en una JVM invocar a un método de otro objeto (objeto remoto) que se está ejecutando en una JVM diferente. .9 java. 9. Se pueden desarrollar aplicaciones para que un cliente se comunique con cualquier servidor disponible en la Internet. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. Usando las clases Socket y ServerSocket se pueden implementar un sistema cliente/servidor. La clase URL y otras clases relacionadas permiten enviar datos a un URL así como recibir datos fácilmente.net Este paquete tiene varias clases que permiten construir aplicaciones en red. se pueden desarrollador aplicaciones para un servidor y host en la Internet.

Discutir acerca de protección de acceso en paquetes. usted debe ser capaz de: • • • • • • • Definir y crear un paquete. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. .Core Java Guía del Estudiante Resumen Ahora que ha completado esta unidad. Discutir cómo importar paquetes. Explicar las variables classpath y describir su uso. Explicar los paquetes incorporados más usados en Java. Unidad 7: Paquetes Libro 1: Core Java 248 © Copyright IBM Corp. Describir los miembros del paquete. Explicar cómo los paquetes se representan en el sistema de archivos.

la clase se almacena en _____________. 4) Un programa Java tiene la siguiente instrucción: package p1. y p1. a) Verdadero b) Falso 3) ¿Cuáles de las siguientes sentencias son verdaderas acerca de la instrucción package? a) Debe ser la primera instrucción declarada en un archivo fuente Java.p3. a) Verdadero b) Falso 2) Se puede usar el mismo nombre de paquete para diferentes definiciones de clases en diferentes archivos.C es el nombre del paquete 5) Cuando no se especifica el paquete en un archivo fuente. ¿Cuál de las siguientes es verdadera acerca de la instrucción? a) C es el nombre del paquete. a) El paquete java. y p2. c) Se termina con un punto y coma. y el resto son simplemente nombres de directorios b) C es el nombre de la clase. .p3.p3 es el nombre del paquete c) p1.p3.p2.C. b) Debe ir después de las instrucciones import.nombre b) Un paquete con el mismo nombre que el directorio actual c) El paquete por defecto (Default package) d) Ninguna de las anteriores Libro 1: Core Java Unidad 7: Paquetes 249 © Copyright IBM Corp.p2.Guía del Estudiante Core Java Unidad 7: Examen de Autoevaluación 1) Se pueden tener dos clases con el mismo nombre en dos paquetes diferentes en Java.p2. d) Asegura que todas las clases definidas en el archivo fuente pertenecen al paquete.C es el nombre del paquete d) p1 es el nombre del directorio. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

net 8) ¿Para cuál de los siguientes será visible un miembro sin especificación de acceso explícito en la definición de su clase? a) Subclases en otro paquete b) Clases en el mismo paquete c) Ambas 9) Si se tiene una clase sin ningún modificador para especificar su acceso.Float() b) Float f = new Float() c) Float f= new java. a) Verdadero b) Falso 7) ¿Cuál de los siguientes paquetes es importado implícitamente por el compilador de Java para cualquier programa Java? a) java. sin importar el paquete java. se puede ejecutar el programa desde el directorio miPaquete.lang. Unidad 7: Paquetes Libro 1: Core Java 250 © Copyright IBM Corp.Float() d) k= new java.Float.lang.java en un paquete llamado miPaquete.awt b) java.lang c) java. ¿cuál de los siguientes niveles de acceso se asume que tiene? a) public b) protected c) package d) private 10) ¿Cuál de las siguientes instrucciones se pueden usar para crear un objeto de la clase Float que está en el paquete java.Core Java Guía del Estudiante 6) Suponga que existe un programa llamado MiClase. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.rmi d) java.lang. .lang? a) k=new lang.

Guía del Estudiante Core Java Respuestas a la Unidad 7: Examen de Autoevaluación 1) a 2) a 3) a. . c y d 4) b 5) c 6) b 7) b 8) b 9) c 10) b y c Libro 1: Core Java Unidad 7: Paquetes 251 © Copyright IBM Corp. 2007 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.

Sign up to vote on this title
UsefulNot useful