Sunteți pe pagina 1din 71

Conceptosdela programacinorientadaa objetos

Si nunca antes ha utilizado un lenguaje de programacin orientado a objetos deber aprender unos cuantos conceptos bsicos antes deempezaraescribircdigo.Estaleccinleservirde introduccin a los objetos, clases, herencia, interfaces y paquetes. Cadaseccin se centra en cmo estos conceptos estn relacionados con el mundo real mientras que proporcionan una introduccinalasintaxisdellenguajedeprogramacinJava.

Quesunobjeto?
Un objeto es una parte de software de estado y comportamiento relacionado. A menudo se utilizan los objetos software para modelar objetos del mundo real que podr encontrar en su vida diaria. Esta leccin explica cmo se representan el estado yel comportamiento dentro de un objeto, presenta el concepto de encapsulacin de datosy explica los beneficios de disear supropiosoftwaredeestamanera.

Quesunaclase?
Una clase es como los planos o el prototipo del que se crean los objetos. Esta seccin define una clase que modela el estado y comportamiento de un objeto de la vida real. Enfoca intencionadamente lo bsico, mostrando como hasta una clase sencilla puede modelar limpiamenteestadoycomportamiento.

Queslaherencia?
La herencia proporciona un mecanismo potente y natural para organizar y estructurar su software. Esta seccin explica cmo las clases heredan el estadoy elcomportamientodesus superclases y cmo derivar una clase de otra usando la sintaxis sencilla del lenguaje de programacinJava.

Quesunainterfaz?
Una interfaz es un contrato entre una clase y el mundo exterior. Cuandounaclaseimplementa una interfaz, se comprometea proporcionarelcomportamientopublicadoporesainterfaz.Esta seccindefineunainterfazsencillayexplicaloscambiosnecesariosparacualquierclasequela implemente.

Quesunpaquete?
Un paquete es un espacio de nomenclatura para organizar clases einterfaces de una manera lgica. Colocando su cdigo en paquetes permite facilitar la gestin de grandes proyectos de software. Esta seccin explica por qu esto es til ylepresentalaInterfazdeProgramacinde Aplicaciones(API)proporcionadaporlaplataformaJava.

Preguntas y ejercicios: Conceptosdelaprogramacin orientada a objetos


Utilice laspreguntasyejerciciosquesepresentanenestaseccinparacomprobarsuloqueha aprendidoacercadelosobjetos,clases,herencia,interfacesypaquetes.

Quesunobjeto?
Los objetosson la clave para entender la tecnologaorientada a objetos.Simiraasualrededor ahora mismo se encontrar con muchos ejemplos de objetos del mundo real: su perro, su escritorio,sutelevisor,subicicleta. Los objetos del mundo real comparten dos caractersticas: Todos tienen estado y comportamiento. Los perros tienen estado (nombre, color,raza,hambriento)ycomportamiento (ladrando, buscando, meneando la cola). Las bicicletas tambin tienen un estado (marcha actual, cadencia de pedaleo actual, velocidad actual) y comportamiento (cambio de marcha, cambio de cadencia de pedaleo,frenar).Identificarelestadoyelcomportamientodelosobjetos del mundo real es una gran ayuda para empezar a pensar en trminos de programacin orientadaaobjetos. Tmese un momento ahora mismo para observar los objetos del mundo real que hay a su alrededor. Para cada uno de los objetos que ve, hgase dos preguntas: En qu posibles estados puede estar este objeto? y Qu posibles comportamientos puede realizar?". Asegrese de escribir susobservaciones.Mientraslohaga,verquelosobjetosdelmundoreal varan en complejidad, su lmpara de escritorio puede tener solo dos estados (encendido y apagado) y dos posibles comportamientos (encender y apagar), pero su radio tendr ms

estados (encendido, apagado, volumen actual, emisora actual) y comportamientos (encender, apagar, subir volumen, bajar volumen, buscar y sintonizar). Tambin observar que algunos objetos, asuvez,tambincontendrnotrosobjetos. Todasestasobservacionesdelmundoreal sonreproduciblesenelmundodelaprogramacinorientadaaobjetos.

Unobjetosoftware.
Los objetos software son conceptualmente similares a los objetos del mundo real: tambin consisten de estado ycomportamiento. Un objeto almacenasuestadoencampos(variables en algunos lenguajes de programacin) y muestra su comportamiento a travs de mtodos (funciones en algunos lenguajes de programacin). Los mtodos operan sobre el estado interno del objeto y sirven como elmecanismo principal para lacomunicacinentreobjetos.La ocultacin delestadointerno y requerir que toda interaccin se realice a travsdelosmtodos de un objeto se conoce como encapsulacin de datos un principio fundamental de la programacinorientadaaobjetos. Piense,porejemplo,enunabicicleta:

Unabicicletamodeladacomounobjetosoftware. Al atribuir el estado (velocidad actual, cadencia de pedaleo actual y marcha actual) y proporcionar mtodos para cambiar ese estado, el objeto mantiene el control sobre cmo se permite al mundo exterior usarlo. Por ejemplo, si la bicicleta solamente tiene 6 marchas, un mtodo que cambie de marcha podr rechazar cualquier valor que sea inferiora1osuperior a 6. Alagruparcdigoenobjetossoftwareindividualesseobtienenciertosbeneficios: 1. Modularidad: El cdigo fuente de un objeto se puede escribir y mantener independientemente del cdigo fuente de otros objetos. Una vez creado, un objeto se puedepasarfcilmentedeunladoalotrodelsistema. 2. Ocultacin de informacin: Al interactuar solamente con los mtodos de un objeto los detallesdesuimplementacininternapermanecenocultasalmundoexterior. 3. Reutilizacin de cdigo: Si un objeto ya existe (quizs escrito por otro desarrollador de software), puede utilizar ese objeto en su programa. Esto permite que unespecialista implemente/compruebe/depure objetos especficos para una tarea, en los que luego podrconfiarensupropiocdigo. 4. Conectividad y facilidaddedepuracin:Siunobjetoenconcretoresultaserproblemtico podr simplemente eliminarlo de su aplicacin y conectar un objeto distinto para reemplazarlo. Esto es anlogo a la reparacin de problemas mecnicos en el mundo real.Sirompeuntornillo,reemplazaeltornillo,nolamquinaentera.

Quesunaclase?
En el mundo real a menudo se encontrar con muchos objetos individuales del mismo tipo. Puede haber miles de otras bicicletas, todas de la misma marca y modelo. Cada bicicleta ha sido fabricada apartir de losmismos planos y, por lotantocontienelosmismoscomponentes. En trminos de orientacin a objetos decimos que su bicicletaes una instancia de la clase de objetosconocidacomobicicletas.Unaclaseeselplanodelquesecreanobjetosindividuales. LasiguienteclaseBicycleesunaposibleimplementacindeunabicicleta: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */

classBicycle{ intcadence=0 intspeed=0 intgear=1 voidchangeCadence(intnewValue){ cadence=newValue } voidchangeGear(intnewValue){ gear=newValue } voidspeedUp(intincrement){ speed=speed+increment } voidapplyBrakes(intdecrement){ speed=speeddecrement } voidprintStates(){ System.out.println("cadence:"+cadence+"speed:"+speed+"gear:"+gear) } } La sintaxis del lenguaje Java le podr resultar nueva, pero el diseo de esta claseest basada en la anterior discusin sobre los objetos bicicleta. Los campos cadence, speed y gear representan el estado del objeto, y los mtodos (changeCadence, changeGear, speedUp etc.) definensuinteraccinconelmundoexterior. Quizs se habr fijado en que la clase Bicycle no contiene un mtodo main. Esoesporqueno es una aplicacincompleta,solamente es el plano para bicicletas que se podra utilizar enuna aplicacin. Laresponsibilidad de crear y usar nuevos objetos Bicycle perteneceaotraclasede suaplicacin.

A continuacin hay una clase BicycleDemo que crea dos objetosBicycledistintoseinvocasus mtodos: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout

*modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classBicycleDemo{ publicstaticvoidmain(String[]args){ //CreatetwodifferentBicycleobjects Bicyclebike1=newBicycle() Bicyclebike2=newBicycle() //Invokemethodsonthoseobjects bike1.changeCadence(50) bike1.speedUp(10) bike1.changeGear(2) bike1.printStates() bike2.changeCadence(50)

bike2.speedUp(10) bike2.changeGear(2) bike2.changeCadence(40) bike2.speedUp(10) bike2.changeGear(3) bike2.printStates() } } La salida de esta prueba muestra la cadencia de pedaleo, velocidad y marcha para las dos bicicletas: cadence:50speed:10gear:2 cadence:40speed:20gear:3

Queslaherencia?
A menudo diferentes tipos de objetos tienen algunas cosas en comn. Por ejemplo, las bicicletas de montaa, las de carretera y los tndems todos compartenlas caractersticas de las bicicletas (velocidad actual, cadencia de pedal, marcha). Anascadaunadeellastambin define caractersticas adicionales que las hacen diferentes: los tndems tienen dos asientos y dos manillares, las bicicletasde carretera tienen unmanillarcon cuernos,algunasbicicletasde montaatienenmspionesquelesproporcionanmarchasmscortas. La programacin orientada a objetos permite que las clases hereden estados y comportamientos de uso comn de otras clases. En este ejemplo, Bicyclese convierte en la superclase de MountainBike, RoadBike y TandemBike. En ellenguajedeprogramacinJavase permite que cadaclasetenga una superclase directa y que cada superclase tengael potencial paraunacantidadilimitadadesubclases:

Unajerarquadeclasesdebicicleta. La sintaxisparacrearsubclasesensencilla.Utilicelapalabraclaveextendsseguidadelnombre delaclasedelaquedeseaheredaraliniciodesudeclaracindeclase: classMountainBikeextendsBicycle{ //Losnuevoscamposymtodosquedefinanunabicidemontaairanaqu } Esto proporcionaaMountainBikelosmismoscamposymtodosqueBicycle,peropermiteasu cdigo encargarse exclusivamente de las caractersticas que la hacen nica. Esto hace queel cdigo de sus subclases sea fcil de leer. Sin embargo debe encargarse de documentar apropiadamente el estado y comportamiento que cada superclase que define, ya que ese cdigonoaparecerenelarchivofuentedecadasubclase.

Quesunainterfaz?
Como ya ha aprendido, losobjetos definen su interaccincon elmundoexterioratravsdelos mtodos de que exponen. Los mtodos forman la interfaz del objeto con elmundoexteriorpor ejemplo, losbotonesquehayenlapartefrontaldesutelevisorformanlainterfazentreusted yel cableado elctrico al otro lado de la caja de plstico. Debe pulsar un botn para encender y apagareltelevisor. En su forma ms comn, una interfaz es un grupo de mtodos relacionados con cuerpos vacos. El comportamiento de una bicicleta, siseespecificacomo unainterfaz,podraaparecer as: interfaceBicycle{ voidchangeCadence(intnewValue) voidchangeGear(intnewValue) voidspeedUp(intincrement) voidapplyBrakes(intdecrement) } Para implementar esta interfaz el nombre de su clase debera cambiar (a ACMEBicycle, por ejemplo),yusaralapalabraclaveimplementsenladeclaracindeclase: classACMEBicycleimplementsBicycle{ //remainderofthisclassimplementedasbefore } Implementar una interfaz permite a una clase ser ms formal acerca del comportamiento que promete proporcionar. Las interfaces forman un contrato entre la clase yel mundo exterior, y este contratose hacecumplirenelmomentodela compilacin.Sisuclaseafirmaimplementar una interfaz, todos los mtodos definidos por esa interfaz debenaparecer en su cdigo fuente para que se compile con xito. Nota: Para compilar la clase ACMEBicycle necesitar aadir la palabra public delante de los mtodos de interfaz implementados. Aprender las razones para esto ms tarde en las leccionesquetratenClasesyobjetoseInterfacesyherencia.

Quesunpaquete?
Un paquete es un espacio de nombre que organiza un conjunto de clases e interfaces relacionadas. Puedepensar en los paquetes como algo similar a las diferentes carpetasdesu ordenador.Puede tener guardadas pginasHTML en una carpeta, imgenesenotrayscriptsy aplicaciones en otra distinta. Puesto que un software escrito en el lenguaje de programacin Java puede llegar a consistir de cientos o miles de clases individuales, tiene sentido que se organicenlasclaseseinterfacesrelacionadasenpaquetes. La plataforma Java proporciona una enorme biblioteca de clases (un conjunto de paquetes) adecuado para usar en sus propias aplicaciones. A esta biblioteca se la conoce como la Interfaz de Programacin de Aplicaciones (Application Programming Interface en ingls) o por su abreviatura API. Sus paquetes representan las tareas ms comunes asociadas a la programacin en general.Por ejemplo, un objetoStringcontieneestadoycomportamientopara cadenas de caracteres (character strings) un objeto File permite a un programador crear, eliminar, inspeccionar, comparar o modificar un archivo en un sistema de archivos un objeto Socket permite la creacin y uso de sockets de red otros objetos de interfazgrfica(GUI) controlan botones, cajas de seleccin y cualquier otra cosa relacionada con las interfaces grficas de usuario. Literalmente hay miles de clases de las que elegir. Esto le permite al programador enfocar sus esfuerzos en el diseode laaplicacin,msqueenlainfraestructura requeridaparahacerlafuncionar. La Java Platform API Specification contiene el listado completo de todos los paquetes, interfaces, clases, campos y mtodos proporcionados por la Plataforma Java 6, edicin estndar (Java Platform 6, Standard Edition). Cargue esta pginaensunavegadory adala a sus marcadores o favoritos. Siendo programador se convertir en su documentacin de referenciamsimportante. Preguntasyejercicios:Conceptosdelaprogramacinorientadaaobjetos

Preguntas
1. 2. 3. 4. 5. 6. 7. 8. Losobjetosdelmundorealcontienen___y___. Elestadodeunobjetosoftwaresealmacenaen___. Elcomportamientodeunobjetosoftwareseexponemediante___. La ocultacin de datos internos del mundo exterior y su acceso a travs de mtodos expuestospblicamenteseconocecomo___dedatos. Unplanoparaunobjetosoftwaresedenomina___. Un comportamiento comn puede ser definido en una ___ y heredado en una ___ mediantelapalabraclave___. Unacoleccindemtodossinimplementacinsellamauna___. Un espacio denombre que organiza clases e interfaces porfuncionalidad se denomina un___.

9. EltrminoAPIsignifica___.

Ejercicios
1. Cree clases nuevas para cada objeto del mundo real que observ al inicio deestaruta. TomelaclaseBicyclecomoreferenciasihaolvidadolasintaxisnecesaria. 2. Cree una interfaz que defina el comportamiento de cada clase nueva que haya creado ms arriba, luego requira que su clase la implemente. Omita uno o dos mtodos e intentecompilarlas.Quaspectotieneelerror? Respuestasapreguntasyejercicios:Conceptosdelaprogramacinorientadaaobjetos

Respuestasapreguntas
1. 2. 3. 4. 5. 6. 7. 8. 9. Losobjetosdelmundorealcontienenestadoycomportamiento. Elestadodeunobjetosoftwaresealmacenaencampos. Elcomportamientodeunobjetosoftwareseexponemediantemtodos. La ocultacin de datos internos del mundo exterior y su acceso a travs de mtodos expuestospblicamenteseconocecomoencapsulacindedatos. Unplanoparaunobjetosoftwaresedenominaclase. Un comportamiento comn puede ser definido en una superclase y heredada en una subclasemediantelapalabraclaveextends. Unacoleccindemtodossinimplementacinsellamaunainterfaz. Un espacio denombre que organiza clases e interfaces porfuncionalidad se denomina unpaquete. EltrminoAPIsignificaApplicationProgrammingInterface.

Respuestasaejercicios
1. Susrepuestasvariarnsegnlosobjetosdelmundorealquehayamodelado. 2. Sus repuestas tambin variarn aqu, pero el mensaje de error indicar los mtodos requeridosquenohansidoimplementados.

Lobsicodellenguaje
Variables
Ya ha aprendido que los objetos almacenan su estadoen campos. Sin embargoel lenguajede programacin Java tambin utiliza el trmino variable. En estaseccinsetrataestarelacin, adems de los convenios y reglas de nomenclatura de variables,tipos de datos bsicos (tipos primitivos,cadenasdecaracteresyarrays),valorespredeterminadosyliterales.

Operadores
En esta seccin se describen los operadores del lenguaje de programacin Java. En primer lugar presenta los operadores de uso ms comn y al final los menos utilizados. Cada discusinincluyeejemplosdecdigoquepodrcompilaryejecutar.

Expresiones,sentenciasybloques
Los operadores se utilizan para construir expresiones que computan valores las expresiones son los componentes centrales de las sentencias las sentencias se pueden agrupar en bloques. En esta seccin se tratan las expresiones, sentencias y bloques mediante cdigo de ejemploqueyahavisto.

Sentenciasdecontroldeflujo
En esta seccin se describen las sentencias de control de flujo presentes en el lenguaje de programacin Java. Cubre las sentencias de toma de decisin, bucles y ramificacin que permitenquesusprogramasejecutenbloquesdecdigoespecficosdeformacondicional.

Variables
Yahemosvistoenlaleccinanteriorqueunobjetoalmacenasuestadoencampos. intcadence=0 intspeed=0 intgear=1 La leccin Qu es un objeto? le present el concepto de campos,pero probablemente siga teniendoalgunapregunta, como por ejemplo:Culessonlosconveniosyreglasparanombrar un campo? Adems de int, qu otros tipos dedatohay?Loscamposdebenserinicializados cuando se declaran? Se asigna un valor predeterminado a los campos si no se inicializan explcitamente? En esta leccin exploraremos las respuestas a este tipo de preguntas, pero

antes de hacerlohay una serie de distinciones tcnicas quedeberaconocer.Enellenguajede programacin Java se usan losdostrminoscampoyvariableestoesunafuentehabitual de confusin entre desarrolladores noveles ya que ambos, a menudo, parecen referirse a la mismacosa. EllenguajedeprogramacinJavadefinelossiguientestiposdevariables: Variables de instancia (Campos no estticos) Tcnicamente, los objetos almacenan sus estados individuales en campos no estticos,esdecir,camposdeclaradossinla palabraclavestatic.Loscamposnoestticostambinsonconocidoscomovariablesde instancia porque sus valores son nicos para cada instancia de una clase (en otras palabras, para cada objeto) el valor de currentSpeed de una bicicleta es independiente delvalordecurrentSpeeddeotra. Variables de clase (campos estticos) Una variable de clase es cualquier campo declarado con el modificador static esto le indica al compilador que existe solamente una copia de esta variable, independientementede cuntas veces se haya instanciado esa clase. Un campo que defina la cantidad de marchas de un tipo en concreto de bicicletas se podra marcar como static ya que se aplicar la misma cantidad de marchas a todas las instancias. El cdigo static int numGears = 6 crear un campo esttico de ese tipo. Adems, se podra aadir la palabra clave final para indicar que la cantidaddemarchasnuncacambiar. Variables locales De un modo similar a como un objeto almacena su estado en campos un mtodo a menudo almacenar su estado en variables locales.La sintaxis para declarar una variable localessimilaraladeclaracin deuncampo(porejemplo,int count = 0). No hay una palabraclaveespecialque defina una variable como local, esa designacin viene enteramente por el lugar en el que se declare que es entre las llaves de apertura y cierre de un mtodo. Como tales, las variables locales son solamente visibles en el mtodo en el que son declaradas noson accesibles desde el restodelaclase. Parmetros Ya hemos vistoejemplosdeparmetros, tantoen laclaseBicyclecomoen el mtodo main de laaplicacin Hola mundo. Recuerde que laestructura del mtodo main es public static void main(String[] args). Aqu la variable args es el parmetrode este mtodo. Lo que debe recordar es que los parmetros siempre seclasifican como variables, no como campos. Esto tambin se aplica a otras construcciones que aceptan parmetros (como los constructores y gestores deexcepciones)sobrelasque aprendermsadelanteenlostutoriales. Dicho esto, en lo que queda de este tutorial se utilizan las siguientes normas al hablar de campos y variables. Si hablamos de campos en general (excepto variables locales y parmetros) simplemente diremos campos.Sihablamosdetodoloanteriorutilizaremosla palabra variables. Si el contexto necesita de una distincin clara, utilizaremos trminos especficos (campo esttico, variable local, etc.) segn sea apropiado.En ocasiones tambin podr ver el trmino miembro. A los campos, mtodos y tipos anidados de un tipo se les denominacolectivamentesusmiembros.

Nomenclatura
Cada lenguajede programacintiene supropioconjuntodeconveniosyreglasparalos tiposde nombres que se permitenutilizar, el lenguaje Java no es diferente.Lasreglasyconveniospara lanomenclaturadevariablessepuedenresumircomosigue: Los nombres de variables distinguen entremaysculasy minsculas.Elnombredeuna variable puede sercualquieridentificadorvlidounasecuenciadelongitudilimitadade letras y dgitos Unicode,queempiece con una letra, el smbolo del dlar $ o el guin bajo _. Sin embargo, por convenio siempre se utilizan los nombres de variable con una letra, no con $ o_. Adems, el smbolo del dlarm por convenio, no se utiliza nunca. Se encontrar con algn caso en el que nombres generados automticamente contegnasn el smbolo del dlar, pero sus propias variables deberan evitarlo. Este convenio tambin se aplica al guin bajo, aunque es tcnicamente vlido empezar el nombrede unavariablecon_,estaprcticasedesaconseja.Nosepermiteelespacio enblanco. Los siguientes caracteres pueden ser letras, dgitos, signos del dlaro guiones bajos. Tambin se aplican algunos convenios (y el sentido comn) a esta regla. Al elegir un nombre para sus variables, utilice palabras completas en vez de abreviaturas crpticas. As su cdigo ser ms fcil deleerycomprender.Enmuchoscasostambinharque su cdigo se autodocumenteporejemplo,camposcon elnombrecadencia,velocidady marcha son mucho ms intuitivos que sus versiones abreviadas: c, v y m. Tenga tambinenmentequeelnombrequeelijanopuedeserunapalabraclaveoreservada. Si el nombre que elije consiste de una sola palabra, escrbala completamente en minsculas. Si consistedemsdeunapalabra, escribala primeraletradecadapalabra en maysculas. Los nombres numeroMarchas y marchaActual som ejemplos de este convenio. Si su variable almacena un valor constante, como static final int NUM_MARCHAS = 6, el convenio cambia ligeramente, aconsejando escribirla toda en maysculas, separando las palabras con el guin bajo.Porconvenioelguinbajonose utilizaenningnotrositio.

Tiposdedatosprimitivos
El lenguaje de programacin es un lenguaje fuertemente tipado, esto significa que todas las variables deben ser declaradas antes de ser utilizadas. Esto implica establecer el tipo y el nombredelavariable,comoyahemosvisto: intgear=1 Al hacer esto le indicamos al programa que existe una variable llamadagear, que almacena datos numricos y que tieneunvalorinicialde1. Eltipodedatodeunavariabledeterminalos valores que puede contener adems de las operaciones que se puede realizar sobre ella. El

lenguaje de programacin Java incluye siete otros tipos de datosprimitivos adems de int. Un tipo primitivo est predefinidopor el lenguajeysenombraconunapalabraclavereservada.Los valores primitivos no comparten estado con otros valores primitivos. Los ocho tipos de datos primitivosincluidosenellenguajedeprogramacinJavason: byte: El tipo de dato byteesunenterode 8bitscomplementoados.Suvalormnimoes 128 y el mximo 127 (inclusive). El tipo de datos byte se puede utilizar para ahorrar memoria en grandes arrays, donde el ahorro de memoria realmenteimporta. Tambin se pueden utilizar en lugar de int donde sus lmites ayudan a aclararelcdigo,elhecho de que el rango de una variable es limitado puede servir como una forma de documentacin. short: El tipo de datoshortesunenterode16bitscomplementoados.Suvalormnimo es 32,768 y el mximo 32,767 (inclusive). Se aplican las mismas directrices que con byte: puede utilizarshort para ahorrarmemoriaengrandes arrays,ensituacionesenlas queelahorrorealmenteimporta. int: El tipo de dato int esun entero de 32 bits complemento a dos. Suvalor mnimo es 2,147,483,648 y el mximo 2,147,483,647 (inclusive). Generalmente este tipo es la eleccin predeterminada para valores enteros a no ser que haya una razn (como las mencionadas anteriormente) para elegir otro. Este tipo de dato normalmente ser lo suficiente grande para los nmeros que su program vaya a utilizar pero sinecesita un rangomsamplio,utilicelong. long: El tipo de dato longes un entero de 64 bits complemento a dos. Su valormnimo es 9,223,372,036,854,775,808 y el mximo 9,223,372,036,854,775,807 (inclusive). Utilice este tipo de dato cuando necesite un rango de valores ms amplio que el proporcionadoporint. float: El tipo de dato float es un dato en coma flotante IEEE 754 de 32 bits y precisin simple. Al igual quecon byte yshort, se recomienda usar unfloat(envezdeundouble) sinecesitaahorrarmemoriaengrandesarraydenmeros encomaflotante.Estetipode dato nunca debera ser usado para valores precisos como, por ejemplo, divisas. Para esto debera usarla clase java.math.BigDecimal. NmerosycadenastrataBigDecimaly otrasclasestilesproporcionadasporlaplataformaJava. double: El tipo de dato double es un dato en coma flotante IEEE 754 de 64 bits y precisin doble. Normalmente este tipo de dato es la eleccin predeterminada para valores decimales. Como ya se ha mencionado, este tipo de dato no se debera utilizar paravaloresprecisoscomo,porejemplo,divisas. boolean: El tipo de dato boolean solamente tiene dosvaloresposibles:true(verdadero) y false (falso). Utilice este tipo de datos como conmutadores para la evaluacin de condiciones verdadero/falso. Este tipo de dato representaunbitdeinformacin,pero su tamaoesalgoquenoestdefinidoconprecisin. char: El tipo de dato char es un solocarcterUnicodede16bits.Tieneunvalormnimo de'\u0000'(o0)yunmximode'\uffff'(o65.535inclusive). Adems de los ocho tipos de dato primitivos enumerados ms arriba, el lenguaje de programacin Javatambinproporcionasoporteespecialparacadenasdecaracteresmediante

la clase java.lang.String. Al encerrar una cadena de caracters entre comillas dobles automticamente se crear un nuevo objeto de tipo String, por ejemplo,Strings="estoesuna cadena". Los objetos String son inmutables, lo que significa que, una vez creados, sus valores no se pueden cambiar. La clase String tcnicamente no es un tipo de dato primitivo, pero si tenemos en cuenta el trato especial que le da el lenguaje, probablemente tender a pensarenellacomotal.AprendermsacercadelaclaseStringenObjetosdedatossimples

Valorespredeterminados
No siempre es necesario asignar un valor cuando se declara un campo. El compilador fija un valor predeterminadorazonable para los campos que se declaranperonosoninicializados. En general, estevalor ser cero o null, dependiendo del tipo de dato. Sin embargo,fiarsedeestos valorespredeterminadosseconsideraunamalacostumbreenlaprogramacin. La siguiente tabla resume los valores predeterminados para los tipos de dato que hemos mencionadoanteriormente. Tipodedato byte short int long float double char String(ocualquierobjeto) boolean Valorpredeterminado(paracampos) 0 0 0 0L 0.0f 0.0d '\u0000' null false

Las variables locales son ligeramente distintas, el compilador nunca asigna un valor predeterminado a una variable local sin asignar. Si no puede inicializar suvariable local donde se declara, asegrese de asignarle un valor antes de intentar usarla. Acceder a una variable localsininicializarresutlarenunerroralahoradecompilar.

Literales
Se habr fijado en que la palabra clave new no se utiliza para inicializar una variable de tipo primitivo. Los tipos primitivos son tipos de datos especiales incrustados dentrodellenguaje,no son objetos creados deuna clase. Un literal es la representacinen cdigo fuente de un valor fijo, los literales se represenan directamente en su cdigo sin necesidad de computacin. Es

posibleasignarunliteralaunavariabledeuntipoprimitivo,comosemuestraacontinuacin: booleanresult=true charcapitalC='C' byteb=100 shorts=10000 inti=100000 Los tipos enteros (byte, short, int y long) se pueden expresar com los sistemas numricos decimal, octal o hexadecimal. Eldecimaleselsistemanumricoqueutilizatodoslosdas,est basado en 10 dgitos, numerados desde el 0 hasta el 9. El sistema octal es de base 8, que consiste de los dgitos entre el 0 y el 7. El sistema hexadecimal es de base 16, cuyos dgitos son los nmeros entre el 0 y el 9 y las letras entre la A y la F. El sistema decimal ser probablemente el nicossitema numrcio que utilizar en la programacin de uso general.Sin embargo, si necesita octal o hexadecimal, el siguiente ejemplo muestra lasintaxiscorrecta. El prefijo0indicaoctal,mientrasque0xindicahexadecimal. intdecVal=26//Elnmero26endecimal intoctVal=032//Elnmero26enoctal inthexVal=0x1a//Elnmero26enhexadecimal Los tipos de coma flotante (float y double) tambin se pueden expresar con E o e (para la notacin cientfica), F o f (literal float de 32 bits) y D o d (literal double de 64 bits, este es el predeterminadoyseomiteporconvenio). doubled1=123.4 doubled2=1.234e2//elmismovalorqued1peroennotacincientfica floatf1=123.4f Los literales de tipo char y Stringpueden contener cualquier carcter Unicode (UTF16). Si su editor de texto y su sistema lo permiten puede utilizar estos caracteres directamente en su cdigo.Sino,puedeutilizarelescapeUnicodecomo,porejemplo,'\u0108'(Cmaysculacon circunflejo) o "S\u00ED se\u00F1or" (S Seor en espaol). Utilice siempe 'comillas simples' para literales char "comillas dobles"paraliteralesString.LassecuenciasdeescapeUnicodese puede utilizar en otros sitios de un programa (nombres de campo, por ejemplo), no solamente enliteralescharoString. El lenguaje de programacin Java tambien contempla algunas secuencias de escape especiales para literaleschar y String:\b (retroceso de carcter), \t (tabulacin),\n (cambio de lnea), \f (salto de pgina), \r (retorno de carro), \" (comillas dobles), \' (comillas simples) y \\ (barrainvertida). Tambin est el literal especial null que se puede utilizar como valor para cualquier tipo de referencia. Se puede asignar null a cualquier variable excepto variables de tipo primitivo. Se puede hacer poco con un valor null adems de comprobar su presencia. Por lo tanto null se utilizaamenudocomomarcadorenunprogramaparaindicarqueunobjetonoestdisponible. Finalmente tambinhay un tipo especial de literalllamadoliteraldeclasequeseformaaltomar el nombre deltipo y aadir .class, por ejemplo, String.class. Esto se refierealobjeto(detipo

Class)querepresentaaltipoensmismo.

Arrays
Un array es un objeto contenedor que almacena unnmero fijode valores de un solo tipo. La longitud de un array se establece cuando ste se crea. Despus de sucreacinsulongitudes fija. Ya ha visto un ejemplo de un array en el mtodomaindelaaplicacinHolamundo. Esta seccintratalosarraysconmsdetalle.

Unarraydediezelementos A cada unidad del array se le llama element y a cada elemento se accede por su ndice numrico. Como se muestra enla ilustracin anterior, la numeracin empiezapor0.Alnoveno elemento,porejemplo,seaccederconelndice8. El siguiente programa, ArrayDemo, crea un array de enteros, lo rellena conalgunos valores e imprimecadavaloralasalidaestndar. /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission.

* * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classArrayDemo{ publicstaticvoidmain(String[]args){ int[]anArray//declaraunarraydeenteros anArray=newint[10]//reservamemoriapara10enteros anArray[0]=100//inicializaelprimerelemento anArray[1]=200//inicializaelsegundoelemento anArray[2]=300//etc. anArray[3]=400 anArray[4]=500 anArray[5]=600 anArray[6]=700 anArray[7]=800 anArray[8]=900 anArray[9]=1000 System.out.println("Elementoenelndice0:"+anArray[0]) System.out.println("Elementoenelndice1:"+anArray[1]) System.out.println("Elementoenelndice2:"+anArray[2]) System.out.println("Elementoenelndice3:"+anArray[3]) System.out.println("Elementoenelndice4:"+anArray[4]) System.out.println("Elementoenelndice5:"+anArray[5]) System.out.println("Elementoenelndice6:"+anArray[6]) System.out.println("Elementoenelndice7:"+anArray[7]) System.out.println("Elementoenelndice8:"+anArray[8]) System.out.println("Elementoenelndice9:"+anArray[9])

} } Lasalidadeesteprogramaes: Elementoenelndice0:100 Elementoenelndice1:200 Elementoenelndice2:300 Elementoenelndice3:400 Elementoenelndice4:500 Elementoenelndice5:600 Elementoenelndice6:700 Elementoenelndice7:800 Elementoenelndice8:900 Elementoenelndice9:1000 En una situacinde programacin del mundo realprobablemente habra utilizado una de las estructuras de bucle para recorrer cada elemento del array en vez de escribircadalneacomo en el ejemplo. An as, este ejemplo ilustra claramente la sintaxis del array. Aprender acerca de las diferentes estructuras debucle(for,whileydowhile)enlaseccinSentenciasdecontrol deflujo.

Declararunavariableparaqueserefieraaunarray
ElprogramaanteriordeclaraanArrayconelsiguientecdigo: int[]anArray//declaraunarraydeenteros Igual que las declaraciones de variables de otros tipos, la declaracin de un array tiene dos componentes: el tipo del array y su nombre. El tipo del array se escribetipo[], donde tipo es el tipo de dato de los elementos contenidos, los corchetes cuadrados son smbolos especiales que indicanqueesta variable contiene un array. El tamaodelarray noespartedesutipo(por lo que los corchetes estn vacos). El nombre de un array puedeser cualquier cosa, siempre que cumpla conlas reglasy convenios que ya se han tratdo en la seccin nomenclatura.Igual que con las variables de otros tipos, ladeclaracinrealmentenocreaunarraysolamentese dicealcompiladorqueestavariablevaacontenerunarraydeltipoindicado. Puededeclarararraysdeotrostipodeformasimilar: byte[]unArrayDeBytes short[]unArrayDeShorts long[]unArrayDeLongs float[]unArrayDeFloats double[]unArrayDeDoubles boolean[]unArrayDeBooleans char[]unArrayDeChars String[]unArrayDeStrings

Tambinpuedecolocarloscorchetescuadradosdespusdelnombredelarray: floatunArrayDeFloats[]//estaformaestdesaconsejada Sin embargo, porconveniosedesaconsejaestaforma,loscorchetesidentificaneltipodelarray ydeberanaparecerenladesignacindeltipo.

Crear,inicializaryaccederaunarray
Una de las formas de crear un array es con el operador new. La siguiente sentencia del programa ArrayDemo reserva un array con suficiente memoria para diez elementosenterosy asignaelarrayalavariableanArray. anArray=newint[10]//creaunarraydeenteros Si faltara esta sentencia, el compilador mostrara un error como el siguiente y la compilacin fallara: ArrayDemo.java:4:VariableanArraymaynothavebeeninitialized. Lassiguienteslneasasignanvaloresacadaunodeloselementosdelarray: anArray[0]=100//inicializaelprimerelemento anArray[1]=200//inicializaelsegundoelemento anArray[2]=300//etc. Aloselementosdelarrayseaccedeporsundicenumrico: System.out.println("Elemento1enelndice0:"+anArray[0]) System.out.println("Elemento2enelndice1:"+anArray[1]) System.out.println("Elemento3enelndice2:"+anArray[2]) Tambinpuedeutilizarlasintaxisabreviadaparacreareinicializarunarray: int[]anArray={100,200,300,400,500,600,700,800,900,1000} En esta caso la longituddel array viene determinada por la cantidaddevaloresproporcionados entre{y}. Tambin puede declarar un array de arrays (conocido como un array multidimensional) utilizando doso ms conjuntos de corchetes cuadrados, por ejemploString[][] nombres.Porlo tanto,acadaelementoseaccederporunnmerocorrespondientedevaloresdendice. En el lenguaje de programacin Java un arraymultidimensionalessimplementeunarraycuyos componentes son, tambin, arrays. Esto es distinto de los arrays en C o Fortran. Esto trae como consecuencia que las filas pueden variar en longitud, como se muestra en el siguiente programaMultiDimArrayDemo: classMultiDimArrayDemo{ publicstaticvoidmain(String[]args){ String[][]names={{"Mr.","Mrs.","Ms."},

{"Smith","Jones"}} System.out.println(names[0][0]+names[1][0])//Mr.Smith System.out.println(names[0][2]+names[1][1])//Ms.Jones } } Lasalidadeesteprogramaes: Mr.Smith Ms.Jones Puedeutilizarlapropiedadlengthparadeterminarlalongituddeunarray.Elcdigo System.out.println(anArray.length) mostrareltamaodelarrayenlasalidaestndar.

Copiararrays
La clase System contiene el mtodo arraycopyquesepuedeutilizarparacopiareficientemente unarrayaotro: publicstaticvoidarraycopy(Objectsrc, intsrcPos, Objectdest, intdestPos, intlength) Los dos argumentosde tipo Object indican el array desde el que copiary el array hacia el que copiar. Los tres argumentos de tipo int indican la posicin de inicio del array de origen, la posicindeiniciodelarraydedestinoylacantidaddeelementosquesecopiarn. El siguiente programa, ArrayCopyDemo, declara un array de elementos de tipo char que componen la palabra decaffeinated. Utiliza arraycopy para copiar una subsecuencia de componentesdelarrayenunsegundoarray: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe

*documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classArrayCopyDemo{ publicstaticvoidmain(String[]args){ char[]copyFrom={'d','e','c','a','f','f','e', 'i','n','a','t','e','d'} char[]copyTo=newchar[7] System.arraycopy(copyFrom,2,copyTo,0,7) System.out.println(newString(copyTo)) } } Lasalidadeesteprogramaes: caffein

Resumendevariables
El lenguaje de programacin Java utiliza tanto campo como variable como parte de su terminologa. Las variables deinstancia (campos no estticos) son nicas para cada instancia de una clase. Las variables de clase (campos estticos) son campos declarados con el modificador static hay exactamenteunacopiadeunavariabledeclase,independientementede

cuntas veces se haya instanciado sta. Las variables locales almacenan un estado temporal dentro de un mtodo. Los parmetros son variables que proporcionan informacin extra a un mtodo tanto las variables locales como los parmetros siempre se clasifican como variables (no como campos). Existen reglas y convenios quesedebenseguiralahorade nombrarcamposyvariables. Los ocho tipos de datos primitivos son: byte, short, int, long, float, double, boolean y char. La clase java.lang.String representa cadenas de caracteres. El compilador asignar un valor predeterminado razonable a los campos de los tipos mendionados, nunca se asigna un valor predeterminado a una variable local. Un literal es la representacinencdigofuentedeunvalor fijo. Un array es un objeto contenedor que almacena un nmero fijo devalores de un solo tipo. La longitud de unarray seestablece cuando ste se crea.Despus desucreacinsulongitud esfija. Preguntasyejercicios:Variables

Preguntas
1. 2. 3. 4. 5. Eltrminovariabledeinstanciaesotraformadellamara___. Eltrminovariabledeclaseesotraformadellamara___. Unavariablelocalalmacenaunestadotemporal,sedeclaradentrodeun(a)___. Unavariabledeclaradadentrodelosparntesisdeunmtodosellama____. Cules son los ocho tipos de datos primitivos includos dentro del lenguaje de programacinJava? 6. Lascadenasdecaracteresserepresentanmediantelaclase___. 7. Un___esunobjetocontenedorquealmacenaunnmerofijodevaloresdeunsolotipo.

Ejercicios
1. Cree unpequeoprogramaquedefinevarioscampos.Intentecrearalgunosnombresde campo no permitidos yveaqutipodeerrorproduceelcompilador.Utilicelosconvenios yreglasdenomenclaturacomogua. 2. Intente dejar sin inicializar los campos del programa que ha creado en el ejercicio 1 e imprima susvalores.Intentelomismoconunavariablelocal yveaqutipodeerroresde compilacin puede producir.Sisefamiliarizaconloserrorescomunesdecompilacinle sermsfcilreconocererratasensucdigo. Respuestasapreguntasyejercicios:Variables

Respuestasapreguntas
1. 2. 3. 4. Eltrminovariabledeinstanciaesotraformadellamarauncamponoesttico. Eltrminovariabledeclaseesotraformadellamarauncampoesttico. Unavariablelocalalmacenaunestadotemporal,sedeclaradentrodeunmtodo. Unavariabledeclaradadentrodelosparntesisdeunmtodosellamaparmetro.

5. Cules son los ocho tipos de datos primitivos includos dentro del lenguaje de programacinJava?byte,short,int,long,float,double,boolean,char 6. Lascadenasdecaracteresserepresentanmediantelaclasejava.lang.String. 7. Un array es un objeto contenedor que almacena un nmero fijo de valores de un solo tipo.

Respuestaaejercicios
1. Cree unpequeoprogramaquedefinevarioscampos.Intentecrearalgunosnombresde campo no permitidos yveaqutipodeerrorproduceelcompilador.Utilicelosconvenios yreglasdenomenclaturacomogua. 2. Aqunohayunasolarespuestacorrecta.Susresultadosvariarnsegnsucdigo. 3. Intente dejar sin inicializar los campos del programa que ha creado en el ejercicio 1 e imprima susvalores.Intentelomismoconunavariablelocal yveaqutipodeerroresde compilacin puede producir.Sisefamiliarizaconloserrorescomunesdecompilacinle sermsfcilreconocererratasensucdigo. 4. Igualmente, para este ejercicio no hay una sola respuesta correcta. Sus resultados variarnsegnsucdigo.

Operadores
Ahora quehaaprendidocmodeclarareinicializarvariables,probablementequerrsaber cmo hacer algo con ellas. Unabuena forma de empezar es conociendo losoperadoresdellenguaje de programacin Java. Los operadores son smbolos especiales que realizan operaciones concretassobreuno,dosotresoperandosydevuelvenunresultado. A medida que exploremos los operadores del lenguaje Java le ser de utilidad conocer con antelacin cules de ellos poseenlaprecedenciamsalta.Losoperadoresdelasiguientetabla se muestran por orden de precedencia. Cunto ms alto esteloperadorenlatabla,mayores su precedencia. Los operadores con mayor precedencia se evalan antes que los queposean una menor. Los operadoresqueestn enlamismalneatienenigualprecedencia.Cuandoenla misma expresin aparecen operadores de igual precedencia, debe haberunareglaqueindique cul se evala primero. Todos los operadores binarios, exceptolos de asignacin, se evalan deizquierdaaderechalosoperadoresdeasignacinseevalandederechaaizquierda. Operadores postfix unarios multiplicativos aditivos Precedencia expr++expr ++exprexpr+exprexpr~! */% +

demovimiento(shift) relacionales deigualdad ANDaniveldebit(bitwiseAND)

<<>>>>> <><=>=instanceof ==!= &

OR exclusivo a nivel de bit (bitwise exclusive ^ OR) OR inclusivo a nivel de bit (bitwise inclusive | OR) ANDlgico ORlgico ternarios deasignacin && || ?: = += = *= /= %= &= ^= |= <<= >>=>>>=

En la programacin de propsito general se utilizan algunos operadores con ms frecuencia que otros por ejemplo, eloperador de asignacin=esmuchomscorrientequeeloperador de movimiento a la derechasin signo >>>. Teniendo estoenmente,lossiguientestemasse centrarn en los operadores que probablemente utilizar deformahabitualyterminartratando los que son menos comunes. Cada tema se acompaa con cdigo de ejemplo que podr compilaryejecutar.Alestudiarlosresultadosreforzarloqueacabadeaprender.

Operadoresdeasignacin,aritmticosyunarios
Eloperadordeasignacinsencillo Uno de los operadores mshabituales que se encontrareseloperadordeasignacin sencillo =. Ya lo hemos visto en la clase Bicycle asigna el valor a su derecha al operando a su izquierda: intcadence=0 intspeed=0 intgear=1 Este operador tambin se puede utilizarenobjetosparaasignarreferenciasaobjetos,comose muestraenCreatcindeobjetos.

Losoperadoresaritmticos El lenguaje de programacin Java proporciona operadores que realizan la suma, resta, multiplicacin y divisin. Probablemente los reconozca por sus homlogos en la mtemtica bsica. El nico smbolo que lepodrparecernuevoes%,quedivideunoperandoporelotro ydevuelveelrestocomosuresultado. +operadordeadicin(tambinseutilizaparaconcatenarStrings) operadordesustraccin *operadordemultiplicacin /operadordedivisin %operadorderesto Elsiguienteprograma,ArithmeticDemo,compruebalosoperadoresaritmticos. /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE.

*/ classArithmeticDemo{ publicstaticvoidmain(String[]args){ intresult=1+2//resultesahora3 System.out.println(result) result=result1//resultesahora2 System.out.println(result) result=result*2//resultesahora4 System.out.println(result) result=result/2//resultesahora2 System.out.println(result) result=result+8//resultesahora10 result=result%7//resultesahora3 System.out.println(result) } } Tambin puede combinar los operadores aritmticos con el operador de asignacin sencillo para crear asignaciones compuestas. Por ejemplo, x+=1 y x=x+1 ambos incrementan el valir dexen1. El operador + tambin se puede utilizar para concatenar (unir) dos cadenas,comosemuestra enelsiguienteprogramaConcatDemo: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution.

* *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classConcatDemo{ publicstaticvoidmain(String[]args){ StringfirstString="Estoes" StringsecondString="unacadenaconcatenada." StringthirdString=firstString+secondString System.out.println(thirdString) } } Al final de este programa la variable thirdString contiene Esto esunacadena concatenada., queseimprimirenlasalidaestndar. Losoperadoresunarios Los operadores unarios solamente necesitan un operando realizan diferentes operaciones como incrementar o decrementar un valor en unaunidad, negarunaexpresinoinvertirelvalor deunbooleano. + Operador unario ms, indica un valor positivo (sin embargo los nmero son positivos sineloperador) Operadorunariomenosniegaunaexpresin ++Operadordeincrementoincrementaunvaloren1 Operadordedecrementodecrementaunvaloren1 !Operadordecomplementolgicoinvierteelvalordeunbooleano Elsiguienteprograma,UnaryDemo,compruebalosoperadoresunarios:

/* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classUnaryDemo{ publicstaticvoidmain(String[]args){ intresult=+1//resultesahora1 System.out.println(result) result//resultesahora0 System.out.println(result) result++//resultesahora1 System.out.println(result) result=result//resultesahora1

System.out.println(result) booleansuccess=false System.out.println(success)//falso/false System.out.println(!xito)//verdadero/true } } Losoperadoresdeincrementoydecrementose puedenaplicardelante(prefix)odetrs(postfix) del operando. Tanto el cdigo result++ como ++result resultarn en que result ser incrementado en uno. La nica diferencia es que la versin prefix (++result) evala segn el valor incrementado, mientras que la versin postfix (result++) evala segn el valor original. Si solamente estrealizando un incremento o decremento sencillo, realmente no importa cul de las dos formas utiliza. Pero si utilizaeste operador como parte de unaexpresinms larga, la formaqueelijapuedeinfluirsignificativamenteenelresultado. Elsiguienteprograma,PrePostDemo,ilustraeloperadorunariodeincrementoprefix/postfix: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF

*LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classPrePostDemo{ publicstaticvoidmain(String[]args){ inti=3 i++ System.out.println(i)//"4" ++i System.out.println(i)//"5" System.out.println(++i)//"6" System.out.println(i++)//"6" System.out.println(i)//"7" } }

Operadoresdeigualdad,relacionalesycondicionales
Losoperadoresdeigualdadyrelacionales Los operadores de igualdad y relacionales determinan si unoperandoesmayor,menor,iguala o distinto de otro. Probablemente la mayora de estos operadorestambin le sern familiares. Tenga en mente que debe utilizar ==, no = cuando compruebe si dos valores primitivos soniguales. ==iguala !=distintode >mayorque >=mayorqueoiguala <menorque <=menorqueoiguala Elsiguienteprograma,ComparisonDemo,compruebalosoperadoresdecomparacin: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright

*notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classComparisonDemo{ publicstaticvoidmain(String[]args){ intvalue1=1 intvalue2=2 if(value1==value2)System.out.println("value1==value2") if(value1!=value2)System.out.println("value1!=value2") if(value1>value2)System.out.println("value1>value2") if(value1<value2)System.out.println("value1<value2") if(value1<=value2)System.out.println("value1<=value2") } } Resultado: value1!=value2 value1<value2 value1<=value2

Losoperadorescondicionales Los operadores && y|| realizan las operaciones ANDCondicional y ORCondicionalsobredos expresiones booleanas. Estos operadores muestran un comportamiento de cortocircuito, lo quesignificaqueelsegundooperandosolamenteseevalasiesnecesario. &&ANDCondicional ||ORCondicional Elsiguienteprograma,ConditionalDemo1,compruebaestosoperadores: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classConditionalDemo1{

publicstaticvoidmain(String[]args){ intvalue1=1 intvalue2=2 if((value1==1)&&(value2==2))System.out.println("value1es1Yvalue2es2") if((value1==1)||(value2==1))System.out.println("value1es1Ovalue2es1") } } Otro de los operadores condicionales es ?:, que se puede considerar una abreviatura de una sentencia ifthenelse(tratadaenlaseccinSentencias decontroldeflujodeestaleccin).Este operador tambin se conoce como el operador ternario porque utiliza tres operandos. En esl siguiente ejemplo este operador se debe leer como: Si unaCondicion es true (verdadera), asignaelvalordevalor1aresultado.Sino,asignaelvalordevalor2aresultado. Elsiguienteprograma,ConditionalDemo2,compruebaeloperador?:: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF

*LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classConditionalDemo2{ publicstaticvoidmain(String[]args){ intvalor1=1 intvalor2=2 intresultado booleanunaCondicion=true//esverdadera resultado=unaCondicion?valor1:valor2 System.out.println(resultado) } } Puesto que unaCondicion es true (verdadera),esteprogramaimprime1enlapantalla.Utilice el operador ?: en lugar de una sentenciaifthenelsesihacequesucdigoseamslegible,por ejemplo cuando las expresiones con compactas y no tienen efectos secundarios (como asignaciones). Eloperadordecomparacindetiposinstanceof El operador instanceof compara un objetoconun tipoindicado.Puedeutilizarloparacomprobar si un objeto es una instancia de una clase, una instanciade una subclase o una instancia de unaclasequeimplementaunainterfazenconcreto. El siguiente programa, InstanceofDemo, define una clase padre (llamada Parent), una interfaz sencilla (llamada MyInterface), y una clase hija (llamada Child) que hereda del padre e implementalainterfaz. /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution.

* *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classInstanceofDemo{ publicstaticvoidmain(String[]args){ Parentobj1=newParent() Parentobj2=newChild() System.out.println("obj1instanceofParent:"+(obj1instanceofParent)) System.out.println("obj1instanceofChild:"+(obj1instanceofChild)) System.out.println("obj1instanceofMyInterface:"+(obj1instanceofMyInterface)) System.out.println("obj2instanceofParent:"+(obj2instanceofParent)) System.out.println("obj2instanceofChild:"+(obj2instanceofChild)) System.out.println("obj2instanceofMyInterface:"+(obj2instanceofMyInterface)) } } classParent{} classChildextendsParentimplementsMyInterface{} interfaceMyInterface{} Resultado: obj1instanceofParent:true obj1instanceofChild:false obj1instanceofMyInterface:false

obj2instanceofParent:true obj2instanceofChild:true obj2instanceofMyInterface:true Alusareloperadorinstanceof,tengaencuentaquenullnoesunainstanciadenada. Operadoresaniveldebitydedesplazamientodebit El lenguaje de programacin Java tambin proporciona operadores que proporcionan operaciones de a nivel de bit y de desplazamiento de bit en tipos enteros. Los operadores tratados en esta seccin son de uso poco comn. Por tantosu cobertura es breve, el objetivo essimplementehacerconstarqueestosoperadoresexisten. El operador complemento a nivel de bit ~ invierte un patrn de bits se puede aplicar a cualquiera de los tipos enteros, haciendo de cada 0 un 1 y de cada 1 un 0. Por ejemplo, un byte contiene 8 bits al aplicar este operador a un valor cuyo patrn de bits es 00000000stesecambiaraa11111111. El operador de desplazamiento a la izquierda con signo << desplaza un patrn de bitsa la izquierda, y el operador de desplazamiento a la derecha consigno>>desplaza unpatrnde bits a la derecha. El patrn de bits viene dado por el operandode la izquierda y el nmero de posiciones poreloperandodeladerecha.Eloperadordedesplazamientoala derechasinsigno >>> desplaza un cero hacialaposicinmsalaizquierda,mientrasquelaposicinmsala izquierdadespusdel>>dependadelaextensindesigno. Eloperadoraniveldebits&realizaunaoperacindeANDaniveldebits. Eloperadoraniveldebits^realizaunaoperacindeORexclusivoaniveldebits. Eloperadoraniveldebits|realizaunaoperacindeORinclusivoaniveldebits. El siguient programa, BitDemo, utiliza el operador AND a nivel de bits para imprimir el nmero 2enlasalidaestndar. /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission.

* * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classBitDemo{ publicstaticvoidmain(String[]args){ intbitmask=0x000F intval=0x2222 System.out.println(val&bitmask)//imprime"2" } } Resumendeoperadores La siguiente referencia rpida resume los operadores proporcionados por el lenguaje de programacinJava.

Operadordeasignacinsencillo
=Operadordeasignacinsencillo

Operadoresaritmticos
+Operadordeadicin(tambinseutilizaparaconcatenarStrings) Operadordesustraccin *Operadordemultiplicacin /Operadordedivisin %Operadorderesto

Operadoresunarios

+ Operador unario ms, indica un valor positivo (sin embargo los nmero son positivos sineloperador) Operadorunariomenosniegaunaexpresin ++Operadordeincrementoincrementaunvaloren1 Operadordedecrementodecrementaunvaloren1 !Operadordecomplementolgicoinvierteelvalordeunbooleano

Operadoresdeigualdadyrelacionales
==Iguala !=Distintode(Noiguala) >Mayorque >=Mayorqueoiguala <Menorque <=Menorqueoiguala

Operadorescondicionales
&&ANDCondicional ||ORCondicional ?:Ternario(abreviaturadelasentenciaifthenelse)

Operadodecomparacindetipo
instanceofComparaunobjetoconuntipoindicado

Operadoresaniveldebitydedesplazamientodebit
~Complementounarioaniveldebit <<Desplazamientoconsignoalaizquierda >>Desplazamientoconsignoaladerecha >>>Desplazamientosinsignoaladerecha &ANDaniveldebits ^ORexclusivoaniveldebits |ORinclusivoaniveldebits

Preguntasyejercicios:Operadores

Preguntas
1. Fjeseenelsiguientefragmentodecdigo. 2. arrayOfInts[j]>arrayOfInts[j+1] 3. Quoperadorescontieneelcdigo? 4. Fjeseenelsiguientefragmentodecdigo. 5. inti=10 intn=i++%5 a. Cualessonlosvaloresdeiyndespusdequesehayaejecutado? b. Cules son los valores finales de i y n si en vez de usar el operador de incrementopostfix(i++),utilizalaverisnprefix(++i))? 6. Quoperadorutilizaraparainvertirelvalordeunboolean? 7. Quoperadorseutilizaparacomparardosvalores,=o==? 8. Expliqueelsiguienteejemplodecdigo:result=someCondition?value1:value2

Ejercicios
1. Cambieelsiguienteprogramaparaqueutiliceasignacionescompuestas: 2. classArithmeticDemo{ publicstaticvoidmain(String[]args){ intresult=1+2//elresultadoesahora3 System.out.println(result) result=result1//elresultadoesahora2 System.out.println(result) result=result*2//elresultadoesahora4 System.out.println(result) result=result/2//elresultadoesahora2 System.out.println(result) result=result+8//elresultadoesahora10 result=result%7//elresultadoesahora3 System.out.println(result) } }

3. Enelsiguienteprograma,expliqueporquelvalor6semuestradosvecesseguidas: 4. classPrePostDemo{ publicstaticvoidmain(String[]args){ inti=3 i++ System.out.println(i)//"4" ++i System.out.println(i)//"5" System.out.println(++i)//"6" System.out.println(i++)//"6" System.out.println(i)//"7" } }

Respuestasapreguntasyejercicios:Operadores
Respuestasapreguntas
1. Fjeseenelsiguientefragmentodecdigo. 2. arrayOfInts[j]>arrayOfInts[j+1]

3. 4. 5. 6. 7.

Pregunta:Quoperadorescontieneelcdigo? Respuesta:>,+ Fjeseenelsiguientefragmentodecdigo. inti=10 intn=i++%5 a. b. c. d.

Pregunta:Cualessonlosvaloresdeiyndespusdequesehayaejecutado? Respuesta:ies11,ynes0. Pregunta: Cules son los valoresfinales dei y n sienvezdeusar eloperador deincrementopostfix(i++),utilizalaverisnprefix(++i))? e. Respuesta:ies11,ynes1. f. 8. Pregunta:Quoperadorutilizaraparainvertirelvalordeunboolean? 9. Respuesta:Eloperadordecomplementolgico!.

10. Pregunta::Quoperadorseutilizaparacomparardosvalores,=o==? 11. Respuesta:Eloperador==seutilizaparalacomparacin,y=paraasignacin. 12. Pregunta: Explique el siguiente ejemplo de cdigo: result = someCondition ? value1 : value2 13. Respuesta: Este cdigo se debe leer como: Si unaCondicion es true (verdadera), asignaelvalordevalor1aresultado.Sino,asignaelvalordevalor2aresultado.

Ejercicios
1. Cambieelsiguienteprogramaparaqueutiliceasignacionescompuestas: 2. classArithmeticDemo{ publicstaticvoidmain(String[]args){ intresult=1+2//elresultadoesahora3 System.out.println(result) result=result1//elresultadoesahora2 System.out.println(result) result=result*2//elresultadoesahora4 System.out.println(result) result=result/2//elresultadoesahora2 System.out.println(result) result=result+8//elresultadoesahora10 result=result%7//elresultadoesahora3 System.out.println(result) } }

3. Unasolucin: 4. classArithmeticDemo{ publicstaticvoidmain(String[]args){ intresult=3 System.out.println(result) result=1//resultesahora2 System.out.println(result)

result*=2//resultesahora4 System.out.println(result) result/=2//resultesahora2 System.out.println(result) result+=8//resultesahora10 result%=7//resultesahora3 System.out.println(result) } } 5. Enelsiguienteprograma,expliqueporquelvalor6semuestradosvecesseguidas: 6. classPrePostDemo{ publicstaticvoidmain(String[]args){ inti=3 i++ System.out.println(i)//"4" ++i System.out.println(i)//"5" System.out.println(++i)//"6" System.out.println(i++)//"6" System.out.println(i)//"7" } } 7. El cdigo System.out.println(++i) evalua a 6 porque la versin prefix de ++ evala al valor incrementado. La siguiente lnea, System.out.println(i++) evala al valor actual, y despusincrementaenuno.Porlotanto7nosemuestrahastalalneasiguiente.

Expresiones,sentenciasybloques
Ahora que ya entiende las variables ylosoperadoreseselmomentodeaprenderloquesonlas expresiones, las sentencias y los bloques. Los operadores se utilizan para construir expresiones que calculan valores las expresiones son los componentes centrales de las sentenciaslassentenciassepuedenagruparenbloques.

Expresiones

Una expresinesunaconstruccinhecha devariables,operadoreseinvocacionesdemtodos, creados segn la sintaxis del lenguaje, que evala a un solovalor.Yahemosvistoejemplos de expresiones,ilustradasennegritaacontinuacin: intcadence=0 anArray[0]=100 System.out.println("Elemento1enelndice0:"+anArray[0]) intresult=1+2//resultesahora3 if(value1==value2)System.out.println("value1==value2") El tipo de dato del valor devueltoporunaexpresindependedeloselementosutilizadasenella. La expresin cadence = 0 devuelveun int porque el operador de asignacin devuelve un valor del mismo tipo de dato que el operandodesuizquierdaenestecasocadenceesunint.Como puede observar en los dems ejemplos, una expresin puede devolver tambin otro tipo de datos,porejemplobooleanoString. El lenguaje de programacin Java permite construir expresionescompuestas a partir devarias expresiones ms pequeas siempre que el tipo de datorequeridoporunaparte delaexpresin concuerdeconeldelaotra.Acontinuacinunejemplodeunaexpresincompuesta: 1*2*3 En este ejemplo el orden en el que se evala la expresinnoesimportanteporque elresultado delamuliplicacinnodependedelordenel resultadoessiempreelmismosinimportarelorden en que se apliquen las multiplicaciones. Sin embargo esto no es cierto para todas las expresiones. Por ejemplo, la siguiente expresin dar resultados diferentes segn se realice primerolaoperacindesumaoladedivisin: x+y/100//ambguo Puede indicarexctamentecmosedebeevaluar unaexpresinmedianteelusodeparntesis: ( y ). Para eliminar la ambigedad de la expresin anterior se podra escribir de la siguiente forma: (x+y)/100//noambguo,recomendado Si no indica explcitamente el orden de las operaciones que se deben realizar, el orden lo determina la precedencia asignada a los operadores utilizados en la expresin. Lo peradores con mayor precedencia se evalan primero. Por ejemplo, el operador de divisin tiene mayor precedenciaqueeldesuma.Porlotantolassiguientesdossentenciassonequivalentes: x+y/100 x+(y/100)//noambguo,recomendado Sea explcito al escribir expresiones compuestas e indique con parntesisqu operadores se debenevaluarprimero.Estaprcticaharquesucdigoseamsfcildeleerymantener.

Sentencias
Las sentencias son, a grandes rasgos, equivalentes alas oraciones del lenguaje natural. Una sentencia forma una unidad de ejecucin completa. Los siguientes tipos de expresiones se puedenconvertirensentenciasiseterminanconpuntoycoma(). Expresionesdeasignacin Cualquierusodecode>++o Invocacionesdemtodos Expresionesdecreacindeobjetos Este tipo de sentencias se llaman sentencias de expresin. Veamos algunos ejemplos de sentenciasdeexpresin. unValor=8933.234//sentenciadeasignacin unValor++//sentenciadeincremento System.out.println("HolaMundo!")//sentenciadeinvicacindemtodo BicyclemiBici=newBicycle()//sentenciadecreacindeobjeto Hay dos otros tipo de sentencias adems de las de expresin: sentencias de declaracin y sentencias de control de flujo. Una sentencia de declaracin declara una variable. Ya hemos vistomuchosejemplosdesentenciasdedeclaracin: doubleunValor=8933.234//sentenciadedeclaracin Finalmente, las sentencias de control de flujo regulan el orden en el que se ejecutan las sentencias. Aprender ms acerca delassentenciasde controldeflujoenlasiguienteseccin, Sentenciasdecontroldeflujo

Bloques
Un bloque es un grupo de sentencias contenido entre corchetes emparejados que se puede utilizar en cualquier lugar en el que se permita una sentencia sencilla. El siguiente ejemplo, BlockDemo,ilustraelusodebloques: classBlockDemo{ publicstaticvoidmain(String[]args){ booleancondition=true if(condition){//empiezaelbloque1 System.out.println("Conditionesverdadero.") }//findelbloqueone else{//empiezaelbloque2 System.out.println("Conditionesfalso.") }//findelbloque2 } }

Preguntas y ejercicios: Expresiones, sentencias y bloques


Preguntas
1. 2. 3. 4. 5. Losoperadoressepuedenusarenlaconstruccinde___,quecalculanvalores. Lasexpresionessonloscomponentescentralesde___. Lassentenciassepuedenagruparen___. Elsiguientefragmentodecdigoesunejemplodeunaexpresin___. 1*2*3

6. Las sentencias son,agrandesrasgos,equivalentesalasoracionesdellenguaje natural, peroenvezdeterminarconunpuntounasentenciaterminacon___. 7. Un bloque es un grupo de sentencias contenido entre ___ emparejados que se puede utilizarencualquierlugarenelquesepermitaunasentenciasencilla.

Ejercicios
Identifiquelossiguientestiposdeexpresiones: unValor=8933.234 unValor++ System.out.println("HolaMundo!") BicyclemiBici=newBicycle() Respuestasapreguntasyejercicios:Expresiones,sentenciasybloques

Preguntas
1. Los operadores se pueden usar en la construccin de expresiones, que calculan valores. 2. Lasexpresionessonloscomponentescentralesdelassentencias. 3. Lassentenciassepuedenagruparenbloques. 4. Elsiguientefragmentodecdigoesunejemplodeunaexpresincompuesta. 5. 1*2*3 6. Las sentencias son,agrandesrasgos,equivalentesalasoracionesdellenguaje natural, peroenvezdeterminarconunpuntounasentenciaterminaconpuntoycoma. 7. Un bloque es un grupo de sentencias contenidoentre corchetes emparejados que se puedeutilizarencualquierlugarenelquesepermitaunasentenciasencilla.

Ejercicios
Identifiquelossiguientestiposdeexpresiones: unValor=8933.234//sentenciadeasignacin unValor++//sentenciadeincremento System.out.println("HolaMundo!")//sentenciadeinvocacindemtodo BicyclemiBici=newBicycle()//sentenciadecreacindeobjeto Sentenciasdecontroldeflujo Normalmente las sentencias desus archivosdecdigose ejecutandearribaabajo,enelorden en que aparecen. Lassentencias de control de flujo, sinembargo, rompen elflujodeejecucin al emplear tomas de decisiones, bucles yramificaciones,permitiendoquesuprogramaejecute ciertos bloques de cdigosegn ciertas condiciones. Esta seccin describelas sentencias de toma de decisiones (ifthen, ifthenelse, switch), las sentencias de bucles (for,while,dowhile) y las sentencias de ramificacin (break, continue, return) proporcionadas por el lenguaje de programacinJava.

Lassentenciasiftheneifthenelse
Lasentenciaifthen
La sentencia ifthen es la ms bsica de las sentencias de control de flujo. Le indica al programa que ejecute cierta parte del cdigo solamente si una condicin evala a true. Por ejemplo, la clase Bicycle podria permitir que los frenos redujesen la velocidad de la bicicleta solamente si la bicicleta ya estuviera en movimiento. Una posible implementacin del mtodo aplicarFrenospodraseras: voidaplicarFrenos(){ if(seMueve){//laclusula"if":labicicletadebeestarenmovimiento velocidadActual//laclusula"then":reducirlavelocidadactual } } Si esta condicin evala afalse (indicando que la bicicletanosemueve),elcontrolsaltaalfinal delasentenciaifthen. Los corchetes de apertura y cierre son opcionales siempre que la clusula then solo contengaunasentencia: voidaplicarFrenos(){ if(seMueve)velocidadActual//lomismoquemsarriba,perosinloscorchetes }

La decisin de cundoomitir los corchetes es unacuestindegustopersonal.Omitirlospuede dar un aspecto ms descuidado al cdigo. Si ms tarde se aade una segunda sentencia ala clusula then suele ocurrir que se olviden de aadir los corchetes necesarios.Elcompilador noescapazdecapturarestetipodeerrores,simplementeobtendrresultadoerrneos.

Lasentenciaifthenelse
Lasentenciaifthenelseproporcionaunarutadeejecucinsecundariacuandounaclusulaif evala a false. Podrautilizar lasentencia ifthenelse en el mtodo aplicarFrenos para realizar una accin si se aplican los frenos cuando la bicicleta no se est moviendo. En esta caso la accinsimplementemuestraunmensajedeerrorindicandoquelabilicletayaestdetenida. voidaplicarFrenos(){ if(seMueve){ velocidadActual }else{ System.err.println("Labicicletayaestdetenida") } } El siguiente programa, IfElseDemo, asigna una nota segn la puntuacin de una prueba:unaA paraunapuntuacinde90%oms,unaBparaunapuntuacinde80%oms,etc. /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR

*PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classIfElseDemo{ publicstaticvoidmain(String[]args){ inttestscore=76 chargrade if(testscore>=90){ grade='A' }elseif(testscore>=80){ grade='B' }elseif(testscore>=70){ grade='C' }elseif(testscore>=60){ grade='D' }else{ grade='F' } System.out.println("Nota="+grade) } } Lasalidadelprogramaes: Nota=C Se habr fijado en que el valor de testscore puede satisfacer a ms de una expresin de la sentencia compuesta: 76 >= 70 y 76 >= 60. Sin embargo, una vez se ha satisfecho una condicin se ejecutan las sentencias adecuadas (grade= 'C') ylas dems condiciones no se evalan.

Lasentenciaswitch
Al contrario de ifthen e ifthenelse, la sentencia switch permite cualquier cantidad de rutas de ejecucin posibles.. Un switchfunciona con los datosprimitivosbyte,short,chareint.Tambin funciona con tipos enumerados (tratados en Clases y herencia) y con unas cuantas clases especiales que envuelven a ciertos tipos primitivos: Character, Byte, Short, and Integer (tratadoenClasesyobjetos). El siguiente programa, SwitchDemo, declara un int llamado month cuyo valor representa un mes del ao. El programa muestra el nombre del mes, basado en el valor de month, mediantelasentenciaswitch. /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE.

*/ classSwitchDemo{ publicstaticvoidmain(String[]args){ intmonth=8 switch(month){ case1:System.out.println("Enero")break case2:System.out.println("Febrero")break case3:System.out.println("Marzo")break case4:System.out.println("Abril")break case5:System.out.println("Mayo")break case6:System.out.println("Junio")break case7:System.out.println("Julio")break case8:System.out.println("Agosto")break case9:System.out.println("Septiembre")break case10:System.out.println("Octubre")break case11:System.out.println("Noviembre")break case12:System.out.println("Diciembre")break default:System.out.println("Mesnovlido.")break } } } EnestecasosemostrarAgostoenlasalidaestndar. El cuerpo de una sentencia switch se conoce como el bloque switch. Cualquier sentencia contenida directamente por el bloque switch puede estar marcada por una o ms etiquetas caseodefault.Lasentenciaswitchevalasuexpresinyejecutaelcaso(case)adecuado. Tambinesposible,porsupuesto,conseguirelmismoresultadoconsentenciasifthenelse: intmonth=8 if(month==1){ System.out.println("Enero") }elseif(month==2){ System.out.println("Febrero") } ...//etctera La decisin de usarunasentenciaifthenelseoswitchamenudoessimplementeunacuestin de criterio propio.Podrdecidir culusarbasndoseen lalegibilidadyotrosfactores.Sepuede utilizar una sentencia ifthenelse para tomar decisiones basadas en rangos de valores o condiciones,mientrasqueunasentenciaswitchsolamentepuedetomardecisionesbasadasen unsolovalorenterooenumerado. Tambin es interestantela sentencia break que va detrsde cada case.Cadasentenciabreak

termina lasentenciaswitchquelaenvuelve.Elcontrolde flujocontinaconlaprimerasentencia a continuacin del bloque switch. Las sentencias break son necesarias porque sin ellas las sentencias case fallaran, es decir, sin un break el flujo del programaseguirasecuencialmente a travs de todas las sentencias case. El siguiente programa, SwitchDemo2, ilustra por qu podrasertilhacerqueunasentenciacasefalle: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classSwitchDemo2{ publicstaticvoidmain(String[]args){ intmonth=2 intyear=2000

intnumDays=0 switch(month){ case1: case3: case5: case7: case8: case10: case12: numDays=31 break case4: case6: case9: case11: numDays=30 break case2: if(((year%4==0)&&!(year%100==0)) ||(year%400==0)) numDays=29 else numDays=28 break default: System.out.println("Mesnovlido.") break } System.out.println("Nmerodedas="+numDays) } } Estaeslasalidadelprograma. Nmerodedas=29 Tcnicamente el ltimo break no es necesario ya que el flujo se saldra dela sentencia switch de todos modos.Sin embargo recomendamos usar un break para evitar erroresalmodificarel cdigo. La seccin default gestiona los valores que no sean tratados explcitamenteporunade lasseccionescase.

Lassentenciaswhileydowhile
La sentencia while ejecuta un bloque de sentenciascontnuamentemientrasunacondicinsea verdaderatrue.Susintaxissepuederesumiras: while(expresin){ sentencia(s) } La sentencia while evala expresin, que debedevolverunvalorboolean.Silaexpresinevala a true, la sentencia while ejecuta la(s) sentencia(s) que hay en el bloque while. La sentencia while contina evaluando la expresin y ejecutando subloque hasta que la expresin evale a false. Podemos usar la sentencia while para imprimir los valores del 1 al 10 como semuestra enelsiguienteprogramaWhileDemo: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF

*LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classWhileDemo{ publicstaticvoidmain(String[]args){ intcount=1 while(count<11){ System.out.println("Nmero:"+count) count++ } } } Podrrealizarunbucleinfinitomediantelasentenciawhiledelsiguientemodo: while(true){ //pongaaqusucdigo } El lenguaje de programacin Java tambin proporciona la sentencia dowhile, que se puede expresaras: do{ sentencia(s) }while(expresin) La diferencia entre dowhile y while es que dowhile evala su expresin al final en lugar de al inicio. Porlotantolassentenciasdelbloquedosiempreseejecutanalmenosunavez,comose muestraenelsiguienteprogramaDoWhileDemo: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. *

*NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classDoWhileDemo{ publicstaticvoidmain(String[]args){ intcount=1 do{ System.out.println("Nmero:"+count) count++ }while(count<=11) } }

Lasentenciafor
La sentencia for proporciona una forma compacta de recorrer un rango de valores. Los programadores a menudo se refieren a ella como el bucle for por la forma en la querecorre su bloque hastaquese satisfaga la condicin indicada.La formageneraldelasentenciaforse puedeexpresardelsiguientemodo: for(inicializacinterminacinincremento){ sentencia(s) } Alusarestaversindelasentenciafortengaencuentaque: La expresin inicializacin inicializa el bucle, se ejecuta una sola vez cuando el bucle

empieza. Elbucleterminacuandolaexpresinterminacinevalaafalse. La expresin incremento se invoca despus de cada iteracin por el bucle es perfectamenteaceptablequeestaexpresinincrementeodecrementeunvalor. El siguiente programa, ForDemo, utiliza la forma general de la sentencia for para mostrar los nmerosdel1al10enlasalidaestndar: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classForDemo{ publicstaticvoidmain(String[]args){ for(inti=1i<11i++){ System.out.println("Nmero:"+i)

} } } Lasalidadeesteprogramaes: Nmero:1 Nmero:2 Nmero:3 Nmero:4 Nmero:5 Nmero:6 Nmero:7 Nmero:8 Nmero:9 Nmero:10 Fjese en cmo el cdigo declara unavariabledentrodelaexpresindeinicializacin.Elmbito de esta variable se extiende desde su declaracin hasta el final del bloque perteneciente a la sentencia for, por lo tanto tambin se puede usar en las expresiones de terminacin e incremento. Es mejor declarar la variable que controla una sentencia for en la expresin de inicializacin si sta no es necesaria fuera del bucle. A menudo se utilizan los nombres i, j y k para controlar losbucles foral declararlas dentro de la expresinde inicializacin se limita su tiempodevidaysereducelaposibilidaddeerror. Las tres expresiones del bucle for son opcionales sepuedecrearunbucleinifintodelsiguiente modo: for(){//bucleinfinito //elcdigovaaqu } La sentencia for tambin tiene otra forma diseada para la iteracin a travs de Colecciones y arrays. A esta forma a veces se ladenomina for mejorado (enhanced for)ysepuedeutilizar para compactarmssusbuclesyfacilitarsulectura.Comoejemplo,fjeseenelsiguientearray, quecontienelosnmerosdel1al10: int[]numeros={1,2,3,4,5,6,7,8,9,10} Elsiguienteprograma,EnhancedForDemo,utilizaelbucleformejoradopararecorrerelarray: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet:

* *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classEnhancedForDemo{ publicstaticvoidmain(String[]args){ int[]numeros={1,2,3,4,5,6,7,8,9,10} for(intelemento:numeros){ System.out.println("Nmero:"+elemento) } } } En este ejemplo la variable elemento contiene el valor actual delarraynumeros.Lasalidade esteprogramaesigualalaanterior: Nmero:1 Nmero:2 Nmero:3 Nmero:4 Nmero:5

Nmero:6 Nmero:7 Nmero:8 Nmero:9 Nmero:10 Se recomienda el usodeestaformadelasentencia forenvezdelaformageneralsiempreque seaposible.

Sentenciasderamificacin
Lasentenciabreak
La sentencia break tiene dos formas: etiquetada y sin etiquetar. Hemos visto la forma sin etiquetar en la seccinanterior en la quesetratabalasentenciaswitch.Tambiepodrutilizar una sentencia break sin etiquetar paraterminarunbuclefor,whileodowhile,comosemuestra enelsiguienteprogramaBreakDemo: classBreakDemo{ publicstaticvoidmain(String[]args){ int[]arrayOfInts={32,87,3,589,12,1076, 2000,8,622,127} intsearchfor=12 inti booleanfoundIt=false for(i=0i<arrayOfInts.lengthi++){ if(arrayOfInts[i]==searchfor){ foundIt=true break } } if(foundIt){ System.out.println("Encontrado"+searchfor +"enelndice"+i) }else{ System.out.println(searchfor +"noestenelarray") }

} } Este programa busca elnmero12enunarray.Lasentenciabreak,ennegrita,terminaelbucle for cuando se encuentra el valor. En ese momento del control de flujo se transfiere a la sentenciaprintalfinaldelprograma.Lasalidadeesteprogramaes: Encontrado12enelndice4 Una sentencia break sin etiquetar termina lasentenciaswitch, for,whileodowhilemsinterna, pero un break etiquetado termina una sentencia externa. El siguiente programa, BreakWithLabelDemo, es parecido al programa anterior pero utiliza bucles for anidados para buscar un valor en unarray dedosdimensiones.Unbreaketiquetado(comosearch)termina elbucleforexternocuandoseencuentraelvalor: /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS

*SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classBreakWithLabelDemo{ publicstaticvoidmain(String[]args){ int[][]arrayOfInts={{32,87,3,589}, {12,1076,2000,8}, {622,127,77,955} } intsearchfor=12 inti intj=0 booleanfoundIt=false search: for(i=0i<arrayOfInts.lengthi++){ for(j=0j<arrayOfInts[i].lengthj++){ if(arrayOfInts[i][j]==searchfor){ foundIt=true breaksearch } } } if(foundIt){ System.out.println("Encontrado"+searchfor+ "en"+i+","+j) }else{ System.out.println(searchfor +"noestenelarray") } } } Estaeslasalidadelprograma. Encontrado12en1,0 La sentencia break termina la sentencia etiquetadanotransfiereelcontroldeflujoalaetiqueta. Elcontroldeflujosetransfierealasentenciainmediatamenteposterioralasentenciaetiquetada (terminada).

Lasentenciacontinue
La sentencia continuese salta la iteracin actual de un buclefor,whileodowhile.Laformasin etiquetar salta al final del cuerpo del bucle ms interno y evala laexpresin booleana que lo controla. El siguiente programa, ContinueDemo, recorre un String contando las veces que aparece la letra p. Siel carcter actual no es una p la sentencia continue sesaltaelresto del bucle y sigue con el siguiente carcter. Si es una p, elprograma incrementa la suma de letras. /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * 0*Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe *documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */

classContinueDemo{ publicstaticvoidmain(String[]args){ StringsearchMe="peterpiperpickedapeckofpickledpeppers" intmax=searchMe.length() intnumPs=0 for(inti=0i<maxi++){ //interestedonlyinp's if(searchMe.charAt(i)!='p') continue //processp's numPs++ } System.out.println("Encontradas"+numPs+"p'senlacadena.") } } Estaesl0.asalidadelprograma. Encontradas9p'senlacadena. Compile el mismo programa eliminando la sentencia continue para ver el efecto ms claramente. Cuando vuelva a ejecutarlo el contador estar equivocado, indicando que ha encontrado35p'senlugarde9. Una sentencia continue etiquetada se salta la iteracin actualdeunbucleexteriormarcadocon la etiqueta indicada. El siguiente programa, ContinueWithLabelDemo, utiliza bucles anidados para buscar una subcadena dentro deotra cadena.Senecesitandosbuclesanidados:unoque recorra la subcadena y otro que recorra la cadena principal. El siguiente programa, ContinueWithLabelDemo, utiliza la forma etiquetada de continue para saltarse una iteracin delbucleexterior. /* *Copyright(c)19952008SunMicrosystems,Inc.Allrightsreserved. * *Redistributionanduseinsourceandbinaryforms,withorwithout *modification,arepermittedprovidedthatthefollowingconditions *aremet: * *Redistributionsofsourcecodemustretaintheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimer. * *Redistributionsinbinaryformmustreproducetheabovecopyright *notice,thislistofconditionsandthefollowingdisclaimerinthe

*documentationand/orothermaterialsprovidedwiththedistribution. * *NeitherthenameofSunMicrosystemsnorthenamesofits *contributorsmaybeusedtoendorseorpromoteproductsderived *fromthissoftwarewithoutspecificpriorwrittenpermission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS *IS"ANDANYEXPRESSORIMPLIEDWARRANTIES,INCLUDING,BUTNOTLIMITEDTO, *THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULAR *PURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHTOWNEROR *CONTRIBUTORSBELIABLEFORANYDIRECT,INDIRECT,INCIDENTAL,SPECIAL, *EXEMPLARY,ORCONSEQUENTIALDAMAGES(INCLUDING,BUTNOTLIMITEDTO, *PROCUREMENTOFSUBSTITUTEGOODSORSERVICESLOSSOFUSE,DATA,OR * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *LIABILITY,WHETHERINCONTRACT,STRICTLIABILITY,ORTORT(INCLUDING *NEGLIGENCEOROTHERWISE)ARISINGINANYWAYOUTOFTHEUSEOFTHIS *SOFTWARE,EVENIFADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE. */ classContinueWithLabelDemo{ publicstaticvoidmain(String[]args){ StringsearchMe="Lookforasubstringinme" Stringsubstring="sub" booleanfoundIt=false intmax=searchMe.length()substring.length() test: for(inti=0i<=maxi++){ intn=substring.length() intj=i intk=0 while(n!=0){ if(searchMe.charAt(j++) !=substring.charAt(k++)){ continuetest } } foundIt=true breaktest

} System.out.println(foundIt?"Encontrado": "Noloencontr") } } Estaeslasalidadelprograma. Encontrado

Lasentenciareturn
La ltima de las sentencias de ramificacin es return. La sentencia return sale del mtodo actual y devuelve el control de flujo a donde se haba invocado el mtodo. La sentencia return tiene dos formas: una que devuelve un valor y otra que no lo devuelve. Para devolver un valor, simplemente aada el valor (o una expresin que calcule le valor) despus de la palabra clave return. return++count El tipo de dato devuelto debe coincidir con el tipo delvalor de retorno declarado por el mtodo. Cuandodeclareunmtodocomovoid,utilicelaformadereturnquenodevuelvaunvalor. return

ResumendeSentenciasdecontroldeflujo
La sentencia ifthen es la ms bsica de las sentencias de control de flujo. Le indica al programa que ejecute cierta parte del cdigo solamente si una condicin evala a true. La sentencia ifthenelse proporciona una ruta de ejecucin secundaria cuando una clusula if evala a false. Al contrario de ifthen e ifthenelse, la sentencia switch permite cualquier cantidad de rutas de ejecucin posibles..Lassentenciaswhileydowhileejecutanunbloquede sentencias contnuamente mientras una condicin sea true. Ladiferenciaentredowhileywhile es que dowhile evala su expresin al final en lugar de al inicio. Por lo tanto, las sentencias dentro del bloquedo se ejecutan por lomenosunavez.Lasentenciaforproporcionaunaforma compacta de recorrer un rango de valores. Tiene dos formas, una de las cuales fue diseada pararecorrercoleccionesyarrays. Preguntasyejercicios:Sentenciasdecontroldeflujo

Preguntas
1. La sentencia de control de flujo ms bsica proporcionada por el lenguaje Java es la sentencia___. 2. Lasentencia___permitecualquiercantidadderutasdeejecucinposibles.

3. La sentencia ___ es parecida a la sentencia while, pero evala su expresin al ___ del bucle. 4. Cmoseescribeunbucleinfinitoutilizandolasentenciafor? 5. Cmoseescribeunbucleinfinitoutilizandolasentenciawhile?

Ejercicios
1. Teniendoencuentaelsiguientefragmentodecdigo. 2. if(aNumber>=0) if(aNumber==0)System.out.println("primeracadena") elseSystem.out.println("segundacadena") System.out.println("terceracadena") a. QusalidacreequeseproducirsiaNumberes3? b. Escriba unprogramaquecontengaelfragmentoanterior,hagaqueaNumbersea 3. Cul es la salida delprograma?Esloquehabapredicho?Expliqueporqu la salida es la que es en otras palabras, cul es el flujo de control del fragmento? c. Reformatee el cdigo para que el flujo sea ms comprensible, usando solamente espaciosycambiosdelnea. d. Utilicecorchetes,{y},paraaclararelcdigoms.

Respuestas a preguntas y ejercicios: Sentencias de controldeflujo


Respuestasapreguntas
1. La sentencia de control de flujo ms bsica proporcionada por el lenguaje Java es la sentenciaifthen. 2. Lasentenciaswitchpermitecualquiercantidadderutasdeejecucinposibles. 3. La sentencia dowhile es parecida a la sentencia while, pero evala su expresin al bottomdelbucle. 4. Pregunta:Cmoseescribeunbucleinfinitoutilizandolasentenciafor?

5. Respuesta: 6. for(){ } 7. Pregunta:Cmoseescribeunbucleinfinitoutilizandolasentenciawhile? 8. Respuesta: 9. while(true){ }

Ejercicios
1. Teniendoencuentaelsiguientefragmentodecdigo. 2. if(aNumber>=0) if(aNumber==0)System.out.println("primeracadena") elseSystem.out.println("segundacadena") System.out.println("terceracadena") a. Ejercicio:QusalidacreequeseproducirsiaNumberes3? b. Solucin: c. segundacadena terceracadena d. Ejercicio: Escriba un programa que contenga el fragmento anterior, haga que aNumber sea 3. Cul es la salida del programa? Es lo que habapredicho? Explique por qu la salida es la que es. En otras palabras, cul esel flujo de controldelfragmento? e. Solucin:NestedIf f. segundacadena terceracadena g. 3 esmayoroiguala0,porloquelaejecucinprogresaalasegundasentenciaif. El test de la segunda sentencia if falla porque 3 no es igual a 0. Por tanto, se ejecuta la clusula else (ya que est ligada a la segunda sentencia if). Por lo tanto, semuestrasegundacadena.Elltimoprintlnestcompletamentefuerade cualquier sentencia if, por lo que se ejecuta siempre, por lo tanto siempre se muestraterceracadena. h. Ejercicio: Reformatee elcdigo paraqueelflujoseams comprensible,usando solamenteespaciosycambiosdelnea. i. Solucin: j. if(aNumber>=0)

if(aNumber==0) System.out.println("primeracadena") else System.out.println("segundacadena") System.out.println("terceracadena") k. Ejercicio: Utilice corchetes, { y }, para aclarar el cdigo ms y reducir la posibilidaddeerroresporpartedefuturosmantenedoresdelcdigo. l. Solucin: m. if(aNumber>=0){ if(aNumber==0){ System.out.println("primeracadena") }else{ System.out.println("segundacadena") } } System.out.println("terceracadena")

S-ar putea să vă placă și