Está en la página 1de 610
Programador Certificado a Curso practico rg 8) eT CUCL eGR Ue | top Nie C ee eee aan LE 2? EDICION Este libro esta dirigido a todos los programadores interesados en aprender el lenguaje de programacién Java y que deseen adquirir los conocimientos Pafeexs reese ermal aulilerclsioMerOA Ryde Su orientacién didactica le permitira llevar a cabo el estudio de Java desde el principio, paso a paso, de modo claro y sencillo. Los ejemplos y ejercicios de autoevaluacion le ayudaran, en todo momento, en lacomprension de los contenidos de cada capitulo, hasta adquirir un completo conocimiento del lenguaje. El libro esta estructurado en dos grandes partes: el contenido del primer bloque se centra en un estudio profundo del lenguaje, desde la sintaxis hasta como Cc) implementada la programacion orientada a objetos en Java, junto con el acceso a ficheros y a bases de datos, sin olvidar la creacion de entornos (eleclilere- Vacs) aplicaciones multitarea (hilos). En el segundo bloque se abordan exhaustivamente los objetivos del examen de certificacion CX-310-055, llevandose a cabo un estudio de las cuestiones que dichos objetivos plantean, con la finalidad de preparar al lector para que obtenga la certificacion de Programador Java Sun. Incluye CD-ROM con las practicas y ejercicios del libro. al SL et ISBN 978-970-15-1323-1 wl 78970115132 Ay Alfaomega Grupo Editor =< Gracias of Colaborader gue my perm tio VO ejemplar gel 4610. Al aulor por Su Maravillose ne mete, a yn es caner a Reguler Calidad ¥ @ los loberatorios Cicados en mi casa donde se prodeyo 18 copia di gital a! texto, COA “mucho Caeh® se moliva alos e@dtores a Ger éedoican tos ele vades Pre cros” ee sus libros , para GX poe Fre estan oe/ Gleance che las Mas as, aast® J —— Programador Certificado JAVA 2 Curso practico Programador Certificado JAVA 2 Curso practico Antonio J. Martin Sierra Alfaomega 4> Ra-Ma‘’ vee Datos catalograficos Martfn, Antonio Programador Certificado JAVA 2. Curso Pr Segunda Edicién ctico Alfaomega Grupo Editor, S.A. de C.V., México ISBN: 978-970-15-1323-1 Formato: 17 x 23 cm Paginas: 620 Programador Certificado JAVA 2. Curso Practico Antonio J. Martin Sierra ISBN: 978-84-7897-8 17-5, edicién original publicadaporRA-M4-Eaitorial, Madrid. Espaiia___ Derechos reservados © RA-MA Editorial | uuwees:pan Fi ani i a Segunda edicién: Alfaomega Grupo Editor, México, maiz! 2008 © 2008 Alfaomega Grupo Editor, S.A. de C.Y. lea Pitégoras 1139, Col. Del Valle, 03100, México D.E. Miembro de la Camara Nacional de la Industria Editogial/Mexi¢ana Registro No. 2317 Pag. Web: http://www.alfaomega.com.mx * E-mail: libreriapitagoras@ alfaomega.com.mx 4 ISBN: 978-970-15-1323-1 Derechos reservados: La informacion contenida en esta obra tiene un fin exclusivamente didéctico y, por lo tanto, no est previsto su aprovechamiento a nivel profesional c industrial. Las indicaciones técnicas y programas Incluidos, han sido elaborados con gran cuidado por el autor y reproducidos bajo estrictas normas de control. ALFAOMEGA GRUPO EDITOR, S.A. de C.V. no serd juridicamente responsable Por: errores u omisiones; dafios y perjuicios que se pudicran atribuir al uso de la informacion comprendida en este libro y en el CD-ROM adjunto, ni por la utilizacién indebida que pudiera darsele, Edicién autorizada para venta en México y todo el continente americano, Impreso en México. Printed in Mexico. Empresas del grapo: le C.Y. — Pitdgoras 1139, Col. Del Valle, México, DF. - C.P.03100, 1420 / 2490. Sin costo: 01-800-020-4396 México: Alfuomega Grupo Edit Tel.: (52-55) 5089-7740 ~ Fax E-mail: libreriapitagoras@alfaom com.mx Colombia: Alfaomega Colombiana S.A. — Carrera 15 No. 64. 29 - PBX (57-1) 2100122 Fax: (57-1) 6068648 — E-mail: scliente@alfaomega.com.co Chil Te Alfaomega Grupo Editor, S.A. - General del Canto 370-Providencia, Santiago, Chile 56-2) 235-4248 — Fax: (56-2) 235-5786 — E-mail: agechile@alfaomega.cl Argentina: Alfaomega Grupo Editor Argeatino, Buenos Aires, C.P. 1057 — Tel: (54-11 A. ~ Paraguay 1307 PB. “11”, Capital Federal 11-7183 / 8352, E-mail: info@alfaomegaeditor.com.ar A MIS HOS ALEJANDRO Y RAUL PROLOGO... PARTE I. PROGRAMACION EN JAVA .... CAP{TULO 1. INTRODUCCION A JAVA... Caracteristicas de Java .. La Maquina Virtual Java (JVM)... Ediciones Java ... Primeros pasos en Java El Java Development Kit (JDK) ...... Configuracién de variables de entorno Creacién del primer programa cn Java, Codificaciéi Compilacién. Ejecucién .. Entornos de desarrollo para Javi Conceptos basicos de programacién en Java Objetos. Clase: Métodos y campos Métodos y campos es E] método main() . Cuestiones de autoevaluacion. CAPITULO 2. SINTAXIS DEL LENGUAJE... Sintaxis basica .. § PROGRAMADOR JAVA 2 CERTIFICADO, CURSO PRACTICO © RAMA Secuencias de escape Tipos de datos primitiv Variables ...... eee Tipos de datos de una variable Declaraci6n de variables Asignacion... Literales . Ambito de las variable Valores por defecto de una variable. Conversiones de tipo Conversiones implicitas ... Conversiones explicitas Constantes .. Operadores... Aritméticos Asignacion Asignacién de referencias y asignacién de valor Condicionales ........... Comparacién de tipos basicos Igualdad de objetos .. Légicos . Operadores a nivel de bits. Operador instanceo, Operador condicional El recolector de basura de Ja Instrucciones de control Instruccién La instruccion switch La instruccién for. La instruccion while...... Salida forzada de un bucle. cecceeeeeese a break fe cess 85 Dimensionado de un array... Acceso a los elementos de un array Paso de un array como argumento de Hamada a un método Array como tipo de devolucién de un método.. 90 Recorrido de arrays con for-each 91 Arrays multidimensionales . 93 Recorrido de un array multidimensional . 94 Arrays multidimensionales irregulares 94 iNDICE_9 Tipos enumerados .. Definicién de un tipo enumerado. Clases de enumeracion.... Constructores y métodos de una enumeracion. Constructores Métodos .. Métodos con numero v: ariable de argumento: Cuestiones de autoevaluacion Listado de las practicas PRACTICA 2.1 PRACTICA 2.2 CAPITULO 3. CLASES DE USO GENERAL Organizacion de clases: los paquetes .. Ventajas de la utilizacion de paquete: Importar clases y paquetes de clases. Paquetes de uso , general .. La especificacién del API J2SE. Gestion de cadenas: la clase String Creacién de objetos String .. Inmutabilidad de objetos Strin; Principales métodos de la clase String. La clase Math... Constantes public: Métodos ...... Importaciones estaticas Utilizacién de fechas..... La clase Date.. La clase Calendar. Creacién de un objeto Calendar Métodos de la clase Calendar. Clases de envoltorio. Encapsulamiento de un tipo basico. Conversion de cadena a tipo numérico Autoboxing.......... Entrada y salida en Java... Salida de datos .. Salida con formato El método printf() Sintaxis de la cadena de formato. Entrada de dato: Scanners..... Creacién de un objeto scanner .... 10_PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO © RA-MA Métodos de la clase Scanner... Recuperacion de datos de un fichero externo. Expresiones regulares ........ Definicién de un patron Busqueda de coincidencias Caracteres utilizados en la construccién de expresiones regulares Métodos de Ia clase Matcher. Colecciones....... La clase ArrayL Creacién de un ArrayList Métodos de la clase Arr La clase Hashtable .... Creaci6n de un hashtable ........ Métodos de la clase Hashtable Iteracién de un hashtable: la interfaz Enumeration Genéricos...... El problema de las colecciones de tipo Object Colecciones de tipos genéricos Definicién de tipos genéricos.. Organizacién de programas en clases Cuestiones de autoevaluacién Listado de las practicas PRACTICA 3. PRACTICA PRACTICA 3.3 CAPITULO 4. PROGRAMACION ORIENTADA A OBJETOS CON JAVA... Empaquetado de clases ... Modificadores de acceso Encapsulacion... Proteccion de datos .. Facilidad en el mantenimiento de la clase. Clases de encapsulacién (JavaBeans) Sobrecarga de métodos....... Constructores .. Definicién y utilidad Constructores por defecto. Herenci: Concepto de herenci: Ventajas de la herencia Nomenclatura y reglas Relacién “es un” ..... fNDICE Creacion de herencia en Java....... Ejecucién de constructores con la herenci: Métodos y atributos protegidos Clases finales... Sobrescritura de método: Clases abstracta: Definicion. Sintaxis y caracteristic Polimorfismo .... 2 Asignacién de objetos a variables de su superclase Definicién de polimorfismo. Ventajas de la utilizacion del polimorfismo. Tipos de retorno covariantes El polimorfismo en el API de Java La herencia y los tipos genéricos... Colecciones de clases y subclase: Comodines Interfaces Definicién de interfaz Definicién de una interfaz... Implementacién de una interfaz. Interfaces y polimorfismo Interfaces en el J2SE.. Cuestiones de autoevalui Listado de las practicas . PRACTICA 4. PRACTICA 4. PRACTICA 4.3 PRACTICA 4. PRACTICA 4. CAPITULO 5. EXCEPCIONES.... Excepciones y errores Clases de excepcion Tipos de excepciones Excepciones marcadas Declaracién de una excepcién. Excepciones no marcadas .. Captura de excepciones .. meee Los bloques try. ‘catch. finally. try catch. finally 12_PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO @RA-MA Propagacién de una excepcién.. Lanzamiento de una excepcién ... Métodos para el control de una excepcién Clases de excepcién personalizads Aserciones .... Formato de una a: Habilitar asercione: Compilar con aserciones Ejecutar con asercione: Uso apropiado de aserciones. Cuestiones de autoevaluacion Listado de las practicas. PRACTICA 5.1... CAPITULO 6. ACCESO AL DISCO... Informaci6n sobre ficheros y directorios. La clase File............ Creacién de un objeto File. Informacién sobre un fichero/directorio Eliminacién y renombrado. Lectura de un fichero de texto Creacion de un objeto FileReader Creacién de un objeto BufferedReader Escritura en ficheros de texto... : Creacién de un objeto FileWs iter. Creaci6n del objeto Print Writer Escritura de datos primitivos Java en un ficher Creacién de un objeto FileOutputStream.. Creacién de un objeto DataOutputStream.. Lectura de tipos primitivos de un fichero Creacién de un objeto FileInputStream Creacion de un objeto DatalnputStream ... Escritura de objetos en un fichero Serializacion de objetos Creacién de un objeto ObjectOutputStream . Lectura de objetos de un fichero.. Creacion de un objeto ObjectInputStream - Deserializacién de objetos .. Listado de las practica: PRACTICA 6.1... CAPITULO 7. ACCESO A DATOS EN JAVA... La tecnologia Java DataBase be Conecaivity ‘GBEC). El driver JDBC ... INDICE _13 © RA-MA Estructura y funcionamiento. ~295 Tipos de driver JDBC .. Driver puente JDBC-ODBC Driver nativo..... Driver intermedio Driver puro-Java .. El Lenguaje SQL. Consultas .. Tipos de sentencias SQL. Sentencias para manipulacién de datos (DML) Sentencia SELECT - Sentencia INSERT. Sentencia DELETE Sentencia UPDATE E] API JDBC. Utilizacién de JDBC para 2 acceder a datos Conexion con la base de datos Carga del driver . Creacién de la conex Ejecucién de consultas..... Creacién del objeto Statement . Ejecucién de la consulta SQL... Cierre de la conexién..... Manipulacién de registros Obtener objeto ResultSet Desplazamiento por el conjunto de registros Acceso a los campos... Otros métodos de la interfaz ResultSe Cierre de un ResultSet .... Informacién sobre los datos Obtener objeto ResultSetMetaData. Acceso a la informacion. Consultas preparadas .. Creacién de un objeto PreparedStatement Asignaci6n de parametros. Ejecucién de la consulta. ResultSet desplazable ... Cuestiones de autoevaluacion. Listado de las practicas ... PRACTICA 7.1... CAPITULO 8. APLICACIONES BASADAS EN ENTORNO GRAFICO.. 14 PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO Principales clases del AWT Contenedores .. Creacién de una ventana.. Personalizacién de ventanas Agregar controles a un contenedor El modelo de gestién de eventos en Java. Interfaces de escucha y escuchadores EI proceso de gestién de eventos Origen y destino del evento ... Asociacién objeto origen-escuchador Resumen de pasos a seguir . Ejemplo de gestién de eventos Clases de evento . Adaptadores . Referencia a los objetos de la interfaz desde la clase de e. Gestores de organizacion AWT...... Establecimiento de un gestor de organizacién Principales gestores de oreaes on AWT. Swing, Principales clases de sw ing. Creacién de una interfaz grifica s swin: Listas y tablas swing... El control JList..... Creacion de un Jlist. La interfaz ListModel Agregar un JList a la ventana. Manipulacién del contenido de un JList Seleccién en una lista: evento ListSelectionEvent El control JComboBox Creacién de un JComboBox . La interfaz ComboBoxModel .. Afiadir un JComboBox al contenedor.. Manipulaci6n del contenido de un JComboBox Seleccion en un JComboBox: Evento ItemEvent El control JTable... Creacién de un JTable con datos de un vector La interfaz TableModel... Implementacion de TableModel c con n bases de datos Applets... La clase Applet .... Métodos del ciclo de vida de un applet Creaci6n de un applet ... Inclusi6n de un applet en un documento HTML. INDICE _15 Paso de parametros a un applet...... Cuestiones de autoevaluacién. Listado de las practicas PRACTICA 8.1........ PRACTICA 8.2...0ss00ee CAPITULO 9. APLICACIONES MULTITAREA.... Aplicaciones multitarea en Java. Extension de la clase Thread... Sobrescritura del metodo run() .. Creacién y ejecucién de las tareas Métodos para control de threads El método sleep().. Nombre de un threa Obtener thread en ejecucién. Prioridad de un thread. El método yield() .. El método join() Estados de un thread Implementacién de la interfaz Runnable. Implementacién del método run()... Creacién y ejecucién de tareas Sincronizaci6n de threads ..... Acceso concurrente a objetos. Sincronizacién y monitores. Comunicacién entre threads. Métodos de comunicacién . Aplicaciones productor-consumidor Cuestiones de autoevaluacién Listado de las practicas..... PRACTICA 9.1... PARTE II. PREPARACION PARA EL EXAM DE CERTIFICACION ..... CAPITULO 10. CLASES ANIDADAS..... Tipos de clases anidadas..... Clases internas estandares.. Instanciacién de la clase interna. Utilizacion de this... Modificadores para una clase interna.. Clases internas locales a método... Instanciacion de la clase interna. 16 PROGRAMADOR JAVA 2 ERTIFICADO, CURSO PRACTICO @RAMA Modificadores.... Clases anonimas.... Definicion de una clase anénime Clase anénima como argumento de método Clases internas estaticas.... Instanciaci6n de la clase interna. CAPITULO 11. OBJETIVOS DEL EXAMEN JAVA SUN CERTIFIED PROGRAMMER 310-055 one Objetivo 1: declaracién, inicializacién y ambito.. Declaraciones de elementos......... Declaracién de una clase Declaracién de una interfaz. Declaracién de una enumeracion Herencia de una clase abstracta ... Implementaci6n y herencia de una interfaz . Palabras reservadas e identificadore: Variables y tipos de datos Tipos de datos Variables...... Declaracién, construccién e inicializacién de arrays Declaraci6n..... Construccién Inicializacion. Array anonimo Asignaciones de referencias a array Utilizacién de variables de array no inicializadas. Declaracién y utilizacién de métodos .. Declaracién de un método Métodos estaticos. Métodos en clases JavaBeans Métodos con numero variable de argumentos Sobrescritura y sobrecarga de métodos. Definicién y utilizacion de constructores. Objetivo 2: control de flujo... Utilizacién de las instrucciones ify switch . Instruccién if..else ... switch Utilizacién de bucles: while Sor. for-each.... Uso de break y continue iNDICE_17 Etiquetado de bucles .. Execepciones y errores en un programa Asercione: Objetivo 3: el API J2SE.. Clases de envoltorio... Caracteristicas generale: Utilizaci6n de constructores Métodos . Autoboxing/Autounboxing .. Las clases String, StringBuffer y StringBuilder La clase String .......... La clase StringBuffer La clase StringBuilde Lectura y escritura en ficheros Serializacion de objetos ... Formateo de fechas y nimeros. La clase DateFormat... La clase NumberFormat Utilizacion de expresiones regulares Lectura de datos con Ja clase Scanner. Salida de datos con formato Objetivo 4: concurrencia Definicién, instanciacién y ejecucién de tareas ..... El Thread Scheduler. Método de control de un thread Situaciones que podrian provocar que un thread abandonase la ejecuci Sincronizacién y acceso concurrent Métodos wait(), norifyQ y notifvAllO Objetivo 5: conceptos de Orientacién a Objeto: Beneficios de la encapsulaci6n .......... Polimorfismo .. Invocacién a métodos sobrescritos y sobrecargado Relacién “Es un” y “Tiene un” Objetivo 6: colecciones y genérico: Clases ¢ interfaces de coleccién Tipos de colecciones.... Clases e interfaces de colec La interfaz Comparable.. Implementacién de los métodos equals() y hashC ‘ode() Sobrescritura de equals() Sobrescritura del método hashCode( Utilizacién de colecciones genéricas . Los parametros de tipo... 18 PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO ©RA-MA Comodines ... Méitodos genéricos wee Otras peculiaridades sobre genéricos. Uso de instanceof con genéricos .. Genéricos y arrays Colecciones genéricas y no genéricas Ordenacién de arrays y colecciones de objeto: Las interfaces Comparable y Comparator Ordenacion de una coleccién Ordenacién de un array de objetos. Busqueda de objetos en un array/coleccién ......... Conversién de array a coleccién y de coleccién a array . Objetivo 7: fundamentos................ Uso de los modificadores de acceso .. Argumentos de la linea de comandos Paso de referencias a objetos y tipos primi El Recolector de Basura.. Comportamiento del recolector de basura Situaciones que provocan la recoleccin de un objeto... Reconocer en qué punto un objeto es elegido para recoleccién Requerir la ejecucién del recolector. El método finalize() ....... Organizaci6n y distribucién de clase: Ficheros JAR ........ Utilizacién de classpat Utilizacién de operadores Operadores de asignacién Operadores aritméticos ... Operadores relacionales Operador instanceof. Operadores légicos Igualdad de objetos APENDICES.... nee A. CLASES PARA LA CREACION DE APLICACIONES GRAFICAS... Component. Container Window ©RA-MA iNDICE_19 Label... TextComponent TextField... TextArea... Ckeckbox...... CheckboxGroup . JComponent..... AbstractButton JTextField ... JButto ButtonGroup JCheckBox B. JAVA6 Nuevas capi El API Desktop Nuevas caracterist Establecimiento de permisos en ficheros y directorios Actualizacién a JDBC 4.0....... C. SOLUCION A LAS CUESTIONES DE AUTOEVALUACION D. PREGUNTAS TIPO DE EXAMEN... INDICE ALFABETICO... PROLOGO A dia de hoy, el ntimero de libros publicados en castellano sobre Java es enormemente extenso. En este escenario cabe pues preguntarse qué tiene de particular el presente libro. Programador Java 2 Certificado no pretende ser una especie de Biblia de Java, mas bien lo que puede distinguir a este libro de otros es su particular enfoque didactico. Consciente de la dificultad que entrafia el aprendizaje de un lenguaje de programacion como Java a través de un manual, he utilizado mis siete afios de experiencia en la ensefianza de este lenguaje para intentar plasmar los conceptos de una forma sencilla, clara y encadenada, procurando seguir un orden légico en las explicaciones que evitase en lo posible los saltos hacia adelante y hacia atras en la exposicién de los temas. Cada tema 0 concepto que se explica viene ademas acompafiado de un ejemplo practico para ayudar a su comprensi6n. ‘A lo anterior se debe afiadir el hecho de que éste es de los pocos libros de Java en castellano, orientados a la obtencién de la Certificacién Java Sun. OBJETIVOS El objetivo de este libro es conseguir que cl lector adquiera un profundo conocimiento del lenguaje Java, proporciondndole al mismo tiempo.Ja ayuda 22_ PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO © RA-MA. necesaria para que logre superar el examen de Certificacién 310-055, que lo refrenda como Programador Java Sun Certificado. Con este libro no se pretende especializar al lector en el desarrollo de un tipo concreto de aplicaciones con Java, sino en conseguir un dominio completo del lenguaje. Asi pues, aspectos como el desarrollo de aplicaciones informaticas para la Web o la programacién de dispositivos electrénicos en Java quedan fuera del alcance de esta obra. No obstante, se han incluido dos temas que, aunque no forman parte de los objetivos del examen, son de gran importancia en el desarrollo de la mayoria de ciones Java. Se trata de la creacién de aplicaciones basadas en entornos os y el acceso a bases de datos en Java. Este libro esta dirigido a programadores en cualquier lenguaje que, sin tener conocimientos de Java, quieran adentrarse en este lenguaje de programacién y adquirir una sdlida formacién sobre el mismo. También aquellos programadores Java que quicran obtener la Certificacién pueden encontrar este libro como una Util herramienta para la preparacién del examen. En él se exponen algunos conceptos que son desconocidos por los programadores, debido a que su uso pasa mucha veces desapercibido en el desarrollo cotidiano de las aplicaciones, pero que son de gran importancia para la consecucién del examen: ESTRUCTURA DEL LIBRO Los contenidos expuestos en el manual se encuentran organizados en dos bloques: una primera parte dedicada a la ensefianza del lenguaje y las librerias de uso general y otra centrada en la revisién de cada uno de los objetivos marcados en el examen de Programador Java Certificado 310-055 (versién JDK 1.5). Parte I Engloba los capitulos comprendidos entre el 1 y el 9. El capitulo 1 nos introduce las caracteristicas de la tecnologia Java y nos proporciona la base necesaria para comenzar a crear programas en Java, lenguaje cuyos elementos sintacticos son analizados en el capitulo 2. El capitulo 3 presenta las clases de uso general mas importantes incluidas en la plataforma, mientras que el capitulo 4 se dedica al estudio de uno de los pilares basicos de la programacién Java: la programacién orientada a objetos. En el capitulo 5 se analiza el mecanismo de excepciones Java como medio para capturat y tratar errores provocados por la aplicacién durante la ejecucién de la misma. Tras el estudio de la sintaxis del lenguaje y los elementos de soporte, los capitulos 6, 7 y 8 se centran en el empleo de Java en dos importantes areas del desarrollo, éstas son el acceso a datos y la creacién de entornos graficos. Finalmente, el capitulo 9 esta dedicado a la creacién de aplicaciones multitarea que es uno de los aspectos més potentes, y a la vez complejos, que nos ofrece Java. Parte LL Esta parte consta de los capitulos 10 y 11. Por un lado, el capitulo 10 nos adentra en uno de los aspectos més extravagantes de la programacién Java: las clases anidadas. Se trata de un modelo de programacién cada vez menos utilizado en el desarrollo de aplicaciones, sin embargo, gran parte de las cuestiones de examen utilizan esta estructura sintactica. El capitulo 1] se centra en realizar una revision exhaustiva de cada uno de los puntos que componen los objetivos del examen de certificacién 310-055, Mamando la atencién del lector sobre aquellos aspectos especialmente relevantes de cara a la correcta resolucién de las cuestiones que en ellos se plantean. Este examen corresponde a la certificaci6n de Programador Java Sun, centrada en el conocimiento del lenguaje y las librerias de uso general. 24 PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO © RA-MA Apéndices Ademéas de los 11 capitulos comentados, el libro incluye cuatro apéndices. El apéndice A contiene un resumen de las clases AWT y swing mas utilizadas en el desarrollo de aplicaciones basadas en entorno grafico. En el apéndice B se enumeran las caracteristicas mas importantes de la Ultima versién de Java: J2SE 6.0. Por otro lado, el apéndice C contiene las respuestas a las cuestiones de autoevaluacién propuestas al final de cada capitulo. Finalmente, el apéndice D incluye una simulacion del examen 310-055, con preguntas tipo que pueden ser planteadas en dicha prueba. Si desea obtener mas informacién sobre los programas de certificacion Java de Sun puede consultar la pagina Web: ony training/certification/java/index.html CD-ROM Con el libro se incluye un CD-ROM con todas las practicas desarrolladas en los distintos capitulos del mismo. Estas practicas han sido creadas con el entorno de desarrollo NetBeans 5.5 y pueden ser ejecutadas tanto con la versién J2SE 5.0 como con la 6.0. En el caso de que el lector disponga de un IDE distinto a NetBeans puede utilizar los cédigos fuente de las clases que se encuentran en el subdirectorio \src de cada practica. Espero que este libro resulte de utilidad al lector y le ayude, tanto a la comprensién del lenguaje Java como a la superacién del examen de certificacion. Si desea realizar algtin comentario u observacién puede contactar con el autor a través de la siguiente direccién de correo: ajms66@hotmail.com HY PERRIER PROGRAMACION EN JAVA a amt > CAPITULO 1 NTRODUCCION A JAVA imaginé en 1991, a version del lenguaje, que unos diez afios lenguaje de programacién mas utilizado por la comunidad mundial de desarrolladores y, mucho menos, que la mayoria de los Sun Microsystems, la empresa propietaria de Java, no afio en que se desarrollé la primer: después, éste se ibaa convertir en el k grandes fabricantes de software de] momento, IBM, Oracle, Borland, BEA, etc., desarrollarian sus productos para, de alguna u otra manera, dar soporte al Ienguaje Java. Java es, sin duda alguna, el lenguaje de programacién que mas impacto ha tenido en los ultimos afios, especialmente en el mundo de desarrollo para Ja Web. Probablemente, Internet no seria Ja que es hoy sin la existencia de Java. a, lejos de detenerse, va en aumento, pues no sdlo de aplicaciones Web, sino que también tiende a ion para el futuro, como son Pero la expansion de Jav: es el referente en el desarrollo imponerse en los grandes retos que tiene la programaci los Servicios Web o la programacién para dispositivos electronicos. “Revolucion del mundo Software” que Java ha provocado tiene Java que no tengan los demas de programacién, Java no se diferencia in embargo, Java es algo Esta especie de hace que uno Ilegue a preguntarse, gqué lenguajes de programacién? Como lenguaje mucho del resto de los lenguajes orientados a objetos, s més que un lenguaje y posee una serie de caracteristicas que lo hacen especial. 28 _PROGRAMADOR JAVA 2 CERTIPICADO. CURSO PRACTICO ©RA-MA Durante este capitulo exploraremos todas esas caracteristicas para, posteriormente, adentrarnos en el estudio del lenguaje y del resto de elementos que forman parte de la tecnologia Java. CARACTERISTICAS DE JAVA He aqui los principales puntos en los que se apoya la tecnologia Java: e Lenguaje totalmente orientado a objetos. Todos los conceptos en los que se apoya esta técnica, encapsulacién, herencia, polimorfismo, etc., estan presentes en Java. ¢ Disponibilidad de un amplio conjunto de librerias. Como ya se mencion6o anteriormente, Java es algo mas que un lenguaje. La programacién de aplicaciones con Java se basa no sélo en el empleo del juego de instrucciones que componen el lenguaje, sino, fundamentalmente, en la posibilidad de utilizar el amplisimo conjunto de clases que Sun pone a disposicién del programador y con las cuales es posible realizar, practicamente, cualquier tipo de aplicaci6n. En este amplio abanico, encontramos clases para la creacién de interfaces graficas, gestion de red, multitarea, acceso a datos y un largo etcétera. ¢ Aplicaciones multiplataforma. Esta es, posiblemente, la caracteristica mas importante de Java y la que ha propiciado su amplia aceptaciobn en la comunidad de desarrolladores y fabricantes sofiware. Que las aplicaciones Java sean multiplataforma significa que, una vez se ha compilado el programa, éste puede ser ejecutado en diferentes sistemas operativos sin necesidad de realizar cambios en el codigo fuente y sin que haya que volver a compilar el programa, es lo que en el mundo Java se expresa con la frase “compila una vez y ejecuta en cualquier plataforma”. Esta independencia de la plataforma se consigue gracias al concepto de maquina virtual, el cual trataremos con detalle en el siguiente punto. e Ejecucién segura de aplicaciones. La seguridad de las -aplicaciones Java se manifiesta en varios aspectos. Por un lado, el SRM CAPITULO 1: INTRODUCCION AJAY: = lenguaje carece de instrucciones que puedan provocar accesos descontrolados a la memoria, éste es el caso de los punteros, una caracteristica muy potente y peligrosa del lenguaje C/C++ que en Java no esta presente. Por otro lado, la maquina virtual, que es el entorno en el que se ejecutan las aplicaciones Java, impone ciertas Ee restricciones a las aplicaciones para garantizar una ejecucién segura. « Amplio soporte de fabricantes software. Esta caracteristica se deriva en parte de las anteriores, sobre todo, del hecho de que los programas Java no estén vinculados a un determinado sistema operativo. Hoy en dia, encontramos una amplia variedad de productos software de diferentes fabricantes que dan soporte a Java, como puede ser el caso de los entornos de desarrollo o los servidores de aplicaciones. LA MAQUINA VIRTUAL JAVA (JVM) = = = La Maquina Virtual Java o JVM es un entorno de ejecucion para aplicaciones Java, cuya principal finalidad es la de adaptar los programas Java compilados a las caracteristicas del sistema operativo donde se van a ejecutar. En la figura | tenemos un esquema en el que se ilustra todo el proceso de compilacién y ejecucién de aplicaciones. Cédigo Fuente | java Compllacién } Byte codes class Ejecucién ne vM vm vM | (Windows) (Linux) (otro) =| aa = - — S.O, Windows S.O, Linux Otro S.O. ; Fig. 1. Proceso de compilacién y ejeituciém de aplicaciones Java 30_PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO ©RA-MA Todo programa Java estd organizado en clases, éstas se codifican en archivos de texto con extensién java. Cada archivo de cédigo fuente .java puede contener una 0 varias clases, aunque lo normal es que haya un archivo por clase. Cuando se compila un java se genera uno o varios archivos .class de cédigo binario (uno por cada clase), denominados bytecodes, que son independientes de la arquitectura. Esta independencia supone que los bytecodes no pueden ser ejecutados directamente por ningun sistema operativo; es durante la fase de ejecucién cuando los archivos .class se someten a un proceso de interpretacién, consistente en traducir los bytecodes a cédigo ejecutable por el sistema operativo. Esta operacién es realizada por un software conocido como Maquina Virtual Java. Cada sistema operativo proporciona su propia implementacién de la JVM, todas ellas ofrecen el mismo “aspecto” de cara a los bytecodes, sin embargo, cada una realiza la interpretacién de acuerdo a las caracteristicas del sistema operativo para el que ha sido disefiada. Hoy en dia encontramos implementacién de mdquina virtual para la mayoria de los sistemas operativos existentes, en la mayoria de ellos la JVM es un componente mas del propio sistema operativo. EDICIONES JAVA Una de las caracteristicas de Java indicadas anteriormente es el hecho de disponer de un amplio conjunto de paquetes (librerias) de clases para la realizacién de las aplicaciones. Todo este compendio de clases se organiza en tres grandes grupos, conocidos como ediciones Java (figura 2). Fig. 2. Ediciones Java +2) PEPE REE GE RG) CAPITULO 1: INTRODUCCION A JAVA_31 Las tres ediciones en las que actualmente se organiza la tecnologia Java © Jaya 2 Standar Edition (J2SE). Forman parte de este grupo los paquetes de clases de uso general (tratamiento de cadenas, colecciones, acceso a datos, etc.), es decir, aquellos que se utilizan en cualquier tipo de aplicacién. J2SE incluye también los paquetes de clases para la creacion de entornos graficos y aplicaciones para navegadores Internet (applets). Esta edicién sera en la que nos centraremos durante esta parte del curso. e Java 2 Enterprise Edition (J2EE). Proporciona los paquetes y tecnologias necesarias para la creacién de aplicaciones Empresariales multicapa, entre ellas, las aplicaciones que se van a ¢jecutar en entorno Web. e Java 2 Micro Edition (J2ME). También los dispositivos electrénicos, tales como agendas electrénicas, PDA o teléfonos méviles, pueden beneficiarse de la tecnologia Java. Esta edicién incluye una serie de paquetes y especificaciones que posibilitan la ereacién de aplicaciones Java ejecutables en dispositivos electronicos de capacidades limitadas. PRIMEROS PASOS EN JAVA Durante esta seccién, explicaremos detalladamente los pasos previos que tenemos que realizar antes de proceder a la escritura y ejecucion de programas en Java, posteriormente y a modo de ejemplo, escribiremos, compilaremos y ejecutaremos nuestro primer programa Java. El Java Development Kit (JDK) El Java Development Kit proporciona el conjunto de herramientas basico para el desarrollo de aplicaciones con Java estandar. Se puede obtener de manera gratuita en la Web de Sun (figura 3), descargindolo desde la direccion htip://java.sun.com/javase/downloads/index.jsp. 32_PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO RA-MA Como vemos, por defecto aparece la iiltima versién de! JDK lanzada por Sun, actualmente se trata de la version JDK 6. Esta no incorpora ninguna novedad en la sintaxis del lenguaje respecto a la version anterior JDK 5, tan sdlo algunas mejoras en determinadas API especificas de Java estandar, alguna de las cuales sera comentada en los capitulos dedicados a las interfaces graficas y el acceso a datos. Asi pues, aunque este libro se basa en la version 6, todo lo aqui explicado en lo que a sintaxis del lenguaje se refiere es igualmente aplicable para la versién 5; incluso, para aquellos lectores que utilicen versiones de Java esténdar anteriores a ésta, como la 1.4, se indicara explicitamente qué caracteristicas del lenguaje han sido incorporadas a partir de la version 5 y, por tanto, no estén presentes en las anteriores. Ademas del JDK, esta pagina nos ofrece otras opciones de descarga que son: ° JDK 6 with Java EE. Permite descargar, ademas del Java estandar, las librerias del J2EE. e JDK 6 with Netbeans 5.5. Con esta opcién descargamos, ademas del JDK, el entorno de desarrollo (IDE) NetBeans para la construccién de aplicaciones Java. Mas adelante comentaremos algo mas sobre este aspecto. CAPITULO 1: INTRODUCCION A JAVA 33 «= java Runtime Environment (JRE). Proporciona tnicamente el entomo de ejecucién de las aplicaciones, incluyendo las librerias J2SE. es la opcién que utilizariamos si s6lo quisi¢ramos ejecutar aplicaciones Java creadas por terceros. = Use vez clegida Ia opcién de descarga, pulsaremos el boton “Download” ) geeetets ~mostrandose una pagina similar a la indicada en la figura 4 y “Bepeniendo de la opcion de descarga elegida. Fig. 4. Pagina de descarga de la plataforma J2SE 5.0 Después de aceptar el contrato de licencia, debemos elegir la plataforma para la que queremos obtener el SDK. En el caso de Windows, podemos elegir dos modalidades de instalacion: = Windows Offline Installation. Descarga un ejecutable con el JDK y el programa de instalacién del mismo. Con esta modalidad, se descarga el software primero y sc realiza la instalacién a posteriori sin necesidad de mantener la conexion de red. Es la opcién mas recomendable. = Windows Online Installation. Descarga un ejecutable que permite realizar la instalacién de! JDK a través de la red. 34_PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO En cualquiera de las dos opciones, la instalacion es guiada por un asistente, haciendo que el proceso resulte bastante sencillo e intuitivo. Una vez instalado en el equipo, el JDK proporciona: ¢ La implementacién de Ja maquina virtual para el sistema operativo indicado durante el proceso de descarga del JDK. ¢ Herramientas para la compilacién y ejecucion de programas. Estos deben ser utilizados a través de la consola de comandos. Paquetes de clases del J2SE. Dentro del directorio de instalacién del JDK (figura 5), en la carpeta jre\/ib se encuentra el archivo rt.jar, donde estén contenidas todas las clases que componen el J2SE. Fig. 5. Directorio de instalacién del JDK y su contenido Configuracion de variables de entorno Antes de poder utilizar las herramientas del JDK para compilar y ejecutar programas, es necesario configurar las variables de entorno PATH y CLASSPATH. La configuracion de variables de entorno se puede hacer a través de la consola, el problema es que una vez que ésta se cierre, los valores establecidos en las variables se perderdn. Por ello, resulta mas cémodo y eficiente realizarlo a CAPITULO 1: INTRODUCCION A JAVA 35 faves del panel de control de Windows, aunque la forma de hacerlo depende Eeramente de la version de sistema operativo utilizado, En el caso de XP Professional, hacemos doble clic en el icono “sistema” ei panel de control, esto hard que se abra el cuadro de didlogo “propiedades del stema”, dentro del cual pulsaremos el botén “variables de entoro” que se =neuentra en la pestafia “opciones avanzadas” (figura 6). emer aroraerened aie // sown SE SS ee. | eieemeee =| teen. prmenen ss | aypeematnt Oman Bie RSE ee Fig. 6. Configuracién de variables de entoro en XP Una vez abierto el cuadro de didlogo “variables de entorno”, se puede elegir entre crear una variable de entorno para el usuario actual (variables de ssuario), 0 una variable para todos los usuarios (variables de sistema). El significado y utilidad de Jas variables que tenemos que configurar es el Siguiente: PATH. Esta variable debe contener la ruta del directorio en el que se encuentran las herramientas para compilacién y ejecucién de aplicaciones. Dichos programas se encuentran en el subdirectorio \bin del directorio de instalacién (en cl ejemplo C:\Archivos de programa\Java\jdk1.5.0_05\bin). Afiadiendo esta direccién al PATH (figura 7), es posible inyocar a los comandas del.JDK desde 36_PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO © RA-MA la consola de comandos, con independencia del directorio en el que esté situado el prompt. Fig. 7. _Inclusién de la direccién del JDK en la variable PATH ¢ CLASSPATH. Esta variable debe contener las direcciones de los directorios donde se encuentran Jas clases (.class) que van a ser utilizadas por las aplicaciones que vamos a desarrollar. Como minimo, debe indicarse la direccién “.”, la cual hace referencia al directorio actual (aquel desde el que se ejecutan los comandos del JDK). La ubicacién de las clases del J2SE se encuentra ya predeterminada, por lo que no es necesario indicarla en la variable. Para cualquier otro conjunto de clases, se deberd indicar en esta variable la direccidn del directorio base donde estan contenidos los paquetes con las clases a utilizar 0, en el caso de que el conjunto de clases con sus correspondientes paquetes estén comprimidos en un archivo .jar, debera especificarse la direccién absoluta del mismo. Al igual que con PATH, estas direcciones habra que afiadirlas a la lista de las ya existentes (figura 8), separdndolas unas de otras con (elie Nombre de variable: | CLASSPATH Yalor de variable: j ama \Altova\ymispy \KMiSpyinterface.jarfll (cea J _comcte_f Fig. 8. _Inclusién de direcciones de las clases en CLASSPATH. cms CAPITULO 1: INTRODUCCION A JAVA 3. Creacion del primer programa en Java Aungue atin carecemos del conocimiento del lenguaje, vamos a presentar = ocimer programa Java, consistente en la impresion de un mensaje de saludo en Se pantalla. Este programa nos va a servir para conocer el procedimiento general gee se debe seguir para crear, compilar y ejecutar programas con Java estandar. En el proximo capitulo, abordaremos el estudio de la sintaxis del lenguaje Sees y se analizara con detalle cl codigo de este ejemplo. De momento nos Geeiteremos a su codificacion, compilacién y ejecucién. = CODIFICACION = Utilizando cualquier editor de texto, por ejemplo el bloc de notas, seocedemos a escribir el cédigo mostrado en la figura 9. Hay que tener en cuenta see Java hace distincién entre mayusculas y minusculas, por lo que hay que codificarlo tal cual se muestra. public class Saludo { ' public static void main (String [ ] args } { } System.out.printin (“Bienvenido a Java"); Fig. 9. Programa para mostrar un texto de saludo Después, procedemos a guardar este programa en un archivo de texto Hamado Saludo.java (el nombre del archivo debe ser el mismo que se le ha dado a la clase). Si se esta utilizando el bloc de notas, antes de guardar el archivo se debe elegir “Todos los archivos” en la opcién “Tipo”, dentro del cuadro de didlogo “Guardar”, especificando en la opcién “Nombre” el nombre del archivo y su extensién (figura 10). 38_PROGRAMADOR JAVA 2 CERTIFICADO. RSO PRACTICO © RA-MA temmiliifseee Fig. 10. Guardar archivos de eédigo Java con el bloc de notas COMPILACION La compilacién de un archivo de cédigo fuente .java se realiza a través del comando javac.exe del JDK. Si se ha establecido correctamente la variable de entorno PATH, javac podra ser invocado desde el directorio en el que se encuentre el archivo java (figura 11). Tras ejecutar este comando, se generaran tantos archivos .class como clases existan en el codigo fuente, en este ejemplo se creara solamente el archivo Saludo.clas Sr j \C:\pruebasjava>javac Saludo. java | ic: \pruebasjava> Fig. 11. Compilacién de un archivo de cédigo fuente Java En caso de que existan errores sintacticos en el codigo fuente, el compilador nos habria informado de ello y, por supuesto, el .class no se generaria. CAPITULO |: INTRODUCCION A JAVA_39 Por ejemplo, si en el cédigo anterior cambiamos System por system, al intentar la compilacién obtendriamos un mensaje de error como el indicado en la figura 12. :\pruebasjava>javac Saludo, java saludo. java: 5: package systen does not exist | systen,cut.printin (“Bienvenido a Java"); 1 error : \pruebasjava>,, RRR Fig. 12. Error en la compilacién de una clase EJECUCION Para ejecutar el programa, utilizaremos el comando java.exe, seguido del sombre de la clase que contiene el método main(), en nuestro caso seré Saludo, que = is imica clase existente. Es necesario que la variable de entorno CLASSPATH =st= correctamente configurada e incluya el cardcter “.” (Directorio actual) en la Sse: de direcciones, lo que permitird invocar al comando java desde el directorio en =f que se encuentra el .class (figura 13). \pruebas java) java Salude envenido a Java :\pruebas java) Fig. 13. Ejecucién de la clase principal 40_PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO RA-MA La Hamada a java.exe insta a la maquina virtual a buscar en la clase indicada un método llamado main() y proceder a su ejecucién. Posteriormente trataremos con mis detalle este método. En caso de que java.cxe no encuentre la clase, bien porque la direccion del directorio actual (.) no figure en la variable CLASSPATH o bien porque el nombre de la clase sea incorrecto, se produciré una excepcién (error) de tipo NoClassDefFoundError al intentar ejecutar el comando java.exe (figura 14). \pruebas java) ia Sxception in thi Ide) Java. dans. va. lang, ClassLoader. def ineCiaes2\(Net ive Nethed) vs: lang, ClasgLoader. def ineCleaa(Clasal cater, fava:S82) Na. seu" ty, Secure stal ader. def inetlasslSccuretiessLoader. javait2 | Net - URL ClassLoader. def ineClass(URLClassLoeder, javez250) URE ClassLoader, eccess $1Oa(UR Clasal once, avast) UsiClessLoagerdi, runtiRUc lens oader jeve! 192) KecsesCont roller. dobravilegectiigt ive aE java.net UR Lines. geder. Finatlars (UR ClossLoede at Java. lang, ClassLoader, joad¢lage(¢l aes) encor. java: Fou * uy Hisseloeians Cleese ei ac, Bf suns lsesLgunehert pot aes onder loner lags Laurcha” lve: at Java. ang. €l asst oeder. jaadclars( Cl arsLosder. jpva2s8] | Seva: lang. €lasatoeder lease less nserselt Classe Sacer rave: 315) | | [s\orucbas ava) | Fig. 14. Error de ¢jecucién de la clase Si el problema no es la direccién de la clase, sino que el formato del método main() no es correcto, el Programa compilaré correctamente pero se producird una excepcién de tipo NoSuchMethodError (figura 15) al ejecutar el comando, Eonueas java) ava Saludo ‘ ‘ception in thread “main* java. lang, NoSuchMethodError: | a Fig. 15. Sil formato del método main() no es correcto la JVM no lo encuentra CAPITULO 1: INTRODUCCION A JAVA_41 EX gocedimiento que se acaba de explicar para compilar y ejecutar la clase 5 ef mismo que habré que aplicar para las distintas clases que vamos a = be largo de los proximos capitulos. DRNOS DE DESARROLLO PARA JAVA Guando se va a desarrollar una aplicacién que puede contar con un elevado de lineas de cédigo y va a estar constituida de varias clases, la utilizacion “Se bes berramientas del SDK para la compilacién y ejecucién de los programas Guede resultar engorrosa, ademas de dificultar la deteccién y solucién de errores, Gas Ge compilacién como de ejecucién. En esos casos resulta mucho mas practica la utilizacién de un entorno de |" @secollo integrado (IDE). Un IDE proporciona todos los elementos Geaspensables para la codificacién, compilacion, depuracién y ejecucién de ‘@eeezemas dentro de un entorno grafico amigable y facil de utilizar. Los IDE para Java utilizan intermamente las herramientas basicas del JDK = & realizacién de estas operaciones, sin embargo, el programador no tendré que Secer uso de la consola para ejecutar estos comandos, dado que el entorno le eSeceré una forma alternativa de utilizacién, basada en ments y barras de Geremicntas. La figura 16 muestra el aspecto de uno de estos entornos de Sessrrollo. se trata de NetBeans 5.5. Fig. 16. Aspecto de NetBeans 5.5 42_PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO @RA-MA La escritura de cédigo también resulta una tarea sencilla con un IDE. Estos suelen contar con un editor de cédigo que resalta las palabras reservadas del lenguaje para distinguirlas del resto del cédigo, algunos incluso permiten la auto escritura de instrucciones utilizando la técnica Intellisense, que consiste en mostrar la lista completa de métodos de un objeto segiin se escribe la referencia al mismo (figura 17). Fig. 17. Auto escritura de instrucciones con un IDE Existen en el mercado numerosos IDE para desarrollar aplicaciones Java. La figura 18 muestra una tabla en la que aparecen algunos de los mas utilizados en la actualidad. En ella se indica el nombre del producto, el fabricante y una direccién en la que se puede obtener informacién sobre las caracteristicas del producto, descarga de versiones de aprendizaje, etc. Todos ellos permiten la creacion de aplicaciones tanto J2SE como J2EE. ‘Sun Microsystem —_http/Awnw.netbeans.org/downloads/index him Borland ‘httipv/weew.bortand.comvus/products/joulder/index.htmt Oracie ntip/www.oracle.comvtechnology/products/jdevindex hirri Eclipse Foundation _http://www.ectinse.org/dawnloads/index php Fig. 18. Entomos de desarrollo para aplicaciones Java CAPITULO 1: INTRODUCCION A JAVA_ 43 La mecénica de utilizacién de estos programas es muy similar. Todos ellos <= besan en el concepto de proyecto como conjunto de clases que forman una @ehicacion, asi pues, el primer paso que habr4 que seguir para crear una aplicacién ‘see uno de estos entornos de desarrollo sera la creacion de un proyecto. A la hora de crear un proyecto, los IDE nos dan la posibilidad de elegir ese diferentes plantillas o tipos de proyecto, segiin la aplicacién que vamos a Seserollar (figura 19). Fis > New Project File -> New ——— ee = Fig. 19. Creacién de tipos de proyecto en NetReans y JBuilder CONCEPTOS BASICOS DE PROGRAMACION EN JAVA Una de las principales caracteristicas de Java, comentada anteriormente, es java nombre_clase arg! arg? arg3 Los datos Ilegaran al método main() en forma de un array de cadenas de caracteres. Por ejemplo, dada la siguiente clase: c class Ejemplo { public static void main (String System. out .printin(args[ System.out.printin(args[ c [ System. out .print1n (args System.out.printl Si se ejecuta utilizando la siguiente expresi6n en la linea de comandos: >java Ejemplo hola que tal se producira la siguiente salida por pantalla: >hola que tal estas CAPITULO 1: INTRODUCCION A JAVA_53 ONES DE AUTOEVALUACION w wn {Qué edicion Java habria de utilizar para crear un programa que es utilizado por un unico ordenador? Al intentar ejecutar este programa se produce un error (excepci6n). (Donde esta el fallo? public class Ejercicio public static void main (String args) ce System. out.println("hola"); } Si un método es estatico (elegir una respuesta): A. No puede crear objetos de otras clases en su interior. B. La llamada al método con cualquier objeto de la clase provocara el mismo resultado. C. No puede ser invocado utilizando la expresién: objeto.metodo() Indica cual de las siguientes afirmaciones sobre las clases Java es incorrecta: A. Una clase Java solamente permite crear un numero limitado de objetos de la misma. B. Encl interior de una clase puede haber tanto métodos estaticos como no estaticos. C. Los campos definidos en una clase pueden ser ptiblicos o privados. Escribe la cabecera de un método piublico, llamado impresi6n, que reciba como parametro una cadena de caracteres y que no devuelva ningun resultado. CAPITULO 2 SINTAXIS DEL LENGUAJE En la segunda parte del capitulo 1 hemos estado introduciendo el concepto & etsse. estudiando su definicién y la creacién de campos y métodos. Durante esa = aparecieron algunos elementos sintacticos que desarrollaremos aqui @epliamente. En este capitulo nos centraremos en lo que a sintaxis del lenguaje se s=Siere, dejando para mas adelante el estudio de las clases del Java estandar. Sin = igual que ef de ta derecha, el resultado es true Siel valor de los operandos es diferente, el resultado es true. Fig. 41. Operadores condicionales COMPARACION DE TIPOS BASICOS Los operadores de comparacién (<, >, <= y >= utilizarse para comparar enteros, puntos flotantes y caracteres. Unicamente podran Si estos operadores se utilizan con referencias a objetos (por ejemplo String), se produce un error de compilacién: String s="hola'; char c='k'; if(c<=20) //OK if(s>"adios") //Error de compilacién SRAMA CAPITULO 2: SINTAXIS DEL LENGUAJE_73 IGUALDAD DE OBJETOS Los operadores de igualdad “==” y desigualdad "!=" pueden utilizarse para eomparar cualquier tipo de dato compatible. Ahora bien, si lo utilizamos para comparar variables de tipo objeto demos recordar que lo que contienen estas variables son referencias a objetos, no Ses objetos en si, por tanto, estamos comparando referencias y no objetos. Esto implica que podemos tener dos variables referenciando a dos objetos Seuales y que la condicién de igualdad de las variables resulte falsa. En la figura 42 s¢ muestra un ejemplo de esto utilizando la clase String, en ella se aprecia que hay des objetos idénticos (mismo valor de texto), situados en zonas de memoria Gferentes, por lo que las referencias a los mismos seran también distintas. Para comprobar la igualdad de objetos, las clases proporcionan un método Wamado equals, en ci que cada clase implementa su propio criterio de igualdad. Por sento, si queremos saber si dos objetos de una determinada clase son iguales, se debe utilizar el método equals, no el operador de comparacion “==", el cual solamente daria un resultado verdadero si las dos variables apuntan al mismo ebjeto. En cl siguiente capitulo veremos la aplicacién de este método en algunas de iss clases basicas de Java. String vi = new String(*hola’); String v2 = new String(“hola”); | Memoria ya +} REED 0 | ” . v2 + Chola” > Las variables apuntan a objetos | idénticos pero el contenido de estas es diferente Fig. 42. Variables diferentes apuntando a abjetos iguales 74 PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO. Un Ultimo apunte sobre la utilizacion del operador “—” con referencias: solamente est permitida la comparacin de referencias del mismo tipo de objeto, si se comparan dos variables de tipos de objetos diferentes, se produciré un error de compilacién. El siguiente bloque de codigo no compilara: Integer i=new Integer (25); String s =new String (*hola” if(is=s){) //jError de compilacién al comparar //referencias de distinta clase! Légicos Operan con valores de tipo boolean, siendo el resultado también de tipo boolean. La tabla de la figura 43 muestra los tres operadores légicos de Java. Operador légico AND. El resultado seré true silos dos operandas Son true, en cualquier otro caso el resultado serd false Operador légico OR. El resuitado sera true si alguno de los operandos es true Operador légico NOT. Acttia sobre un Unico operando boolean, dando como resultado el valor contrario al que tenga el operando Fig. 43. Operadores lgicos Los operadores && y || funcionan en modo "cortocircuito", esto significa que si el primer operando determina el resultado de la operacion, el segundo operando no seré evaluado. Esto queda reflejado en el siguiente ejemplo: int p=4, £=2; \¢ L£((p>0) | | (++£>0)) { CAPITULO 2: SINTAXIS DEL LENGUAJE_75 ptt; } System.out.printin("p vale "+p); System.out.printin("£ vale "+£); Al ejecutarse este codigo se imprimira en pantalla lo siguiente: p vale 5 S vale 2 Jo que demuestra que la expresion incluida en el segundo operando de la operacién OR no llega a ejecutarse pues, al ser srue el primer operando (p>0), el resultado de la operaci6n sera directamente true. Operadores a nivel de bits Existe una "versién" de operadores légicos que no operan en modo cortocircuito. Se trata de los operadores légicos a nivel de bits, que, ademas de evaluar los dos operandos de la expresién, su principal caracteristica es que eperan a nivel de bits, pudiendo ser el tipo de los operandos tanto boolean como entero. En la tabla de la figura 44 tenemos los cuatro operadores a nivel de bits Fig. 45. Limpieza de objetos no referenciados Si un objeto va a dejar de ser utilizado en un programa, conviene eliminar las referencias al mismo para que sea marcado como “basura”. Esto se puede hacer asignando el valor null a la variable o variables que apuntan al objeto: Integer i = new Integer(30); //se crea el objeto i=null; //pérdida de referencia Aunque no asignemos explicitamente el valor mull a la variable que apunta al objeto, en el momento en que ésta salga de ambito, se perderé la referencia y de la misma forma que antes, el objeto seré marcado como “basura”. INSTRUCCIONES DE CONTROL Como cualquier otro lenguaje de programacién, Java dispone de un juego de instrucciones para controlar el flujo de ejecucién de un programa. Tenemos instrucciones alternativas y repetitivas, a continuacién estudiaremos cada una de ellas. CAPITULO 2: SINTAXIS DEL LENGUAJE_79 Instruccién if La instruccién if es una sentencia de tipo alfernativa simple que permite comprobar una condicién dentro un programa. En caso de que la condicién se cumpla se ejecutard un determinado conjunto de instrucciones, mientras que si no se cumple, se podré optar por ejecutar otro conjunto diferente de instrucciones 0 por no ejecutar ninguna. En la figura 46 se muestra ¢l formato de esta instruccién con un ejemplo de utilizacion. Formato: Ejempio: if(condicion) iffa>b) £ ees ‘System.out.printin(*El mayor es "+a); else sentencias System.out.printin(*El mayor es "+b); 3 Fig. 46. Formato y utilizacién de la instruccién if A la hora de utilizar esta instruccién hay que tener en cuenta lo siguiente: La condicién de comprobacién puede ser cualquier expresién cuyo resultado sea de tipo bolean (#we o false), en cualquier otro caso se producird un error de compilacién. El siguiente cddigo representa una utilizacién incorrecta de if? int a=5; if(a) //error de compilacién El bloque else es opcional. En este caso, si la condicién no se cumple el programa continuara su ejecucién en la siguiente linea después de la Ilave de cierre “}” del if, Cuando el bloque de sentencias, bien de if o bien de else, esta formado wnicamente por una instruccién, la utilizacion de las llaves delimitadoras es opcional. No obstante, para una mayor claridad en el cédigo, se recomierida su uso en cualquier caso. 80_PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO © RA-MA = Las instrucciones ifse pueden anidar. El siguiente programa utiliza una instruccién if para indicarnos si el numero almacenado en cierta variable es par o impar: public class CompruebaPar{ publ oid main (Ss ring variable con el impar") ; La instruccién switch Se trata de una instruccién de tipo altemativa multiple. Permite ejecutar diferentes bloques de instrucciones en funcidn del resultado de una expresién. La figura 47 muestra el formato de la instruccién y un ejemplo de utilizacion. Formato: Ejemplo: switch(expresion) { switch(a) it case valori: case 3: sentencias System.out.printin(“Estas cerca”); break; break; case valor2: case 5: sentencias System.out.printin(“Enhorabuena”); break; default: di sentencias System.out.printin(“Vas mal”); + + Fig. 47. Formato y ejemplo de utilizacién de Ia i in swith = CAPITULO 2: SINTAXIS DEL LENGUAJE_81 En caso de que el resultado de la expresin coincida con el valor Gepessentado por valor], se ejecutaran las sentencias definidas en este bloque, si no “gemmcidde se comparar4 con valor2, y asi sucesivamente. Si el resultado no coincide ‘See ninguno de los valores indicados en los case, se ejecutara el bloque de @eecciones indicado en default. Sobre el uso de la instruccién switch hay que tener en cuenta lo siguiente: Los tinicos valores que puede evaluar switch son nimeros enteros de tipo int. Esto incluye, ademas de int, a aquellos que puedan ser promocionados a dicho tipo (byte, char y short). Un switch puede contener cualquier niimero de case, aunque no puede haber dos case con el mismo valor. La sentencia break es opcional y se emplea para provocar la finalizacion del switch al terminar la ejecucién de un case. En caso de que un determinado case no incluya esta instruccién y se produzca la gjecucién de su bloque de sentencias, al salir de dicho bloque, el programa continuaré con la ejecucién del siguiente case, independientemente de que el resultado de la expresién coincida 0 no con el valor indicado en el mismo. Por ejemplo, el siguiente cédigo: int h=5; switch (h*2) { case 10: System.out.printin("El resultado es 10"); case 20: system.out. tln("El tamafio es demasiado alto"); break; default: System.out.print1n("El resultado no es correcto"); } imprimiré en pantalla: El resultado es 10 El tamatio es demasiado alto El bloque dafauli se ejecutard si el resultado de la expresiémno coincide con ningun case. Su uso es opgiorial. PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO. @RA-MA La instrucci6n for La instruccién repetitiva for permite ejecutar un conjunto de instrucciones un numero determinado de veces. Su formato y ejemplo de utilizacién se muestran en la figura 48 Formato: ondicion;incremento) sentencias Ejempio: for(int i=1;1<=10;i++) { /{Muestra los numeros del 1 al 10 System.out.printin("El ntimero es “+i); i} Fig. 48, Utilizacién de la instruccién for La ejecucion del bucle for comienza con la instruccién de inicializacion, que, como su nombre indica, suele realizar la inicializacién de una variable de control, incluyendo su declaracién. A continuacién, se comprueba la condicién, cuyo resultado debe ser siempre de tipo bolean; en caso de que el resultado sea true, se ejecutaran las instrucciones delimitadas por el bloque de llaves {}, después se ejecutard la instruccién de incremento y volverd a comprobarse la condicién. En cl momento en que la condicién sea false, las instrucciones del bloque no se ejecutaran, continuando el programa en la siguiente linea al bloque de instrucciones. Sobre la utilizacién de Ja instruccién for hay que tener en cuenta lo siguiente: Las instrucciones de control del bucle for (inicializacién, condicién e incremento) son opcionales. En cualquier caso, el delimitador de instrucciones “;” siempre debe estar presente. Por ejemplo, si se omiten las instrucciones de comparacion ¢ incremento, la cabecera del for quedaria: for(int i=0;;) Sj se declara una variable en la instruccién de inicializacién, ésta sera accesible tnicamente desde el interior del for. CAPITULO 2: SINTAXIS DEL LENGUAJE 83 « Al igual que sucede con if, las Ilaves delimitadoras de bloque solamente son obligatorias si el for esta compuesto por mas de una instruccién. El siguiente programa utiliza un bucle for para realizar el calculo del de un nimero almacenado en una variable: public class Factorial{ public static void main (String [] args) { long p //vaxiable con el ntimero a calcular long r=1; //variable que almacena el resultado for(int i=l;i<=p;it+){ rte } System.outiprintin("El factorial de "+p + "es "+r); instrucci6n while Permite ejecutar un bloque de instruceiones mientras se cumpla una inada condicién dentro del programa. Los dos posibles formatos que admite Sstruccion y un ejemplo de utilizacién se muestran en la figura 49. En ambos casos, el bloque de instrucciones se ejecuta mientras la se cumple. En el segundo formato se ejecutan las instrucciones y luego ‘gemprueba la condicién, lo que garantiza que el bloque de instrucciones se por lo menos una vez. : Como en el caso de la instruccién for, la utilizacién de llaves para delimitar ‘Pogue de instrucciones sdlo es obligatoria si éste esta formado por mas de una i6n. 84_ PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO © RA-MA Formatos: c sentencias . sentencias | }while(condicion); Ejemplio: int a=10; while(a>0) //Muestra los numeros del 10 al 1 System.out.printin(“el numero es “+a); + Fig. 49. Instruccién whife y formato de utilizacion El siguiente programa utiliza un while para calcular la suma de todos los numeros enteros entre dos dados. En el momento en que la suma parcial llegue a alcanzar o superar el valor 1000 se dejara de realizar la operacién: public class Sumador{ public static void main (String [] args) { int ni = int n2 = 15; / int res = nl; //variable que almacena el //némero mds pequefio vimero mayor //resultado while(res<1000 && nimayor) { mayor=nums [il]; } if (nums [i] may } return may; calculoMenor(int numeros[]) { men=numeros [0]; ; ienumeros. length if (nums [i]may) ( may=n; + return may; } static int calculoMenor(int numeros[]) { int men=numeros [0]; for(int n:numeros) { if (n(b-c)) C. if{(a+b)==0) Indica cual sera el contenido de las variables k y v al finalizar la ejecucién del siguiente bloque de instrucciones: int 5 int v=2; if(k>0 || (++v: for (int k++; Una de las siguientes formas de crear arrays es incorrecta. Indica cual: A. int p [] =new int[5]; B. int []n= {5,3, 9, 10}; C. int [10] v =new int, El siguiente bloque de instrucciones contiene un error de compilacion. Indica cual es: b=(byte)p; System. out.println(b) ; } Escribe un método que reciba como parametro dos nimeros enteros y muestre en pantalla todos los nimeros pares comprendidos entre ellos (incluidos ellos mismos, si son pares). ©RA-MA CAPITULO 2: SINTAXIS DEL LENGUAJE_105 10. Dado el siguiente codigo: Object ob = new 0 Object cn = ob; ob = null; cn = new Object (); en = null; En qué linea sera elegido para la recoleccién el objeto creado en la linea 1? LISTADO DE LAS PRACTICAS PRACTICA 2.1. HREEREERVersign [FERRER EERE REEF public class SumaPares { public sta void main(String[] args) { //némeros cualesquiera int ni=7, 12=13; //variable que acumula la suma int suma=0; //variables que almacenaraén el mayor y el menor de //los nimeros int mayor,menor; //antes de proceder a la suma es necesario /sidgentificar mimero de inicio de la suma y //de finalizacién de la misma if (nl>n2){ mayo. 1; menor=n2; } else{ mayor=n2; menor=n1; 106 PROGRAMADOR JAVA 2 CERTIFICADO. CURSO PRACTICO //realiza el calculo de la suma for(int i=menor;i<=mayor; i++) { //si el numero es par se suma if(it Mt suma += i; } System.out.printin("La suma es "+suma); //con los /fntmeros elegidos, el resultado sera 30 HERES EE Cr gi Gy DEERE RERREKA AREER E public class SumaPares2 { public static void main(String[] args) { //nimeros cualesquiera int nl=7, n2=13; //imvoca al método sumatorio para calcular la suma int suma=sumatorio(ni,n2); System.out.printin("La suma es "+suma); //método que realiza la suma public static int sumatorio(int sl, int s2){ //variables que almacenardén el mayor y el menor de // los numeros int mayor,menor; //variable local de sumas parciales int suma=0; //identifica los extremos if(si>s2){¢ mayor=s1; menor=s2; } else{ mayor=s2; menor=s1; CAPITULO 2: SINTAXIS DEL LENGUATE_107 //realiza el célculo de la suma for(int jemenor;i<=mayor;it++) { //si el nimero es par se suma if(is2==0) { suma += ii } //aevuelve la variable que contiene el resultado //final de la suma return suma; PRACTICA 2.2. public class ordenacion { public static void main(String[] args) { //array de enteros cualesquiere int [] nums = (2, 34, 19, 5, 7, 28, 55. 3, 45, 21}; //\lama al método que ordena el array ordenar (nums) ; /f/llama al método que muestra el contenido //éel array mostrar (nums) ; //el método no necesita Gevolver una referencia al array ordenado, dado que ambas referencias, //num y m, apunten al mismo objeto array public static void ordenar (int {1 m){ //variable auxiliar utilizada para el intercambio //ae datos en el array int aux; j/vecorre las posiciones del array for (int i=O0;icm.length;i++){ //el segundo for se utiliza para comparar el //valor de la posicioén actual con las siguientes 108 PROGRAMADOR JAVA 2 CERTIFICADO, CURSO PRACTICO for(int j=i+l;j

También podría gustarte