Download as pdf
Download as pdf
You are on page 1of 212
» Recursosinformaticos JAVA & Los fundamentos del lenguaje Java (con ejercicios practicos corregidos) Thierry GROUSSARD JAVA8 iamentos del lenguaje Java (con ejercicios practi orregidos) Presentacion 4. Historia " 1.4 & Por qué Java? "1 1.2 Objetivos del disefio de Java 12 1.3 Auge de Java 13 2. Caracteristicas de Java 14 2.1 El lenguaje de programacién Java 14 2.1.1 Sencillo 15 2.1.2 Orientado a objetos 16 2.1.3 Distribuido 16 2.1.4 Interpretado 17 2.1.5 Robusto 17 2.1.6 Securizado 17 2.1.7 Independiente de las arquitecturas 18 2.1.8 Portable 19 2.1.9 Eficaz 19 2.1.10 Multitarea 19 2.1.11 Dindmico 19 2.2 La plataforma Java 20 2.2.4 La maquina virtual Java (JVM) 24 2.2.2 La API Java 22 2.2.3 Las herramientas de despliegue de las aplicaciones 25 2.2.4 Las herramientas de ayuda al desarrollo 25 2.3 Ciclo de disefio de un programa Java 26 3. Instalacién del SDK versién Win32 para el entorno Windows 27 3.1 Descarga 27 3.2 Instalacién 28 3.3 Configuracién 29 3.4 Prueba de la configuracién del SDK 30 3.5 Instalacién de la documentacién del SDK y de las API estandar 3t woww.ediciones-eni.com © Ediciones ENI 19 jamentos del lenguaje Java (con ejercicios practic 4, Las diferentes etapas de creacién de un programa Java 4.1 Creacién de los archivos fuente 4.2 Compilar un archivo fuente 4.3 Ejecutar una aplicacién 5, Nuestra primera aplicacién Java 5.1 Esqueleto de una aplicacién 5.2 Argumentos en linea de comando 5.2.1 Principios y utilizacién 5.2.2 Paso de argumentos a una aplicacién Java en tiempo de ejecucién Fundamentos del lenguaje 1. Las variables, constantes y enumeraciones 1.1 Las variables 1.1.1 Nombre de las variables 1.1.2 Tipo de variables 1.1.3 Valores por defecto 1.1.4 Valores literales 1.1.5 Conversion de tipos 1.1.6 Declaracién de las variables 1.1.7 Aleance de las variables 1.1.8 Nivel de acceso de las variables 1.1.9 Ciclo de vida de las variables 1.2 Las constantes 1.3 Las enumeraciones 1.4 Los arrays 1.5 Las cadenas de caracteres 1.6 Fecha y hora 2. Los operadores 2.1 Los operadores unarios 2.2 Los operadores de asignacién woww.ediciones-eni.com © Ediciones ENI JAVA8 $ corregidos) 33 33 34 36 37 37 39 39 40 43 43 44 44 48 48 49 53 54 54 55 55 56 59 64 7 74 75 76 JAVA8 $ corregidos) jamentos del lenguaje Java (con ejercicios practic 2.3 Los operadores aritméticos 76 2.4 Los operadores bit a bit 7 2.5 Los operadores de comparacion 7 2.6 El operador de concatenacién 78 2.7 Los operadores légicos 79 2.8 Orden de evaluacién de los operadores 80 3. Las estructuras de control 81 3.1 Estructuras de decision 81 3.1.1 Estructura if 81 3.1.2 Estructura switch 83 3.2 Las estructuras de bucle 85 3.2.1 Estructura while 85 3.2.2 Estructura do ... while 86 3.2.3 Estructura for 86 3.2.4 Interrupcién de una estructura de bucle 89 4. Ejercicios 92 5. Correcciones, 93 Programacién orientada a objetos 1. Introduccion 101 2. Puesta en practica con Java 104 2.1 Creacién de una clase 105 2.1.4 Declaracién de la clase 105 2.1.2 Creacién de los campos 106 2.1.3 Creacién de métodos 107 2.1.4 Los métodos accesores 112 2.1.5 Constructores y destructores 113 2.1.6 Campos y métodos estaticos 114 woww.ediciones-eni.com © Ediciones ENI 3/9 JAVA8 lamentos del lenguaje Java (con ejercicios practi orregidos) 2.1.7 Las anotaciones 116 2.2 Utilizacién de una clase 119 2.2.4 Creacién de una instancia 120 2.2.2 Inicializacién de una instancia 120 2.2.3 Destruccién de una instancia 123 2.3 Herencia 127 2.3.1 this y super 129 2.3.2 Clases abstractas 134 2.3.3 Clases finales 135 2.3.4 Conversién de tipo 136 2.3.5 La clase Object 143 24 Interfaces 149 2.4.1 Creacién de una interfaz 150 2.4.2 Utilizacién de una interfaz 151 2.4.3 Métodos por defecto 155 2.5 Clases anidadas 160 2.5.1 Clases anidadas estaticas 160 2.5.2 Clases internas 161 2.5.3 Clases anénimas 163 2.6 Expresién lambda 168 2.7 Referencia de método 175 2.8 Los genéricos 178 2.8.1 Clases genéricas 179 2.8.2 Métodos genéricos 186 2.8.3 Los genéricos y la herencia 187 2.8.4 Limitacién de los genéricos 193 2.9 Los paquetes 195 2.9.1 Creacién de un paquete 196 2.9.2 Utlizacién e importacién de un paquete 198 3. Gestion de las excepciones 200 3.1 Los errores de sint 200 3.2 Los errores de ejecucién 202 3.3 Les errores de légica 202 3.3.1 Las excepciones 203 3.3.2 Recuperacién de excepciones 204 woww.ediciones-eni.com © Ediciones ENI JAVA8 $ corregidos) 5 fundamentos del lenguaje Java (con ejercicios practic 3.3.3 Excepciones asociadas a recursos 208 3.3.4 Creacién y activacién de excepciones 212 4, Las colecciones 214 4.1 La clase ArrayList 215 4.2 La clase HashSet 219 4.3 La clase LinkedList 228 4.4 Streams y pipelines 229 5. Ejercicios 232 6. Correcciones, 233 Aplicaciones graficas 4. Introduccion 255 1.1 Las bibliotecas graficas 256 1.1.1 La biblioteca AWT 256 1.1.2 La biblioteca Swing 256 1.2 Construccién de la interfaz gréfica de una aplicacién 257 258 2.1 Las ventanas 258 2.2 La gestién de los eventos 263 2.3 Aspecto de los componentes 293 2.4 El posicionamiento de los componentes 294 2.4.1 FlowLayout 295 2.4.2 BorderLayout 297 2.4.3 GridLayout 303 2.4.4 BoxLayout 305 2.4.5 GridBagLayout 308 2.4.6 Sin renderizador 313 2.5 Los componentes graficos 316 woww.ediciones-eni.com © Ediciones ENI 2.5.1 La clase JComponent 2.8.2 Visualizacién de la informacién 2.5.3 Los componentes de edicién de texto 2.5.4 Los componentes de activacién de acciones 2.5.5 Los componentes de seleccién 2.6 Los cuadros de didlogo 2.6.1 El cuadro para introducir informacién 2.6.2 El cuadro de mensaje 2.6.3 El cuadro de confirmacién Los applets 1. Principio de funcionamiento 2. Creacion de un applet 2.1 Ciclo de vida de un applet 2.1.1 Métodos relacionados con el ciclo de vida del applet 2.1.2 Métodos de gestion del aspecto grafico del applet 2.2 Construir la interfaz usuario de un applet 2.2.1 Creacién de una fuente de caracteres 2.2.2 Obtener las dimensiones del applet 2.2.3 Dibujar los caracteres 2.2.4 Determinar las dimensiones de una cadena 2.3 Las imagenes en los applets 2.3.1 Carga de una imagen 2.3.2 Tratamiento de la imagen 2.3.3 Trazado de la imagen 2.4 Los hilos en los applets 2.4.1 Creacién de un nuevo hilo 2.4.2 Definir el tratamiento a efectuar 2.4.3 Lanzar y parar un hilo 2.5 Los sonidos en los applets 3. Despliegue de un applet woww.ediciones-eni.com © Ediciones ENI amentos del lenguaje Java (con ejercicios practi JAVA8 orregidos) 317 320 325 331 338 346 346 349 350 353 354 355 355 356 359 360 360 361 361 366 367 369 369 372 374 374 377 379 381 JAVA8 orregidos) amentos del lenguaje Java (con ejercicios practi 3.1 La etiqueta 381 n de un applet 383 i los parémetros 383 3.2.2 Recuperacién de los pardmetros en el applet 384 3.3 Seguridad en un applet 385 3.4 Comunicacién entre applets 386 3.5 Interaccién con el navegador y el sistema 388 3.5.1 Visualizacién en la consola 388 3.5.2 Utiizacién de la barra de estado del navegador 390 3.5.3 Visualizacién de una pagina htm! 391 3.5.4 Obtener ciertas propiedades del sistema 392 Acceso a las bases de datos 1. Principios del funcionamiento de una base de datos 395 1.1 Terminologia 395 1.2 El lenguaje SQL 396 1.2.1 Busqueda de informacién 397 1.2.2 Insercién de datos 398 1.2.3 Actualizacién de datos 399 1.2.4 Supresi6n de datos 400 2, Acceso a una base de datos desde Java 400 2.4 Presentacién de jdbc 402 2.2 Carga del driver 403 2.3 Establecer y manipular la conexién 404 2.3.1 Establecer la conexién 404 2.3.2 Manipular la conexién 405 2.4 Ejecucién de instrucciones SQL 410 2.4.1 Ejecucién de instrucciones basicas con el objeto Statement 410 2.4.2 Ejecucién de instrucciones configuradas con el objeto PreparedStatement 418 2.4.3 Ejecucién de procedimientos almacenados con el objeto CallableStatement 422 2.5 Utilizacién de los juegos de registros con la interfaz ResultSet 425 2.5.1 Posicionamiento en un ResultSet 427 woww.ediciones-eni.com Ediciones ENI 7/9 jamentos 2.5.2 Lectura de los datos en un ResultSet 2.5.3 Modificacién de los datos en un ResultSet 2.5.4 Supresién de datos en un ResultSet 2.8.5 Insercién de datos en un ResultSet 2.6 Gestién de las transacciones 2.6.1 Puesta en marcha de las transacciones 2.6.2 Puntos de salvaguarda 2.6.3 Niveles de aislamiento Despliegue de aplicaciones 4. Archivos Java 1.1 Presentacién 1.2 Manipulacién de un archivo 1.2.1 Creacién de un archivo 1.2.2 Visualizacién del contenido 1.2.3 Extracci6n 1.2.4 Actualizacién 1.2.5 Ejecucié 1.3 El manifest 1.3.1 Presentacién 1.3.2 Creacién 1.4 Empaquetar y firmar un archivo 1.4.1 Empaquetado 1.4.2 Firma 2. Java Web Start 2.4 Presentacién 2.2 Ejecucién de una aplicacién 2.2.1 Desde un navegador 2.2.2 Desde la caché local 2.3 Despliegue de una aplicacién 2.3.1 Configuracién del servidor Web 2.3.2 Creacién del archivo JNLP woww.ediciones-eni.com © Ediciones ENI del lenguaje Java (con ejercicios practic JAVA8 $ corregidos) 429 432 435 437 438 440 441 441 443 443 444 444 445 446 446 447 447 447 448 449 449 453 458 458 458 459 459 462 462 465 JAVA indice Los fundamentos del lenguaje Java (con ejercicios practicos corregidos) 2.3.3 Desplegar la aplicacién en el servidor 468 2.3.4 Creacién de la pagina Web de 471 473 www.ediciones-eni.com © Ediciones ENI 919 4162018 NI Training - Libro online JAVA 8 Los fundamentos del lenguaje Java (con ejercicios practicos corregidos) Este libro se dirige a todos aquellos informaticos que quieran desarrollar en Java. Tanto si es principiante ‘como si ya tiene experiencia con otro lenguaje, el lector encontrard en este libro todos los fundamentos necesarios para familiarizarse répidamente con uno de los lenguajes més utilizados en el mundo. Los tres primeros capitulos presentan los fundamentos del lenguaje, de la programacién orientada a objetos y las novedades de la versién 8. El lector descubriré, en particular, las nuevas API de gestion de datos, as expresiones Lambda y su aplicacién en la gestién de colecciones. Los siguientes capitulos abordan el desarrollo de aplicaciones graficas con la biblioteca Swing y la creacién de applets que Permiten enriquecer facilmente el contenido de las paginas Web. Se presenta también el desarrollo de ‘aplicaciones cliente/servidor utilizando la API JDBC que asegura el acceso a las bases de datos. Siendo el despliegue una etapa importante para el éxito de una aplicacién, el ditimo capitulo. presenta la distribucién de una aplicacién mediante la solucién cidsica de los ficheros de archivos o el uso més flexible de la tecnologia Java Web Start. Numerosos ejercicios con sus correcciones le permitiran validar sus conocimientos y poner en practica, de inmediato, las nociones aprendidas. El libro no necesita herramientas de desarrollo especificas. Basta con un editor de texto y las herramientas gratuitas disponibles en el sitio de Oracle para llevar a cabo un buen aprendizaje de este lenguaje apasionante y en pleno auge, Existen elementos complementarios para su descarga en esta pagina. Los capitulos del libro: Prélogo - Presentacién - Fundamentos del lenguaje - Programacién orientada a objetos - Aplicaciones graficas - Los applets - Acceso a las bases de datos - Despliegue de aplicaciones Thierry GROUSSARD Al cabo de més de 10 afios como analista y desarrollador, Thierry GROUSSARD se orienté a Ia formacién, fen particular en el campo del desarrollo de software. Sus conocimientos avanzados de las necesidades de la empresa y sus cualidades pedagégicas hacen que sus libros sean especialmente adecuados para el aprendizaje y puesta en préctica del desarrollo de aplicaciones en Java. https:siwmweni-training.comclient_netimediabook.aspx?idR=111684 wm 4162018 NI Training - Libro online Introduccién cuando los ingeniros de Sun Microsystems desarolaon el lenguaje Java en 1994, no imaginaron que veinteafos mis tarde sera uno de los lenguajes de programaciin més usados del mundo. si blen en su origen fue concebido para desarrolar aplcacones destinadas a sistemas fembebides, dia de hoy esté presente en todos los dominio de la Informatica, Se revela como un de los lengusjes mae demandados en la ‘mayoria de ofertas de empieo en el campo de! desarolio de software. Se trata de un lenguaje cuya sintans es simple pero rigurosa. Permite por tanto adauii rpidamente las buenas précticas desde el comienz0. Sin dda por este motivo es de Tenguaje mas utiizado en la ensefanza, objetivo de este bro es permtire descubri os fundamentos de este lenguaje para permite a continuacién evolucionar hacia el desarolo de aplicaciones importantes ulizando numerosas tecologis csponibles con este lenguaje (JE, IME... La Iectura de este libro no require conocimientos preves en desarrollo. Los capitulos Pesentacién y Fundamentos del lenguafe le presenta las oclonesbisicas de cualquier lenguaje Informatica: las variables, los operadores, las canciones, los buces. ‘Tas haber aprendiéo estos fundamentes, el capitulo Programacén orientada a objetos le presenta los princplos y la implementacién de la programacién orentada a objetos (POO). Las nociones expuestas en este capitulo son eaptales para poder abordar a continuacn el diseio de apieaciones gr dias Los capitulos Aplicaciones greasy Los applets le periten estudiar el disefo de aplicaciones gras auténomas con la biblioteca SWING, y el desarrollo de aplicaciones que se sjecatan en el contesto de un navegador web con la tecnologia e applets ‘sus futures aplicaciones requercin sin dude proceser informaciénalajada en una base de datos. El capitulo Acceso a la bases de datos, dedicado 2 rte tema, le proporcenaré una preciosa ayuda para vealar esta farea correctamente, Se famllarizaré con el usa de JDBC que es la tecnologia Utlizada por Java para la gestion de acceso a una base de datos, 1 desplegue es en efecto la time etapa en la construccén de una aplicacén, pero es un paso que no debe obviarse. El citimo capitulo de este bro estd devicado 9 dos tenologias de despliegue disponibles, fo que le permitrd simpliicar Ia instalacién de sus aplicaciones en los puestos Este libro no tiene la vocaciin de sustiuir a a documentacién proporionada por Oracle que debe sequirsiendo su referencia ala hora de obtener Informacén tal com la lista de métodos 0 propledades presentes en una case. https:jlwmweni-training.comclient_netimediabook aspx?idR=111686 wm 4162018 NI Training - Libro online 1. €Por qué Java? Billy, ingeniero de Sun Microsystems, y su equipo de invesigadorestrabajaban en el proyecto "Green" que conssia en desarolar aplicaciones festinadas 2 una ampha vada de pertércosy sistemas embebidos (en particular teléfonas méuilesytelevsores iteractvos), Convencidos de las ventajas de la programacén erentada 3 objetos (POO), optaron por desaralar en C++ que ya habia demestrado sus capacidades, Pero, para este tipo de proyecto, C++ mast pronto sus lagunas y sus limites. En con las cferentes arguitectures fisicas (procesadores, tamafo de memoria) y los sistemas operatives encontrados, adaptacion dela intertaz grea de as aplicaciones y dela interconexén are ls diferentes dipostivos fect, aparecieron numerosos problemas de incompatibiidad como también 9 ive dei Debido alas difcultades encontradas con C++, era prefenble crear un nuevo lenguaje basado en una nueva pltaforma de desarole. Dos desarroladores de Sun, James Gosing y Patrick Naughton, se pusteron manos la obra La craacién de este lenguojey plataforma se ispird en las intersantes funclonaidades propuestas por otros lenguas tales como C++, Eifel, ‘Smalfak, Objective C, Cedar/ Mesa, Ada, Perl I resuitado es una plataforma y un lenguaje idéneos par el desarolio de aplicaciones seguras, distrbuidasy portables en numerosos periféricos y sstemas embebidos interconectados en red, y tambien en Internet (clientes ligeros), ai como fen estaciones de trabajo (lentes pesades). LUamado orginalmente C+-+-- (Cr+ sin sus defectos), mis tarde OAK, (un nombre ya utiizado en jnformstica), lo bautizaron finamente Java, palabra de argot que significa café, dbido a ls canidades de café tomadas por los programadoresy, en particular, por los diseRadores. ¥ asi, en {en nacé el lenguafe ava 2. Objetivos del disefio de Java En base a las necesidades expresadas, se necestaba un lenguafe yuna plataforma sencilosy efcaces, destinados al desarrollo y al despiegue de aplicaciones securizadas, en sistemas heterogéneos en un entomo druid, con un censume de recursos minimo y que funcionara en cualguier Plataforma Fsicay de software dis de Java aports una respuesta eica a esas necesdades: + Lenguaje de sintanls senci, orientado a objetos e interpretado, que permite optimiza el tempo y el ciclo de desaroto (complain y jecucia). + Las aplicaciones son portables sin modifiacén alguna en numerosaspataformas fscas y sistemas operatives. + Las aplicaciones son resistentes, porque ef motor de ejecucén de Java se encarga dela gestién de la memoria (Java Runtime Environment), y l= me fi ese programas sin fallos en comparacin a C++, debido aun mecanismo de gestién de errores mds evolucionada y esti + Las aplicaciones y, en particular, la aplicaciones gréticas son efcaces debido ala puesta en marcha y a la asuncién del funcionaminto de varios procesosigeros (thread y multithreading), + funcionamiento de las apicacones ests securizad, en particular en el caso de os applets de Java en los cuales ol motor de ejeccin de Java se encarga de qu el applet no realce ninguna manipulaci u operacén pelloresa 3. Auge de Java A esar de a creaciin de Java, los deserolos del proyecto "Green" no tuvieron las repercusiones comerciales esperadas y el proyecto fue apartaco. En aqueliaépoca, la emergencia de Internet de las aruitecturas cliente/servidorheterogéneas y dstibuidas aportarencierta complejiad al desarrollo ge las apieciones. Las caracteristicas de Java resultan por lo tanto muy nteresantes para este tipo de aplcacones. cn fect: + puesto que un programa va es poco voluminoso, su descarga desde Intemetrequlere poco temps. + un programa Java es portable se puede utilizar sin modiicaciones en cvlquierplataforma (Windows, Macintosh, Unix, Unix.) Java encuentra asi un nuevo campo de aplcacén en ta red glabal Intemet, asi como en las redes locales en und arqutectra intranet ¥ clente/servdor distriuida. ara presenta al mundo las posiblldades de Java, dos programadores de Sun, Patrick Naughton y Jonathan Peayne crearon y presentaron en mayo de 1995 en la feria Sunord un navegador Web programad en su totaidad con Java, lamado Hotava, que permite ejecitar programas Java, lamados applets, en paginas HTML. En agosto de 1995 la empresa Netscape, muy interesada por ls posibildades de Java, fm un acuerdo con Sun, lo cual le permit nterar Java e imolementar appets en su navegador Web (Netscape Navigator). En enero de 1996, la versién 2 de Netscape llega alos mercades integrando la Plataforma Java, Por lo tant, fue internet qulen aupé 2 Java. Respaldado por este éxito, Sun decide, a partir de noviembre de 1995, promover Java entre los pragramadores, poniendo a su disposicién en su sia Web una patatorma de desarrollo an una versGn eta llamada JOK 1.0 (ava Development Ki), Poco después, Sun crea una filal Hamada JavaSoRt(hitou/iava.suncom), eyo objetivo es continuar el desarrollo de este lenguaje de programed, Desde entonces, Java no ha dejado de evolucionar muy regularmente para ofrecer un lenguaje y una pataforma povalentes y sofsticados. Grandes empresas como Boriand/Inprise, IBM, Oracle, por car algunas, apestaron muy fuerte por Ja¥2 ‘A principios de 2009, 1M realiza una tentative de compra de Sun. Al no alcanzarse un acuerdo acerca del preci dela transaccin, el proyecto de compra fraasa, Poco tiempo después Oracle reaiza 2 su vez una propuesta de compra que esta vez si se cncreta, https:slwmweni-training.comclient_netimediabook aspx?idR=111688 we 4162018 NI Training - Libro online ‘dia de hoy, Java es el principal lenguale ovientado a objetos que se ensefa en las escuela y universidades debido a su rigor y su rqueza funcions. 1a comunidad de desaroladores en Java esti compuesta por varios milones de personas y es Superior en nlmero a la comunidad de desarrllagores en C+ (a pesar dese, eat ute, toda une referenla, https:jlwmweni-training.comvclient_netimediabook aspx?idR=111688 22 4162018 NI Training - Libro online Caracteristicas de Java Java es la ver un lenguaje yuna pataforma de desarrollo Esta seccén le presente ambos aspectos. Le presentaré las carateistcas de Java y le ayudar a evaluar i importancia del interés creado en torno @ 1. El lenguaje de programacién Java Sun caracteriza a Java come un lenguaje sencilo,erentado a objets, dstribudo,interpretado, robust, securzado, independiente de las arquitecturas, portable, efeaz, muthio y dnsmien Dichas caracteristicas son el resultado del manual escrito en mayo de 1996 por James Gosling y Henry Me Giton y disponible en la direccibn siguiente: hia: //m rac. com /tachstwork/java/lanoany= 140151 hil ‘Vamos a explicar detallamente cada una de estas caracerstas. ‘a. Sencillo La sintaxis de Java es similar 2 Ia de los lenguajes C y C++, pero evita caracteristicas semsnticas que los wuelven compleos, confuses poco segures +n Java sélo existen tres pos primitives: los numerics (enterosy reales), el tipo carter y el tipo beoleano, Todos los tpos ruméricos estin frmados +n ava, las tablasy las cadenas de carateres son objets, lo que facta su creacény su manipulacién, + En Java, el programador no ene que preocuparse de la gestiin dela memoria, Un sistema lamado “el racolector de basura’ (garbage ‘colector) se encarga de asignar la memoria necesara ala hora de crear objetos y de ibereria cusndo estos ya no se referencian en el Alominio de! programa (cuando ninguna variable apunta a objeto), + fn Java, no exstenpreprocesadores ni archivos de encabezamiento, Las instrociones define de C se sustituyen por constantes en Java y las Instrueciones typedef ae Cl hacen por clases. + En Cy C++, se definen estrcturas y unlones para representa tpos de datos complejos. En Java, se crean instances de clases para representartpos de datos compleos. + En Cee, una dase puede heredar de otras clases, o que puede generar problemas de ambigedad. Con el fn de evitar estos problema tava slo autora la herenca simple pero aporta un macaniamo Ge simulacén de herencia multiple mediante la inplementacén de una varias interfaces. +n Java no existe la famosa instrucn goto, simplemente porque porta una compleidad a a lecture de los programas y porque a menudo S58 puede prescindr de esta instruccén eserbiendo un cédigo més impie. Ademas, en C y C++ se sueleutlizar et got para salir de buces fanicados. En Java, se uthzardn las Insruccones beesk y cant ine, que permitn slr de uno o varios niveles de anigamiento, +n Java, noes posible sobvecargar los operadores, para evitar problemas de Incomprensién del programa. Se preferré crear cases con métedos y variables de instanca, + para terminar, en Java, no hay puntros sino referencias a objetos o celdas de una tabla (referenciadas por su indice), simplemente porave la gestén de punteros es fuente de muchos errors en los programas Cy C+. b. Orlentado a objetos Salvo ls tpes de datos primitives, todo en Java es un objeto. Y ademés, Java se ha proviste de clases incrporadas que encapsuan ls tipos or lo tant, lava es un lenguaje de programacién vientado a objetesy disehado segin el modelo de ovos lenguajes (C++, Eel, Smallal, Objective C, Cedar/Mesa, Ada, Pet), per sn sus defects. Las ventaas de la prosramacién oentada 2 objetos son: un mejor dominio de Ia complead (avidr un problems complejo en una serie de Pequeis problemas), una reutlzacén mas sencila Una mayor facldad de cvreccigny de evolucién. Java esténdar ests dotado de un conjunt de clases que permiten crear y manipular too tipo de objtos(interfax gris, acceso ala red, gestion de entadas/saldas...) &. Distribuido Java implementa los protocols dered estindar, lo que permite desarrollar aplicacions dlente/servidor en arquitecurasdistibuidas, con el in de invocartratamientos yo recuperar dats de miquinas remot. om este fin, Java esténdar cuenta con dos API que permiten crear aplicaciones clente/servdordistibuldas + RMI (Remote Method Invocation) permite @ los objetos Java comunicarse entre ellos tant si se ejecutan en diferentes méquinas virtales Java como sila hacen en diferentes maquina seas + CORBA (Common Object Request Broker Architecture), basado en el trabajo del OMG (higai/unuu.cma.cra) perme la comunicaciin entre objetos lava, C++, Lisp, Python, Smaltalk, COBOL, Ada, que se ejecutan en diferentes maquinas fScas 4. Interpretado Un programa Java no lo ejecuta sino quel interpreta la méquina vitual 0 JVM (Java Virtual Machine). Esto hace que sea més lento Sin embargo colleva también sus ventaja, en particular a! hecho de no fenar que recomplar un programa Java de un sistema a ote porque basta, pare cada le dels sistemas, con tene su propia maquina virtua httpsijlwmweni-training.comclient_netimediabook aspx?idR=111689 us 4162018 ENI Training - Libro online Debi a que Java es un lenguafeinterpretado, no es necesaro altar las enlaces (obigatoro en C++) antes de efecutar un programa. En Java, orl tant, slo hay dos etapas, la complacién y la ejecucén. La maquina viral se encarga dela eperacén de ediién de enlaces en tiempo de ‘ecucion del programa, . Robusto. Java es un lenguafe fuertementetipadoy estricto. Por ejemplo, la declaraiin de as variables debe ser abligatoriamenteexplicta en Java Se verifca el cécigo (sintaxs, tpos) en el momento de 1a compllacién y también de fa ejecucién, lo que permite reducr los errores y los problemas de Incompatibiiad de versiones. Ademés, Java se encarga totalmente de fa gestién de les punteros y el programador no tiene manera de acceder 3 alos, lo que evita la Sobreescrture accidental de datas en memaria la Manipulaion de dates comuptos. f. Securizado Dados los campos de aplicacién de Java, es muy importante que haya un mecanisme que vile la Seguridad de las aplicaciones y les sistemas. El motor de elecucin de lava (IRE) es el encargado de esta trea. ELARE se apoya en particular en el archive de texto Java policy, que contiene informacié relatia ala coniguacié dela seguridad En Java, el JRE es el encergado de gestonar el consumo de memoria de los abjtos, no e complador, come es el caso en C++. Puesto que en Jeva no hay punters sino referencias a objets, el cédlgo complado coniane dentieadores sobre ls objtos que luego el JRE traduce en direcciones de memeria: esta parte es totalmente opaca para les desarroladores, En el momento dela ejeculén de un programa Java, el JRE utilza un proceso lmado el ClassLoader que realiza la carga del bytecode (0 lenguajebinaro intermedio) contenido en las clases Java. A contuacén, se analza el btecade con elf de contear que no se genera 1 ‘manipulan punteros en memoria y que tampoco hubo vilacén de acceso, Como Java es un lenguaje distribuido, se Implementan ls principales protocolos de acceso ala red (FTF, HTT, Tenet..). Se puede, pues, fctigurar el JRE cane fin de controlar el acceso ala rad de sus aplicaciones + Prohibr todos os accesos. + Autorzar ef acceso solamente 2 la méquina anfitions de donde procede el cédigo de aplicacin. Es la coniuraciéin por defecto para los applets lava + Autorizar el acceso a méquinas en la re externa (ms ald del Frewal), eno caso de que el cidigo de la apcacién también proceda de una ‘quia anftriona de Is red externa + Autorzr todos los acceso. Es a configuracén por defecto para las aplicaciones de ip clente pesado, 9. Independiente de las arquitecturas 1 complladr Java no produce un cédlgoespeciico para un tipo de arqutectura. De hecho, el complador genera vn bytecode (lenguafe binarie intermetio) que es independiente de cuslavierarqutectre, de todo sistema operative y de todo dispostve de gestion dela intrfaz grea de usuario (GUN). La ventaja de est bytecode reside en su Fil interpretacin o transformacién dindmica en cbsig native para aumentarelrendimiento Basta con disponer de la méquina virwal especie de su plataforma para hacer funcionar un programa Java. Esta Ultima se encarga de Waducr ft bytecode a eigo native, h. Portable Java es portable gracias a que se trata de un lengua intrpretado Ademés, a diferencia del lenguaje C y C++, ls tips de datos primitives (numércos, carctery boolean) de Java tienen el mismo tama, sea ‘ual sa a plataforma en in cal se ejecta el cdo, as bibloteces de clases estandar de Java fecitan la escritua de cédlgo fuente que, a continuacén, se puede desplegar en diferentes Plataformas sin adaptacin, Tncluso si un programa Java es interpreta, lo cual es més lento que un programa natvo, Java pone en marcha un proceso de optmizacién dela interpretacién det eésigo,Namado J1T ust In Time) 0 HotSpot. Este proceso compile! bytecode Java en cSdgo native en tempo de ejecuion, lo que permite alcenzare mismo rendimiento que un programa eserto en lenguaje Co C++ j- Multitarea Java permite dessraliar aplicaciones que ponen en march la ejecucién simultines de varios hilos (0 procesos igeros). Esto permite efectuar ‘smultineamente varias tress, con el fn de aumento la velocgad de ls aplicaciones, yo sea compariendo el tempo del CPU o repariend las {areas entre varios procesadores k. Dinémico En Java, como diimos, el programader no tiene que editar los vinculos (oblgatorio en C y C++). Por lo tanto es posible modficar una o varias clases sin tener que efectuar una actuaizacion de estas modiicciones para el conjunto del programa. La comprebacin de la exstencia Je las {laces se realza en tempo de complain y ls llamada a cdago de estas clases silo se hace en el momento dela ejecucin del programs, Este proceso permite disponer de aplicaciones mds igeres de tamane en memors httpsijlwmweni-training.comclient_netimediabook aspx?idR=111689 215 4162018 NI Training - Libro online 2. La plataforma Java Por defnicén, una plataforma es un entorne de hardware o de softvare en la cual se puede ejecitar un programs La mayor de las ptaformas actuales son Ia combinacin de una maquina y de un sistema operativo (ej: PC + Windows). a plataforma Java se distingve por el hecho de que sé Se compone de una parte de sofware que se ejecuta en rumerosas pataformas fisicas y Aiferentes sistemas operatives. 1 esquema siguiente procede del sto web de Oracle sobre et lenguaje Java y muestra los diferentes componentes de la plataforma Java Fareed Jovan HetSpt Canta serve Como muestra el esquema, se compone de les elementos siguientes: + la méquina virtual Java (VM), + laintertan de programaciin de apcacén Java (API Java), repartida en tres categorias (API bésicas, API de acceso a las datos y de Integracién on la existent, AT de gestion del lntrtaz de las aplicaciones con el Usuar), + las herramientas de despiogue de las aplicaciones, + las herramientas de ayuda a desarolo \Veamos en detale estos diferentes elementos, 2. La méquina virtual Java (3VM) a maquina viewal es la base dela plataforma Java. Es necesara para la ejeculén de los programas Java. La VM esté disponible para muchos tps de ordenadoresy de sistemas operatives. 1a maquina vitual se encarga: + do cargar las dases y ol bytecode que contengan: cuando un programa invoca la creacién de objtos 0 invoca miembros de una clase, 1a vA tine come misioneargare bytecode a interpretar ela gestién de la memoria: la VM se encarga completamente de la gestién de los punteros y por lo tanto de cada referencia hecha a un objeto. Este proceso permite también ala JVM de encargarse de la iberacén automstca de la memoria (vecoletor de basura) en cuanto Sale el dominio del programa, es dec cuando ningune variable le hace referenca, + dela seguridad: es une de las operaciones més complejasrealizadas por la JVM. Al cargar el programa, comprucba que no se llama ‘memoria no inicaizade, que no se efctian conversiones de tpos legales y que el programa no manipula punteros de memoria, En el caso eos applets ava, la JVM prohibe al programa e acceso a los perifrcas de la maquina en la cual se ejecta el applet y autorza el acceso 3 la re sto hac 6! host que fund el applet. dela interfaz con el césigo native (por elemple, ciigo escrito en lenquaje C) Ia mayoria de as AP bisicas de Java necesitan céigo native {ue viene cone IRE con el fin de interactuar con el sistema anfirén. También se puede utlizar este proceso para acceder a peniféricos © 8 Tuneionaidades que no seimplementan drectamente o ne se implementan en absoluto en v2, hecho de que Java sea interpretado conleva ventajas «Inconvenientes. Desde siempre, se reprocha a Java ser menos eficaz que los lenguajes natives, como era el caso sobre todo para aplicaciones con Interfax gréfica de usuare. Con el fn de pala este problema y perder esta mala Imagen injstineada, los desarrlladores de Oracle han trabajade muchisime en a optimizacion 6 la VM. Con a versin 1.2, se dspuso de un complador JT (Just In Time) que permits optimiza la interpretacién del bytecode al modifcar su estructura para acercarlo al cigo native. partir de a versién 1.3, a VM integra un proceso llamado HotSpot (cent yservidor) que optimiza ain mis Ia Interoretacién del eédigo y, de manera genera, el rendimiento de la JVM. HotSpet aporta una ganancla de resultados de entre el 30 % y el 40 % ogi el tipo de aplcacion (ee nota especialmente nivel dela interfaces gras). b. La APE Java |x APL ava contiene una colecién de componentes de sofware prefabricados que proporcionan numerosas funcionalidades, 1a APL Java en su versién 8 se organiza en més de 220 paquetes, el equvalente a las libreras de C. Cada paquete contiene las cases e interfaces prabrcadas y crectament reutiizbles Hay dsponbles unas 4300 clases e interfaces. La plataforma Java proporiona API bésicas. Se pueden afadr numerosasextensiones que estén clsponibes en el so Java de Oracle: gestiin de Imagenes en 30, de puertos de comuniacin del ordenador, de telefon, de coreos electrons, Las APL Java se divden en tes categoria Las API bésicas https:siwmweni-training.comiclient_netimediabook.aspx?idR=111689 35 4162018 NI Training - Libro online as APt biscas permiten gestionar: + elementos esencials como les objetos, las cadenas de caracteres, os nimeres, las entradas/salids, las estructura y colecclones de datos, Tas propledades del sistema, la fecha la hora, y mucho mas. + los applets Java en el entora del navegador Web, + la re, con los protocoosestindar tales come FTP, HTTP, UDP, TCP/IP ms las URL y la manipulacin de los sockets, + la intemscionalizacién y la adaptacién de los programas Java, al extemaizr ls cadenas de caracteres contenidas en el cidigo de los archives de propiedades( properties). Este proceso permite adaptar el funconamento de las aplicaciones en funcén de entomos ainamicas (nombre de server, nombre de usuario, contraseia.)y adapter iioma uilzado en las intertaces graticassegin el contexto regional de Ta dquia, + la interaz con el édigo native, al permitirdeclarar que la implementacién de un método se haga dentro de una funcién de una DLL, por siemlo, + la seguridad, al permit * cirar/desciar los datos (ICE - Java Cryptography Extension), ' poner en marche una comunicacién securizada mediante SSL y TLS (ISSE Java Secure Socket Extension), "+ auteniicar y gestonar las autorzaciones de los usuarios en las aplicaciones (JAAS - Java Authentication and Authorization Service), + Intercambiar mensajes con total seguridad entre aplicaciones que se comuiican mediante un servidor como Kerberos (GSS-API Generic Security Service ~ Applicaton Program Interface), 1 crear y valdar lets de certiicados lamadas Ceticaton Path (v— Cerifcatin Path APD + la creacién de componentes de software lamados JavaBeans reutlizables y capaces de comunicarse con oas arqultecturas de componentes tales como ActiveX, Opendoc, LiveConnect + la manipulacén de datos XML (eXtensible Markup Language) con la ayuda de las APL DOM (Document Object Moe) y SAX (Simple API for DIL). Las APL bésicas permiten también apiartransformaciones XSLT (eXtensible Stylesheet Language Transformavon) a partir de hojas de esto XSL sobre datos XML. + la generacién de archivos histxicos (logs) que permiten obtener el estado del funcionamianto de las aplcacones (actividad, errores, bugs.) + la manipulacién de cadenas de caracteres con expresiones reguares + los errres de sistema de operacén con el mecanismo de excepciones encadenadas + las preferencias de usuario ode sistema, al permit alas aplicaciones almacenary recuperar datos de coniguracén en diferentes frmates Las API de integracién permiten gestions + apicaciones clente/servdor en una arqutectre distribuida, al permitir I comunicain en local o por red entre objtos Java que fenconan fen contextos de JVM aferentes, gracias ala API RMI (Remote Method Invocation). + aplicaciones cente/servider en una arqutectura dstibulda, al permit la comunicaién en local 0 por red entre objetos Java y objetos Compatibles CORBA tales como C++, Lisp, Pythen, Smaltalk, COBOL, Ada, gracias al soporte de la APT CORBA (Common Object Request Broker Architecture), basada en el rabajo del OMG (ho: 9) + et acceso a casi e100 % dels bases de datos, mediante la API JDBC (Java DataBase Connectivity). + el acceso alos datos almacenatos en servicios de directorio del protocolo LDAP (Lightweight Directory Access Protec!) come por ejemplo 1 Active Directory de Windows, mediante I APL INDI Gava Naming and Drsctory Iterace), Las API de gestion de la interfaz de las aplicaciones con el usuario Las API de gestén dela ntrfaz usuario permite gestions + el disefio de interfaces gréfcas con la APT AWT (Abstract Window Toolkit de antigua generacin,o I API SWING de dima generacién, + el sonido, con la manipulacén, a lectura y la creacién de archives e Sonido de diferentes formats (.mav © mi) + la grabacisn de datos en formato texto usando medies distnt al telado come, por elemplo, mecanismas de reconocimiento por la vez 0 de escrtura, con le APE Input Method Framework + las operaciones grease dbujo con la AP Java 20 y de manipulactén de imsgenes con la API Java Image 1/0. + la accesibiidad de las aplicaciones para personas discapacitadas con API Jave Accessibilty que permite interactuar, por ejemplo, con Sistemas de reconocimianto por la vor oterminales en bral + el desplazamientoo trasado de datos durante una operacién de arrastrar/soltar (Drag and Drop) + trabajos de impresiin de datos en cualquier pei de impresén. € Las herramientas de despliegue de las aplicaciones a plataforma Java properciona dos herramientas que periten ayudar en el despiegue de las aplicaciones: + Java Web Start: destnada 2 simpifcar e despegue y Ia instalaciin de las aplicaciones Java auténomas. Las aplicaciones estén disponibles fen un servidor, los usar pueden lanzar Ia insslaion desde su maquina. mediante la consoia Java, Web Start y todo se hace Sutomsticamente, Lo interesante es que después, con cada lanzamento de une apicacén, Java Web Start compruebs si est disponible una Bactualzacén ene servior y procede automaticamente a su instalacén + ava Plugin: destinada a permite funcionamiento de los applets lava con la maquina vial 8. En efecto, cuando se accede, mediante et navegador web, 2 una pégina himl que contiene un applet, es la méquina vitual del navegador la encargads de hacerio funciona. El httpsijlwmweni-training.comclient_netimediabook aspx?idR=111689 415 4162018 ENI Training - Libro online problema es que las maquinas vituales de los navegadores son compatibles con antiguas versones de Java. Para‘no tener lmitaciones 2 hivel de funionalidades y port tanto no encontrar problemas de incompatibildad entre los navegadores, se puede instalar el aa Plugin ten los terminals de lor chentes. Eva Pug'in consate en instalar un motor de ejecucién Java 8 (el RE compuesto por un JVM y por el Conjunto de AP. Con eto se consigue que ios navegadores Web utlcen este JRE y no el suye propo 4. Las herramientas de ayuda al desarrollo. La mayoria de las herramientas de ayuda al desarolo se encuentran en la carpea bin dela carpeta rai 6 ln instaacin del 12S Las principales herramientas de ayuda a desarrollo permitn: + compar (javac.exe) el céigo fuente de archivos Java en archivos lass. + generar de forma automdtica (Javadoc.ex8) la documentacén del cédloo tuente (nombre de clase, paquets, jerergula de herenca, numeracén de las vareles y métodes) con el misma esto de presentacién que la documentacén oftial Ge las API estandat proporcenadas por Sun. + lanzar ia ejecucén java.exe) de las aplicaciones auténomas Java + visualzar, con la ayuda de un visvalizador(appletviewerexe), la ejecuién de un applet Ja hrm. “También son interesante otras dos tacolagias.Estn destinadas a integrarse en herramlentas de desarolo de teceros + 3P0A (Java Platform Debugger Architecture), que permite Integrar una herramienta de depuracién dentro del IDE de desarolo, lo que porta funlonalidades tales come puntos de interrupclen, elecucion paso a paso, la inspeccin de variables ¥ expresiones.. + MPI Clava Virtual Machine Profier Interface), que permite fecuar andlsis y generar estados relatvos al funcionamiento de las aplicaciones (memoria uizad, objets creados, nimero Trecuenca de fnvoracén de los métodos, Uempe de proces...) cn el fin de ‘bservar el buen funconamiento de las apcaconesy localaar los cellos de Botella, 3. Ciclo de disefio de un programa Java ara desarrlar una apiccién Java, primero se debe buscar la plataforma 12SE de desarrllo (SDK - Sofware Development Kit) compatibie con su maquina y au sistema. operative: puede encontrar la suya en” el lstado del sto Java de Oracle: hit: //ww ravi com/technetwors/ivalindg. ial ‘A contouacién,podré utilizar las API estindar de Java para esc su cédigo fuente. En Java, la estructura bésica de un programa es la case y ada clase se debe encontrar en un archivo con la extensén jaa. Un mismo archivo Java puede contener varias clases, ero sbio una de elias ede ser declarada publica. nombre de esta clase decorade plbica da su nombre a archivo ava, ‘Ao largo del desarol,podra procera la fase de complaién utiizando la herramlentaJavac.exe. Come resultado obtendré al menos un archivo aque leva mismo nombre pero con la extensién .cass, El archivo -class compilade sigue siendo de todas formas independiente de cualgier Plataforma o sistema operative, A continuacén, 05 el itérprte (java.exe) quien ejecta los programas Java. Para la ejecucén de los apples, se incorpora el intérprete al navegador de Internet compatible can Java. Para la elecucién de aplicaciones Java auténomas, es necesaro lanzar la ejecucén de la maquina Virtual proporconada ya sea con la plataforma de desaroll lava (SOK) 0 on a Kit de desplegue de aplicaciones lava (IRE Java Runtime Environment). httpsijlwmweni-training.comclient_netimediabook aspx?idR=111689 5I5 4162018 NI Training - Libro online Instalacién del SDK versién Win32 para el entorno Windows 1. Descarga En primer lugar, es necesario descargar la itima versién el SOK para el entomo Windows (Win32) a partir del sitio wed de (race: bit:// smu rac com/technstwors/jva/iavasa/downloads/index hint Actuaimente, el archivo de descarga se lama Jék-BuS-windows-1586.eve y ocupa 152 MB. En todo caso, se debe descargar siempre la cltima versiéneisponible ‘Ya que est on el sitio web de Oracle, aproveche para descargar oto element indispensable para programar en Java: la documentacién dela APL stander ‘Actualmente, archivo de descarga se lama j-8uS-apdocszipy ocupa 85 MB. Para poder descomprimiro en nuestra méquina, nacesttrnas 300, MB de espacio de asco disponible. isto representa mucha letura! 2. Instalacién Antes de instalar ol SDK en el ordenador, debernes asequrarnos de que no hay ning otra herramienta de desarolo Java ya instalada, para evitar problemas de conflictos de contguracion. ora empezar a intalacin, hacemos debe clic an el archivo de instalacién descargado previament: ok-BuS-windows1S86.0x8. Primero aparece un cuadro de ddlogo Weleome, para ndicave que esté 2 punto de Insalar el SDK y le pe confirmar i qulere continuar con la Instalacié. Haga clic en Next: Una nueva ventana, Custom Setup, le permite selecclonar ls elementos del SOX que quiere Instalary la carpeta de destin dela instlacén. Sect cote fates eal fon he utbelon. Youcan urge yu coef fates after ‘Santonoy ung te adeno Pyare type Coneatone FesureDecton nese Dement, iuana be rar Okan wee. Tha eaure {eos en yorrocane, Preven roa} Una vez haya selecionado sus opciones o haya dejado la seleccibn por defacto, pulse Next. E! programa instala as os archivos en nuestro ordenador Instantes mas tarde, el cuadro de dilogo siguiente nos informa del éxito dela nstalacién. https:siwmweni-training.comiclient_netimediabook.aspx?idR=111690 1B 4162018 ENI Training - Libro online i Jove SE Development Kit 8 - Complete 3. Configuracién ‘nora feta configurar el sistema, indicando en qué carpeta se encuentran almecenadas las herramientas como javavexe (méqvina virtual) appletviewerene (vsionador de applets) o también Javacexe (compllader). Para ell, debemos modicr Ia variable de entoeno PATH para aad ls Fita_de acceso hacia la carpeta bin del jok. Si ha deJado las opciones por defecta duvante la instalacén, la ruta debe ser C:\Program Fles\ava\jae.8.0\bin 4, Prueba de la configuracién del SOK Vamos 2 comprabar sel ordenador ha teido en cuenta las madiicaciones que acabamos de aportar a a variable PATH y, por lo tant, vamos 2 Para probar la coniguraciin del SDK, vamos 2 wtlizar une ventana de comandos En Simbolo de! sistema, intrdcimeos el comand siguiente que va a permitirdeterminar sl inst DDebemos ver parecer el mensaje siguiente como respuesta a a lines que hemos introdcid: ste comando muestra informacion relatva la version de la maquina vitual Java btenemas tn mensaje de eso: No se recanoce a "ava" como ferno 0 externo, un progeana 'slonfea que la carpeta donde se almacenan las Herramientas del SOK noha sido encontrado por nes si En este caso, comprobamos sia variable PATH contiene electvamente las medfcaiones que hemo fe sintaxis al defn la ruta ola carpeta bin, ado y que no hemos eometido un error 5, Instalacién de la documentacién del SDK y de las API esténdar Con la ayuda de una herramienta de descompresin coma WinZip, abrimas el archivo que hemos descargado previemente, Extraemos todos los achivos que contenga en la carpeta ala de istalacin det SOK, es dec, por defectoC:\Progeam on httpsijlmweni-training comiclient_net/mediabook aspx?idR=111690 28 4162018 ENI Training - Libro online ‘Se deben prever 270 MB de espacio disponible en disco para instalar a documentci, Una ver extaidos todos los archivos, cerramos la herramlenta. En el explorador Windows, en la carpeta C:\Program Fites\Java\3ah1.8.0, debemos tener una nueva carpetasocs. Es la carpeta que contiene el conjunt dela documentacin del SDK en formato HTML. En esta carpeta socs, hacemos dable cle en el archivo index. hind. Este archivo contien enlaces hacia el conjunto dela dacumentaciin Java, aque est nstalada en Su ordenador, o acesible en un sito Web. Lo més importante de ia decumentacién se encuentra en la subcarpeta ap, al hacer doble clic en el archivo indsx. html. Este archivo contiane las especiicaiones de la API Java, 0 mis especincamente, la descripcin del conjunto de las clases de la Wbreria Java. Sin esta documentacién, no podremes desarolarefcazmente en Java, ‘Se recomienda crear en su esertorio un acceso directo hacia este documento. Esta pigina se organza en tes ventanas: + la ventana superior iquierda contioe a lista de los paquetes (mas de 220), + la ventana inferior lquieda conten la sta de las clases contenidas en el paqueteselacionado en la ventana anterior + la ventana més grande contiene la descripcén de una interaz 0 de una case selecionada en la ventana anterior La descipcién de una clase se organiza de la manera siguiente: * um esquema de la jerarquia dels superclass dela intrfaz 0 e la das + una expiacién sobre a utlizacin dela clase o del interfaz 1 et Summary sta dels atrbutos. + Constructor Summary: lista de os constructores dela clase. ' Method Summary: lita de los més. * Field Details: descripcin detallada dels atributos. ' Constructor Details: descrpcin detalada de los constructores de la dase. "Method Detals:descripci detaliada de los métodos de la case. https:siwmweni-training.comiclient_netimediabook.aspx?idR=111690 38 4162018 ENI Training - Libro online Las diferentes etapas de creaci nde un programa Java 1. Creacién de los archivos fuente En primer lugar debe crear uno o varios archivos de cigo fuente, segin Ia importanca desu programa, Todo célgo Java se encuentra en el interior de una clase contenida ella misma en un archive con la extension Varias clases pueden coexistir en un mismo archivo java pero slo una puede ser decarada piblica,y es esta itima la que da su nombre al Como en muchos otros lenguajes de programacién os archives fuente Java son archivos de texto sin formato Un simple editor de texto capaz de grabar en formato de texto ASCII, como el Bloc de notas de Windows o VI de Unix es sufcient pare escribir archives de céigo fuente ava, Una vez escrito hay que guardarelcidigo desu archivo fuente con la extensin Java, que es a extensién de los archivos fuente Si usa el Bloc de notas de Windows, tenga culdado de que al quardar su archivo e Bloc de notas no afiada una extensiin rce al nombre. Para evita este tipo de problemas, dé nombre a su archivo con la extensén jac, todo elo eset entre comilas Sin embargo, enste algo mejor que un simple editor. Puede, previo pago del cste de una licencia, utilizar herramientas comerciales 0, aén mejor, Uublzar productos open source como el excelent Eclipse, Se trata en un principio de un proyecto de IBM pero numerosas empresas se han unigo 8 teste proyecto (Goriand, Oracle, Merant..). Es una herramiente de. desarolo Java excelente y gratuita a la cual se pueden acoplar otras Splicacones mediante un sistema de pug, Oracle roporelona también NetBeans, una herramienta muy eficsz y de uso fi 2. Compilar un archivo fuente Una vez crea y guardado su archivo fuente con a extensién Java, debe compl Para compilar un archivo feente Java, hay que wlzar Ia herramienta en lines de comendojavac propocionads cn e! SOK. ‘Abra una ventana Simboto del sistema, En a ventana, sitiese en la carpeta que contiene su archivo fuente (java), con la ayuda del comand ed sequido de un espacio del nombre dela carpeta ue contene su archive vente, Una ver que esté en la capeta comecta, puede Lanzar la campllaciin de su achive fuente usando el siguente comando en la ventana de compilador Java en nea de comand, propercionade con el JDK nvo>t nombre dl archivo fuente Java ava extensén que indica que el archivo es una fuente Java Si quire complar varios archives fuente al mismo temp, basta con e nando anterior y aftadr oe dems archivos @ complar javac . fave .java Si después de unos segundos ve aparecer de nuevo Ia ventana de Simbolo de sistema, significa que nuestro archive no contiene errres y se ha complado. En efecto, el compladar no muestra ningun mensaje cuando la complacion se eecuta correctamente resultado dela compl in de un archive fuente Java es la creacién de un archive binario que leva el mismo nombre que l archivo fuente pero Un archivo binario lass contiene el pseudo-cisigo Java que la méquina vitwal Java puede interret Si, por el contraro, ve aparecer una serie de mensaes, de ls cuales etm le Indica un nimero de erores, esto qulre deci que el archivo httpsijlwmweni-training.comclient_net/mediabook aspx?idR=111691 we 4162018 NI Training - Libro online En este caso, se debe corre l archivo fuente ora ayudarte a encontrar los errores en su ous archivos fuente, vac le proporciona Informacion muy sti oonbreArchiva.java> : : mensaje Nombre del archivo fuente Java que contiene un ero. [Nimero de a linea desu archivo fuente donde java enconté un eror onsaje que insia el tive de eror Linea de digo que contiene un eror, vac indica con una lecha dine se ubica el error en Ia ina, Después de haber corregdo el cédigo, vueiva a comple. Si javac le sigue reportando errores, repta la operacén de correccién y de recomplain del archive hasta obtener la creasén del archivo binario class or defect, los archives compilades se crea an la misma carpeta que sus archives fuente, Puede indicar la herramientajavac crearos en otra carpeta mediante a opelén “4 “arectory” 3. Ejecutar una aplicacin ‘Una aplicacén Java es un programa auténomo, similar alos programas que conoce peo que, para ser ejecutado, necesta el uso de un intéprete Java (la maquina vitual Java) que carga el método main() dela Case principal e a aplcacié. Por iniir i eecuciin de una aplcacén Java, se debe utilizar Ia heramienta en linea de comando Java properionada cone! 10K Ara una ventana Simbolo del sistema, Ubiquese en la carp Contnuacin,hntraduzca el comando con a inten sigulent: ‘ve contene el o Jos archivos binaries (.class) de su aplicacén, A java {jsva: erramienta en lnea de comandos que lanza ia ejecucién dela méquine vitual Java, : es obligatoriamente el nombre del archivo binaro (lass) que contiene el punto de entrada dela apicaciéa, el métado msn) Importante: no ponga a extension lass después del nombre del archive porque la maquina vitwal lava lo hace de manera implica : argumentes opcionalesen linea de comandos para pasar a la aplcacén en el momento de su Slanzamas la ejecuién correctamente (sntaxls correcta, con el archivo que coniene el métode mein), debe ver aparecer los mensajes que ha insertado en su cSdigo. Si por el contrare, ve un mensaje de error similar a fxception in thread main’ {ava.lang.tioclassDerFounderor: .. es que su programa no se puede ejecutar, Varia raznes pueden ser la causa de elo: + Elnombre del archivo a ejecutarno tiene e mismo nombre que la case (iferencia entre maytscuas y minisculas). + Ha ntroducido la extensén .cises después del nombre del archivo a ejecutar en a lnea de comand +l archivo que ejecuté no contiene métode main) + std intentandoejecutar un archivo binaro (clas) que se ubica en una carpeta ditinta que desde donde se anzé la ejecucién, httpsijlwmweni-training.comclient_net/mediabook aspx?idR=111691 22 4162018 NI Training - Libro online Nuestra primera aplicacion Java 1. Esqueleto de una aplicacién ‘Una aplcacin Java es un programa auténome que se puede ejecutar en cualguerpataforma que isponga de una maquina wrtval v2 Es posible desarolar cualquier ipo de apicacin en Java: interfaz asic, acceso 2 las bases de dats, apiacones clenta/servidor, muti Usa aplcacién se compone de, at menos, un archivo dass y él mismo debe contener como misimo el punto de entrada de la aplcacién, mated mai) Ftemola.de le estructura minima de uoa ance [pate class winplicacian { Public static void main(String argumentos(]) { (cuerpo del metodo principal */ : } Sila aplicaciones importante, se pueden crear tantas clases como saan necesaris, Las clases que no contengan el métedo main) se laman clases aoslares El método nan) es el primer elements lamado or la méquina virtual ava a lanzar la apcacién, 1 cuerpo de este métado debe contenr las instrucciones necesarias para el arranque de fa aplicac, es decir a creacin de intancias de case la Inieatzacin de variables la lamada 3 métodos. ealmente, el método nain() puede contener una dni instruccién, 2 declaracin del métado nain() siempre se hace sen la sntaxs siguiente: public static void nain(Steing Porimetro del método, os un vector d cadenas de caactres. Este parémetro se utlza para pasar argumentos en linea de comando al ejecutar fa apliacin, En fa mayoria de los programas, el nombre utizade para es argusentoc ©2236, pra MAIear ‘ue la variable cntiene argumentos pars la apleac, 2. Argumentos en linea de comando a. Principios y utilizacién 1N ser una aplicciin Java un programa auténoma, puede ser interesante proporconaiie pardmetros u opciones que van a determinar ‘comportamiento ola coniguracéin del programa en el momento desu ejecucién, © 12s argumentos en linea de comando se almacenan en un vector de cadenas de caractere. Si quire utlizar estas argumentos con oto formate, debe efecuar una conversion de upo, de tipe Sting hata el ipa deseado durante el procesamienta del arguments En qué casos se debon utilizar los argumentos en linea de comandos? Los argumentos en tinea de comands se deben utilizar al arrancar una aplcaién en cuanto uno © vais dates utlizados en la inkialzacin de vest programa pueden adeptar valores varabessogin el enor Por elem + nombre del puerto de comunicacén utlzado en el caso de una comunicacin con un dispositive fisicn, + eireccén IP 6e una méquina en la re en el caso de una aphicacin clent/servidor + nombre del usuario y contrasefa en el caso de una conexén a una base de datos con gestén de os permisos de acceso. Por ejemplo, en el caso de una aplcacién que accede a una base de dates, es habitual tener que proporcionar un nombre de usuario una contrasera par abrir una sesin de aceso a a base de datos, Diferntes usuarios pueden accede 2 la base de dats, pero con penises frente. httpsijlwmweni-training comiclient_net/mediabook aspx?idR=111692 we 4162018 ENI Training - Libro online oro tanta pueden exist varias sesonesciferantes. No es act crear una version dela apicacin para cads usuario ‘Ademis, esta informacén es susceptible de ser modieada. As! que no parece juiciso integralaen Su cdo, porque cualquier cambio le obigala 3 ‘moaitiear su céaigo fuente, volver @complatay tener una version para cada usuario, a soluciin a este problema reside en fs arguments an linea de comando, Basta con utiizaren su céigo el vector de argumentos del metodo main que conten las variables (nombre ycontraseha) de su aplccién. ‘A continuacié, ¥ en funcién del usuario dl programa, hay que acompafar el nombre de la dase princpa, en el momento de fa ejeccién del programa metdante ls insrucién a, con el valor de os argumentos per nea de comands, argumentos a una licacion Java en tiempo de ejecucién paso de argumentos a una aplicain Java se hace al lnzar ls aplcacén metlante fa linea e comande, El siguiente ejemplo de programa muestra hme uilzar el paso de argumentos po nea de comands en ura apicacén Java 7= peclaracién de ta clase principal de Ya aplicacién +7 public class miclase t 7+ vectaractén det aétodo de punto de entrada de 1a apticactén'/ public static void main(string argstT) t /* Visuatizacién de Los argunentos de ta Linea de conando */ for (int § = 8: 4 < aras.tength: i+) systen-out.printIn(Argunento * +i + * = * + argslil) > {+ Conversién de dos argumentos de la Linea de conanéo de Sering's int, suna de"Los valores enteras y isuavszacten det resultado Snas( Integer. parselat(args{3}))+ (Integer parselnt argsi4])) Systen-ovt:printin"Argunento 3 + Argunenvo 4'=-" + soma); } } i “Tas la compacta, el programa se ejecta con la linea de comando siguiente: Java MicLase ediciones EMr “ediciones EMI” 2 5 a fecuién del programa muestra la iformacién siguiente: Rraurento 9 = ediciones frgunents 2 ea argument 2 fedlctonee EE argument 30> 2 rgumenta 4 5 fArgunento 3+ Argunento 4 = 7 httpsijlwmweni-training comvclient_net/mediabook aspx?idR=111692 22 4162018 NI Training - Libro online Las variables, constantes y enumeraciones 1. Las variables as varabes nos van a permit almacenar en memeria diferentes valores les para el funconamiento de nuestra apicacién durante su ejeccion. Se ebe declrar obigatoramente una varable antes de utiizara en el cédgo. Al dedarar una varable deberos defnir sus caractersticas, Segin Ia Ubleaoén de su decaraion una variable pertoneceré a una de as eategrias siguientes: + Dectarada en el interior de una clase, la variable es una variable de instanca,Sélo exist si una instancia dela case ests disponibe, Cada Instancia de case tendré su propi elemplar del variable + Dectarada con fn palabra cave static en el interior de une clase, ls variable es una variable de clase. Se puede scceder 2 eis drectamente or et nombre dela clase y existe en un ico ejempla. + Dectarada ene interior de una funda, la variable es una variable local. Sto existe durante la eecucén de a funcién y slo se puede accader ela desde el cigo de ta. + Los parimetros de Ins funcones se pueden considerar come variables locales. La Gea diferencia reside en Ia nicalzacén de a variable sfectuada durante llamada 9a Funcn. 12. Nombre de las variables \eamos as reas que se deben respetar para nombrar a las variables, + ELnombre de una variable empieza obigatodamente por una lta. + Puede toner letras, caso el cardctr de subrayado(_), + Puede contner un nimero cualquiera de caractres (por razonesprcticas, es mejor lintarse aun tamaforazonabe), + Se hace una distncén entre minisculas y mayiscuas (a variable EDADDELCAPTTAN es diferente ala variable edaddeeapitan). + Las palabras dave del enguaje no deben ulizarse como nombre de variable. + or canveno, los nombres de variables ortografian con letras minisculs sl la primera letra de cada palabra si el nombre dela variable Incuye varias palabras (edadDelcaptan). . Tipo de variables 1N determinar un tipo para una variable, indcamos cul es la informacién que vamos a poder almacenar en esta variable y las operaciones que Dodremasefectuar cone Java dispane de dos categorias 6 tips de variables + Los tpos pr valor: la variable contine realmente la iformacién, + Los tpos por referencia: a vaable cotine la deesén de memoria donde se encuentra la iformacién. El lenguaje Java depone de siete ios primitvas que se pueden clsificar an tres catagrias. Los tipos numéricos enteros Tipos enteros firmados bie 28 7 ‘ke Tene ‘SEISSTROSEGSATTSBOS 927337 20365587 75807 cr (Giando eda un tipo para sus varblesenteras,tendrd que fener en cuenta los valores mina y minim @ve piensa almacenaren els con el fin de ‘optimiza la memoria dela que hacen uso. De hecho, es ind utlzar un tpo largo para una variable cuy valor ne superar 50: en este caso basta Cnn tobe srs deen parece cat aa une arable nap se Yave lata sae Vian pa ee, ass ot Tos ls ios entros son frmados. Es, no obstante, posible trabajar con valores enters no frmades wtlzando las Gases Integer y Long. Eso permite extender e valor postive mximo admisble en un tipo nt hasta 4294967296 y hasta 18446744073709551616 pare un tipo Lona. E= Drei, Sin embargo, tomar eras precaucines. Por ejempl, el siguiente cédigo no compl wu Tateger( 3000000000), El camplador verti que el valor itera provito al constructor no super ls limites admiidos para el tipo nt y genera un eer. Para poder extender este lt, hay que ulzar el método estéico pazseUnelgnedrne, que acpta come parémetro una cadena de caractees int distancia discanciastnteper.parseunsignedtnt("3000000000"): posterior uso de esta variable deber tener en cuenta la especiidad de su tipo no frmado, La vsuazacién de su contenido debers realzarse mediante metodo esaico LoUns.gnedser ing, E siguiente codiga permite adarar esta espectiodad [Syston ovt.printin{ visualizacién como inti" + distancia): Systen-ovt’printin("visualizacien cova int no feenado ‘Siniegerolnsigneasering(aistancia) Este cago muestra la informacén siguiente en la consol httpsislwmweni-training.comclient_netimediabook aspx?idR=111698 13 4162018 NI Training - Libro online [visvalzaeion como Ant 1204007206 ‘visvatszaeion como int no farmago' 2900000000 Los tipos decimal oat aes 3annea ase a byes aovbie 496324 T7979 RIAOETRTTENOG Boros “edos los Upos decnales extn frmados y por lo tanto puaden cantener valores postves © nagatvos El tipo carécter tipo char se ublza para aracenar un carécter tic. Una variable de tive char utiliza dos bytes para almacenar ol cégo Unicode del carctr. En al juego de caracteres Unicode ls primeros 128 caracteres son iéntcos al juego de cardcter ASCIL, los caracteres siguientes, hasta 255, coresponden a jos caracteres especiales del afabeto latino (por elemple los caracteres acertuados), el resto se utiza para les simbolos 0 1s Carecteres de otros sfabeos. Los caracteres expects 0 os que tenen un sigaieado partcuar para el lengua Java Se represertan pot una Secuencia de escape. Se compone del cardcter\ seguldo por otro cardcer que indea e signcado dela secuenca de escape. La tabla siguiente presenta last de socuencias de escape y su ignReados. secuencia | significade © Tabulaa w oy Ww Sako de nes a Rotor de carro ¥ Salo de paiva Y Camila ample [x __| coma donie | W Bara vera bs caracteres Uncode no eccesibles por tecado se representan también mediante una sacuencla de escape compuesta por los caractees \u ‘Seguides pore valor hexadecimal dl cdo Unicode del carder. simboo del euro es, por empl, la Secuencia W2OKC ora poder almacenar cadenas de cractres hay que utilizar el po String que representa una serie de cero an caracteres. Este tipo no es un tipo amit sino una clase. Sin embargo, para facia su uslzacén, se puede utlzar como un tipo primitive del lenguaje. Las cadenes de caratteres Son inarables, pocque durante a asignacién de un valor a una varable de ipo cadena de caracteres se reserva algo de espaco en memoria pare el ‘imacenamento dela cadena, Si mds adelante esta variable recibe un nuevo valoy, se le albuye una nueva ubicacn en memoria, ‘ortunademente, este mecanismo ex transparene pare nosots y la varable seqirs haciendo referencia automiticamente al valor que se le sign. Con este mecarism, las cadenas de caracteres pueden tener un tamano variable, Se 2justa automsticamente el espaco ecupado en ‘memoria segin la longitu de a cadena de carateres. Pardstribulr una cadena de earateres a Una variable es necesarieitrodusr el contenido de Taadena entre "y "como eno ejemplo sguente, iemals ronbreDetCapitan = “carfio"; [Exiten muchas funcones dela clase Stag que permiten manipuar las cadenas de caracteresy que se detain mis adelante en este capitl. El tipo booleane tipo booteano permite tener una variable que puede presantar dos estados verdadera(aso, so, owt 1a asignacién se hace drectamente con os valves se 0 faze como en el elemple siguiente: [boolean aisponibte,noaiticable; éisponabtestrve; oat freebies ace [Es imposibie asignar otro valor a una variable de tip boolean €. Valores por defecto a inciaizacin de las variables no siempre es obigatona, Eso aso, por ejemplo, de las variables de instancia que se inalzan con os valores por efecto siguientes, Tipe Valor por defacto bye o Sor o Tene @ aoubie oo oer wooo httpsislwmweni-training.comclient_netimediabook aspx?idR=111698 2n3 4162018 NI Training - Libro online Tipe Valor por defacto ‘iring a [Ev cambi, la variables locales se deben riciliar antes de utilzaras. El compiadorefectia de hecho una comprobacén cuando encuentra el uso ¢e ura variable local y activa un error sila variable no ha so iniializaa, 4. Valores literales Los valores numércos entero se pueden utlizar con su representacén decimal, octal, hexadecimal o bina, Las cate lneas siguientes de ciao son equvaentes, Los valores numéics reales se pueden expresar cn a ntacén decimal oa notacén dentin superficien2356.; Superficien2, 356803 Puede insertarcaracteres_en los valores numércositerales para facitarsulctra, Las dos sites siguientes son equvaentes: 234_976.567 precion1234876567; Los valores Iterales estin también caracerizados. Lo valores numérico enteros se consderan por defecto como ios int. Encanto alos valores ums reales se consideran como lips doubo. Esta asiniacdn puede Se a veces fuente de errres de compilation a wlza el ipo Sioa. Las leas siguentes genera un ertor de complain porgue el complador considera que itentames asignar a una variable de upo Flot un valet de tipe doubie y piensa que hay riesgo de perder informacion ‘oat, superficie; uperficten2356-6; Para resolver este problema, tenemos que ferzar el complador 2 consierar el valer itera real como un tipe rioat afadiénle ol carécter oF oat superficie: Euperticleczase. ff, . Conversién de tipos Las conversiones detipos consisten en transformar un varlable de un tipo en otro Las conversones se pueden hacer hacia un tipo superior o hacia tun tipo inferer. Si se ublza una conversion haca un ‘tipo inferior, existe el riesgo de perder informacion. Por ejerpo la conversion de. un tipo dounte en un tipo Long provecaré la pécida de a parte decimal el vals, Por eso el complador eige en este caso que le Indiquemos de manera explicta que deseamos relzar esta opeatén, Para elo, debe prefjr a elemento. que desea converur con el Upo que quiere obtener \oicdndoo entre paréntesis. oat superficie Hiperielessses bt; aprorinacions (int) supertsese; neste avo, sper I parte decimal, ero a veces ate puede sere objetivo de ete oo de converin Las conversiones hacia un tipo sper no inplican sesg de perder informacin y pr ello se reszan drectamente medante uns simple atanscén, La silent tabi resume las conversiones poses ys debe ser exctas( (3 )oimlctas( @ ). “ipo de datos a obtener Tipe de datos de origen bie [stor [me [imo | tot | coum | oar ca e |elele e ° wer | 8 e|lel|e © e «Te le ole © e Tong) 8 8 8 © 9 e ~™ |e |e |e |e © e ove | @ e® |e|ele 8 ~ |e |e fe}lele e as conversiones desde y hacia cadenas de caractares son mas expecficas httpsislwmweni-training.comclient_netimediabook aspx?idR=111698 3n3 4162018 NI Training - Libro online Conversién hacia una cad caracteres as funcones de conversén hacia el tipo cadena de caracteres son acesibles mediante la clases corversién de un valor de un tipo primitive haca une cadena decaracteres. ng. BI método de clase vatueor asegura la ove Ss vataaor ocises ») ‘Reta the suing representation ofthe boctes aguneat sie Bis vanaaor ches o) Renan the sing representation ofthe cha: ergument. ‘eur the sting representation ofthe oraz ara) apumeat sees vanneog char Renan the sting represetaon of Speci: subaray fhe cna aay agent lssiueor aoatze 4) Renans the sing representation ofthe cosoie apunest Jesineoe one 2) ‘Renan the shag represttaon ofthe 220s argues En determinadas stuacones, e uso de estas funcones a opconal porque Ia conversién se elctla de manera implica. el caso, por ejemplo, de tia variable de un tipo prmtve que eet concatenad con une cadena de carateres, Las dos versiones de cidigo siguientes san equvalentes, Versi6n 2 double preciobruto: prectosrutonis2: + + prectosrutors.16; double preciobrutos rectosrutonis2: Fecaplrel inporte del padido es: * sString.valueot (prectoarutor1.16); Conversién desde una cadena de caracteres Cccure a menudo que un valor numérico se presenta en una aplcacién bajo i forma de una cadena de caracteres (lo introduce manualmente e (suar, lecture de un fer) ara que la apicacién lo pueda manipula debe converse a un tipo numérico. Este tipo de conversion es accesible mediante clases equvalentes a les tpos primitives. Permiten manipuar valores numerics bajo el formato de objeto. Cada tipo basco tlene su case asoclada Tipo Basico Clase correspondiente bye Bre or Shor int Teteger 178 Lone boolean Boolean oer Character Stas Gases se laman clases Wrapper puesto que se ullzan para “embalar en un objet los Upos bastas del lnguaje. Pueden utiizarse como {Gases nocmales ceando una instancie 3 partir de uno dels cnstrutoresdspanbls. Esta slucién puede esquvase gracias al mecanismo mado “eutoboxng® del compiad: Este mecanismo permite asignar un tgo basic de lenguaje a una variable del tipo wrapper correspondiente, Las siguientes dos ineas de cig son equivalents. Tnteger entero-new Inte Integer enterosioy FB): 1 mecanisme inverso, Harmado “unboxing”, permite convertrautomitcamente un tipo wrapper en un tipo bisico, La variable entra del ejemplo anterior puede asignarse a una varable de tipo Estas dases proporcionan un método parse. que recbe come parimetro una cadena de caracteres y permite converta en el po primitive aeaciado ao ane https:siwmweni-training.comiclient_netimediabook.aspx?idR=111694 4n3 4162018 NI Training - Libro online int Clase watode ere public static byte parseByee(Stang 5) Shor Public Satie sort parseShor(Stana 5) Teaser public sai parsaln(Stana 9) ane Public stati fog parsetong( Stings) Fat public static Not parseFoat(Sting ) Deuba public Satie double parseboubl( sting 5) Beste ‘ble sai boolean parseBoolean(Stina =) ara recordar cimo realizar una conversién, se Wala de apcar un principle muy Sendo: el método que se debe ular se encuentra en la case ‘comespondiente al tipe de datos que e desea obtener. Declaracién de las variables a cecaracién de una variable est constituida pore tipo de a variable sequido por el nombre de la varable. Por le tanto fa sintaxis sca es la aouote precio, String honbre: También se pueden especfcar medficadores de acces yun valor ircal durante la decaracién, Protected double precion123.56: public nonbrennall a dectoracén de una variable puede aparecer en cualquier sto del digo. Sélo es necesario que a decarac preceda al uso de a varable. Se ‘sconseja agrupar ae daaracones de variable al principio de a defncén de la clase o def uncin cane fn de facia la relecture del cdo. a ceclaracin de varias variables del mismo tipo se puede agrupar en una soa linea, separande ls nombres dels variables con una coms. protected double preciotruto-123.56, precioNeto, Gastostnv 19. Aleance de las variables 1 alcance de una variable es 1a regin de cédigo en la que se puede manipulardicha variable, Cambia, pues, en Funct de la ubicacién dela fdecarnos, ‘Se puede hacer esta declaracén ene! boqve de céigo de una case, en el bloque de cig de una funciin 0 en vn blogue de cago en el interior 4e una nen, Séle el cédigo del Bloque donde se dela la variable puede ulizare Si el mismo Bloque de cédgo se ejcuta varias veces Gurante Ia ejecucien de a funcén, come es el caso de un Bute while por ejempl, la variable se creard con cada paso del bude. En este caro lanioalzacén {des variable es obigntria. Nose pusden tener dos vanables cone! mismo nombre y con el mismo aiance. Si embargo, tenemos ia posbiad de ‘dscarar una varisble interna» una funeén, un pardmetro de una fncén con el mmo nombre que una vanble delrada a nivel dela case. En fest cso, fa variable deiarada a nivel del clase queda cata pola varable interna ge a func. th. Nivel de acceso de las variables EL nvel de aceso de una varable se combina con el alcance dela variable y determina qué seccién de chdigo ene derecho a leery escribir en Ia ‘arable. Un conjunta de palabras Gave permite conralar el nivel de acceso, Se ulizan en la delaracin dela variable y deben iformarse delat ‘el tipo oe la variable. Slo pueden ufilzarse para decarar una variable en el lterior de una case. Queda prohbido su uso ene! interior de una fucién, private: a variable sil se ula cone sige dela clase donde estédeinida, protected: a variable se ula ena dase donde estédefinide, en las subdiases de esta case yen las clases que forman parte del mismo paquete public: a variable es accesible desde cualquier case sin importa el paquete ‘ingin moificador: la variable es accesible desde todas las cases que frman pate éel mismo paquete. static: esta palabra clave se asocia a una de las palabras clave anteriores para transformar una decaracién de variable ée instancia en decaracén Ge varable de case (permit utara sn que exsta una instancia de a ase), |. Ciclo de vida de las variables cide de vide de una variable nos permite especticar durante cuénto tiempo el contenido de una variable estaré disponible a lo largo dela ‘jecucion dela apeacién ara una variable declarada en una func, la dural del cdo de vida coresponde ala duracién dela elec del unc. En cuanto termine a Jecucién del procedimient 0 funcé, Ia varbie se elimina dela memoria. VoNerS a cearse con la préxime lammada ala furcén. Una varable Sectrada en e Inteor de una clase puede wtitarse mientras esté disponble una insta de la case. Las variables decleradas con la palabra (ave searic estdn accesbes durante fodo el empo de eecucén dea aplcané, 2. Las constantes https:jlwmweni-training.comvclient_netimediabook aspx?idR=111694 sn3 4162018 ENI Training - Libro online En una apicacin puede acura menudo que se utlicen valores numércoso cadenas de caracteres que no se madificardn durante la ejacucin de a ‘aplcacdn, Para facitar la lecture del cig, se aconsla crear ess valores bajo a forma de constantes 1a definiida de une constante se realza afadiendo Ia palabra dave Brivate double attura() ¢ return attura: } Private double peso() { return pesos } ovbte inet) t return peso/(atturarattura): d El consrictor se ha uiizd de manera implica para inializar le constantes de cada uno dels elementos de In enimeracin. El constructor de una ‘enumeracién debe, oblgatonamente, decararse come private, Basten varios métodes dea clase base (java. lang.Smum) que permite obtener httpsislwmweni-training.comvclient_netimediabook aspx?idR=111694 ens 4162018 ENI Training - Libro online Informacsén acerca de los elements de a enumeracén. €I método Lost sing dewuelve una cadena de caraceres que representa et nombre de 1a ‘constant dea enumeracn Batters 3 féspavtons” 20K, Systen-ovg.prantin(d.toString()): El método vaiue0® realize operaciin invereay devueive uno dels elementos Gl enumeracén cuyo nombre indica Ia cadena de caacteres que ‘se pasa como paramet, [-bateons.vatue0(J0E") Systen-oui-prantin("peso: “+ d.peso()): Systen.aut printin("sieura: “+ g:attura()): El métedo values devueve, en forma de taba, todos los poses valores de la enumeracién, System. out.printin( "Hermanos patton") fartDaitens 4 Dattons.vatues()) { Systen.out-printia(d.testring()): } Una vez defniéa, una enumeracén se puede utiizar como un nueve tipo de dates. Pedemos decarar una variable cn nuestra enumeraién para e! Dias referencia Por lo tanto se puede utilizar la variable asgnsnole ne de los valores defnidos en la enumerain, referencia-Dias. LUNES: 'N hacer referencia 2 un elemento de su enumeracién, debe estar precediéo por el nombre dela enumeracién como en ol ejemplo anterior. Esti rahi segnar 8 la varble un po dtnt ls valores conten en Ia erimerai,y se intents se obtiene un eror de compliacsn, La decarciin de una enumeracén nose puede levar a cabo dentro de un pracedimiento ode una func. Por el contra, se pede declarar en una ‘case pero habré que pref el nombre de I enumeracin cone! nombre de a clase en la cual se determina sv uzacn. Para que la enumeracion ‘20 autonome, basta con declararia en su propio Richer €atcance de una enumeracién sige as mismas rglas que el dels variables (tlizacin de as palabras cave pubtic, private, protected). ‘Ura variable de tipo numeraién se puede utlizar ficients en una estructura =i cenumeracién preceda a los miembros dela enumeracén, oh + 260, En este e260, noes necesario que el nombre de a piblig stale via testOiaDias @) sviteh (a) ‘ ose Lunes: ase MIERCOLES: case JUEVES: Systen-out.prantin("aué duro es trabajar") break Systen-out.printtn("spronto et fin de senanal"): case Staub: Systen-out.printtn(*ipor Fin!*): case Donna: Systenout.prantn("iy welta empezar") > Los arrays Los arrays nos van permit hacer referencia un conjunt de variables del mismo tge con e mismo nambreutizando un indice pare drenciarta. Un array puede tener una © varias dimensiones. E primer elemento de un array Siempre iene como indie el cer Ei ndmere Ge ealdas del arvey Se fespectica en el momento de su creacén. Por lo tant el indice ms grande de un aay es igual al rimero de celdas menes uno. Después de Su ‘reac, no estépermiide modiiar las caracterscas del array (nimere de celdas, tipo de elementos almacenados en la tabla). La manipuactn de (on aay se eaiza en tes etapa: + Dectaracién de una variable que permite trabajar con el array. + Creaciéa del aay (asgnacén de memora). + macenamiento y manipulacién de os elementos del aray. Declaracion del array a decaracién dol aray se leva cabo de forma similar a fa de una variable csica. Unicamente se deben afadir los simbolos { y ] (corchets) después de tipo de datos 0 dl nombre de la variable. Es prefenble, para una mejor leibldad de! codigo, asocar ls caracteres [y Ja tipo de datos. {nea Siguiente declara una varable de ti aray de entros. ntl) cdtranagocso; Creacign httpsislwmweni-training.comclient_netimediabook aspx?idR=111698 m3 4162018 NI Training - Libro online Después dela decaraién de la variable hay que crear el aray cbteniendo memaria para almacenar esos elementos. En este momento ndicamos e tama del aray. Dado que ls araye se asemjan a objtoe 2 utlzard el operadar new para crear una instancla del aray valor proporconado or el operadr new se almacna en la variate declarada peviamete edtrategocso=ney snt12] sta declracién crear un aray con doce cldss numeradse de 0 @ 11. El tamafio del array es dfntiva, or lo tanto noes posible ampli ni reduce lun aray ye creado, ‘edste una alterativa a Ia creaciin de arays. Consste en defi de forma simuitinea ls dectaracién de Ia variable, la creacén del array y la Inicalaacin desu contenido, ta sitaxs es la sigue! ntl) citranegocs 1234, 563,657, 453,996, 678,564, 234,786, 123,534,975} En este caso, no hace falta precisar un tamafe ara el array. El cimensionamiento se haré automaticamentesegi el nme de valores dedarados Utitizacién del array Los elementos de los arays son acesibles dela misma manera que una variable clsica,Sélo es necesaro afar el ndice dl elemento que se qui manus cifraNegocio(6]=12456: contenido de una celda de array puede uiizarse exactamente de la misma manera que una variable del mismo tipo. Hay qe tener cidade a ‘manpular “un aray y no intentar cedar “a una cada quero evsta, bajo el riesgo de obtener” una excepoén dal Arrays de varias dimensiones Los arrays de varas dimensiones son de hecho arrays que cotinen otros arrays. La sintans de decaracién es similar ala dun array excepto que se eben expeciicar tants pares de corchetes como cimensones se desea tener nt (10) nate ‘Su crecién también es similar af de un array de una dmensién excepto que deseames indicar un tamafo para cada una dels dimensiones. sotrizenew snt(21(315 {1 acceso aun elemento de a matris se realiza de manera idéntca indcando os indices que permitenidentficar I celda de la matrix en cues sateiz{0l{! a sintaxs que permite inclzar una matric en el momento desu delaracion es un poco més compleja, tL) matrize( (11, 212,13), (21, 2,23), (31,32,33)9: Este ejemplo crea una mati cn dos dimensiones de tres cldas por tes. x creacén de matrices de gran tamafo con esta técnica puede ser pelgrosa Manipulaciones habituales con array ‘cuando se trabaja con arrays, hay clertas operaciones que se reali ‘on array. La mayorla de elas ertn Gspontles gracias ala case de aay, requarmente. Este pirafo describe las operaciones més correntesrealzadas Sicid hesays Que proporcona numeroaoe modes ster de manipulac6n (obtener etamaio de un array: baste con ular la propiedad Lens del aray para conocer e nmr de elementos que puede contener. En el caso e un aray muticimensional, nay que recordar que se trata de hecho de arays de arrays. La propiedad eng inde, pero tant, mero de tlementos dela primera cimensén, Para obtener Ia misma informacén de las dems cimensiones, hay que uBlzar la propedad ent decade clea Gal aray de nivel inferior ftriz-ney intf@) 0) Systen-out.prantin(“et array contiene * + aatriz.Length + 1 egkda et agers 81 Keath» ealdas")s ‘Buscar un elemento en un array la func binstySeaych perme efectuar una bisqueda enn aay, Recbe como parimetros el array en el cal se hace la bisqueda y el elemento buscaco valor devueto coresponde al indice donde se enconté el elemento © un valor negave Sel elemento no 1a sido encontrade Para que esta func reaice la bisqueda de forma Gptia se debe ordenar el array previamente WEL] cifravegocio~ (1234, 563,657, 453,986, 678,568, 234,786, 123,534,975) rrays-sortettrahegocio}: Systen-out:prantin(arrays,binarySearch(cifrategoeio, 123)) COrdenar un aay: a func zo=s ordena el array que reibe como parémetr. La ordenscdn sigue un orden afabtico para los arrays de cadena de caracteres yun orden ascandente para les de valores numérios. atl) citranegocion(i234, 563, 657,455,986, 678,564, 254,785,123 534,975) Arrays. sort eatraneyecio) for lant S00; ccs frakegocio.Length:is+) t Systen.out.print(cifralegocio[é] + "\t"): httpsislwmweni-training.comclient_netimediabook aspx?idR=111698 ans 4162018 NI Training - Libro online Muestra al resultado siguiente: 1a funcén paraileisort realza tambidn la ordenacién dela tabla, aunque uliza un algortmo que expota las capaidades de una méquina smutiprocesado: Mostrar un aray: la funcién eos .g permite obtener una repeesentacén con la forma de cadena de caracteres del array que se pasa como Systen.out.printtn(Arrays,toString(eifraepocio)}: Muestra al resutado siguiente: 1123, 234, 453, 524, $63, 568, 657, 678, 786, 975, 986, 12347 2 funcién deeptosting efectia la misma operacién pero para una mati soe nateze((21, 22,13}, (21,22,23},(31,52.33)): Systen.outprintin(Arrays,doepfostrangtnateia) Muestra al resutado siguiente: Tan, 22, 13), (22, 22, 231. (BL, 32, 331 Copiar un array: estin disponibles dos funciones para la copia de arrays x funcin copy0r copia un aray enter con la posibldad de modifcar su tama. La funciin copyorsange efectia una copia de una parte del aray nti] copiacitravepocion aplacttratlegocloskrrays.copyOt(citraNegacio, 24): Systen.cut-prantla(arrays.tostring( copiacitrategocio)) Muestra al rsutado siguiente: BrinerTrinestrecArrays.copyOfRange(cifratigacio, 0, 3) Systen.out:printin(arrays:tostrang(prinerTrinestre)) Musstra al resutado siguiente: (0234, 563, 6571 Rellenarun arrays la funeién 1 se uliea para relenar todas las celdas de un array con el mismo valor. 5. Las cadenas de caracteres as vanables de tipo xing permiten manipularcadenas de caractees. amas 2 ver céme realizar las operaciones més correntes en las cadenas de caraceres Creacién de una cadena de caracteres El método més sencilo para crear una cadena de cracteres consete en considera el tipo String como un tipo primitive del lenguajey no oman objeto, En est cas, la asignacion de un valor ala varable va a provocar ly ceacién de una instania dela clase String. También es posible crear tuna cadena de caracteres como un objeto ullzando et opereder nex alguno de los constructoes dsponbles en la clase Sezinc. Bl elemplo de cago siguiente presenta las dos soluciones. String cadenat-reni* String eadena2cnew Séring( ent"); Después de su creacin, nose puede modicar una cadena de caracteres. La asignacién de oto valor 2 la variable provoca la creaién de una nueva Instance e la dase string. La dase String coniene numerosos métodos que permiten modiiarcadenas de caracteres. Al ulizao, tenemos a sensacién de que la uncion modifi el contenido de la cadena iil peo, en realda, la funeén devuelve una nueva istanca que contene resultado, Asignacién de un valor Hemos visto que pare asgnar un valor a una cadena es necesaro especicarla entre los caracteres “ y*: se planta un problems s queremos que e ‘ardcter "forme parte dela cadena, Pare que no se interpreta como cardcter de principio defn de cadena, hay que poteperlo por una secuenca de (escape como ene ejempio siguiente: ‘Serang Cadena Gauenae" Dijo: \"ysasta yar Systen-out.printin( cadena) demos visualzar: Di: “iBasta ya" Para os ejemplos sigulentes, vamos a trabajar con dos cadenas: Extraccién de un carécter particular httpsislwmweni-training.comclient_netimediabook aspx?idR=111698 ens 4162018 NI Training - Libro online Cadenai = sel invierno serd Uluvior0" {idena2 = “el invierno sera trio's Para obtener al cardcterstuado en una posiindaterminada de una cadana de caracteres, e debe utlzar la funcén chazAt properconand como ‘argument indice del cardcter ave deseamaos obtener El prmer carécter tene el indice ceo, como para un aay. Esta funcén dewusive un carter (chan). Systen.out.printin("el tercer cardcter e 1a cadenal es * + Cadena charAe 20)! Obtener una caden: ongitud ara determina a lngitud de una cadena se dspone dela fncién lenge dela clase Seeing. System out grant cadena contine * + cadena. tenn) + * ‘Subeadenas La funcin subst ing dee cage Sting dewelve una seccén de una cadena en funn de as posiciones incl y final que ele proporcionan como parimetrs, La cadena obtenida empieza por ol cardctr ubcado en la posicién Ina (prince) y termina en e carécter que precede a la poscén fa Systen.out.printtn("un trozo de 1a cadenal: "+ cadenal.substring(3,11)) Podemos vero siguiente: un traze de la cadenat: snvierna Comparacion de cadenas ‘cuando hacemos una comparacin entre dos cadenas, tendemos ® ulzar el dole igual (==), como se relzaba antes. Este operador funciona corectamente con los tpes primitives pero no poder olvidar que las cadenas de caacteres son de tipo objet. Hay que wizar las metodos dela ‘Gass Sesing para efectuar comparacones de cadenas de caracteres. Ei método «ais compara la cadana con la Que se pata como pardmeto, Devuelve un tootean igual a true si las dos eadenas son Wénbcas y por supuesto un Dooiean igual 3 false en e360 conan. Esta funosn Gitingue entre minisculas y mayisculas durante la compari. La funeién equaisigsorecase realza la misma accién per sin tener en cuenta esta atin, fF (adenaleaats cadena) Systen.out.printIn("Las dos cadenas son idénticas") se Systen.out.printtn( "las dos cadenas son diferentes") {© 8 nos dejeres engaiar por las aparincias. En certos casos, ol operador =~ es capaz de realizar una comparacén corecta de cadenas de Caractres.E siguiente cétige funciona corectamentey devusve el resultado espera, considera que ambas cadenas on Wénbcas. ‘Sering slm-pepe Strang £2-"pepe™s i182) t systen-out.printtn("cadenas idénticasé): 3, aise systen.out.printtn("cadenas diferentes"): > ‘De hecho, para ahorar espacio en memova, Java utliza en este caso una Gnicainstancla de la case String para las vaables St y 52, pues el ‘contenido de amb cadenas es aéntica, ‘bas variables 1 y #2 hacen referencia ala mma zone de memeria,y el operador confirma su igual. Spore contrario,utizamos el siguiente cbaig, que exge explicamente la creaién de una instanca dela ase Stzing para cada una de las ‘variables si 52, el operador == noes capa de confrmar la gual de las cadenas. ‘ering ei-new Stringi pepe) Strang S2znen Strina(-pepe")i ie (hess) ¢ systen-out.printtn("cadenas idénticasé): > alse q Systen-out.printtn(*caderas diferentes"); Por el contrarie, para realizar una clasfcacéntenemas que utiizar ef método conpareTo dela case String o la fneién compareTorgnoxecase, Con estas dos soluciones, hay que pasar como pardmetos le cadena que se debe comparar. Se devuelve et resultado de a compara bao la forma Ge un entero inferior a caro sla cadena es inferior ala recibida come parametro gual acer s las dos cadanas son ices, y superior a cero sla ‘adena os superior ala ecbda com pardmetr httpsislwmweni-training.comclient_netimediabook aspx?idR=111698 10/13 4162018 NI Training - Libro online 7F (cadenal conpareTotcadenaz)>0) ‘ Systen.out.printtn(cadenal es superior a cadena2"); se 11 cadenan.conparetotcadena2)<0) t ut. printtn(eadenal es inferior a cadena2"); Systen.out.printin("tas dos cadenas son idénticas”) as funcones starctiltn y endetiich permiten comprobar sla cadena empieza con fa cadena reiéa como parimete os a cadena termina con a cadena recbida come parimetr. Se puede uiizar a funcén crsewich, por ejempl, para comprebarlaextensién de un nombre de her, [String nowbre-"Cédigo. java iF (nombre. endshith("java")) t systen.out.printin(es un archive fuente java"): ‘Supresién de espacio func ‘oa cadena, = permite supimi los espaies en blanco siuades delant del primer cardcter significative y después del Gitmo caricter significative de [String cadenom en : Syster-outprintin("Longstud de ta cadena: * + cadena. Length): Systen-cut-printint"Longitud de Ua cadena sin espacios: " adeno: trae) Tenge) Cambiar las letras 2 mayésculas 0 mindsculas Todo a mayisculas: systen.out.printtn(caéenal.toupperCase() “edo a mindset: Systen.out.printtn(caéenaltoLowerCase(}: ‘Biisqueda en una cadena El método indexor de la dase String permite buscar una cadena ene! interior de tra E parmetro corresponde ala cadena buscada. La funcén ewelve un entero que incca la posicion donde se encuentra Ia cadena 6 -1 sino se encuentr. Por defect ia bisqueda empieza al principio de Ia eadena, saho si utlizamos otra versién de a funoSn inex0% que reabe dos pardmetos, el primer pardmeto es, para esta version, la cadena Dbuscada, vel segundo la posicn incl dela basque String bisaveda: ‘int posicisn ‘isqueda = "e": Bosieldn = cogenal.indesOt (bisqueda) White (posicion > @) t Systen.out.printtn( cadena encontrada en la posicién * + postcién); osicien = cadenal.andexOF busqueda, posicionel): Systen.out.printia(tin de La bisqueda"): CObtenemos ia visuaizacén siguiente: ‘adena encontrada en la posicin @ fadena encontraa en ta posieson 7 dena encontraga en ta posiesén 12 finde te busqueda ‘Sustituci6n en una ead ' veces puede ser preferile buscar a presencia de una cadena en el interior de tr, como enel ejemplo anterior, pero también sustuir as porciones Ge cadenas encontradas La funcion piace permite especica’ una cadena de substitcin para a cadena buscade, Recibe dos parémetres: + la cadena buscada ‘String cadenas: adenel replace(“invierno", “verana"): out printin( cadena) CObtenemos fo siguiente httpsislwmweni-training.comclient_netimediabook aspx?idR=111698 nn3 4162018 NI Training - Libro online fl verano seré Ulwvioso Dar formato a una cadena 1 métedo coxniat de la clase Sting permite evtarlargas y complcadss operaciones de conversion y de concatenacién. El primer parmetro que fecibe esta funcién es una cadena de carateres que indica en Qué forma se desea obtener el resultado. Esta cadena coniene uno 0 vais mats de formateo representador por el carder % sepuldo de un cardcer especiico que indica en qué forma debe presentarse Ia inlormacén. Debe rec, 3 ‘ontnuacin, tants parametros como motives de formateo, La cadena devusta se conaruye replazando cada uno de los motives de formato pos ‘lor del paremetro correspondiente, el remplazo se realaa en funcion del orden de apariain ce los matives. La siguente tabla presents los Drncpsls motivo de formateo isponibes, ative ‘Descripcion we Tnertar un booleano we Tnertar una cadena de caracteres a Tnsertar un mero entero %e Tasertar un nimaro entero en representaddn octal cS Tnsertar un mero enero en representaddn hexadecimal se Thera un mere decimal representado en formato Gertfen on Tnsertar un sata denen raiguonte ejemplo de cbigo Boolean baer dovbte 6219.6; Strang S=" Suatraccon Be é https:jlwmweni-training comiclient_net/mediabook aspx?idR=111695 1B 41672018 ENI Training - Libro online ‘Operador ‘Operacion efectuada Eiempio Resultado 7 matipicaaibn a 7 Disibn 2 sas * dul (esto entero de a ven) Bes z Los operadores bit a bit Estos operadores efectian operacones Gnicamente con enteros (Byte, Shor, Integer Long). Tabajan a nivel de it en las variables que manipulan ‘Operador ‘Operacion efectuad Fiero Resultado i ‘Obinaro 29196 at - Dexciosvo oe 7 > ‘Desplazamiento hacia a darecha (@ivain por 2) BSH 5 = Desplazamienta hacia Io nquirda (mulupizacon por2) | 26<<1 2 Los operadores de comparacién ‘Se utilzan operadores de comparacién en las estructuras de control de una apiacin (11, vite.) Devuelven un valor de tipe ootean en funcién at esutado de Ia compara efectuada. A contac, la esvuctura de control ublzard est vale. ‘Operador Operacién efectuade Bjemplo Tpualded Tae E Desiguadea te = inferior te > Superior ® fate Tnferoro guale te Superior igual a Tale Tnstanceot “Comparaién del tipo de la ‘Ot instanceof Clente | ‘Toe sila variable O1 hace referencia a un Variable con tipo inaicado abt gen part de acs Cente 0 6. El operador de concatenacién El operador + (mis ya wtzado para la suma se utiliza también para la concatenacién de cadenas de carcteres. El funclonamient del opeadr viene ‘determinado por el tipo de los operandos. Si uno de los operandos ex de tipo ering, el operador + (mis) efectin una concatenacin cn, ‘eventualmente, una conversion implcta del tro operando a cadena de caracteres. Un peauei inconveniente del operador + (ms) es qe no destaca por su velocidad par las concatenacones. En reliad noes realmente el operador Ia Yuente det probes sno la tenia utiizada por Java pare gestonar Ins cadenas de caracteres (no se pueden modicar después de su crean). St ‘tenemos que ejector varias concatenaciones en una cadena, ex prefenbleutizar in clase St unyutfex Eiemala ‘ona duracisn: ‘tring tiebre, Strang tortusan {ong praneipio, fin principio = System, currentTineMit1is(): for tant i= i t= 10000; s+) t tortuga = tortuga + ° 7 + A } fan = systen,currentTinemitlis() uracien = fin-praneipie: ‘Systen-ovt.printtn("duraci6n para ta tortuga: * + duracién + * principio = System currentTinallttis()? Stringbutfer *o = new Stringbutter() for int 1'= 0: 1 == 10000, 14), t sb.append( "): sb:append(t) ) Leeore = sb.tostringt); fin = system, correntTinestlis() duracagn = Tin-principie, Systen-out.printin("duracisn para La Uebre: * + duracién + “as") HF (Uiabre-equats (corto) ¢ Systen.ovt.printtn("Las dos cadenas son idénticas”) Resultado dei carrera [goracien para ta tortuga: 95305 [doracien para ta Uebre: Ons as to’ chdenat son iasaeicas lest resultado no necesta comentarios! https:jlwmweni-training comiclient_net/mediabook aspx?idR=111695 28 4162018 NI Training - Libro online 7. Los operadores légicos, Los operadores lic permite combinar las expresiones en estructuas condiconales 0 estucturas de bude. ‘Operador ‘Operacion Ejemplo Resultado = Visio ir (eesty & esta) verdad ites y testes verdad H ‘aico Test) Testa) verdad teri o teat es verdad - ‘Oexciosvo Fest) * (HD) ‘verdad tel test? es verdad pero no silos tos son verdaderos a! misma tempo 7 egacen Weresy Tovierte ol esutado del test aa Yiescs ‘(est (es) Taal aly i pr ests se evar W 0 Walco vr eestt) 1 sta) Taal lO epee peo v2 sos waar “endremos que tener cudado con ls operadores 88 (dole ampersand) y || (ubera doble) porque la expresin que probaremes en segundo gar (est2 en nuesre caso) a veces pode no ejecutarse. Siesta segunda expresiéa modifia una variable, ésta silo se modicard en tos casos siguientes + primer test verdd en el caso del 88. + primer test flso en el caso de. 8. Orden de evaluacién de los operadores ‘cuando se combinan vais operadores en una expresin, se evaldan en un orden muy precio. Los incrementesy decremantos pefiedos se eecutan fen primer lugar, 2 cantnuacn las operaciones artmaticas, ls operaciones de comparsie, los operadores Iles , por ilimo as asignaciones. Los operadores artméticos también tienen entre ellos un orden de evlunciin en una expresién. orden deevaluacién es el siguiente: + Nogacisn + Mutepiacin yavisién + Diisiin entra (\) + Méuto oa) + Suma y esta (4, -) coneatenacin de cadenas (+) ise necestaestablecer un orden de evaluacién diferente, tendremes que ubicar las expresones con prioriéad entre paréntesis com en el siguiente ejemplo: metas eee En una expresién podemas utilizar tantos niveles de pardnasis come destemos. Sin embargo e: importante que la expresiin contenga tantos paréntesis de cere came de apertura, pues en cso contra el compladar generar un eroc https:jlwmweni-training comiclient_net/mediabook aspx?idR=111695 38 4162018 NI Training - Libro online Las estructuras de control Las estrctras de control pemiten modifiar el orden de ejecucién dels instrucclones en nuestro cig. Java dspone de dos tipas de estructura: + Las estracturas de deci: orienta a ejecucién del cédigo en funcén de os valores que pueda tomar una expesién de evaluacién. + Las estructras de bude: permite ejecutar una seccén de cddigo cierto nimaro de veces, hasta que o mientras una condiién se cumple 1. Estructuras de decision ‘ston dos solusonesposibles a. Estructura if ‘Se pueden usar hasta custo sintans paral instruc if (condici6n)instruccién: Sila condcién es verdadera a instrucin se ejecta, La condicién debe ser una expresén que, una vez evaluad, debe devover un valor nooiean ‘rue 0 else. Con esta Sinai, slo la instucelén stuada después del $= serd secutada sila condicén es verdadera, Para ejecutar varias Instrucones en funcén de una condicién debarosutizar la sntaxs siguente, [iF (condicionr t Instruccién 1s instruccion oi En este caso, se ejecutaré el grupo de instrucconesstvado entre as Haves sila condi es verdader, También podemos especiicar una © varias instrucones que se ejecutarn sila condicin os asa iF (condicionr t snstruceidn 1 Instruceién nj ese ‘ Instruccién 1: indtruccion ni También podemos nidar as condiciones en la itans FF (eondicionty ‘ snstrucesén 1 indtrucesén 0 > ise 1¢ (condietsnz) ‘ Instruceién 1 instruceson , else iF (condicions) ‘ nstrucesén 1 indtrucesén 0 else ‘ Instruceién 1 instruceisn En este caso, se comprueba la primera conic. Si es veradera, se ejeuta el Bloque de cédigo correspondiente, y sine, se comprucba la siguiente asi sucesivamente, Sino se verifies ringuna condicin, se ejector ol logue de codigo define a contmuacion del cise, La isruccion e152 ne es ‘sbligatoriaen esta estructura. Por ello, es posible que nose legue elecutar nstruccién algun st ringuna de las condiciones es verdadera, También existe un operadercondconal que permite efecuar un i... cise en una séla instruccién, condicién 7 expresién:expresién2: sta sot equate ala siguiente: TF (congicion) expresiani: ete expresténzs https:siwmweni-training.comiclient_netimediabook.aspx?idR=111696 us 4162018 NI Training - Libro online b. Estructura switch {estructura cuccn permite un funconamiento equivalente pro ofrece una mor lgiildad del cédgo, La sintans os la Siguiente suite (oxpresion) t case vatorl Tnstruccién 25 Fndtruceien ni case valor Tastrucetén 25 Fndtruceien ni default: ° Instrucetén 25, indtruceién ni , valor de la expresién se evaléa al principio de la estructura (por el seitch) y, a eontiuscén, se compara el valor ebtenido con el valor especticado en el primer cass. Silos dos valores son quales,entonces el bloque de cédige 1 se ecu, En caso convario, se compara al valor obtenido con el valor del care siguiente, shay corespondencl, se eJecuta el bloque de cdgo y ast ‘cesivamente hasta el imo 2380 Sino se encuentra ningtin valor concordante en los diferentes case se ejecuta el bloque de cédigo especicade on el derau. Cada uno de fs logues de cédigo debe terminarse con Ia instucrién reas Sino es el e350, la ejecucién continuars por el bloque de cbdigo siguiente hasta lencontrar una instruccén ivesico hasta el fin de la estructura svicch, sta slucion se puede ilizar para poder ejectar un mismo bioqve de ‘aig cuando concen distntos valores. valor que se debe comprobar puede estar conteido en una varable, pero también puede ser el resutado de un céleul. En tal caso, sto so ejecutae! célcle una nia ver al principio del sith. El tipo éel valor probado puede ser numérc, entero, cardcter, cadena de cractres © fenumerdién. Pr supuesto, es necesaro que el ipo dela variable comparada correspond a tpo de as valores en los ferent case. Sila expresion es de tipo cadena de carectere, se utliza el método equsls para vercar si es igual @ los valores de los ditntos case. La ‘comparacién hace por tanto estincién entre maylscuas y minisculas. BufferedReader br: ‘brs new BufferedReader (new InputStreanReader (Syston. in)); String respuesta = "=: Tespuesta = br, readLine(); sudtch (respuesta) t case's" ‘systen.out.printin(*respuesta positive’): ‘systen.out.printIn("respuesta negative’): ‘Systen.out.printIn("respuesta errénea"); > Las estructuras de bucle Disponemes de tres estructuas: ite (congicion) [do ss White (eondtctén) for “Todas tenen come objetivo ecutar un blogue de cégo un determinade nimero de veces en funcén de una cond 1. Estructura while sta estructura ejecuta un bloque de manera repetitive mientras la cndicién sea t=ve. pte (coeicien Instruccién 1s instruccion oi a condciin se evakiaantos del primer cic. Si es false en este momento, el bloque de cédigo no se ejecta. Después de cade ejecuckn del logue de cid la condién vuelve @ evaluarse para comprabar si es necesarlo volver @ eJecutar el baque de cSaigo. Se recomienda que Ia jecuaién de blaque de eign contenga une o varias instruccones capaces Ge hacer evoluconar la candi. Si no ese caso, el bule se eecutard ‘fin. Bajo inguin concepto se debe poner el carter ; despuds del while porque en este caso, el boque de cidigo dejard de asocarse con el bce. bb. Estructura do. while https:jlwmweni-training.comvclient_netimediabook aspx?idR=111696 215 4162018 NI Training - Libro online jaive (iio) t systen-out.printta(s): nstruceisn 1 ingervceisn 0: d nite (condicién) Esta estructura tene un funconaminto iio a fa anterior excepto que la condcién se examina después de a ejecucién del Bogue de cédigo. Nos permite garantizar que el bloque de céigo se ejecta al menos una vez ya que fa condioon se comprucba per primera vez después dela primera tjecucion del logue de edcige. 5a conlién es true, el Bogue se ejecuta de nuevo hasta que la conden sea 2120. Debemos tener cuidado en no evdare punto y coma después del wns le, en caso contrat el eompladordetectaré un ero de sintaxis t systen.ovt.printtn(i): , tnste(seao): . Estructura for ‘cuando sabemos e nimero de teracones que debe realizar un buce, es profribe uiiar la estructur for, Para poder ular esta istruccén, se debe dediarar una vaable de contador Es posible decarar esta variable en la estructura for 0 ene exterior, V ental caso Se debe declarar antes de Ia estructura Zor 2 sintaxs genera sla siguiente Tortiniclalizaclon;candiclénsinstraceiba de ivereclén) t snstruceisn 1 Instruccién ns , La iniciizaciin se ejecuta una Unica vez durante la entrada en el buce, La condicén se evalia en el momento de la entrada en bucle y, 8 ‘ontinuacin, con cada eran, € eauado de fa evaluacion dela candcién determina si el bloque de cbdgo se ejecta: para ele, hace fa tvaluar la condcén cme tue, Después de a ejecucién del bloque de cdi se realza la dea iteracién. A eantiwuacion se eomprocéa de neve a condicin yas sueesivamente mientras la conden sea evaluada como true ejemplo muestra dos bucles fox en aecén para visvalzar ura taba de mukipiar, shedB: kes) for (int =a: L <0; WH ¢ Systen-out.printtk * 1 + "\e") > Systen.ovt.printtn() Cbtenemos el resultado siguiente: 2 4 6 8 te be ie a8 ee 3b ae BR 3 oie So 8 i Ctra sintaxis del bucle For perme ejectar un Bloque de cidigo para cada elemento contenido en un aray © en une instancia de case al Implementar la interfaz rverabte, La stax general de esta instruccén es la siguiente Tor (tipo variable: arrayd ‘ snstruceisn 1 ingervcessn a: d [No hay nocin de contador en esta estructura ya que elec por si misma las teraones en todos os elements presentes en el aray a coleccén. La variable delarada en i estructura sive para extraer uno 2 uno las elementos del array 0 de la colecién para que el Bloque de cidigo pueda ‘manipuaros. Por supuesto hace fata que el po dela variable sea compatible con el tipo de los elementos almacenados en el array o a colecoén https:siwmweni-training.comvclient_netimediabook.aspx?idR=111696 35 4162018 ENI Training - Libro online ‘Se debe decarar la variable obigatoramente en la estrucura for y no en el exterior. Sélo Se podeéutltzar en el interior de la estructura. No obstane, no tenemos que preocupames del nimero de elementos porque la estructura es capaz de gestionar por si misma el desplazamiento en array ola colon. iAqu mestramos un pequeno ejemplo par aclarar la suacint con un bucle sco era "anal, “bLanGo"F Serngh) aeraystoroje" int cpt: for (ent = @: cpt < array. length: cote) ¢ Systen.out.printtntarrayteptl) > Come bce £0 de teracién [Sering(h arvayeC-rojor "verde ,vazul","btanco"h: far (string 3! ray) Systen.ovt.printtnts © # eta ubicado en at interior de esta estructure fox no debe modifiar el contenido de a clecin std prohibido agregar o eliminar elementos durante el recorid de a colacin, Este problema no se produce con un array. El tamato del array, a ‘se ho, hace que sea imposible agregar oelmina elementos, El sgulente cicigo pone de relieve esta bmtacion cuando se recore un Re Eay2 ‘oregar un elemento a Azray/iise durant a tera produce una excepeién de po ConcusventHodsficationsxcept ion, AerayLigtStrinp 1st {einen ArrayListestrings0); Astovat"etiente 1°): Ustaeat“eliente 2°) Utlae(ellente 3°) Ustloeat“etiente 3°); for(steing st-tst) t Systen-ovt printtn(st): eistcenaawitnCs')) Ist.asa(vetiente # 2 2 4. Interrupcién de una estructura de bucle ‘Tres iasruciones pueden medica el funclonaminto normal dels estructuras de bude break Sse ubica esta instructén en el nterior del Bloque de cécigo de una estructura de bucle,provoca la sada inmediata de este bloque La ejecucén continia por la nstruccénstuada después de este logue, La istracion break suele ejecutarse de manera condcional porgue, defo contra, as Instruccones posteriores dentro del Bue no legarian nunca a procesarse. En ol caso de bucles anidades, es posible utizar la instruccién break asociada 2 una etiqueta siguiente cio de ejemplo recore una tabla de dos dimensions y se detione cuando se encuentra el valor 0 aneCE) puntos = 110: 85). 1 e185, {85.28 jas int x08, y-0 Bootean Encontrad ise; x spuntos.enath; x) for (y = 6: y « puntostx] Aengthive+) iF (puntostxdiv] == 0) ¢ break buscar; ) » AF (encontrado) ‘system.out.println(*se ha encontrado el resuttado* exe ses oyht A tse ‘system.out.println(“bisqueda sin resultados"): continue sta instruccin permite intrrumpir la eecucin de la Reracn actual dun bucle yproseguir con la ejecusén de la Reracién siguiente desputs de haber comprabada la condicién de sada, Como en a caso de lainstruceldn breakse dabe efecutar cont inus da manera condonaly acta, https:jlwmweni-training.comvclient_netimediabook aspx?idR=111696 415 4162018 NI Training - Libro online su vez, uso de una eiqueta, He aqul un ejemplo de cbdiga que uiiza un bce sin fin y dos intrucciones para mastar le nimeros impares hasta que el usuario tecee un import java io, 10Brcepeia bile alae Teaeserecturas ¢ ‘static boolean stop: alse stetie vod ras steina ara) rw Thread) i public void run() t t cxSysten.in.read() > Eaten (IoExcepcién @) ‘ e-printstackTracel); > pastarey: ong’ contador yhitettrve) i SF (contagor2—-0) it (stop System outprintln( contador); return Lainstruciin satus se utiliza pare sale nmeatamente del toda en curso de eecucin y prosegui la ejecciin por la nstrucién siguiente 3 1a que lamé este método, Si esta stuada en una estructura de bute, provoca en primer lugar la interupcin inmediata del bul yen Segunde lugar la sada del método en al cual se encuentra el buco. Si se ula esta Inetruceidn en una funcén cuyo tipo de etorno es ferete a voices bigatorie propordonar a ia instrucién return un valor compatible con el tipo de retomo dea unc https:jlwmweni-training.comvclient_netimediabook aspx?idR=111696 5I5 4162018 NI Training - Libro online Ejercicios Ejerciclo 1 ‘crear una tabla de ciezcadenas de caracteres y, a cotinuaié, rellnar esta tabla con dreciones de correo elecrérico, Caleular a continuaién, a arb dela informacin incuida en fa taba, el segment de mercado de cada une dels proveedores de acceso Pesta: en una direc de correo electrérico el proveedor de acceso es la parte de a dieccén stuada después del carictor @ dela drecciin de correo etrénico. Ejerciclo 2 Generar tres nimeros aleatoas comprendidos entre 0 y 1000 y, a continuacén, vera si se ha obtenido dos ndmeros pares Sequdos de un ndmero par 5 oe aso, eta hast ene combina apr Monta 9 canine, nme Ge esnyos rena para ebteer dhe Pesta: a ase ah proporcona el método esto random que genera un nimero aleatoro comprendido entre Oy 1 emplo: double num=tath.random(): Ejercicio 3 Generar un nimeroaletoric comprendido entre Oy 1000. Pedy, 2 continuacin, al usuario adwinar el nimero escogide por el ordenador. Para alo, debe Invoducr un numero comprenddo enze Oy 1000. Se compara el nlmeroinroducdo con el calelado pore ordenador y se muestra en la consba "es ‘mayor 0 "es menor” en funién del caso. Se epte la operacion hasta que el usuario encuentra el nimero corecto. Mastrr, @contunuacién, el ASmere Ge ntentos necesaros para obtener a respuesta correcta. Pista: para recuperr los caraceres introduides por teado, tenemos a nuestra dispescién el fujo System.in. Por desgrada, dicho fyjo no broporcona ms gue funclonesrudmentarss pare recupere los dates introducdes por el ueuara (con un lctura carder a carter), Por comadiad, orwieneullzar un objeto Seanmee. Tenemas @ nesta dspesicén una serie de unciones que permiten recuperr valores enteros, £1oat, cadenas Ge caracteres... Estas funcones se danominan nextsce, donde sats debe remplazarse por el to de datos que se espera obtener, por lomo nest Tat par un valor enter, nextisine para una cadena de caadteres, et String cadena: Seanew Scanner (Syston. EadonarsesnextLinet) Ejercicio 4 ‘Aregaralejercicio 3 a epresentacis de tlempo que ha tardado el usuario en adivna a respuesta correcta, httpsijlwmweni-training.comvclient_net/mediabook aspx?idR=111697 wm 4162018 NI Training - Libro online Correcciones Correceién del ejercicio 1 Descompongamos el problema. En primer lugar hay que crear y_relonar la tabla que contene las drecciones de coreo electréico que queremos procesar La tabla direccionesjvega este ol, y e iaiza en ls lneas 13 323, | continucién es precisa extra, de as direccones, la informacién relative al nombre del proveedar El resultado se almacena en una nueva tabla llamada 1istaProveedores, Este procesemiento Se realza en la neas 25 28 Esta tabla se analiza, 2 contouscén, para extraer los distntos nombres de proveedor, que Se almacenan en una nueva tabla nonbbresProveedores. Lie lineas 31 a 48 reslzan este trabajo recommenda la tabla 1istabrovesdazes y verficando si cada nombre ya esté presente en ls {abla nonbzeeProvaedores oradas ala funcén busquedaPoveedor. Devuele al indie dela pasion st se encuentra el proveedor, 0-1 en ‘aso de no enconvarte. En este caso, el nombre del proveedor Se agrega a la tabla nombresProveedores. A contiwuacn, se increments Contenido del tamafiocorespondiente [a tabla nun liente. ara termina, se reco la tabla nonbeesPeovendoces y se recpera en la tabla sunCl Lente al nimaro de veces que aparece el proveedo, para aula, 2 contnuacén,e poreentaje (ness 49 363). ‘package ejercicios. capitulo2.ejerciciol public class Principat t static Stringl] direcctones; Statie String] UistoPreveedores Statie String] nonbresProveesores; Statie ant(] nuncliont Statie int posieions Static String proveedor; public static void main(String] args) t ireccionessnew string{20): Airecctones{o]=~jopoteletontca.es" firecctones(11 tirecciones(2] direcciones(31 dhirecciones(al toneonait, con” freattetefonica es"; cvietorgteletontca-e5 erastinagtelefontc BURDEGNEESSHOe REDE 3. Adrecclones(3]=-rabertogorange. cs": 28 ‘irecciones(6}=-paulattelefonica-es"; a firecciones{7}="Uisatgrait con 2 ‘drecctones(a]=-tonastent cs zB ‘irecciones(9]=rnariagent-es 3 ListaProveedores -new Stringl 16] 2s. ‘or [int 1n0siedirecectones,Length:is+) zr G 28. LstaProveedores{}=direcctones {i} .substringdirecctones i Inara erets a. Ent runclientennew snt( 1015, 2 onbresProvesdaressnev’Steingi10 B Forlint sods i\istaProveegores. Length x t Es int resuttado; 26. resuttadosborundarovedor(ListoProveadores[4): z iiresuteados="2) Fs ¢ 38. nonbresProvessores [posicion]=ListaProveedorestil: a8 hunclientefposicion]++s a fasiciones! 2 , 33 tse ae ‘ a5 runcliente{resvltado]+es a. o a8 } a2 forint 4-0; s static int busquedaProveedor(Steing aonhre) i {forint i+9;,nunero) Bs ‘ 3 System.out.printla(es menor"): Fs ) Ea ) whttt (ounero!=nuszntroduesdo); 2a. SySten-ovtsprintin(Bravol Resuttado obtenido en * unensayos’s* ansayets) ey Ee) Correccién del ejercicio 4 ar evoluconar la apliccén anterior vamos a agregar, simplemente, a incalzaién de a arabe nile con lahore en curso antes de comenzar con er buce (nea 21) Al finalzar el buce (y, por tant, el Joage),realzamos la misma accin con la variable fn (linea 38) La duracin dela partda 2s a Gterencia entre ambes horas. Se calla mediante la nea 3. A continuacin, se converte en hora, minutos segunes para mostrar el resultado (ness 383 42). .packone ejercicios,copitule2.ejercicio# S ingore java-tine. duration; Ja'impare java tine-Localtine: Scinport Java-tine,OFfsetTane; [6.imore javacutit.Scanners https:slwmweni-training.comvclient_netimediabook aspx?idR=111698 28 4162018 NI Training - Libro online B.public class Principat 16. public static vod mainstrina ara 2 nt nunEnsayose B nt numero 1s. OFfsettine inicio; i. Orfeettine fin: i Duration tiempo: is huneron(int) (Hath. randon()*1000): FY Seenew Scanner {Syston in); Es inielosprfeettine. now)? 2 @o ‘ ratntreducidose.nextint(); rionensayesees Trinumtatraductdocnunero) System.out.printla(es mayor"): ) FnomIntroducidosnunero) system.out.printin("es menor"); 2 while (nupero anuntntrodueido) : ‘faneoffsetTine nowt Ueaponduration betveen(inicto, tin): Loeattine. duracior tdraclor=Lacat Tine. ofSecondofoay tienpo getSeconds()) Systen-ovt:printtn(" Bravo! Resultado encontrage en * + mensayas + * ensayols) 9 * + duracion.gettour() + * nora(s) * uracion-gethinutet) +” minutols) * + ‘duracion.getsecond{) + * Segundo(2)-), ESHES 2 SESSGSERPSRNUEOED https:siwuweni-training.comclient_netimediabook.aspx?idR=111698 38 4162018 NI Training - Libro online Introduccion Con Java, la nocén de objeto es omnipresente y precisa un minima de aprendizae. En primer lugar, nos cenraremos en los principlos de la programacinorientada a objtos yen su vocabulaieasociado, para pasar luego a ponero todo en préctica con va, En un lenguaje procedural clisin, el funconamiento de una aplicacén estéregido por una sucesién de lamadas a diferentes procedimlentos y funclones disponibles en cédigo, Estos procedimiento y funcones son los encargades de procesar l= dato dela aplicaciin representadcs por lat variables de esta Uitima, No existe relacién alguna entre los datos vel cBdigo que los manipula. Por elconrare, en un lenguaje orentado a objets, ‘amas a intetar agrupar el cosigo. 8 esta agrupacion se le llama cate. Poro tant, una aplcacién desaraia con un lenguaje oventado 9 obsetos {est formada por numeresas cases que representan los diferentes elementos procesades por la aplcacién. Las clases describ las caracteristicas fe cada uno e os elementos. E ensamblade de estos elementos va a permit el funcenamiento dela aplcacin. Este principio uti amplimente en otras disciptinas adem de Ia informatica, En Ia industria automoviistia, por ejemplo, seguramente no existe ningun constructor que dsponga de un plano que contenga todas y cada una de as piezas que consttuyen un vehicula. Pore contri, cada Subconjunto de un vehiculo puede estar representado por un plano espacifen (el chasis, la caja de cambios, el motor). Cada subconjunto se ve descomponiendo a su vez hasta la pieza elemental (un perno, un pistén, una rueda dentada..) Es el ensamblado de tos estos elementos fo que permite fabricacén de un vehicula, De hecho no es el ensamblado de os planos lo que permite la construcclén del vehicul, sino el de las plzas fabricadas a partir de ellos. En una aptcacin informatica, seré el ensamblado de los objeto creados a partir de las cases lo que permits el funcionamiento dela aplicaién Los dos términos, clase y objeto, suelen confundtee, aunque representan nocones bien distintas, La Case describe In estructura dein elemento mientras que ol objeto representa un elerplar creado a partir del modelo de cicha estructura. Tas su creacén, un objeto es Independiente de otros obetos onstuides a parti dela misma clase. Por ejemplo, despues de la fabreacén, la puerta de un coche podré pitarse de un color dstinto al de las ‘res puertas fabricados con el mismo piano or el contraro, sel plane se modifica, tadas las puertasfabricadas tas la madifcacén se benefcarn de ls cambios aportados al plano (con el "esgo de no seguir senda compatbles con versiones anteriores) Las cases estén consitudas por campos y métodos. Los campos representan las carcteristcas de los objets. Estin identicadas por variables y es posible leer su contenido 0 asignales un valor dvectamente, E robot que va 2 pntar una puerta cambaré el campo color de Gicha puerta. Los ‘étodos representa acclones que un objeto puede efecuar. Se ejecutan mediante la creacion de procedimientos ode funciones en una dase sto so es una faceta dela programacién ovlentada 2 objets. Del mismo modo, existen otros tres concepts fundamentals: + Lwencapsulaciin + La herencia +! palimortsme La encapsulacién consste en exconder elementos no necesrios para la utiizacién de un objeto. Esta técnica permite garanizar que e objeto se Ullcecorectamente. Se tata de un princilo muy utlizado en otras aiscplinas aparte de a infermatica. Regresanco al elemplo Ge la industria dela automévi,Zeanoce usted cme funciona la caja de cambios de su veniclo? ora cambiar de marcha, Java cuenta con ls siguientes modicadoes: private: indie que el método slo puede utiizarse en la lase donde est defini, rotected: india que slo se puede utizar el método en la clase donde estédefnido, en las subclases de esta clase y en las dems cases que Forman parte del mismo paqute pubi.et indica que se puede utizar el métedo desde cuslauier ota clas, ‘ino se utiza ninguna de ests palabras, entonces la visible se limitaré al paquete donde esté defn a clase. ‘atict indica que ol método os un método de ca aotact: indica que el método es abstracto que ne contiene cio. La clase donde ests defini también debe ser abstract, in indie que el método no puede Ser sobrescto en una subelase. netivet indica que el cdiga del matodo se encuentra en un fchero extemo escrito en oto lengua, synchronized indca que el método blo puede ser eecutado por un nico ilo ala vee 51 o de ern puede sr csr tn de dat, Uo Ds del enue o po eet. 5 el método one noma a deer, deberemes {sara palabra clave voia an suttuclén del po de rtorn, a lista de fos pardmetros es iéntca una lista de decaracn de variables. Hay que especficar el tipo ye nombre del parémetro. i se esperan ‘aros parimetros, hay que separer sus decaraciones con ona coma, incluso nose experaningin parsmetr, Ins paréntess son oblgatoros 1 palabra cave chron india la lista de excepcones que este método puede lanzar durante su ejecus, httpsijlwmweni-training.comiclient_net/mediabook aspx?idR=111701 2a 4162018 NI Training - Libro online ‘Macias dos métodos a nuestra dase Pe=scna. plc class Persona t private String apettido: Privete String aanbrer Brivate Loca\bate fecha_nacti public Yong cateutotdad() return fecha_nact-until(Lecaloate.ow(),Chronounit. YEARS) public void visuatizacién() t Systen.out.printin(apetLido: * + apel iso Systen-outprintin{ nombre! + norbre) Spsten_out prantin(-essds ” + public Persona(string a,String 9,tecaloate f) apetidona: ‘echo. naciots , os destructores son otros métodos partculares de una clase. Al igual que ls constructors, se invocan impitamente pero niamente durante a estruccdn de una instandla de case. Se inpene la fma del desuuctor. Este metodo debe ser protecves, na dewuelve Angin val se lama btigatoriamente finaize, no recbe ningin pametroy es susceptible de produc una excepcién de po Thnrowsne. Con mato de esta fra Impuesta, slo puede haber un nico destructor para una casey, pele tanto, la sobrecarg no es posible para les destructores, De este modo, la declaraciin den destructor es Ia siguiente: protected void finalize() throws Tarovable t » Er cbdigo presente en el destructor dae permit a eracdn de recursos utilzados por la clase En podemas encanta, por elemple, cige que {era un archive abieto por la clase © el ere de una conexién hacia un servidor de base de datos. Veremos con detalle, en la secién Destrucaisn {. Campos y métodos estéticos Los miembros estitcos son campos © métodes que son acesbles por la propia clase o por cualquier instanca dela clase. También, en algunos lenguajes se habla de miembres compardos. Son muy dbles cuando es necesaro gestonar, en una clase, informarién que no es especie a Una Instancla dala cate sin sla propia case. A diferencia de los miembros de intanca, para le cuales existe un ejemplarporistancla dela close, de os miembros estdicos existe un Unica eJemplt La modicacn dl valor de un micmbro de instanclas6lo modifica el valor para esta istanca de {Gaze mientras que la adteacén del valor de un miembra eetitice modifica el valor para todas las instancas dela case. Loe miembros estat Son asimlabes a varabes globaes en una aplicacin. Se utlzan en el cédigo haciendo relerencia a ellos por el nombre dela clase o graces 2 una Instancia de a clase. No se aconseja esta Sepunda solucén ya que no Gemuestra el hecho de que estamos trabajando con un miembo estatea. EL ‘complador onera una advertenci 5 detecta dca stuacin. Los métodosestticas siguen las mismas raglasy pueden se ties en la creacin de biblotecas de fuclanes El ejemplo clsico es a cage sath ya ‘ue cuenta con un gran nimero de funcones estes. Los métodos estatcos poseen sin embargo una Imitacin, y es qve silo pueden ufiizar ‘onables locales u otros miembros estities ge la case, No pueden usar miembros de mstancia de una case porgue puede ocurir que el metodo se Uc sin que exist una Instancia dela ase i complador detectaré esta stuaciin yo indcaré: non-atatic variable cannot be xegexenced fxom a static content Los miembros esiticos deben delrarse con Ia palabra clave static. Como para cualquier otro miembro de una clase, podemos especfiar una ‘isblidad, En cambio, una variable local a una funcn no puade ser etic, ora iustrar Ia utiizaciin de los miembros estiticos, vamos a afar ala clase Persona un campo numérico, El valor de este campo se forma autométicamente tas la creacién de cada instance de la clase y seré Unio para cada instanca. Los constuctores de nuestra case estan perfectamente adaptades para evar a cabo este trabajo. En cambio, enemas que memorzarcusntas nstancas Se han creado para poder asgnar Un nico numero a cade instance, Una varlable esttca prveda se encargaré da esta operacén. A continuacié, te presentams el cago conespondiente public class Persona t private String apettid Brivete String aanbrer Brivate Localbave fecha_nacti ZF congo privade representando et ninero de 1a Persona pravete int nuteros UF congo est3tico privado representand el contador de Personas pravete static inv nuninstancias public String getapettigo() t return apettido; > public void setagelLido(String a) apelLido = a.tollperCase() public String gettonbre() ¢ retuen nonbre: https:jlmweni-training comiclient_net/mediabook aspx?idR=111701 saa 4162018 NI Training - Libro online ) public void sethondre(String n) ‘ ronbre = n.toLoverCase(: 3 11 étodo de instancia que permite obtener el ninero de una Persona pubtie ant gethinero() ‘ ) 17, metodo estético que pernite obtener el ninero de instancias U1 crendas buble Static ine getmuntnstancias() : 2 Bublic Persona) ‘ apettigons*; Fechosnacionult 11 zeacian de una nueva Persona y por Yo tanto sncrenentaesén del contador tuninstanciassss ‘asignactin aU nueva Persona de su oinero , 9. Las anotaciones ‘Se ution las anatacones para afar informacién adcional a.un elemento. Esta infrmaciin na ene ningin efecto en el cidigo pero puede Uuizarse en ef complader, en la maquina Vitual que se encargaré de la elecucén de la aplicacsn on certasherramientas de desarrall. Se pueden faplar a una dase, 2 un campo, 0 a un metodo. Debe especiicarse antes del elemento al cal se feller. Una anctadén viene precedida pore ‘Smbole oy esté segulda del nombre de i anotecién £1 compllaor reconoce tres tipes de antacanes que van a permit Ia madieacén de Su ‘camportamiento en tempo de compilstn @neprecated se utliza para indcar que un métado ya no debe ser utizado, Es el caso, por elemple,en el que decdios hacer evluconar un rétodo y deseamos que no se use mas a versén anterr. Esta anetacion no cambia el resultado dela compilcion pero afadeinformacién adiconal 31 cago compilado. Si otra clase Intnta usar este método, se genera Un aviso en el momento dela compilaion del célgo de esta dase, Si Aafadimos esta anotacén al método visualizacion dela dase Zezecna, el cédgo que utlza la dase Persons no debe lamar mas a este metodo, pues generar un avis entlempo de cmpilacén. public class Persona t Brivate String apeltido; private String nombre: private Localate fecha_nacts rivate int numero! rivate statie int nuntnstancias: eoeorecates public void visuatizaciént) t Systen.out.printin(apetLido: * + apel iso Systen-out printtn{ entre! * + nonbred Spsten_out prantin(-eaads ” + caleuloesad()) i Ls compllacén de una case que contene una lamads al método vious izao%0n def dase Ferscna genera un aviso ena lines que contene esta lamas, Javae “XLintsdeprecation Wain. java ain-java:16: warning: (deprecation) viswalizacién() in rsana has been deprecated Bevisuatizaeion(): Lvarning (© 72 o2tener un mensaje detalade Sobre ls avss, hay que ular la ops in: deprecation en el memento de a lamade del complador. override se ula para indiar que un método sustuye a ore heredado. Esta anataciba no es obligatoria pero exige al complador que vetique ‘ue a sustciin se realxdcorectamente (rma idéntica de lo métogos en la Gsee ica y en la case actual). Sino as el caso, 38 acivard un ror de complain, El ejemplo siguiente susttuye el méfodo calcaictsed en una case Que hereda dela case Persone (mds adelante 22 (etal la puesta en prctiea dela herenci). public class Client extends Persona coverrie public Tong catcutotdod() c https:jlmweni-training comiclient_net/mediabook aspx?idR=111701 ora 4162018 NI Training - Libro online , Esta clase se complé sin problema ya que ef método calculotdac tene efecivamente la misma firma que la clase # Intentamas eomplar e!céigo sguiene: public class Client extends Persona t override public Tong catcutotded(int untdad) ¢ ? (Obtenemos la respuesta siguiente por parte del compllador. [Elient jovar6: method does not override or inplenent 9 wethod fron supertype eoverrsae 1 error or supuesto tiene raxin (hay que reconacer que siempre leva razén!), le hemos anunciado nuestra intend de sustur el método caicsicknay, fen realidad, hemos efecuado una sobrecarga, ya que no este un método en Ia cage Perscna con este firma. Si qutamos ls palabra {cave tovereis, el cdigo se complla pero en este ca50 se vata de una sobrecaraa suppresamarnings (*...,.-.*) Indica al complador que no genere certs categorias de aise. Si por elemple deseamos usar dscetamente lun metodo mareado como ebzpracatea debemos utizar la anotacén siguiente en la funn donde se enventra a lamada 2 este métoge, ‘Suppressvarnings( deprecation”) publee steric void mazn(stringt] args) t Persona 9: new Personal): Prvisuatizacion(y: Este cio se complad corectamete sin ningin avs hasta que el método en custin desaparezca completamente dela ase correspondiente. En efecto, tenemos que toner cuenta que la meta dela anotaién aOcprecated es desaconsearel uso de un método, con fa posible intancén de hacerlo dasaparecer en una vrsdn posterior de la ase. Utilizacién de una clase 1a uzacén de una clase en una aplicacin pasa por tes etapas: + la dedaracién de una variable que permite acceder a objeto; + la creaciin det objeto; + la ncatzacén de una instancia 1 Creacién de una instancia as vanabes objeto son vaables de tipo referencia. Se distinguen de las variables cléscas por el hecho de que la variable no conbene dretamente los datos sina una reerencia dela ubvaciin an memoria dande se encuentra la inormacén. Al Qual que en el caso de lat variables de pos mites, las instancias deben decararse antes e su uUlzacién La decloracén se hace de manere iantca ala de una variable dasca (S20 U ot), Persona p: Después de est etapa, In variable existe pero no referencia una ubicacién vida. Contene el valor nu. La segunda etapa consste en crear Ia Instancia dela clase, Se utlza la palabra cave new a este efecto, Recibe como pardmatro el nombre de la case cuye instancla debe creat. £1 operador new Fealiza una pation para obtener la mererianecesara para almacenar la instancia dela casey, 2 continvacié, inicliza la variable ‘on esta dreccién memoria. &continsacén, se invocs al constrictor de Ia clase para cializar la nueva istanca creas penew Persona(): s posible combina as dos operaciones enna nia lines, Persona ponew Persona() En este caso, se voce al constructor por defect. Para uttzar otro constructor, debemas espeiicar una Ista de pardmetros y, sgn el nimero ye {pe dels pardmetres, el operador new lama al constructor carespondlente Persona pe = new Persona(“Garcia',"s0s6*, tecatoace-oF 1986.32.13) bb. Inicializacion de una instancia Es posible incizar los campos de una istanca de case de varias manera. La primera conssteenincalzar las variables que forman ls campos fe lalate en el momenta de su decaracsn, httpsijlwmweni-training comiclient_net/mediabook aspx?idR=111701 may 4162018 NI Training - Libro online public class Persona t private String apettidontnuevoapet Lido": Privete String sanbree*nuevotonbre": Private Localdate fecha naci-LocalDate.of(1963, 12,29): d Esta solucién, aunque muy sen, est bastante lmitada ya que no es posible utiizarestructuras de contro tales como un bucle exter al bloque el céigo. La solucin que nes vine rpidamente a a mente consist en vbicar el cédgo de malizacin en el interior de un constructor En efecto, fs una muy buena idea y es incur el objetivo principal del constructor: inlelizar las variables de instanci. Como cortrapards, se planted in problema con los campos estiticos ya que para los no es necesano cisponer de una instancia de clase para poder utizarios. Por Io tanto, 5 Uoleames el eéeige encargodo de inializaros en un constructor nada nos garantiza que se le haya ivocado al menos una vez antes ea wtzacon Ge os campos estos. ora resolver este problema, Java proporciona los bloques de inicalizacin estitios. Son simples bloques de cédigo precedes por la palabra {ave Seat y delimatados por los caractres | y |. Puede aparecer en cualquier parte del cdigo de [a clase la méquita virtual os ejecuta en orden en el que aparecen ene digo cuando se carga la clase. Podermos, po ejemplo, usar el cdigo siguiente para ilalzar un campo esttico con Un valor alestoro igual o superior a 1000. public class Persona t private String apelLidon"ruevoaget ido": Private String nenbres"rucvalontre Privete Localbate fecha nacisLocalDate.of(2963,12,29); privete statle int numtnstance: vyhite(nunlnstances1000) i suatastance=(4nt) (20900%Gth. random) Es posible obtener el mismo resultado creando una funcén privada estitic ylamindol para incazar la variable, public class Persona t private String apetLidon‘nuevoapettido": Private String nenbres"ruevovontre":, Privete Localbate fecha naci=LocalDate(1965, 1,29) Private ine nineron Privete Static int nuntnstancesiniccontador() private static int sntcContador() t int cota: snive(ept1000) t ce {ant)(20000%ath. random): , i sta Slucén presenta la ventaja que permite uitza a funcién en ora parte del eign dela clase ‘Se puede apicar el mismo prince para la iniiatzacén de los campos de instanla. En este caso, el bloque de cio encargado dela niiaizacsn no debe precede dela palabra dave ats. Este bloque de codigo se vuelve a copia impctamente al principio de cada constructor dela ease durante la complacén. También es posible nicalzar un campo de instancia mediante ia lamada a una funcén. En este caso el desarolador se fncontracé con una auth resviccin: el métedo no puede sobresaibrse en ninguna subclase, Pare ela, hay que decaraio con la plabre ‘ave finals . Destruceién de una instanela | veces la gestién de la memoria resulta er un verdadero rompecabezas para algunos lenguajes de prosramacién. Ei desaralidor es responsable Gea crecion dels nsancias de cases pero también desu destrucin coh el nde iberar memo, Afortunadarete, Java se encrga totalmente ea gestion y nos eva esta teosa trea, Es capar de determinar cudndo no se ubiza un ebeto en la apliacén y, a continua, lo elimina dela memoria. Este mecanismo se lama Garbage Collector (reslector de basura). Java considera que se puede suprmie ‘un objeto cuando la aplcaién no puede acceder mas a el. Esta stuacin Se rode, por ejemplo, al sar de uns funcin, cuando se uliza una varabe local para referencar al cbjto. También puede estar provacada por la 'signadion del valor asia una varable. Pare boar realpente un objeto de la memora, es necesaro que hayan desapareido todos los meds de acceder a él desde la apicacén. No hay que olvidar ques un objeto esta almacenado en una eolec#én © en Un array, ésos conservan una referencia hacia el ebete, \eamos con un poco mis de detalle ol funcionamiento del Garbage Collector. Exsten varios algoritms para poner en prictia ol mecanisime de seston de memara, Lor deefodoes de I maquina virtual Java implementan estos mecanismos. Vamos echares un Vstaza por pura curoica Mark y Sweep httpsijlwmweni-training comiclient_net/mediabook aspx?idR=111701 ara

You might also like