TutorialJava-EnJavados

download TutorialJava-EnJavados

of 71

Transcript of TutorialJava-EnJavados

  • 7/30/2019 TutorialJava-EnJavados

    1/71

    Conceptos de la

    programacin orientada a

    objetos

    Si nunca antes ha utilizado un lenguaje de programacin orientado a objetos deber aprenderunos cuantos conceptos bsicos antes de empezar a escribir cdigo. Esta leccin le servir de

    introduccin a los objetos, clases, herencia, interfaces y paquetes. Cada seccin se centra encmo estos conceptos estn relacionados con el mundo real mientras que proporcionan unaintroduccin a la sintaxis del lenguaje de programacin Java.

    Qu es un objeto?

    Un objeto es una parte de software de estado y comportamiento relacionado. A menudo seutilizan los objetos software para modelar objetos del mundo real que podr encontrar en suvida diaria. Esta leccin explica cmo se representan el estado y el comportamiento dentro deun objeto, presenta el concepto de encapsulacin de datos y explica los beneficios de disearsu propio software de esta manera.

    Qu es una clase?

    Una clase es como los planos o el prototipo del que se crean los objetos. Esta seccin defineuna clase que modela el estado y comportamiento de un objeto de la vida real. Enfocaintencionadamente lo bsico, mostrando como hasta una clase sencilla puede modelarlimpiamente estado y comportamiento.

    Qu es la herencia?

    La herencia proporciona un mecanismo potente y natural para organizar y estructurar su

    software. Esta seccin explica cmo las clases heredan el estado y el comportamiento de sussuperclases y cmo derivar una clase de otra usando la sintaxis sencilla del lenguaje deprogramacin Java.

  • 7/30/2019 TutorialJava-EnJavados

    2/71

    Qu es una interfaz?

    Una interfaz es un contrato entre una clase y el mundo exterior. Cuando una clase implementauna interfaz, se compromete a proporcionar el comportamiento publicado por esa interfaz. Estaseccin define una interfaz sencilla y explica los cambios necesarios para cualquier clase que laimplemente.

    Qu es un paquete?

    Un paquete es un espacio de nomenclatura para organizar clases e interfaces de una maneralgica. Colocando su cdigo en paquetes permite facilitar la gestin de grandes proyectos desoftware. Esta seccin explica por qu esto es til y le presenta la Interfaz de Programacin de

    Aplicaciones (API) proporcionada por la plataforma Java.

    Preguntas y ejercicios: Conceptos de la programacin orientada a

    objetos

    Utilice las preguntas y ejercicios que se presentan en esta seccin para comprobar su lo que haaprendido acerca de los objetos, clases, herencia, interfaces y paquetes.

    Qu es un objeto?

    Los objetos son la clave para entender la tecnologa orientada a objetos. Si mira a su alrededorahora mismo se encontrar con muchos ejemplos de objetos del mundo real: su perro, suescritorio, su televisor, su bicicleta.

    Los objetos del mundo real comparten dos caractersticas: Todos tienen estado ycomportamiento. Los perros tienen estado (nombre, color, raza, hambriento) y comportamiento(ladrando, buscando, meneando la cola). Las bicicletas tambin tienen un estado (marchaactual, cadencia de pedaleo actual, velocidad actual) y comportamiento (cambio de marcha,cambio de cadencia de pedaleo, frenar). Identificar el estado y el comportamiento de los objetosdel mundo real es una gran ayuda para empezar a pensar en trminos de programacinorientada a objetos.

    Tmese un momento ahora mismo para observar los objetos del mundo real que hay a sualrededor. Para cada uno de los objetos que ve, hgase dos preguntas: En qu posiblesestados puede estar este objeto? y Qu posibles comportamientos puede realizar?".

    Asegrese de escribir sus observaciones. Mientras lo haga, ver que los objetos del mundo realvaran en complejidad, su lmpara de escritorio puede tener solo dos estados (encendido yapagado) y dos posibles comportamientos (encender y apagar), pero su radio tendr ms

  • 7/30/2019 TutorialJava-EnJavados

    3/71

    estados (encendido, apagado, volumen actual, emisora actual) y comportamientos (encender,apagar, subir volumen, bajar volumen, buscar y sintonizar). Tambin observar que algunosobjetos, a su vez, tambin contendrn otros objetos. Todas estas observaciones del mundo realson reproducibles en el mundo de la programacin orientada a objetos.

    Un objeto software.

    Los objetos software son conceptualmente similares a los objetos del mundo real: tambin

    consisten de estado y comportamiento. Un objeto almacena su estado en campos (variablesen algunos lenguajes de programacin) y muestra su comportamiento a travs de mtodos(funciones en algunos lenguajes de programacin). Los mtodos operan sobre el estadointerno del objeto y sirven como el mecanismo principal para la comunicacin entre objetos. Laocultacin del estado interno y requerir que toda interaccin se realice a travs de los mtodosde un objeto se conoce como encapsulacin de datos un principio fundamental de laprogramacin orientada a objetos.

    Piense, por ejemplo, en una bicicleta:

  • 7/30/2019 TutorialJava-EnJavados

    4/71

    Una bicicleta modelada como un objeto software.

    Al atribuir el estado (velocidad actual, cadencia de pedaleo actual y marcha actual) yproporcionar mtodos para cambiar ese estado, el objeto mantiene el control sobre cmo sepermite al mundo exterior usarlo. Por ejemplo, si la bicicleta solamente tiene 6 marchas, unmtodo que cambie de marcha podr rechazar cualquier valor que sea inferior a 1 o superior a6.

    Al agrupar cdigo en objetos software individuales se obtienen ciertos beneficios:

    1. Modularidad: El cdigo fuente de un objeto se puede escribir y mantenerindependientemente del cdigo fuente de otros objetos. Una vez creado, un objeto sepuede pasar fcilmente de un lado al otro del sistema.

    2. Ocultacin de informacin: Al interactuar solamente con los mtodos de un objeto losdetalles de su implementacin interna permanecen ocultas al mundo exterior.

    3. Reutilizacin de cdigo: Si un objeto ya existe (quizs escrito por otro desarrollador desoftware), puede utilizar ese objeto en su programa. Esto permite que un especialista

    implemente/compruebe/depure objetos especficos para una tarea, en los que luegopodr confiar en su propio cdigo.4. Conectividad y facilidad de depuracin: Si un objeto en concreto resulta ser problemtico

    podr simplemente eliminarlo de su aplicacin y conectar un objeto distinto parareemplazarlo. Esto es anlogo a la reparacin de problemas mecnicos en el mundoreal. Si rompe un tornillo, reemplaza el tornillo, no la mquina entera.

  • 7/30/2019 TutorialJava-EnJavados

    5/71

    Qu es una clase?

    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 hasido fabricada a partir de los mismos planos y, por lo tanto contiene los mismos componentes.En trminos de orientacin a objetos decimos que su bicicleta es una instancia de la clase deobjetos conocida como bicicletas. Una clase es el plano del que se crean objetos individuales.La siguiente clase Bicycle es una posible implementacin de una bicicleta:/** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions

    * are met:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.** - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    "AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR

    * PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORYOF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

  • 7/30/2019 TutorialJava-EnJavados

    6/71

    class Bicycle {

    int cadence = 0int speed = 0int gear = 1

    void changeCadence(int newValue) {cadence = newValue

    }

    void changeGear(int newValue) {gear = newValue

    }

    void speedUp(int increment) {

    speed = speed + increment}

    void applyBrakes(int decrement) {speed = speed - decrement

    }

    void printStates() {System.out.println("cadence:"+cadence+" speed:"+speed+" gear:"+gear)

    }

    }

    La sintaxis del lenguaje Java le podr resultar nueva, pero el diseo de esta clase est basadaen la anterior discusin sobre los objetos bicicleta. Los campos cadence, speed y gearrepresentan el estado del objeto, y los mtodos (changeCadence, changeGear, speedUp etc.)definen su interaccin con el mundo exterior.Quizs se habr fijado en que la clase Bicycle no contiene un mtodo main. Eso es porque noes una aplicacin completa, solamente es el plano para bicicletas que se podra utilizaren unaaplicacin. La responsibilidad de crear y usar nuevos objetos Bicycle pertenece a otra clase desu aplicacin.

    A continuacin hay una clase BicycleDemo que crea dos objetos Bicycle distintos e invoca susmtodos:/** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.** Redistribution and use in source and binary forms, with or without

  • 7/30/2019 TutorialJava-EnJavados

    7/71

    * modification, are permitted provided that the following conditions* are met:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.

    ** - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    "AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

    OF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING

    * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

    class BicycleDemo {public static void main(String[] args) {

    // Create two different Bicycle objectsBicycle bike1 = new Bicycle()Bicycle bike2 = new Bicycle()

    // Invoke methods on those objectsbike1.changeCadence(50)bike1.speedUp(10)bike1.changeGear(2)bike1.printStates()

    bike2.changeCadence(50)

  • 7/30/2019 TutorialJava-EnJavados

    8/71

    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 dosbicicletas:cadence:50 speed:10 gear:2cadence:40 speed:20 gear:3

    Qu es la herencia?

    A menudo diferentes tipos de objetos tienen algunas cosas en comn. Por ejemplo, lasbicicletas de montaa, las de carretera y los tndems todos comparten las caractersticas delas bicicletas (velocidad actual, cadencia de pedal, marcha). An as cada una de ellas tambindefine caractersticas adicionales que las hacen diferentes: los tndems tienen dos asientos ydos manillares, las bicicletas de carretera tienen un manillar con cuernos, algunas bicicletas demontaa tienen ms piones que les proporcionan marchas ms cortas.La programacin orientada a objetos permite que las clases hereden estados ycomportamientos de uso comn de otras clases. En este ejemplo, Bicycle se convierte en lasuperclase de MountainBike, RoadBike y TandemBike. En el lenguaje de programacin Java sepermite que cada clase tenga una superclase directa y que cada superclase tenga el potencialpara una cantidad ilimitada de subclases:

  • 7/30/2019 TutorialJava-EnJavados

    9/71

    Una jerarqua de clases de bicicleta.La sintaxis para crear subclases en sencilla. Utilice la palabra clave extends seguida del nombrede la clase de la que desea heredar al inicio de su declaracin de clase:

    class MountainBike extends Bicycle {

    // Los nuevos campos y mtodos que definan una bici de montaa iran aqu

    }

    Esto proporciona a MountainBike los mismos campos y mtodos que Bicycle, pero permite a sucdigo encargarse exclusivamente de las caractersticas que la hacen nica. Esto hace que elcdigo de sus subclases sea fcil de leer. Sin embargo debe encargarse de documentarapropiadamente el estado y comportamiento que cada superclase que define, ya que ese

    cdigo no aparecer en el archivo fuente de cada subclase.

  • 7/30/2019 TutorialJava-EnJavados

    10/71

    Qu es una interfaz?

    Como ya ha aprendido, los objetos definen su interaccin con el mundo exterior a travs de los

    mtodos de que exponen. Los mtodos forman la interfazdel objeto con el mundo exterior porejemplo, los botones que hay en la parte frontal de su televisor forman la interfaz entre usted y elcableado elctrico al otro lado de la caja de plstico. Debe pulsar un botn para encender yapagar el televisor.En su forma ms comn, una interfaz es un grupo de mtodos relacionados con cuerposvacos. El comportamiento de una bicicleta, si se especifica como una interfaz, podra apareceras:interface Bicycle {

    void changeCadence(int newValue)

    void changeGear(int newValue)

    void speedUp(int increment)

    void applyBrakes(int decrement)}

    Para implementar esta interfaz el nombre de su clase debera cambiar (a ACMEBicycle, porejemplo), y usara la palabra clave implements en la declaracin de clase:class ACMEBicycle implements Bicycle {

    // remainder of this class implemented as before

    }

    Implementar una interfaz permite a una clase ser ms formal acerca del comportamiento quepromete proporcionar. Las interfaces forman un contrato entre la clase y el mundo exterior, yeste contrato se hace cumplir en el momento de la compilacin. Si su clase afirma implementaruna interfaz, todos los mtodos definidos por esa interfaz deben aparecer en su cdigo fuentepara 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 laslecciones que traten Clases y objetos e Interfaces y herencia.

  • 7/30/2019 TutorialJava-EnJavados

    11/71

    Qu es un paquete?

    Un paquete es un espacio de nombre que organiza un conjunto de clases e interfaces

    relacionadas. Puede pensar en los paquetes como algo similar a las diferentes carpetas de suordenador. Puede tener guardadas pginas HTML en una carpeta, imgenes en otra y scripts yaplicaciones en otra distinta. Puesto que un software escrito en el lenguaje de programacinJava puede llegar a consistir de cientos o miles de clases individuales, tiene sentido que seorganicen las clases e interfaces relacionadas en paquetes.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 laInterfaz de Programacin de Aplicaciones (Application Programming Interface en ingls) opor su abreviatura API. Sus paquetes representan las tareas ms comunes asociadas a laprogramacin en general. Por ejemplo, un objeto String contiene estado y comportamiento para

    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 objetoSocket permite la creacin y uso de sockets de red otros objetos de interfaz grfica (GUI)controlan botones, cajas de seleccin y cualquier otra cosa relacionada con las interfacesgrficas de usuario. Literalmente hay miles de clases de las que elegir. Esto le permite alprogramador enfocar sus esfuerzos en el diseo de la aplicacin, ms que en la infraestructurarequerida para hacerla funcionar.La Java Platform API Specification contiene el listado completo de todos los paquetes,interfaces, clases, campos y mtodos proporcionados por la Plataforma Java 6, edicinestndar (Java Platform 6, Standard Edition). Cargue esta pgina en su navegador y adalaa sus marcadores o favoritos. Siendo programador se convertir en su documentacin dereferencia ms importante.

    Preguntas y ejercicios: Conceptos de la programacin orientada a objetos

    Preguntas

    1. Los objetos del mundo real contienen ___ y ___.2. El estado de un objeto software se almacena en ___.3. El comportamiento de un objeto software se expone mediante ___.4. La ocultacin de datos internos del mundo exterior y su acceso a travs de mtodos

    expuestos pblicamente se conoce como ___ de datos.5. Un plano para un objeto software se denomina ___.6. Un comportamiento comn puede ser definido en una ___ y heredado en una ___

    mediante la palabra clave ___.7. Una coleccin de mtodos sin implementacin se llama una ___.8. Un espacio de nombre que organiza clases e interfaces por funcionalidad se denomina

    un ___.

  • 7/30/2019 TutorialJava-EnJavados

    12/71

    9. El trmino API significa ___.

    Ejercicios

    1. Cree clases nuevas para cada objeto del mundo real que observ al inicio de esta ruta.Tome la clase Bicycle como referencia si ha olvidado la sintaxis necesaria.

    2. Cree una interfaz que defina el comportamiento de cada clase nueva que haya creadoms arriba, luego requira que su clase la implemente. Omita uno o dos mtodos eintente compilarlas. Qu aspecto tiene el error?

    Respuestas a preguntas y ejercicios: Conceptos de la programacin orientada a objetos

    Respuestas a preguntas

    1. Los objetos del mundo real contienen estado y comportamiento.

    2. El estado de un objeto software se almacena en campos.

    3. El comportamiento de un objeto software se expone mediante mtodos.4. La ocultacin de datos internos del mundo exterior y su acceso a travs de mtodos

    expuestos pblicamente se conoce como encapsulacin de datos.

    5. Un plano para un objeto software se denomina clase.

    6. Un comportamiento comn puede ser definido en una superclase y heredada en una

    subclase mediante la palabra clave extends.

    7. Una coleccin de mtodos sin implementacin se llama una interfaz.

    8. Un espacio de nombre que organiza clases e interfaces por funcionalidad se denominaun paquete.

    9. El trmino API significa Application Programming Interface.

    Respuestas a ejercicios

    1. Sus repuestas variarn segn los objetos del mundo real que haya modelado.2. Sus repuestas tambin variarn aqu, pero el mensaje de error indicar los mtodos

    requeridos que no han sido implementados.

  • 7/30/2019 TutorialJava-EnJavados

    13/71

    Lo bsico del lenguaje

    Variables

    Ya ha aprendido que los objetos almacenan su estado en campos. Sin embargo el lenguaje deprogramacin Java tambin utiliza el trmino variable. En esta seccin se trata esta relacin,adems de los convenios y reglas de nomenclatura de variables, tipos de datos bsicos (tiposprimitivos, cadenas de caracteres y arrays), valores predeterminados y literales.

    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. Cadadiscusin incluye ejemplos de cdigo que podr compilar y ejecutar.

    Expresiones, sentencias y bloques

    Los operadores se utilizan para construir expresiones que computan valores las expresionesson los componentes centrales de las sentencias las sentencias se pueden agrupar enbloques. En esta seccin se tratan las expresiones, sentencias y bloques mediante cdigo deejemplo que ya ha visto.

    Sentencias de control de flujo

    En esta seccin se describen las sentencias de control de flujo presentes en el lenguaje deprogramacin Java. Cubre las sentencias de toma de decisin, bucles y ramificacin quepermiten que sus programas ejecuten bloques de cdigo especficos de forma condicional.

    Variables

    Ya hemos visto en la leccin anterior que un objeto almacena su estado en campos.int cadence = 0

    int speed = 0int gear= 1

    La leccin Qu es un objeto? le present el concepto de campos, pero probablemente sigateniendo alguna pregunta, como por ejemplo: Cules son los convenios y reglas para nombrarun campo? Adems de int, qu otros tipos de dato hay? Los campos deben ser inicializadoscuando se declaran? Se asigna un valor predeterminado a los campos si no se inicializanexplcitamente? En esta leccin exploraremos las respuestas a este tipo de preguntas, pero

  • 7/30/2019 TutorialJava-EnJavados

    14/71

    antes de hacerlo hay una serie de distinciones tcnicas que debera conocer. En el lenguaje deprogramacin Java se usan los dos trminos campo y variable esto es una fuente habitualde confusin entre desarrolladores noveles ya que ambos, a menudo, parecen referirse a lamisma cosa.El lenguaje de programacin Java define los siguientes tipos de variables:

    Variables de instancia (Campos no estticos) Tcnicamente, los objetos almacenansus estados individuales en campos no estticos, es decir, campos declarados sin lapalabra clave static. Los campos no estticos tambin son conocidos como variables deinstancia porque sus valores son nicos para cada instancia de una clase (en otraspalabras, para cada objeto) el valor de currentSpeed de una bicicleta es independientedel valor de currentSpeed de otra.

    Variables de clase (campos estticos) Una variable de clase es cualquier campo

    declarado con el modificador static esto le indica al compilador que existe solamenteuna copia de esta variable, independientemente de cuntas veces se haya instanciadoesa 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 demarchas a todas las instancias. El cdigo static int numGears = 6 crear un campoesttico de ese tipo. Adems, se podra aadir la palabra clave final para indicar que lacantidad de marchas nunca cambiar.

    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 sintaxispara declarar una variable local es similar a la declaracin de un campo (por ejemplo, intcount = 0). No hay una palabra clave especial que defina una variable como local, esadesignacin viene enteramente por el lugar en el que se declare que es entre lasllaves de apertura y cierre de un mtodo. Como tales, las variables locales son

    solamente visibles en el mtodo en el que son declaradas no son accesibles desde elresto de la clase.

    Parmetros Ya hemos visto ejemplos de parmetros, tanto en la clase Bicycle como en

    el mtodo main de la aplicacin Hola mundo. Recuerde que la estructura del mtodomain es public static void main(String[] args). Aqu la variable args es el parmetro deeste mtodo. Lo que debe recordar es que los parmetros siempre se clasifican comovariables, no como campos. Esto tambin se aplica a otras construcciones queaceptan parmetros (como los constructores y gestores de excepciones) sobre las queaprender ms adelante en los tutoriales.

    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 yparmetros) simplemente diremos campos. Si hablamos de todo lo anterior utilizaremos lapalabra variables. Si el contexto necesita de una distincin clara, utilizaremos trminosespecficos (campo esttico, variable local, etc.) segn sea apropiado. En ocasiones tambinpodr ver el trmino miembro. A los campos, mtodos y tipos anidados de un tipo se lesdenomina colectivamente sus miembros.

  • 7/30/2019 TutorialJava-EnJavados

    15/71

    Nomenclatura

    Cada lenguaje de programacin tiene su propio conjunto de convenios y reglas para los tipos denombres que se permiten utilizar, el lenguaje Java no es diferente. Las reglas y convenios parala nomenclatura de variables se pueden resumir como sigue:

    Los nombres de variables distinguen entre maysculas y minsculas. El nombre de unavariable puede ser cualquier identificador vlido una secuencia de longitud ilimitada deletras y dgitos Unicode, que empiece con una letra, el smbolo del dlar $ o el guinbajo _. Sin embargo, por convenio siempre se utilizan los nombres de variable conuna letra, no con $ o _. Adems, el smbolo del dlarm por convenio, no se utilizanunca. Se encontrar con algn caso en el que nombres generados automticamentecontegnasn el smbolo del dlar, pero sus propias variables deberan evitarlo. Esteconvenio tambin se aplica al guin bajo, aunque es tcnicamente vlido empezar elnombre de una variable con _, esta prctica se desaconseja. No se permite el espacioen blanco.

    Los siguientes caracteres pueden ser letras, dgitos, signos del dlar o guiones bajos.Tambin se aplican algunos convenios (y el sentido comn) a esta regla. Al elegir unnombre para sus variables, utilice palabras completas en vez de abreviaturas crpticas.

    As su cdigo ser ms fcil de leer y comprender. En muchos casos tambin har quesu cdigo se autodocumente por ejemplo, campos con el nombre cadencia, velocidad ymarcha son mucho ms intuitivos que sus versiones abreviadas: c, v y m. Tengatambin en mente que el nombre que elija no puede ser una palabra clave o reservada.

    Si el nombre que elije consiste de una sola palabra, escrbala completamente enminsculas. Si consiste de ms de una palabra, escriba la primera letra de cada palabraen maysculas. Los nombres numeroMarchas y marchaActual som ejemplos de este

    convenio. Si su variable almacena un valor constante, como static final intNUM_MARCHAS = 6, el convenio cambia ligeramente, aconsejando escribirla toda enmaysculas, separando las palabras con el guin bajo. Por convenio el guin bajo no seutiliza en ningn otro sitio.

    Tipos de datos primitivos

    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 elnombre de la variable, como ya hemos visto:int gear = 1

    Al hacer esto le indicamos al programa que existe una variable llamada gear, que almacenadatos numricos y que tiene un valor inicial de 1. El tipo de dato de una variable determina losvalores que puede contener adems de las operaciones que se puede realizar sobre ella. El

  • 7/30/2019 TutorialJava-EnJavados

    16/71

    lenguaje de programacin Java incluye siete otros tipos de datos primitivos adems de int. Untipo primitivo est predefinido por el lenguaje y se nombra con una palabra clave reservada. Losvalores primitivos no comparten estado con otros valores primitivos. Los ocho tipos de datosprimitivos incluidos en el lenguaje de programacin Java son:

    byte: El tipo de dato byte es un entero de 8 bits complemento a dos. Su valor mnimo es

    -128 y el mximo 127 (inclusive). El tipo de datos byte se puede utilizar para ahorrarmemoria en grandes arrays, donde el ahorro de memoria realmente importa. Tambinse pueden utilizar en lugar de int donde sus lmites ayudan a aclarar el cdigo, el hechode que el rango de una variable es limitado puede servir como una forma dedocumentacin.

    short: El tipo de dato short es un entero de 16 bits complemento a dos. Su valor mnimo

    es -32,768 y el mximo 32,767 (inclusive). Se aplican las mismas directrices que conbyte: puede utilizar short para ahorrar memoria en grandes arrays, en situaciones en lasque el ahorro realmente importa.

    int: El tipo de dato int es un entero de 32 bits complemento a dos. Su valor mnimo es

    -2,147,483,648 y el mximo 2,147,483,647 (inclusive). Generalmente este tipo es laeleccin predeterminada para valores enteros a no ser que haya una razn (como lasmencionadas anteriormente) para elegir otro. Este tipo de dato normalmente ser losuficiente grande para los nmeros que su program vaya a utilizar pero si necesita unrango ms amplio, utilice long.

    long: El tipo de dato long es un entero de 64 bits complemento a dos. Su valor mnimo

    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 elproporcionado por int.

    float: El tipo de dato float es un dato en coma flotante IEEE 754 de 32 bits y precisin

    simple. Al igual que con byte y short, se recomienda usar un float (en vez de un double)si necesita ahorrar memoria en grandes array de nmeros en coma flotante. Este tipo dedato nunca debera ser usado para valores precisos como, por ejemplo, divisas. Paraesto debera usarla clase java.math.BigDecimal. Nmeros y cadenas trata BigDecimal yotras clases tiles proporcionadas por la plataforma Java.

    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 paravalores decimales. Como ya se ha mencionado, este tipo de dato no se debera utilizarpara valores precisos como, por ejemplo, divisas.

    boolean: El tipo de dato boolean solamente tiene dos valores posibles: true (verdadero)

    y false (falso). Utilice este tipo de datos como conmutadores para la evaluacin decondiciones verdadero/falso. Este tipo de dato representa un bit de informacin, pero sutamao es algo que no est definido con precisin.

    char: El tipo de dato char es un solo carcter Unicode de 16 bits. Tiene un valor mnimo

    de '\u0000' (o 0) y un mximo de '\uffff' (o 65.535 inclusive).Adems de los ocho tipos de dato primitivos enumerados ms arriba, el lenguaje deprogramacin Java tambin proporciona soporte especial para cadenas de caracteres mediante

  • 7/30/2019 TutorialJava-EnJavados

    17/71

    la clase java.lang.String. Al encerrar una cadena de caracters entre comillas doblesautomticamente se crear un nuevo objeto de tipo String, por ejemplo, String s = "esto es unacadena". Los objetos String son inmutables, lo que significa que, una vez creados, susvalores 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

    pensar en ella como tal. Aprender ms acerca de la clase String en Objetos de datos simples

    Valores predeterminados

    No siempre es necesario asignar un valor cuando se declara un campo. El compilador fija unvalor predeterminado razonable para los campos que se declaran pero no son inicializados. Engeneral, este valor ser cero o null, dependiendo del tipo de dato. Sin embargo, fiarse de estosvalores predeterminados se considera una mala costumbre en la programacin.La siguiente tabla resume los valores predeterminados para los tipos de dato que hemosmencionado anteriormente.

    Tipo de dato Valor predeterminado (para campos)

    byte 0

    short 0

    int 0

    long 0L

    float 0.0f

    double 0.0d

    char '\u0000'

    String (o cualquier objeto) null

    boolean false

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

    local sin inicializar resutlar en un error a la hora de compilar.

    Literales

    Se habr fijado en que la palabra clave new no se utiliza para inicializar una variable de tipoprimitivo. Los tipos primitivos son tipos de datos especiales incrustados dentro del lenguaje, noson objetos creados de una clase. Un literales la representacin en cdigo fuente de un valorfijo, los literales se represenan directamente en su cdigo sin necesidad de computacin. Es

  • 7/30/2019 TutorialJava-EnJavados

    18/71

    posible asignar un literal a una variable de un tipo primitivo, como se muestra a continuacin:boolean result = truechar capitalC = 'C'byte b = 100short s = 10000

    int i = 100000

    Los tipos enteros (byte, short, int y long) se pueden expresar com los sistemas numricosdecimal, octal o hexadecimal. El decimal es el sistema numrico que utiliza todos los das, estbasado en 10 dgitos, numerados desde el 0 hasta el 9. El sistema octal es de base 8, queconsiste de los dgitos entre el 0 y el 7. El sistema hexadecimal es de base 16, cuyos dgitosson los nmeros entre el 0 y el 9 y las letras entre la A y la F. El sistema decimal serprobablemente el nico ssitema numrcio que utilizar en la programacin de uso general. Sinembargo, si necesita octal o hexadecimal, el siguiente ejemplo muestra la sintaxis correcta. Elprefijo 0 indica octal, mientras que 0x indica hexadecimal.

    int decVal = 26 // El nmero 26 en decimalint octVal = 032 // El nmero 26 en octalint hexVal = 0x1a // El nmero 26 en hexadecimal

    Los tipos de coma flotante (float y double) tambin se pueden expresar con E o e (para lanotacin cientfica), F o f (literal float de 32 bits) y D o d (literal double de 64 bits, este es elpredeterminado y se omite por convenio).double d1 = 123.4double d2 = 1.234e2 // el mismo valor que d1 pero en notacin cientficafloat f1 = 123.4f

    Los literales de tipo char y String pueden contener cualquier carcter Unicode (UTF-16). Si sueditor de texto y su sistema lo permiten puede utilizar estos caracteres directamente en sucdigo. Si no, puede utilizar el escape Unicode como, por ejemplo, '\u0108' (C mayscula concircunflejo) o "S\u00ED se\u00F1or" (S Seor en espaol). Utilice siempe 'comillas simples'para literales char "comillas dobles" para literales String. Las secuencias de escape Unicode sepuede utilizar en otros sitios de un programa (nombres de campo, por ejemplo), no solamenteen literales char o String.El lenguaje de programacin Java tambien contempla algunas secuencias de escapeespeciales para literales char y String: \b (retroceso de carcter), \t (tabulacin), \n (cambio delnea), \f (salto de pgina), \r (retorno de carro), \" (comillas dobles), \' (comillas simples) y \\(barra invertida).Tambin est el literal especial null que se puede utilizar como valor para cualquier tipo dereferencia. Se puede asignar null a cualquier variable excepto variables de tipo primitivo. Sepuede hacer poco con un valor null adems de comprobar su presencia. Por lo tanto null seutiliza a menudo como marcador en un programa para indicar que un objeto no est disponible.Finalmente tambin hay un tipo especial de literal llamado literal de clase que se forma al tomarel nombre del tipo y aadir .class, por ejemplo, String.class. Esto se refiere al objeto (de tipo

  • 7/30/2019 TutorialJava-EnJavados

    19/71

    Class) que representa al tipo en s mismo.

    Arrays

    Un array es un objeto contenedor que almacena un nmero fijo de valores de un solo tipo. Lalongitud de un array se establece cuando ste se crea. Despus de su creacin su longitud esfija. Ya ha visto un ejemplo de un array en el mtodo main de la aplicacin Hola mundo. Estaseccin trata los arrays con ms detalle.

    Un array de diez elementosA cada unidad del array se le llama element y a cada elemento se accede por su ndicenumrico. Como se muestra en la ilustracin anterior, la numeracin empieza por 0. Al novenoelemento, por ejemplo, se acceder con el ndice 8.El siguiente programa, ArrayDemo, crea un array de enteros, lo rellena con algunos valores eimprime cada valor a la salida estndar./** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.*

    * - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.

  • 7/30/2019 TutorialJava-EnJavados

    20/71

    ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    "AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR

    * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

    OF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

    class ArrayDemo {public static void main(String[] args) {

    int[] anArray // declara un array de enteros

    anArray = new int[10] // reserva memoria para 10 enteros

    anArray[0] = 100 // inicializa el primer elementoanArray[1] = 200 // inicializa el segundo elementoanArray[2] = 300 // etc.

    anArray[3] = 400anArray[4] = 500anArray[5] = 600anArray[6] = 700anArray[7] = 800anArray[8] = 900anArray[9] = 1000

    System.out.println("Elemento en el ndice 0: " + anArray[0])System.out.println("Elemento en el ndice 1: " + anArray[1])System.out.println("Elemento en el ndice 2: " + anArray[2])System.out.println("Elemento en el ndice 3: " + anArray[3])System.out.println("Elemento en el ndice 4: " + anArray[4])System.out.println("Elemento en el ndice 5: " + anArray[5])System.out.println("Elemento en el ndice 6: " + anArray[6])System.out.println("Elemento en el ndice 7: " + anArray[7])System.out.println("Elemento en el ndice 8: " + anArray[8])System.out.println("Elemento en el ndice 9: " + anArray[9])

  • 7/30/2019 TutorialJava-EnJavados

    21/71

    }}

    La salida de este programa es:Elemento en el ndice 0: 100

    Elemento en el ndice 1: 200Elemento en el ndice 2: 300Elemento en el ndice 3: 400Elemento en el ndice 4: 500Elemento en el ndice 5: 600Elemento en el ndice 6: 700Elemento en el ndice 7: 800Elemento en el ndice 8: 900Elemento en el ndice 9: 1000

    En una situacin de programacin del mundo real probablemente habra utilizado una de lasestructuras de bucle para recorrer cada elemento del array en vez de escribir cada lnea comoen el ejemplo. An as, este ejemplo ilustra claramente la sintaxis del array. Aprender acercade las diferentes estructuras de bucle (for, while y do-while) en la seccin Sentencias de controlde flujo.

    Declarar una variable para que se refiera a un array

    El programa anterior declara anArray con el siguiente cdigo:int[] anArray // declara un array de enteros

    Igual que las declaraciones de variables de otros tipos, la declaracin de un array tiene doscomponentes: el tipo del array y su nombre. El tipo del array se escribe tipo[], donde tipo es eltipo de dato de los elementos contenidos, los corchetes cuadrados son smbolos especialesque indican que esta variable contiene un array. El tamao del array no es parte de su tipo (porlo que los corchetes estn vacos). El nombre de un array puede ser cualquier cosa, siempreque cumpla con las reglas y convenios que ya se han tratdo en la seccin nomenclatura. Igualque con las variables de otros tipos, la declaracin realmente no crea un array solamente sedice al compilador que esta variable va a contener un array del tipo indicado.Puede declarar arrays de otros tipo de forma similar:byte[] unArrayDeBytes

    short[] unArrayDeShortslong[] unArrayDeLongsfloat[] unArrayDeFloatsdouble[] unArrayDeDoublesboolean[] unArrayDeBooleanschar[] unArrayDeCharsString[] unArrayDeStrings

  • 7/30/2019 TutorialJava-EnJavados

    22/71

    Tambin puede colocar los corchetes cuadrados despus del nombre del array:float unArrayDeFloats[] // esta forma est desaconsejada

    Sin embargo, por convenio se desaconseja esta forma, los corchetes identifican el tipo del array

    y deberan aparecer en la designacin del tipo.

    Crear, inicializar y acceder a un array

    Una de las formas de crear un array es con el operador new. La siguiente sentencia delprograma ArrayDemo reserva un array con suficiente memoria para diez elementos enteros yasigna el array a la variable anArray.anArray = new int[10] // crea un array de enteros

    Si faltara esta sentencia, el compilador mostrara un error como el siguiente y la compilacinfallara:

    ArrayDemo.java:4: Variable anArray may not have been initialized.

    Las siguientes lneas asignan valores a cada uno de los elementos del array:anArray[0] = 100 // inicializa el primer elementoanArray[1] = 200 // inicializa el segundo elementoanArray[2] = 300 // etc.

    A los elementos del array se accede por su ndice numrico:System.out.println("Elemento 1 en el ndice 0: " + anArray[0])System.out.println("Elemento 2 en el ndice 1: " + anArray[1])

    System.out.println("Elemento 3 en el ndice 2: " + anArray[2])

    Tambin puede utilizar la sintaxis abreviada para crear e inicializar un array:int[] anArray = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}

    En esta caso la longitud del array viene determinada por la cantidad de valores proporcionadosentre {y}.Tambin puede declarar un array de arrays (conocido como un array multidimensional)utilizando dos o ms conjuntos de corchetes cuadrados, por ejemplo String[][] nombres. Por lotanto, a cada elemento se acceder por un nmero correspondiente de valores de ndice.

    En el lenguaje de programacin Java un array multidimensional es simplemente un array cuyoscomponentes son, tambin, arrays. Esto es distinto de los arrays en C o Fortran. Esto traecomo consecuencia que las filas pueden variar en longitud, como se muestra en el siguienteprograma MultiDimArrayDemo:class MultiDimArrayDemo {

    public static void main(String[] args) {String[][] names = {{"Mr. ", "Mrs. ", "Ms. "},

  • 7/30/2019 TutorialJava-EnJavados

    23/71

    {"Smith", "Jones"}}System.out.println(names[0][0] + names[1][0]) //Mr. SmithSystem.out.println(names[0][2] + names[1][1]) //Ms. Jones

    }}

    La salida de este programa es:Mr. Smith

    Ms. Jones

    Puede utilizar la propiedad length para determinar la longitud de un array. El cdigoSystem.out.println(anArray.length)

    mostrar el tamao del array en la salida estndar.

    Copiar arraysLa clase System contiene el mtodo arraycopy que se puede utilizar para copiar eficientementeun array a otro:public static void arraycopy(Object src,

    int srcPos,Object dest,int destPos,int length)

    Los dos argumentos de tipo Object indican el array desde el que copiar y el array hacia el que

    copiar. Los tres argumentos de tipo int indican la posicin de inicio del array de origen, laposicin de inicio del array de destino y la cantidad de elementos que se copiarn.El siguiente programa, ArrayCopyDemo, declara un array de elementos de tipo char quecomponen la palabra decaffeinated. Utiliza arraycopy para copiar una subsecuencia decomponentes del array en un segundo array:/** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions

    * are met:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.** - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the

  • 7/30/2019 TutorialJava-EnJavados

    24/71

    * documentation and/or other materials provided with the distribution.** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.

    ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    "AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

    OF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

    class ArrayCopyDemo {public static void main(String[] args) {

    char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e','i', 'n', 'a', 't', 'e', 'd' }

    char[] copyTo = new char[7]

    System.arraycopy(copyFrom, 2, copyTo, 0, 7)System.out.println(new String(copyTo))

    }}

    La salida de este programa es:caffein

    Resumen de variables

    El lenguaje de programacin Java utiliza tanto campo como variable como parte de suterminologa. Las variables de instancia (campos no estticos) son nicas para cada instanciade una clase. Las variables de clase (campos estticos) son campos declarados con elmodificador static hay exactamente una copia de una variable de clase, independientemente de

  • 7/30/2019 TutorialJava-EnJavados

    25/71

    cuntas veces se haya instanciado sta. Las variables locales almacenan un estado temporaldentro de un mtodo. Los parmetros son variables que proporcionan informacin extra a unmtodo tanto las variables locales como los parmetros siempre se clasifican comovariables (no como campos). Existen reglas y convenios que se deben seguir a la hora denombrar campos y variables.

    Los ocho tipos de datos primitivos son: byte, short, int, long, float, double, boolean y char. Laclase java.lang.String representa cadenas de caracteres. El compilador asignar un valorpredeterminado razonable a los campos de los tipos mendionados, nunca se asigna un valorpredeterminado a una variable local. Un literal es la representacin en cdigo fuente de un valorfijo. Un array es un objeto contenedor que almacena un nmero fijo de valores de un solo tipo.La longitud de un array se establece cuando ste se crea. Despus de su creacin su longitudes fija.

    Preguntas y ejercicios: Variables

    Preguntas1. El trmino variable de instancia es otra forma de llamar a ___.2. El trmino variable de clase es otra forma de llamar a ___.3. Una variable local almacena un estado temporal, se declara dentro de un(a) ___.4. Una variable declarada dentro de los parntesis de un mtodo se llama ____.5. Cules son los ocho tipos de datos primitivos includos dentro del lenguaje de

    programacin Java?6. Las cadenas de caracteres se representan mediante la clase ___.7. Un ___ es un objeto contenedor que almacena un nmero fijo de valores de un solo tipo.

    Ejercicios

    1. Cree un pequeo programa que define varios campos. Intente crear algunos nombres decampo no permitidos y vea qu tipo de error produce el compilador. Utilice los conveniosy reglas de nomenclatura como gua.

    2. Intente dejar sin inicializar los campos del programa que ha creado en el ejercicio 1 eimprima sus valores. Intente lo mismo con una variable local y vea qu tipo de errores decompilacin puede producir. Si se familiariza con los errores comunes de compilacin leser ms fcil reconocer erratas en su cdigo.

    Respuestas a preguntas y ejercicios: Variables

    Respuestas a preguntas

    1. El trmino variable de instancia es otra forma de llamar a un campo no esttico.

    2. El trmino variable de clase es otra forma de llamar a un campo esttico.

    3. Una variable local almacena un estado temporal, se declara dentro de un mtodo.

    4. Una variable declarada dentro de los parntesis de un mtodo se llama parmetro.

  • 7/30/2019 TutorialJava-EnJavados

    26/71

    5. Cules son los ocho tipos de datos primitivos includos dentro del lenguaje deprogramacin Java? byte, short, int, long, float, double, boolean, char

    6. Las cadenas de caracteres se representan mediante la clasejava.lang.String.

    7. Un array es un objeto contenedor que almacena un nmero fijo de valores de un solo

    tipo.

    Respuesta a ejercicios

    1. Cree un pequeo programa que define varios campos. Intente crear algunos nombres decampo no permitidos y vea qu tipo de error produce el compilador. Utilice los conveniosy reglas de nomenclatura como gua.

    2. Aqu no hay una sola respuesta correcta. Sus resultados variarn segn su cdigo.3. Intente dejar sin inicializar los campos del programa que ha creado en el ejercicio 1 e

    imprima sus valores. Intente lo mismo con una variable local y vea qu tipo de errores decompilacin puede producir. Si se familiariza con los errores comunes de compilacin leser ms fcil reconocer erratas en su cdigo.

    4. Igualmente, para este ejercicio no hay una sola respuesta correcta. Sus resultadosvariarn segn su cdigo.

    Operadores

    Ahora que ha aprendido cmo declarar e inicializar variables, probablemente querr saber cmohacer algo con ellas. Una buena forma de empezar es conociendo los operadores del lenguajede programacin Java. Los operadores son smbolos especiales que realizan operaciones

    concretas sobre uno, dos o tres operandos y devuelven un resultado.A medida que exploremos los operadores del lenguaje Java le ser de utilidad conocer conantelacin cules de ellos poseen la precedencia ms alta. Los operadores de la siguiente tablase muestran por orden de precedencia. Cunto ms alto est el operador en la tabla, mayor essu precedencia. Los operadores con mayor precedencia se evalan antes que los que poseanuna menor. Los operadores que estn en la misma lnea tienen igual precedencia. Cuando en lamisma expresin aparecen operadores de igual precedencia, debe haber una regla que indiquecul se evala primero. Todos los operadores binarios, excepto los de asignacin, se evalande izquierda a derecha los operadores de asignacin se evalan de derecha a izquierda.

    Operadores Precedencia

    postfix expr++ expr--

    unarios ++expr--expr+expr-expr~ !

    multiplicativos * / %

    aditivos + -

  • 7/30/2019 TutorialJava-EnJavados

    27/71

    de movimiento (shift) > >>>

    relacionales < > = instanceof

    de igualdad == !=

    AND a nivel de bit (bitwise AND) &

    OR exclusivo a nivel de bit (bitwise exclusiveOR)

    ^

    OR inclusivo a nivel de bit (bitwise inclusiveOR)

    |

    AND lgico &&

    OR lgico ||

    ternarios ? :

    de asignacin = += -= *= /= %= &= = |= = >>>=

    En la programacin de propsito general se utilizan algunos operadores con ms frecuenciaque otros por ejemplo, el operador de asignacin = es mucho ms corriente que el operadorde movimiento a la derecha sin signo >>>. Teniendo esto en mente, los siguientes temas secentrarn en los operadores que probablemente utilizar de forma habitual y terminar tratandolos que son menos comunes. Cada tema se acompaa con cdigo de ejemplo que podr

    compilar y ejecutar. Al estudiar los resultados reforzar lo que acaba de aprender.

    Operadores de asignacin, aritmticos y unarios

    El operador de asignacin sencillo

    Uno de los operadores ms habituales que se encontrar es el operador de asignacin sencillo=. Ya lo hemos visto en la clase Bicycle asigna el valor a su derecha al operando a suizquierda:

    int cadence = 0int speed = 0int gear = 1

    Este operador tambin se puede utilizar en objetos para asignarreferencias a objetos, como semuestra en Creatcin de objetos.

  • 7/30/2019 TutorialJava-EnJavados

    28/71

    Los operadores aritmticos

    El lenguaje de programacin Java proporciona operadores que realizan la suma, resta,multiplicacin y divisin. Probablemente los reconozca por sus homlogos en la mtemticabsica. El nico smbolo que le podr parecer nuevo es %, que divide un operando por el otroy devuelve el resto como su resultado.

    + operador de adicin (tambin se utiliza para concatenar Strings)- operador de sustraccin* operador de multiplicacin/ operador de divisin% operador de resto

    El siguiente programa, ArithmeticDemo, comprueba los operadores aritmticos./** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.*

    * Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.** - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.

    ** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    "AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

    OF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  • 7/30/2019 TutorialJava-EnJavados

    29/71

    */

    class ArithmeticDemo {

    public static void main (String[] args){

    int result = 1 + 2 // result es ahora 3System.out.println(result)

    result = result - 1 // result es ahora 2System.out.println(result)

    result = result * 2 // result es ahora 4System.out.println(result)

    result = result / 2 // result es ahora 2System.out.println(result)

    result = result + 8 // result es ahora 10result = result % 7 // result es ahora 3System.out.println(result)

    }}

    Tambin puede combinar los operadores aritmticos con el operador de asignacin sencillopara crearasignaciones compuestas. Por ejemplo, x+=1 y x=x+1 ambos incrementan el valirde x en 1.El operador + tambin se puede utilizar para concatenar (unir) dos cadenas, como se muestraen el siguiente programa ConcatDemo:/** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.** - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.

  • 7/30/2019 TutorialJava-EnJavados

    30/71

    ** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.*

    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

    OF

    * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

    class ConcatDemo {public static void main(String[] args){

    String firstString = "Esto es"String secondString = " una cadena concatenada."String thirdString = firstString+secondString

    System.out.println(thirdString)}}

    Al final de este programa la variable thirdString contiene Esto es una cadena concatenada.,que se imprimir en la salida estndar.Los operadores unarios

    Los operadores unarios solamente necesitan un operando realizan diferentes operacionescomo incrementar o decrementar un valor en una unidad, negar una expresin o invertir el valorde un booleano.+ Operador unario ms, indica un valor positivo (sin embargo los nmero son positivossin el operador)- Operador unario menos niega una expresin++ Operador de incremento incrementa un valor en 1-- Operador de decremento decrementa un valor en 1! Operador de complemento lgico invierte el valor de un booleano

    El siguiente programa, UnaryDemo, comprueba los operadores unarios:

  • 7/30/2019 TutorialJava-EnJavados

    31/71

    /** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions

    * are met:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.** - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.** - Neither the name of Sun Microsystems nor the names of its

    * contributors may be used to endorse or promote products derived* from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    "AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,

    * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORYOF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

    class UnaryDemo {

    public static void main(String[] args){int result = +1 // result es ahora 1System.out.println(result)result-- // result es ahora 0System.out.println(result)result++ // result es ahora 1System.out.println(result)result = -result // result es ahora -1

  • 7/30/2019 TutorialJava-EnJavados

    32/71

    System.out.println(result)boolean success = falseSystem.out.println(success) // falso/falseSystem.out.println(!xito) // verdadero/true

    }

    }

    Los operadores de incremento y decremento se pueden aplicar delante (prefix) o detrs (postfix)del operando. Tanto el cdigo result++ como ++result resultarn en que result serincrementado en uno. La nica diferencia es que la versin prefix (++result) evala segn elvalor incrementado, mientras que la versin postfix (result++) evala segn el valor original. Sisolamente est realizando un incremento o decremento sencillo, realmente no importa cul delas dos formas utiliza. Pero si utiliza este operador como parte de una expresin ms larga, laforma que elija puede influir significativamente en el resultado.El siguiente programa, PrePostDemo, ilustra el operador unario de incremento prefix/postfix:

    /** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.*

    * - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    "AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

    OF

  • 7/30/2019 TutorialJava-EnJavados

    33/71

    * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

    class PrePostDemo {public static void main(String[] args){

    int i = 3i++System.out.println(i) // "4"++iSystem.out.println(i) // "5"System.out.println(++i) // "6"System.out.println(i++) // "6"System.out.println(i) // "7"

    }}

    Operadores de igualdad, relacionales y condicionales

    Los operadores de igualdad y relacionales

    Los operadores de igualdad y relacionales determinan si un operando es mayor, menor, igual ao distinto de otro. Probablemente la mayora de estos operadores tambin le sern familiares.Tenga en mente que debe utilizar ==, no = cuando compruebe si dos valores primitivosson iguales.== igual a!= distinto de> mayor que>= mayor que o igual a< menor que

  • 7/30/2019 TutorialJava-EnJavados

    34/71

    * notice, this list of conditions and the following disclaimer.** - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.

    ** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    "AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR

    * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

    OF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

    class ComparisonDemo {

    public static void main(String[] args){int value1 = 1int value2 = 2if(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

  • 7/30/2019 TutorialJava-EnJavados

    35/71

    Los operadores condicionales

    Los operadores && y || realizan las operaciones AND-Condicionaly OR-Condicionalsobre dosexpresiones booleanas. Estos operadores muestran un comportamiento de cortocircuito, loque significa que el segundo operando solamente se evala si es necesario.&& AND-Condicional

    || OR-Condicional

    El siguiente programa, ConditionalDemo1, comprueba estos operadores:/** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:*

    * - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.** - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.

    ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

    OF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

    class ConditionalDemo1 {

  • 7/30/2019 TutorialJava-EnJavados

    36/71

    public static void main(String[] args){int value1 = 1int value2 = 2if((value1 == 1) && (value2 == 2)) System.out.println("value1 es 1 Y value2 es 2")if((value1 == 1) || (value2 == 1)) System.out.println("value1 es 1 O value2 es 1")

    }}

    Otro de los operadores condicionales es ?:, que se puede considerar una abreviatura de unasentencia if-then-else (tratada en la seccin Sentencias de control de flujo de esta leccin). Esteoperador tambin se conoce como el operador ternario porque utiliza tres operandos. En eslsiguiente ejemplo este operador se debe leer como: Si unaCondicion es true (verdadera),asigna el valor de valor1 a resultado. Si no, asigna el valor de valor2 a resultado.El siguiente programa, ConditionalDemo2, comprueba el operador ?: :

    /** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.*

    * - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    "AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

    OF

  • 7/30/2019 TutorialJava-EnJavados

    37/71

    * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

    class ConditionalDemo2 {

    public static void main(String[] args){int valor1 = 1int valor2 = 2int resultadoboolean unaCondicion = true // es verdaderaresultado = unaCondicion ? valor1 : valor2

    System.out.println(resultado)

    }}

    Puesto que unaCondicion es true (verdadera), este programa imprime 1 en la pantalla. Utiliceel operador ?: en lugar de una sentencia if-then-else si hace que su cdigo sea ms legible, porejemplo cuando las expresiones con compactas y no tienen efectos secundarios (comoasignaciones).El operador de comparacin de tipos instanceof

    El operador instanceof compara un objeto con un tipo indicado. Puede utilizarlo para comprobar

    si un objeto es una instancia de una clase, una instancia de una subclase o una instancia deuna clase que implementa una interfaz en concreto.El siguiente programa, InstanceofDemo, define una clase padre (llamada Parent), una interfazsencilla (llamada MyInterface), y una clase hija (llamada Child) que hereda del padre eimplementa la interfaz./** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.** - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.

  • 7/30/2019 TutorialJava-EnJavados

    38/71

    ** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.*

    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

    OF

    * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

    class InstanceofDemo {public static void main(String[] args) {

    Parent obj1 = new Parent()Parent obj2 = new Child()

    System.out.println("obj1 instanceof Parent: " + (obj1 instanceof Parent))System.out.println("obj1 instanceof Child: " + (obj1 instanceof Child))System.out.println("obj1 instanceof MyInterface: " + (obj1 instanceof MyInterface))System.out.println("obj2 instanceof Parent: " + (obj2 instanceof Parent))System.out.println("obj2 instanceof Child: " + (obj2 instanceof Child))System.out.println("obj2 instanceof MyInterface: " + (obj2 instanceof MyInterface))

    }}

    class Parent{}class Child extends Parent implements MyInterface{}interface MyInterface{}

    Resultado:obj1 instanceof Parent: trueobj1 instanceof Child: falseobj1 instanceof MyInterface: false

  • 7/30/2019 TutorialJava-EnJavados

    39/71

    obj2 instanceof Parent: trueobj2 instanceof Child: trueobj2 instanceof MyInterface: true

    Al usar el operador instanceof, tenga en cuenta que null no es una instancia de nada.

    Operadores a nivel de bit y de desplazamiento de bitEl lenguaje de programacin Java tambin proporciona operadores que proporcionanoperaciones de a nivel de bit y de desplazamiento de bit en tipos enteros. Los operadorestratados en esta seccin son de uso poco comn. Por tanto su cobertura es breve, el objetivoes simplemente hacer constar que estos operadores existen.El operador complemento a nivel de bit ~ invierte un patrn de bits se puede aplicar acualquiera de los tipos enteros, haciendo de cada 0 un 1 y de cada 1 un 0. Porejemplo, un byte contiene 8 bits al aplicar este operador a un valor cuyo patrn de bits es00000000 ste se cambiara a 11111111.

    El operador de desplazamiento a la izquierda con signo desplaza un patrn debits a la derecha. El patrn de bits viene dado por el operando de la izquierda y el nmero deposiciones por el operando de la derecha. El operador de desplazamiento a la derecha sin signo>>> desplaza un cero hacia la posicin ms a la izquierda, mientras que la posicin ms a laizquierda despus del >> dependa de la extensin de signo.El operador a nivel de bits & realiza una operacin de AND a nivel de bits.El operador a nivel de bits ^ realiza una operacin de OR exclusivo a nivel de bits.El operador a nivel de bits | realiza una operacin de OR inclusivo a nivel de bits.El siguient programa, BitDemo, utiliza el operador AND a nivel de bits para imprimir el nmero

    2 en la salida estndar./** Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** - Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.** - Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.** - Neither the name of Sun Microsystems nor the names of its* contributors may be used to endorse or promote products derived* from this software without specific prior written permission.

  • 7/30/2019 TutorialJava-EnJavados

    40/71

    ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    "AS* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR

    * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR* PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

    OF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/

    class BitDemo {public static void main(String[] args) {

    int bitmask = 0x000Fint val = 0x2222System.out.println(val & bitmask) // imprime "2"

    }}

    Resumen de operadores

    La siguiente referencia rpida resume los operadores proporcionados por el lenguaje deprogramacin Java.

    Operador de asignacin sencillo

    = Operador de asignacin sencillo

    Operadores aritmticos

    + Operador de adicin (tambin se utiliza para concatenar Strings)- Operador de sustraccin* Operador de multiplicacin/ Operador de divisin% Operador de resto

    Operadores unarios

  • 7/30/2019 TutorialJava-EnJavados

    41/71

    + Operador unario ms, indica un valor positivo (sin embargo los nmero son positivossin el operador)- Operador unario menos niega una expresin++ Operador de incremento incrementa un valor en 1-- Operador de decremento decrementa un valor en 1

    ! Operador de complemento lgico invierte el valor de un booleano

    Operadores de igualdad y relacionales

    == Igual a!= Distinto de (No igual a)> Mayor que>= Mayor que o igual a< Menor que Desplazamiento con signo a la derecha>>> Desplazamiento sin signo a la derecha& AND a nivel de bits^ OR exclusivo a nivel de bits| OR inclusivo a nivel de bits

    Preguntas y ejercicios: Operadores

  • 7/30/2019 TutorialJava-EnJavados

    42/71

    Preguntas

    1. Fjese en el siguiente fragmento de cdigo.2. arrayOfInts[j] > arrayOfInts[j+1]

    3. Qu operadores contiene el cdigo?4. Fjese en el siguiente fragmento de cdigo.5. int i = 10

    int n = i++%5

    a. Cuales son los valores de i y n despus de que se haya ejecutado?b. Cules son los valores finales de i y n si en vez de usar el operador de

    incremento postfix (i++), utiliza la verisn prefix (++i))?6. Qu operador utilizara para invertir el valor de un boolean?7. Qu operador se utiliza para comparar dos valores, = o == ?

    8. Explique el siguiente ejemplo de cdigo: result = someCondition ? value1 : value2

    Ejercicios

    1. Cambie el siguiente programa para que utilice asignaciones compuestas:2. class ArithmeticDemo {

    public static void main (String[] args){

    int result = 1 + 2 // el resultado es ahora 3System.out.println(result)

    result = result - 1 // el resultado es ahora 2System.out.println(result)

    result = result * 2 // el resultado es ahora 4System.out.println(result)

    result = result / 2 // el resultado es ahora 2System.out.println(result)

    result = result + 8 // el resultado es ahora 10result = result % 7 // el resultado es ahora 3System.out.println(result)

    }}

  • 7/30/2019 TutorialJava-EnJavados

    43/71

    3. En el siguiente programa, explique por qu el valor 6 se muestra dos veces seguidas:4. class PrePostDemo {

    public static void main(String[] args){int i = 3

    i++System.out.println(i) // "4"++iSystem.out.println(i) // "5"System.out.println(++i) // "6"System.out.println(i++) // "6"System.out.println(i) // "7"

    }}

    Respuestas a preguntas y ejercicios: Operadores

    Respuestas a preguntas

    1. Fjese en el siguiente fragmento de cdigo.2. arrayOfInts[j] > arrayOfInts[j+1]

    3. Pregunta: Qu operadores contiene el cdigo?

    4. Respuesta: >, +

    5.6. Fjese en el siguiente fragmento de cdigo.7. int i = 10

    int n = i++%5

    a. Pregunta: Cuales son los valores de i y n despus de que se haya ejecutado?

    b. Respuesta: i es 11, y n es 0.

    c.d. Pregunta: Cules son los valores finales de i y n si en vez de usar el operador

    de incremento postfix (i++), utiliza la verisn prefix (++i))?e. Respuesta: i es 11, y n es 1.

    f.8. Pregunta: Qu operador utilizara para invertir el valor de un boolean?

    9. Respuesta: El operador de complemento lgico !.

  • 7/30/2019 TutorialJava-EnJavados

    44/71

    10. Pregunta:: Qu operador se utiliza para comparar dos valores, = o == ?

    11. Respuesta: El operador == se utiliza para la comparacin, y = para asignacin.

    12. Pregunta: Explique el siguiente ejemplo de cdigo: result = someCondition ? value1 :

    value213. Respuesta: Este cdigo se debe leer como: Si unaCondicion es true (verdadera),

    asigna el valor de valor1 a resultado. Si no, asigna el valor de valor2 a resultado.

    Ejercicios

    1. Cambie el siguiente programa para que utilice asignaciones compuestas:2. class ArithmeticDemo {

    public static void main (String[] args){

    int result = 1 + 2 // el resultado es ahora 3System.out.println(result)

    result = result - 1 // el resultado es ahora 2System.out.println(result)

    result = result * 2 // el resultado es ahora 4System.out.println(result)

    result = result / 2 // el resultado es ahora 2System.out.println(result)

    result = result + 8 // el resultado es ahora 10result = result % 7 // el resultado es ahora 3System.out.println(result)

    }}

    3. Una solucin:4. class ArithmeticDemo {

    public static void main (String[] args){int result = 3System.out.println(result)

    result -= 1 // result es ahora 2System.out.println(result)

  • 7/30/2019 TutorialJava-EnJavados

    45/71

    result *= 2 // result es ahora 4System.out.println(result)

    result /= 2 // result es ahora 2

    System.out.println(result)

    result += 8 // result es ahora 10result %= 7 // result es ahora 3System.out.println(result)

    }}

    5. En el siguiente programa, explique por qu el valor 6 se muestra dos veces seguidas:

    6. class PrePostDemo {public static void main(String[] args){

    int i = 3i++System.out.println(i) // "4"++iSystem.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 alvalor incrementado. La siguiente lnea, System.out.println(i++) evala al valor actual, ydespus incrementa en uno. Por lo tanto 7 no se muestra hasta la lnea siguiente.

    Expresiones, sentencias y bloques

    Ahora que ya entiende las variables y los operadores es el momento de aprender lo que son lasexpresiones, las sentencias y los bloques. Los operadores se utilizan para construirexpresiones que calculan valores las expresiones son los componentes centrales de lassentencias las sentencias se pueden agrupar en bloques.

    Expresiones

  • 7/30/2019 TutorialJava-EnJavados

    46/71

    Una expresin es una construccin hecha de variables, operadores e invocaciones de mtodos,creados segn la sintaxis del lenguaje, que evala a un solo valor. Ya hemos visto ejemplos deexpresiones, ilustradas en negrita a continuacin:int cadence = 0

    anArray[0] = 100

    System.out.println("Elemento 1 en el ndice 0:" + anArray[0])

    int result = 1 + 2 // result es ahora 3

    if(value1 == value2) System.out.println("value1 == value2")

    El tipo de dato del valor devuelto por una expresin depende de los elementos utilizadas en ella.La expresin cadence = 0 devuelve un int porque el operador de asignacin devuelve un valordel mismo tipo de dato que el operando de su izquierda en este caso cadence es un int. Comopuede observar en los dems ejemplos, una expresin puede devolver tambin otro tipo dedatos, por ejemplo boolean o String.

    El lenguaje de programacin Java permite construir expresiones compuestas a partir de variasexpresiones ms pequeas siempre que el tipo de dato requerido por una parte de la expresinconcuerde con el de la otra. A continuacin un ejemplo de una expresin compuesta:1 * 2 * 3

    En este ejemplo el orden en el que se evala la expresin no es importante porque el resultadode la muliplicacin no depende del orden el resultado es siempre el mismo sin importar el ordenen que se apliquen las multiplicaciones. Sin embargo esto no es cierto para todas lasexpresiones. Por ejemplo, la siguiente expresin dar resultados diferentes segn se realiceprimero la operacin de suma o la de divisin:

    x + y / 100 // ambguo

    Puede indicar exctamente cmo se debe evaluar una expresin mediante el uso de parntesis:( y ). Para eliminar la ambigedad de la expresin anterior se podra escribir de la siguienteforma:(x + y) / 100 // no ambguo, recomendado

    Si no indica explcitamente el orden de las operaciones que se deben realizar, el orden lodetermina la precedencia asignada a los operadores utilizados en la expresin. Lo peradorescon mayor precedencia se evalan primero. Por ejemplo, el operador de divisin tiene mayor

    precedencia que el de suma. Por lo tanto las siguientes dos sentencias son equivalentes:x + y / 100x + (y / 100) // no ambguo, recomendado

    Sea explcito al escribir expresiones compuestas e indique con parntesis qu operadores sedeben evaluar primero. Esta prctica har que su cdigo sea ms fcil de leer y mantener.

  • 7/30/2019 TutorialJava-EnJavados

    47/71

    Sentencias

    Las sentencias son, a grandes rasgos, equivalentes a las oraciones del lenguaje natural. Unasentencia forma una unidad de ejecucin completa. Los siguientes tipos de expresiones sepueden convertir en sentencia si se terminan con punto y coma ().

    Expresiones de asignacin Cualquier uso de code>++ o -- Invocaciones de mtodos Expresiones de creacin de objetos

    Este tipo de sentencias se llaman sentencias de expresin. Veamos algunos ejemplos desentencias de expresin.unValor = 8933.234 // sentencia de asignacinunValor++ // sentencia de incrementoSystem.out.println("Hola Mundo!") // sentencia de invicacin de mtodoBicycle miBici = new Bicycle() // sentencia de creacin de objeto

    Hay dos otros tipo de sentencias adems de las de expresin: sentencias de declaracin ysentencias de control de flujo. Una sentencia de declaracin declara una variable. Ya hemosvisto muchos ejemplos de sentencias de declaracin:double unValor = 8933.234 //sentencia de declaracin

    Finalmente, las sentencias de control de flujo regulan el orden en el que se ejecutan lassentencias. Aprender ms acerca de las sentencias de control de flujo en la siguiente seccin,Sentencias de control de flujo

    Bloques

    Un bloque es un grupo de sentencias contenido entre corchetes emparejados que se puedeutilizar en cualquier lugar en el que se permita una sentencia sencilla. El siguiente ejemplo,BlockDemo, ilustra el uso de bloques:class BlockDemo {

    public static void main(String[] args) {boolean condition = trueif (condition) {// empieza el bloque 1

    System.out.println("Condition es verdadero.")}// fin del bloque one

    else {// empieza el bloque 2

    System.out.println("Condition es falso.")}// fin del bloque 2

    }}

  • 7/30/2019 TutorialJava-EnJavados

    48/71

    Preguntas y ejercicios: Expresiones, sentencias y

    bloques

    Preguntas

    1. Los operadores se pueden usar en la construccin de ___, que calculan valores.2. Las expresiones son los componentes centrales de ___.3. Las sentencias se pueden agrupar en ___.4. El siguiente fragmento de cdigo es un ejemplo de una expresin ___.5. 1 * 2 * 3

    6. Las sentencias son, a grandes rasgos, equivalentes a las oraciones del lenguaje natural,pero en vez de terminar con un punto una sentencia termina con ___.

    7. Un bloque es un grupo de sentencias contenido entre ___ emparejados que se puedeutilizar en cualquier lugar en el que se permita una sentencia sencilla.

    Ejercicios

    Identifique los siguientes tipos de expresiones: unValor = 8933.234 unValor++ System.out.println("Hola Mundo!")

    Bicycle miBici = new Bicycle()

    Respuestas a preguntas y ejercicios: Expresiones, sentencias y bloques

    Preguntas

    1. Los operadores se pueden usar en la construccin de expresiones, que calculan

    valores.2. Las expresiones son los componentes centrales de las sentencias.

    3. Las sentencias se pueden agrupar en bloques.

    4. El siguiente fragmento de cdigo es un ejemplo de una expresin compuesta.

    5. 1 * 2 * 3

    6. Las sentencias son, a grandes rasgos, equivalentes a las oraciones del lenguaje natural,pero en vez de terminar con un punto una sentencia termina con punto y coma.

    7. 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.

  • 7/30/2019 Tutori