Información básica Java

184
Explicar la Tecnolog Explicar la Tecnolog í í a Java a Java Docente: Docente: Freddy Mendez Ortiz Freddy Mendez Ortiz

description

 

Transcript of Información básica Java

Page 1: Información básica Java

Explicar la TecnologExplicar la Tecnologíía Javaa Java

Docente:Docente:

Freddy Mendez OrtizFreddy Mendez Ortiz

Page 2: Información básica Java

Que es la TecnologQue es la Tecnolog íía Java?a Java?•• La tecnologLa tecnologíía Java es:a Java es:

–– Un lenguaje de programaciUn lenguaje de programacióónn

–– Un ambiente de desarrolloUn ambiente de desarrollo

–– Un ambiente de aplicaciUn ambiente de aplicacióónn

•• Tiene sintaxis similar a C++Tiene sintaxis similar a C++

•• Es usada para desarrollar tanto aplicaciones como Es usada para desarrollar tanto aplicaciones como appletsapplets

Page 3: Información básica Java

Principales Metas de la Principales Metas de la TecnologTecnolog íía Java?a Java?

•• Provee un lenguaje fProvee un lenguaje fáácil de usar por:cil de usar por:

–– Evita muchas fallas presentes en otros Evita muchas fallas presentes en otros lenguajes.lenguajes.

–– Usa el paradigma Orientado a ObjetosUsa el paradigma Orientado a Objetos

–– Permite crear cPermite crear cóódigo estable y limpio.digo estable y limpio.

•• Provee un ambiente interpretado para:Provee un ambiente interpretado para:

–– Mejora la velocidad de desarrollo.Mejora la velocidad de desarrollo.

–– Portabilidad del cPortabilidad del cóódigodigo

Page 4: Información básica Java

Principales Metas de la Principales Metas de la TecnologTecnolog íía Java?a Java?

•• Permite ejecutar mas de una actividadPermite ejecutar mas de una actividad

•• Cargar clases dinCargar clases dináámicamente; esto es, cuando micamente; esto es, cuando ellas son realmente necesitadasellas son realmente necesitadas

•• Permite cambiar programas dinPermite cambiar programas dináámicamente micamente durante la ejecucidurante la ejecucióón por la carga de clases desde n por la carga de clases desde fuentes distantesfuentes distantes

•• Proveer mejor seguridadProveer mejor seguridad

Page 5: Información básica Java

Principales Metas de la Principales Metas de la TecnologTecnolog íía Java?a Java?

•• Las siguientes caracterLas siguientes caracteríísticas satisfacen estas sticas satisfacen estas metas:metas:

–– La maquina virtual de Java JVMLa maquina virtual de Java JVM

–– El colector de basuraEl colector de basura

–– El ambiente de ejecuciEl ambiente de ejecucióón de Java JREn de Java JRE

–– Herramientas de Herramientas de interfaceinterface de JVMde JVM

Page 6: Información básica Java

Maquina Virtual de JavaMaquina Virtual de Java•• Una maquina imaginaria que es implementada Una maquina imaginaria que es implementada

para emular esta en software en una maquina real. para emular esta en software en una maquina real. El cEl cóódigo para la JVM es almacenado en archivos digo para la JVM es almacenado en archivos ..classclass, cada uno de los cuales contiene a lo mas , cada uno de los cuales contiene a lo mas una clase publica.una clase publica.

Page 7: Información básica Java

Maquina Virtual de JavaMaquina Virtual de Java•• Provee las especificaciones del hardware de la Provee las especificaciones del hardware de la

plataformaplataforma

•• Lee archivos compilados (Lee archivos compilados (BytecodesBytecodes) que son ) que son independientes de la plataformaindependientes de la plataforma

•• Es implementada en software o hardwareEs implementada en software o hardware

•• Es implementada en las herramientas de Es implementada en las herramientas de desarrollo de la Tecnologdesarrollo de la Tecnologíía Java o en un a Java o en un navegador Webnavegador Web

Page 8: Información básica Java

Maquina Virtual de JavaMaquina Virtual de Java•• La mayorLa mayoríía de los chequeos de tipo son a de los chequeos de tipo son

realizados cuando el crealizados cuando el cóódigo es compiladodigo es compilado

•• La implementaciLa implementacióón de la JVM aprobada por Sun n de la JVM aprobada por Sun Microsystems debe ser capas de ejecutar cualquier Microsystems debe ser capas de ejecutar cualquier archivo archivo classclass compiladocompilado

•• La JVM se ejecuta en diferentes sistemas La JVM se ejecuta en diferentes sistemas operativos (Solaris, Linux, Mac, Windows)operativos (Solaris, Linux, Mac, Windows)

Page 9: Información básica Java

Colector de BasurasColector de Basuras•• Memoria asignada que no esta siendo necesitada Memoria asignada que no esta siendo necesitada

deberdeberíía ser a ser desasignadadesasignada

•• En otros lenguajes En otros lenguajes desasignardesasignar la memoria es la memoria es responsabilidad del programadorresponsabilidad del programador

•• El lenguaje de programaciEl lenguaje de programacióón de Java provee un n de Java provee un hilo de nivel del sistema para monitorear memoria hilo de nivel del sistema para monitorear memoria asignadaasignada

Page 10: Información básica Java

Colector de BasurasColector de Basuras•• El colector de basura tiene las siguientes El colector de basura tiene las siguientes

caractercaracteríísticas:sticas:

–– Cheque y libera memoria no necesitada.Cheque y libera memoria no necesitada.

–– Se realizado automSe realizado automááticamente.ticamente.

–– Puede variar drPuede variar dráásticamente entre las diferentes sticamente entre las diferentes implementaciones de la JVMimplementaciones de la JVM

Page 11: Información básica Java

Ambiente de ejecuciAmbiente de ejecuci óón de Javan de Java

Page 12: Información básica Java

OperaciOperaci óón del JRE con JIT n del JRE con JIT ((JustJust --InIn--Time)Time)

Page 13: Información básica Java

Tareas de la JVMTareas de la JVM•• La JVM realiza tres tareas principales:La JVM realiza tres tareas principales:

–– Cargar el cCargar el cóódigodigo

–– Verificar el cVerificar el cóódigodigo

–– Ejecutar el cEjecutar el cóódigodigo

Page 14: Información básica Java

Cargador de ClasesCargador de Clases•• Carga todas las clases necesarias para la Carga todas las clases necesarias para la

ejecuciejecucióón de un programan de un programa

•• Mantiene las clases de los archivos locales del Mantiene las clases de los archivos locales del sistema en nombre de espacio (sistema en nombre de espacio (namespacesnamespaces) ) separadosseparados

•• Previene la suplantaciPreviene la suplantacióón (n (spoofingspoofing))

Page 15: Información básica Java

Verificador de Verificador de BytecodeBytecodeAsegura que:Asegura que:

•• El cEl cóódigo cumple con las especificaciones de la digo cumple con las especificaciones de la JVM.JVM.

•• El cEl cóódigo no viola integridad del sistema.digo no viola integridad del sistema.

•• El cEl cóódigo no causa operaciones de digo no causa operaciones de stackstack overflowsoverflows

•• Los tipos de parLos tipos de paráámetros para todas las metros para todas las operaciones de coperaciones de cóódigo son correctas.digo son correctas.

Page 16: Información básica Java

Ambiente de ejecuciAmbiente de ejecuci óón de la n de la TecnologTecnolog íía de Javaa de Java

Page 17: Información básica Java

DeclaraciDeclaraci óón de Clases en la n de Clases en la TecnologTecnolog íía Javaa Java

•• Sintaxis bSintaxis báásica de una clase en Java:sica de una clase en Java:

<<modifidormodifidor>* >* classclass <<nombre_clasenombre_clase> {> {

<<declaracideclaracióón_atributosn_atributos>*>*

< < declaracideclaracióón_constructorn_constructor>*>*

< < declaracideclaracióón_metodosn_metodos>*>*

}}

Page 18: Información básica Java

DeclaraciDeclaraci óón de Clases en la n de Clases en la TecnologTecnolog íía Javaa Java

•• Ejemplo:Ejemplo:1 1 publicpublic classclass Vehiculo {Vehiculo {

2 2 privateprivate doubledouble maxCargamaxCarga;;

3 3 publicpublic voidvoid setMaxCarga(doublesetMaxCarga(double valor) {valor) {

4 4 maxCargamaxCarga = valor;= valor;

5 }5 }

6 }6 }

Page 19: Información básica Java

DeclaraciDeclaraci óón de Atributos en n de Atributos en la Tecnologla Tecnolog íía Javaa Java

•• Sintaxis bSintaxis báásica de un atributo en Java:sica de un atributo en Java:

<modificador>* <tipo> <nombre>[=<<modificador>* <tipo> <nombre>[=<initial_valorinitial_valor>];>];

•• Ejemplo:Ejemplo:

1 1 publicpublic classclass Valores {Valores {

2 2 privateprivate intint x;x;

3 3 privateprivate floatfloat y = 10000.0F;y = 10000.0F;

4 4 privateprivate StringString nombre = "Bates Motel";nombre = "Bates Motel";

5 }5 }

Page 20: Información básica Java

DeclaraciDeclaraci óón de Mn de M éétodos en todos en la Tecnologla Tecnolog íía Javaa Java

•• Sintaxis bSintaxis báásica de un msica de un méétodo en Java:todo en Java:

<modificador>* <<modificador>* <tipo_retornotipo_retorno> <nombre> > <nombre> (<argumentos>*) {(<argumentos>*) {

<declaraciones>*<declaraciones>*

}}

Page 21: Información básica Java

DeclaraciDeclaraci óón de Mn de M éétodos en todos en la Tecnologla Tecnolog íía Javaa Java

•• Ejemplo:Ejemplo:1 1 publicpublic classclass Perro {Perro {

2 2 privateprivate intint peso;peso;

3 3 publicpublic intint getPesogetPeso() {() {

4 4 returnreturn peso;peso;

5 }5 }

6 6 publicpublic voidvoid setPeso(intsetPeso(int nuevoPesonuevoPeso) {) {

7 7 ifif ((nuevoPesonuevoPeso > 0 ) {> 0 ) {

8 peso = 8 peso = nuevoPesonuevoPeso;;

9 }9 }

10 }10 }

11 }11 }

Page 22: Información básica Java

Accediendo a miembros de Accediendo a miembros de un Objeto un Objeto

•• La notaciLa notacióón punto es:<objeto>.<miembro>n punto es:<objeto>.<miembro>

•• Esta es usada para acceder a los miembros de un Esta es usada para acceder a los miembros de un objeto incluyendo atributos y mobjeto incluyendo atributos y méétodostodos

•• Ejemplo de la notaciEjemplo de la notacióón punto:n punto:

–– d.setPesod.setPeso(42);(42);

–– d.pesod.peso = 42; // Solo si el atributo peso es = 42; // Solo si el atributo peso es publicpublic

Page 23: Información básica Java

Ocultar InformaciOcultar Informaci óónn•• El problema:El problema:

Page 24: Información básica Java

Ocultar InformaciOcultar Informaci óónn•• El cEl cóódigo del cliente tiene acceso directo a los digo del cliente tiene acceso directo a los

datos internos (d referencia un objeto de tipo datos internos (d referencia un objeto de tipo MiFechaMiFecha))

•• d.diad.dia = 32; // D= 32; // Díía invalidoa invalido

•• d.mesd.mes = 2; = 2; d.diad.dia = 30; // posible pero err= 30; // posible pero erróóneoneo

•• d.diad.dia = = d.diad.dia + 1; // no chequea si da la vuelta+ 1; // no chequea si da la vuelta

Page 25: Información básica Java

Ocultar InformaciOcultar Informaci óónn

Page 26: Información básica Java

Ocultar InformaciOcultar Informaci óónn•• El cEl cóódigo del cliente debe usar los mdigo del cliente debe usar los méétodos todos gettersgetters

y setters para acceder a los datos internosy setters para acceder a los datos internos

•• d.setDiad.setDia(32); // D(32); // Díía invalido, retorna a invalido, retorna falsefalse

•• d.setMesd.setMes(2); // posible pero err(2); // posible pero erróóneo,neo,

•• d.setDiad.setDia(30); // (30); // setDiasetDia retorna retorna falsefalse

•• d.setDia(d.getDiad.setDia(d.getDia() + 1); // d() + 1); // díía invalido, retorna a invalido, retorna falsefalse

Page 27: Información básica Java

EncapsulamientoEncapsulamiento•• Oculta la implementaciOculta la implementacióón de detalles de la clasen de detalles de la clase

•• Obliga al usuario a usar una Obliga al usuario a usar una interfaceinterface para acceder para acceder a los datosa los datos

•• Hace el cHace el cóódigo digo manteniblemantenible

Page 28: Información básica Java

EncapsulamientoEncapsulamiento

Page 29: Información básica Java

DeclaraciDeclaraci óón de n de Constructores en JavaConstructores en Java

•• Sintaxis bSintaxis báásica de un constructor en Java:sica de un constructor en Java:

<modificador>* <<modificador>* <nombre_clasenombre_clase> (<argumentos>*) {> (<argumentos>*) {

<declaraciones>*<declaraciones>*

}}

Page 30: Información básica Java

DeclaraciDeclaraci óón de n de Constructores en JavaConstructores en Java

•• Ejemplo:Ejemplo:

1 1 publicpublic classclass Dog {Dog {

2 2 privateprivate intint weightweight;;

3 3 publicpublic Dog() {Dog() {

44 weightweight = 42;= 42;

55 }}

6 }6 }

Page 31: Información básica Java

Constructor por defectoConstructor por defecto•• Siempre debe existir por lo menos un constructor Siempre debe existir por lo menos un constructor

en cada claseen cada clase

•• Si no se escribe ninguno, el constructor por defecto Si no se escribe ninguno, el constructor por defecto se presenta automse presenta automááticamente:ticamente:

–– No recibe argumentosNo recibe argumentos

–– El cuerpo es vaciEl cuerpo es vacióó

•• El constructor por defecto permite crear instancias El constructor por defecto permite crear instancias de objetos de la forma de objetos de la forma newnew XXX(); sin tener ningXXX(); sin tener ningúún n constructor definidoconstructor definido

Page 32: Información básica Java

Esquema archivo fuenteEsquema archivo fuente•• Sintaxis bSintaxis báásica de un archivo fuente en Java:sica de un archivo fuente en Java:

[<[<declaracideclaracióón_paquetesn_paquetes>]>]

<<declaracideclaracióón_importn_import>*>*

<<declaracideclaracióón_clasen_clase>+>+

Page 33: Información básica Java

Esquema archivo fuenteEsquema archivo fuente•• Por ejemplo, el archivo Por ejemplo, el archivo

ReporteCapacidadVehiculo.javaReporteCapacidadVehiculo.java es:es:1 1 packagepackage shipping.reportsshipping.reports;;

22

3 3 importimport shipping.domainshipping.domain.*;.*;

4 4 importimport java.util.Listjava.util.List;;

5 5 importimport java.iojava.io.*;.*;

66

7 7 publicpublic classclass ReporteCapacidadVehiculoReporteCapacidadVehiculo {{

8 8 privateprivate ListList vehiculosvehiculos;;

9 9 publicpublic voidvoid generarReporte(WritergenerarReporte(Writer salida) {...}salida) {...}

10 }10 }

Page 34: Información básica Java

Paquetes de SoftwarePaquetes de Software•• Los paquetes ayudan a administrar grandes Los paquetes ayudan a administrar grandes

sistemas de softwaresistemas de software

•• Los paquetes pueden contener clases y Los paquetes pueden contener clases y subsubpaquetespaquetes

Page 35: Información básica Java

Paquetes de SoftwarePaquetes de Software

Page 36: Información básica Java

DeclaraciDeclaraci óón de Paquetesn de Paquetes•• Sintaxis bSintaxis báásica de la declaracisica de la declaracióón de paquetes:n de paquetes:

packagepackage <<top_pkg_nombretop_pkg_nombre>[.<>[.<sub_pkg_nombresub_pkg_nombre>]*;>]*;

•• Ejemplo de la declaraciEjemplo de la declaracióón:n:

packagepackage shipping.gui.reportscreensshipping.gui.reportscreens;;

•• EspecEspecííficamente la declaracificamente la declaracióón de paquetes va al n de paquetes va al inicio del archivo fuenteinicio del archivo fuente

•• Solamente una declaraciSolamente una declaracióón de paquete por archivo n de paquete por archivo fuentefuente

Page 37: Información básica Java

DeclaraciDeclaraci óón de Paquetesn de Paquetes•• Si ningSi ningúún paquete es declarado, entonces la clase n paquete es declarado, entonces la clase

es colocada dentro de un paquete por es colocada dentro de un paquete por defaultdefault

•• El nombre de los paquetes debe ser jerEl nombre de los paquetes debe ser jeráárquico y rquico y separado por puntos.separado por puntos.

Page 38: Información básica Java

DeclaraciDeclaraci óón de n de importimport•• Sintaxis bSintaxis báásica de la declaracisica de la declaracióón de n de importimport::

importimport <<pkg_nombrepkg_nombre>[.<>[.<sub_pkg_nombresub_pkg_nombre>]*.<>]*.<class_nombreclass_nombre>;>;

oo

importimport <<pkg_nombrepkg_nombre>[.<>[.<sub_pkg_nombresub_pkg_nombre>]*.*;>]*.*;

•• Ejemplo de la declaraciEjemplo de la declaracióón:n:

importimport java.util.Listjava.util.List;;

importimport java.iojava.io.*;.*;

importimport shipping.gui.reportscreensshipping.gui.reportscreens.*;.*;

Page 39: Información básica Java

DeclaraciDeclaraci óón de n de importimport•• La declaraciLa declaracióón de n de importimport hace lo siguiente:hace lo siguiente:

–– Precede todas las declaraciones de clasesPrecede todas las declaraciones de clases

–– Le indica al compilador donde puede encontrar Le indica al compilador donde puede encontrar las claseslas clases

Page 40: Información básica Java

Identificadores, palabras Identificadores, palabras reservadas y tipos de datosreservadas y tipos de datos

Docente:Docente:

Freddy Mendez OrtizFreddy Mendez Ortiz

Page 41: Información básica Java

ComentariosComentarios•• Los tres estilos permitidos de comentarios en los Los tres estilos permitidos de comentarios en los

programas de la Tecnologprogramas de la Tecnologíía de Java son:a de Java son://Comentarios de l//Comentarios de lííneanea

/*Comentarios de bloque/*Comentarios de bloque

*una o mas l*una o mas lííneasneas

*/*/

/**Comentarios de documentaci/**Comentarios de documentacióónn

*se pueden extender una o mas l*se pueden extender una o mas lííneasneas

*/*/

Page 42: Información básica Java

Puntos y coma, bloques y Puntos y coma, bloques y espacios en blancoespacios en blanco

•• Una declaraciUna declaracióón es una o mas ln es una o mas lííneas de cneas de cóódigo digo terminadas por un punto y coma ( ; ):terminadas por un punto y coma ( ; ):total = a + b + ctotal = a + b + c

+ d + e + f;+ d + e + f;

•• Un bloque es una colecciUn bloque es una coleccióón de declaraciones n de declaraciones limitadas por llaves que abren ( { ) y cierran ( } )limitadas por llaves que abren ( { ) y cierran ( } ){ {

x = y + 1;x = y + 1;

y = x + 1;y = x + 1;

}}

Page 43: Información básica Java

IdentificadoresIdentificadores•• Los identificadores tienen las siguientes Los identificadores tienen las siguientes

caractercaracteríísticas:sticas:

–– Son nombres dados a variables, clases o Son nombres dados a variables, clases o mméétodostodos

–– Pueden iniciar con una letra Pueden iniciar con una letra UnicodeUnicode, , guionguion de de piso ( _ ), o signo de moneda ( $ )piso ( _ ), o signo de moneda ( $ )

–– Son sensibles a maySon sensibles a mayúúsculas y minsculas y minúúsculas, y no sculas, y no tiene longitud mtiene longitud mááximaxima

Page 44: Información básica Java

IdentificadoresIdentificadores•• Ejemplos:Ejemplos:

identificadoresidentificadores

nombreUsuarionombreUsuario

nombre_usuarionombre_usuario

__var_sysvar_sys_1_1

$cambio$cambio

Page 45: Información básica Java

Palabras reservadas de JavaPalabras reservadas de Java

whilewhilesupersupernativenativefloatfloatconstconst

volatilevolatilestrictfpstrictfplonglongfinallyfinallyclassclass

voidvoidstaticstaticinterfaceinterfacefinalfinalcharchar

trytryshortshortintintextendsextendscatchcatch

transienttransientreturnreturninstanceofinstanceofenumenumcasecase

throwsthrowspublicpublicimportimportelseelsebytebyte

throwthrowprotectedprotectedimplementsimplementsdoubledoublebreakbreak

thisthisprivateprivateififdodobooleanboolean

synchronizedsynchronizedpackagepackagegotogotodefaultdefaultassertassert

switchswitchnewnewforforcontinuecontinueabstractabstract

Palabras literales reservadas: Palabras literales reservadas: nullnull, , truetrue y y falsefalse

Page 46: Información básica Java

Tipos primitivosTipos primitivos•• El lenguaje de programaciEl lenguaje de programacióón Java define ocho n Java define ocho

tipos de datos primitivos:tipos de datos primitivos:

–– LLóógicos : gicos : booleanboolean

–– Textuales : Textuales : charchar

–– Enteros : byte, short, Enteros : byte, short, intint, long, long

–– Flotantes : Flotantes : floatfloat, , doubledouble

Page 47: Información básica Java

LLóógico gico -- booleanboolean•• El primitivo El primitivo booleanboolean tiene las siguientes tiene las siguientes

caractercaracteríísticas:sticas:

–– El tipo de dato El tipo de dato booleanboolean tiene dos valores tiene dos valores literales, literales, truetrue y y falsefalse

Por ejemplo la siguiente declaraciPor ejemplo la siguiente declaracióón:n:

booleanboolean bandera = bandera = truetrue;;

Declara la variable bandera como tipo Declara la variable bandera como tipo booleanbooleany asigna a esta un valor de y asigna a esta un valor de truetrue

Page 48: Información básica Java

Textual Textual -- charchar•• El textual primitivo El textual primitivo charchar tiene las siguientes tiene las siguientes

caractercaracteríísticas:sticas:

–– Representa un carRepresenta un caráácter cter UnicodeUnicode de 16de 16--bitbit

–– Debe estar entre comillas sencillas (Debe estar entre comillas sencillas (‘‘ ‘‘))

–– Usa las siguientes notaciones:Usa las siguientes notaciones:•• ‘‘aa’’ La letra aLa letra a

•• ‘‘\\tt’’ El carEl caráácter tabuladorcter tabulador

•• ‘‘\\uu????????’’ Un especifico carUn especifico caráácter cter UnicodeUnicode, ????, es , ????, es

reemplazado con exactamente cuatroreemplazado con exactamente cuatro

digitosdigitos hexadecimaleshexadecimales

Page 49: Información básica Java

Textual Textual -- StringString•• El textual tipo El textual tipo StringString tiene las siguientes tiene las siguientes

caractercaracteríísticas:sticas:

–– No es un tipo de dato primitivo, es un tipo de No es un tipo de dato primitivo, es un tipo de claseclase

–– Tiene declaraciTiene declaracióón literal entre comillas dobles n literal entre comillas dobles ((“”“”). ). EjEj: : ““Java es el mejor lenguaje del mundoJava es el mejor lenguaje del mundo””

–– Puede ser usado como sigue:Puede ser usado como sigue:•• StringString saludo = saludo = ““Buenos dBuenos díías !! as !! \\nn";";

•• StringString mensajeErrormensajeError = "Registro no encontrado !";= "Registro no encontrado !";

Page 50: Información básica Java

Enteros Enteros –– byte, short, byte, short, intint y y longlong

•• Los primitivos enteros tienen las siguientes Los primitivos enteros tienen las siguientes caractercaracteríísticas:sticas:

–– Primitivos enteros usan tres formas: Decimal, Primitivos enteros usan tres formas: Decimal, Octal y HexadecimalOctal y Hexadecimal

2 077 0xBA2 077 0xBAACAC

–– Los literales tiene como tipo por defecto Los literales tiene como tipo por defecto intint

–– Los literales con el sufijo L o l son de tipo longLos literales con el sufijo L o l son de tipo long

Page 51: Información básica Java

Enteros Enteros –– byte, short, byte, short, intint y y longlong

•• Los primitivos enteros tienen los siguientes rangos:Los primitivos enteros tienen los siguientes rangos:

--226363 hasta 2hasta 26363--11longlong64 bits64 bits

--223131 hasta 2hasta 23131--11intint32 bits32 bits

--221515 hasta 2hasta 21515--11shortshort16 bits16 bits

--2277 hasta 2hasta 277--11bytebyte8 bits8 bits

RangoRangoNombre o tipoNombre o tipoLongitud del EnteroLongitud del Entero

Page 52: Información básica Java

Punto flotante Punto flotante –– floatfloat y y doubledouble

•• Los primitivos punto flotante tienen las siguientes Los primitivos punto flotante tienen las siguientes caractercaracteríísticas:sticas:

–– Los literales punto flotante incluyen una de dos Los literales punto flotante incluyen una de dos punto decimal o un de los siguientes caracteres:punto decimal o un de los siguientes caracteres:

•• E E oror e (agrega un valor exponencial)e (agrega un valor exponencial)

•• F F oror f (f (floatfloat))

•• D D oror d (d (doubledouble))

Page 53: Información básica Java

Punto flotante Punto flotante –– floatfloat y y doubledouble

–– Ejemplos:Ejemplos:•• 3.14 Un simple valor punto flotante (3.14 Un simple valor punto flotante (doubledouble))

•• 6.02E23 Un gran valor punto flotante6.02E23 Un gran valor punto flotante

•• 2.718F Un simple valor de tama2.718F Un simple valor de tamañño o floatfloat

•• 123.4E+306D Un gran valor 123.4E+306D Un gran valor doubledouble con redundante Dcon redundante D

•• Los literales tienen como tipo por defecto Los literales tienen como tipo por defecto doubledouble

Page 54: Información básica Java

Punto flotante Punto flotante –– floatfloat y y doubledouble

•• Los primitivos punto flotante tienen los siguientes Los primitivos punto flotante tienen los siguientes tamatamañños:os:

doubledouble64 bits64 bits

floatfloat32 bits32 bits

Nombre o tipoNombre o tipoLongitud del FlotanteLongitud del Flotante

Page 55: Información básica Java

Variables, declaraciones y Variables, declaraciones y asignacionesasignaciones

publicpublic classclass Asigna {Asigna {

publicpublic staticstatic voidvoid mainmain ((StringString argsargs [ ]) {[ ]) {

// declara variables enteras// declara variables enteras

intint x, y;x, y;

// declara y asigna un punto flotante// declara y asigna un punto flotante

floatfloat z = 3.414f;z = 3.414f;

// declara y asigna un // declara y asigna un doubledouble

doubledouble w = 3.1415;w = 3.1415;

// declara y asigna un // declara y asigna un booleanboolean

booleanboolean bandera = bandera = truetrue;;

Page 56: Información básica Java

Variables, declaraciones y Variables, declaraciones y asignacionesasignaciones

// declara variable car// declara variable carááctercter

charchar c;c;

// declara variable // declara variable StringString

StringString strstr;;

// declara y asigna variable // declara y asigna variable StringString

StringString str1 = str1 = ““chao";chao";

// asigna valor a variable tipo // asigna valor a variable tipo charchar

c = 'A';c = 'A';

// asigna valor a variable // asigna valor a variable StringString

strstr = = ““Hola, alguien en casa!";Hola, alguien en casa!";

Page 57: Información básica Java

Variables, declaraciones y Variables, declaraciones y asignacionesasignaciones

// asigna valores a las variables // asigna valores a las variables intint

x = 6;x = 6;

y = 1000;y = 1000;

}}

}}

Page 58: Información básica Java

Tipos de referencia en JavaTipos de referencia en Java

•• En la TecnologEn la Tecnologíía Java, aparte de los tipos a Java, aparte de los tipos primitivos, todos los demprimitivos, todos los demáás son tipos de referencias son tipos de referencia

•• Una variable de referencia contiene un Una variable de referencia contiene un identificador a un objetoidentificador a un objeto

Page 59: Información básica Java

Tipos de referencia en JavaTipos de referencia en Java•• Por ejemplo:Por ejemplo:

publicpublic classclass MiFecha {MiFecha {

privateprivate intint diadia = 1;= 1;

privateprivate intint mes = 1;mes = 1;

privateprivate intint anioanio = 2000;= 2000;

publicpublic MiFecha(intMiFecha(int d, d, intint m, m, intint a) { ... }a) { ... }

publicpublic StringString toStringtoString() { ... }() { ... }

}}

Page 60: Información básica Java

Tipos de referencia en JavaTipos de referencia en Java•• Por ejemplo:Por ejemplo:

publicpublic classclass PruebaMiFechaPruebaMiFecha {{

publicpublic staticstatic voidvoid main(Stringmain(String [ ] [ ] argsargs) {) {

MiFecha hoy = MiFecha hoy = newnew MiFecha (22, 7, 1964);MiFecha (22, 7, 1964);

}}

}}

Page 61: Información básica Java

Construyendo e Construyendo e Inicializando ObjetosInicializando Objetos

•• Llamando a Llamando a newnew XyzXyz() desarrolla las siguientes () desarrolla las siguientes acciones:acciones:–– La memoria es asignada para el ObjetoLa memoria es asignada para el Objeto

–– La inicializaciLa inicializacióón explicita de atributos es desarrolladan explicita de atributos es desarrollada

–– Un constructor es ejecutado.Un constructor es ejecutado.

–– La referencia del Objeto es retornada por el operador La referencia del Objeto es retornada por el operador newnew

Page 62: Información básica Java

Construyendo e Construyendo e Inicializando ObjetosInicializando Objetos

•• La referencia de un Objeto es asignada a la La referencia de un Objeto es asignada a la variablevariable

•• Un ejemplo es:Un ejemplo es:

–– MiFecha hoy = MiFecha hoy = newnew MiFecha (22, 7, 1964);MiFecha (22, 7, 1964);

Page 63: Información básica Java

AsignaciAsignaci óón y Organizacin y Organizaci óón n de memoriade memoria

•• Una declaraciUna declaracióón permite almacenar solamente una n permite almacenar solamente una referenciareferencia

–– MiFecha hoyMiFecha hoy = = newnew MiFecha (22, 7, 1964);MiFecha (22, 7, 1964);

–– hoy hoy ????

Page 64: Información básica Java

AsignaciAsignaci óón y Organizacin y Organizaci óón n de memoriade memoria

•• Usar el operador Usar el operador newnew asigna espacio para el asigna espacio para el Objeto MiFechaObjeto MiFecha

–– MiFecha hoy = MiFecha hoy = newnew MiFechaMiFecha (22, 7, 1964);(22, 7, 1964);

–– hoy hoy

–– diadia

–– mesmes

–– anioanio

????

0

0

0

Page 65: Información básica Java

InicializaciInicializaci óón explicita de n explicita de atributosatributos

•• Inicializa los atributos como sigue:Inicializa los atributos como sigue:

–– MiFecha hoy = MiFecha hoy = newnew MiFechaMiFecha (22, 7, 1964);(22, 7, 1964);

–– hoy hoy

–– diadia

–– mesmes

–– anioanio

????

1

1

2000

Page 66: Información básica Java

InicializaciInicializaci óón explicita de n explicita de atributosatributos

•• Los valores por defecto son tomados de la Los valores por defecto son tomados de la declaracideclaracióón de atributos de la clasen de atributos de la clase ::

–– privateprivate intint diadia = 1;= 1;

–– privateprivate intint mes = 1;mes = 1;

–– privateprivate intint anioanio = 2000;= 2000;

Page 67: Información básica Java

Ejecutando el constructorEjecutando el constructor

•• Ejecuta el correspondiente constructor:Ejecuta el correspondiente constructor:

–– MiFecha hoy = MiFecha hoy = newnew MiFecha MiFecha (22, 7, 1964)(22, 7, 1964);;–– hoy hoy

–– diadia

–– mesmes

–– anioanio

????

22

7

1964

Page 68: Información básica Java

Ejecutando el constructorEjecutando el constructor

•• En el caso de la sobrecarga de constructores, el En el caso de la sobrecarga de constructores, el primer constructor puede llamar a otrosprimer constructor puede llamar a otros

Page 69: Información básica Java

Asignando a la variableAsignando a la variable

•• Ejecuta el correspondiente constructor:Ejecuta el correspondiente constructor:

–– MiFecha MiFecha hoyhoy = = newnew MiFecha (22, 7, 1964);MiFecha (22, 7, 1964);

–– hoy hoy

–– diadia

–– mesmes

–– anioanio

0x01abcdef

22

7

1964

Page 70: Información básica Java

AsignaciAsignaci óón de referenciasn de referencias

•• Dos variables Dos variables referencianreferencian al mismo objeto:al mismo objeto:–– intint x = 7;x = 7;

–– intint y = x;y = x;

–– MiFecha s = MiFecha s = newnew MiFecha(22, 7, 1964);MiFecha(22, 7, 1964);

–– MiFecha t = s;MiFecha t = s;

–– x x

–– yy

–– ss

–– t t 0x01abcdef

7

0x01abcdef

7

22 7 1964

Page 71: Información básica Java

AsignaciAsignaci óón de referenciasn de referencias

•• Se reasignan dos variables apuntan a dos objetos:Se reasignan dos variables apuntan a dos objetos:–– t = t = newnew MiFechaMiFecha(22, 12, 1964);(22, 12, 1964);

–– x x

–– yy

–– ss

–– t t

19647227

0x123456fa

0x01abcdef

7

722

19641222

Page 72: Información básica Java

Paso por valorPaso por valor•• En una sencilla maquina virtual, el lenguaje de En una sencilla maquina virtual, el lenguaje de

programaciprogramacióón de Java n de Java úúnicamente pasa nicamente pasa argumentos por valorargumentos por valor

•• Cuando la instancia de un objeto es pasada como Cuando la instancia de un objeto es pasada como argumento de un margumento de un méétodo, el valor del argumento todo, el valor del argumento es una referencia del objetoes una referencia del objeto

•• El contenido del objeto puede ser cambiado en el El contenido del objeto puede ser cambiado en el llamado del mllamado del méétodo, pero la referencia original del todo, pero la referencia original del objeto nunca cambiaobjeto nunca cambia

Page 73: Información básica Java

Paso por valorPaso por valorpublicpublic classclass PruebaPasoPruebaPaso {{

// El m// El méétodo cambia el valor actualtodo cambia el valor actual

publicpublic staticstatic voidvoid cambiaInt(intcambiaInt(int valor) {valor) {

valor = 55;valor = 55;

}}

publicpublic staticstatic voidvoid cambiaRefObjeto(MiFechacambiaRefObjeto(MiFecha refref) {) {

refref = = newnew MiFecha (1, 1, 2000);MiFecha (1, 1, 2000);

}}

publicpublic staticstatic voidvoid cambiaAtribObjeto(MiFechacambiaAtribObjeto(MiFecha refref){){

ref.setDiaref.setDia(4);(4);

}}

Page 74: Información básica Java

Paso por valorPaso por valorpublicpublic staticstatic voidvoid main(Stringmain(String argsargs [ ] ) {[ ] ) {

MiFecha fecha;MiFecha fecha;

intint valval;;

// Asigna el // Asigna el intint

valval = 11;= 11;

// Trata de cambiar el valor// Trata de cambiar el valor

cambiaInt(valcambiaInt(val););

// Cual es el valor actual?// Cual es el valor actual?

System.out.println("System.out.println("IntInt valor es: " + valor es: " + valval););

•• El resultado es: El resultado es: IntInt valor es 11valor es 11

Page 75: Información básica Java

Paso por valorPaso por valor// Asigna la fecha// Asigna la fecha

fecha = fecha = newnew MiFechaMiFecha(22, 7, 1964);(22, 7, 1964);

// Trata de cambiar el objeto// Trata de cambiar el objeto

cambiaRefObjeto(fechacambiaRefObjeto(fecha););

// Cual es el valor actual?// Cual es el valor actual?

System.out.println("MiFecha: " + fecha);System.out.println("MiFecha: " + fecha);

•• El resultado es: El resultado es: MiFechaMiFecha: 22: 22--77--1964 1964

Page 76: Información básica Java

Paso por valorPaso por valor// Ahora cambia el atributo d// Ahora cambia el atributo dííaa

// a trav// a travéés de la referencia del objetos de la referencia del objeto

cambiaAtribObjeto(fecha);cambiaAtribObjeto(fecha);

// Cual es el valor actual?// Cual es el valor actual?

System.out.println("MiFecha: " + fecha);System.out.println("MiFecha: " + fecha);

}}

}}

•• El resultado es: El resultado es: MiFechaMiFecha: 4: 4--77--1964 1964

Page 77: Información básica Java

La referencia La referencia thisthis•• Unos pocos usos de la palabra reservada Unos pocos usos de la palabra reservada thisthis son:son:

–– Resolver ambigResolver ambigüüedad entre variables de edad entre variables de instancia y parinstancia y paráámetrosmetros

–– Pasar el actual objeto como parPasar el actual objeto como paráámetro a otro metro a otro mméétodo o constructortodo o constructor

Page 78: Información básica Java

La referencia La referencia thisthispublicpublic classclass MiFecha {MiFecha {

privateprivate intint diadia = 1;= 1;

privateprivate intint mes = 1;mes = 1;

privateprivate intint anioanio = 2000;= 2000;

publicpublic MiFecha(intMiFecha(int diadia, , intint mes, mes, intint anioanio) {) {

thisthis. . diadia = = diadia;;

thisthis. mes = mes;. mes = mes;

thisthis. . anioanio = = anioanio;;

}}

Page 79: Información básica Java

La referencia La referencia thisthispublicpublic MiFecha (MiFecha (MiFechaMiFecha fecha) {fecha) {

thisthis. . diadia = fecha. = fecha. diadia;;

thisthis. mes = fecha. mes;. mes = fecha. mes;

thisthis. . anioanio = fecha. = fecha. anioanio;;

}}

publicpublic StringString toStringtoString() {() {

returnreturn "" + "" + diadia + "+ "--" + mes + "" + mes + "--" + " + anioanio;;

}}

Page 80: Información básica Java

La referencia La referencia thisthispublicpublic MiFecha MiFecha addDias(intaddDias(int numDiasnumDias) {) {

MiFecha MiFecha nuevaFechanuevaFecha = = newnew MiFecha(thisMiFecha(this););

nuevaFecha.dianuevaFecha.dia = = nuevaFecha.dianuevaFecha.dia + + numDiasnumDias;;

// Resto de la implementaci// Resto de la implementacióón de cn de cóódigo...digo...

returnreturn nuevaFechanuevaFecha;;

}}

}}

Page 81: Información básica Java

La referencia La referencia thisthispublicpublic classclass PruebaMiFechaPruebaMiFecha {{

publicpublic staticstatic voidvoid main(Stringmain(String [ ] [ ] argsargs) {) {

MiFecha MiFecha miFechamiFecha = = newnew MiFecha (22, 7, 1964);MiFecha (22, 7, 1964);

MiFecha MiFecha siguienteSemanasiguienteSemana = = miFecha.addDiasmiFecha.addDias(7);(7);

System.out.println(siguienteSemanaSystem.out.println(siguienteSemana););

}}

}}

Page 82: Información básica Java

Expresiones y control de Expresiones y control de flujoflujo

Docente:Docente:

Freddy Mendez OrtizFreddy Mendez Ortiz

Page 83: Información básica Java

Variables y alcanceVariables y alcance•• Variables locales son:Variables locales son:

–– Variables que son definidas dentro de un Variables que son definidas dentro de un mméétodo y son llamadas: locales, automtodo y son llamadas: locales, automááticas, ticas, temporales o de pilatemporales o de pila

–– Variables que son creadas cuando el mVariables que son creadas cuando el méétodo se todo se ejecuta y destruidas cuando el mejecuta y destruidas cuando el méétodo termine.todo termine.

Page 84: Información básica Java

Variables y alcanceVariables y alcance•• La inicializaciLa inicializacióón de variables incluye lo siguiente:n de variables incluye lo siguiente:

–– Las variables locales requieren inicializaciLas variables locales requieren inicializacióón n explicitaexplicita

–– Las variables de instancia son inicializadas Las variables de instancia son inicializadas automautomááticamenteticamente

Page 85: Información básica Java

Ejemplo alcance variablesEjemplo alcance variablespublicpublic classclass EjemploAlcanceEjemploAlcance {{

privateprivate intint i=1;i=1;

publicpublic voidvoid primerMetodoprimerMetodo() {() {

intint i=4, j=5;i=4, j=5;

this.ithis.i = i + j;= i + j;

segundoMetodosegundoMetodo(7);(7);

}}

publicpublic voidvoid segundoMetodosegundoMetodo ((intint i) {i) {

intint j=8;j=8;

this.ithis.i = i + j;= i + j;

}}

}}

Page 86: Información básica Java

Ejemplo alcance variablesEjemplo alcance variablespublicpublic classclass TestScopingTestScoping {{

publicpublic staticstatic voidvoid main(Stringmain(String[] [] argsargs) {) {

EjemploAlcanceEjemploAlcance alcance = alcance = newnew EjemploAlcanceEjemploAlcance();();

alcance.primerMetodoalcance.primerMetodo();();

}}

}}

Page 87: Información básica Java

Ejemplo alcance variablesEjemplo alcance variables

4

5

7

8j

i

this

j

i

this

alcance

Stack de Ejecución Heap

Memory

1i

EjemploAlcance

main

primerMetodo

segundoMetodo

Page 88: Información básica Java

InicializaciInicializaci óón variablesn variables

nullnullTodos los tipos de Todos los tipos de referenciareferencia

falsefalsebooleanboolean

''\\u0000u0000''charchar

0.0D0.0Ddoubledouble

0.0F0.0Ffloatfloat

0L0Llonglong

00intint

00shortshort

00bytebyte

ValorValorVariableVariable

Page 89: Información básica Java

Principio Inicializar antes de Principio Inicializar antes de usarusar

•• El compilador puede verificar que las variables El compilador puede verificar que las variables locales tiene que ser inicializadas antes de usarse locales tiene que ser inicializadas antes de usarse publicpublic voidvoid hacerComputohacerComputo() {() {

intint x = (x = (intint)()(Math.randomMath.random() * 100);() * 100);

intint y;y;

intint z;z;

ifif (x > 50) {(x > 50) {

y = 9;y = 9;

}}

z = y + x; // Posible uso antes de inicializarz = y + x; // Posible uso antes de inicializar

}}

Page 90: Información básica Java

Precedencia operadoresPrecedencia operadores

R R toto LL= *= /= %= += = *= /= %= += --= <<= >>= >>>= &= ^= |== <<= >>= >>>= &= ^= |=

R R toto LL<<boolean_exprboolean_expr> ? <expr1> : <expr2>> ? <expr1> : <expr2>

L L toto RR||||

L L toto RR&&&&

L L toto RR||

L L toto RR^̂

L L toto RR&&

L L toto RR== !=== !=

L L toto RR< > <= >= < > <= >= instanceofinstanceof

L L toto RR<< >> >>><< >> >>>

L L toto RR+ + --

L L toto RR* / %* / %

R R toto LL++ ++ ---- ~ ! ( )~ ! ( )

AsociatividadAsociatividadOperadoresOperadores

Page 91: Información básica Java

Operadores LOperadores L óógicosgicos•• Los operadores Los operadores booleanboolean son:son:

! ! –– NOT NOT & & –– ANDAND

| | –– OR OR ^ ^ –– XORXOR

•• Los operadores Los operadores booleanboolean shortshort--circuitcircuit are:are:&& && –– AND AND || || –– OROR

•• Los operadores se pueden usar como:Los operadores se pueden usar como:MiFecha d = MiFecha d = reservacion.getFechaSalidareservacion.getFechaSalida();();

ifif ( (d != ( (d != nullnull) && () && (d.diad.dia > 31) {> 31) {

// Hacer algo con d// Hacer algo con d

}}

Page 92: Información básica Java

Operadores LOperadores L óógicos a gicos a BitwiseBitwise

•• Los operadores Los operadores bitwisebitwise a enteros son:a enteros son:~ ~ –– Complemento Complemento & & –– ANDAND

^ ^ –– XOR XOR | | –– OROR

•• Los operadores se pueden usar como:Los operadores se pueden usar como:

Page 93: Información básica Java

Operadores Operadores RightRight --ShiftShift >> y >> y >>>>>>

•• Operador Operador RightRight--ShiftShift::

•• Ejemplos son:Ejemplos son:

–– 128 >> 1 retorna 128/21 = 64128 >> 1 retorna 128/21 = 64

–– 256 >> 4 retorna 256/24 = 16256 >> 4 retorna 256/24 = 16

–– --256 >> 4 retorna 256 >> 4 retorna --256/24 = 256/24 = --1616

•• El El bitbit del signo es copiado durante el corrimientodel signo es copiado durante el corrimiento

Page 94: Información básica Java

Operadores Operadores RightRight --ShiftShift >> y >> y >>>>>>

•• Operador Operador unsignedunsigned RightRight--ShiftShift::

•• Este operador es usado para patrones de Este operador es usado para patrones de bitbit

•• El El bitbit del signo no es copiado durante el del signo no es copiado durante el corrimientocorrimiento

Page 95: Información básica Java

Operador Operador LeftLeft --ShiftShift <<<<

•• Operador Operador LeftLeft--ShiftShift trabaja como:trabaja como:

–– 128 << 1 128 << 1 retornaretorna 128 * 21 = 256128 * 21 = 256

–– 16 << 2 16 << 2 retornaretorna 16 * 22 = 6416 * 22 = 64

Page 96: Información básica Java

Ejemplo Operadores Ejemplo Operadores ShiftShift

Page 97: Información básica Java

Concatenar Concatenar StringString con +con +•• El operador + funciona como sigue:El operador + funciona como sigue:

–– Realiza concatenaciRealiza concatenacióón de n de StringString

–– Produce un nuevo Produce un nuevo StringString

StringString titulo = titulo = ““Dr.Dr.””;;

StringString nombre = nombre = ““LuisLuis”” + + ““ ”” + + ““PerezPerez””;;

StringString saludo = titulo + saludo = titulo + ““ ”” + nombre;+ nombre;

•• Un argumento debe ser un objeto Un argumento debe ser un objeto StringString

•• No Strings son convertidos a objetos No Strings son convertidos a objetos StringString de de forma automforma automááticatica

Page 98: Información básica Java

CastingCasting•• Si informaciSi informacióón podrn podríía perderse en una asignacia perderse en una asignacióón, n,

el programador debe confirmar la asignaciel programador debe confirmar la asignacióón con n con un castingun casting

•• La asignaciLa asignacióón entre n entre lontlont e e intint requiere un casting requiere un casting explicitoexplicitolong granValor = 99L;long granValor = 99L;

intint valor = granValor; // Incorrecto, necesita castingvalor = granValor; // Incorrecto, necesita casting

intint valor = (valor = (intint) granValor; // OK) granValor; // OK

intint valor = 99L; // Incorrecto, necesita castingvalor = 99L; // Incorrecto, necesita casting

intint valor = (valor = (intint) 99L; // OK) 99L; // OK

intint valor = 99; // Por defecto valor = 99; // Por defecto intint

Page 99: Información básica Java

PromociPromoci óón y Casting de n y Casting de expresionesexpresiones

•• Las variables se promueven automLas variables se promueven automááticamente a su ticamente a su forma mas grande (como forma mas grande (como intint a long)a long)

•• La expresiLa expresióón es compatible de asignar si el tipo de n es compatible de asignar si el tipo de la variable es al menos igual de grande (mismo la variable es al menos igual de grande (mismo numero de bits) como el tipo de la expresinumero de bits) como el tipo de la expresióónn–– long x = 6; // 6 es un tipo long x = 6; // 6 es un tipo intint, OK, OK

–– intint y = 99L; // 99L es un tipo long, ilegaly = 99L; // 99L es un tipo long, ilegal

–– doubledouble z = 12.414F; // 12.414F es un tipo z = 12.414F; // 12.414F es un tipo floatfloat, OK, OK

–– floatfloat z1 = 12.414; // 12.414 es z1 = 12.414; // 12.414 es doubledouble, , illegalillegal

Page 100: Información básica Java

DeclaraciDeclaraci óón de n de ifif simplesimple•• La sintaxis de la declaraciLa sintaxis de la declaracióón del n del ifif es:es:

ifif ( <( <expresiexpresióón_booleann_boolean> )> )

<<declaracideclaracióón_o_bloquen_o_bloque>>

•• Ejemplo:Ejemplo:ifif ( x < 10 )( x < 10 )

System.out.println(System.out.println(““UstedUsted ha terminado?");ha terminado?");

•• o (recomendado):o (recomendado):ifif ( x < 10 ) {( x < 10 ) {

System.out.println(System.out.println(““UstedUsted ha terminado?");ha terminado?");

}}

Page 101: Información básica Java

DeclaraciDeclaraci óón de n de ifif , , elseelsecomplejocomplejo

•• La sintaxis de la declaraciLa sintaxis de la declaracióón del n del ifif--elseelse es:es:

ifif ( <( <expresiexpresióón_booleann_boolean> )> )

<<declaracideclaracióón_o_bloquen_o_bloque>>

elseelse

<<declaracideclaracióón_o_bloquen_o_bloque>>

Page 102: Información básica Java

DeclaraciDeclaraci óón de n de ifif , , elseelsecomplejocomplejo

•• La sintaxis de la declaraciLa sintaxis de la declaracióón del n del ifif--elseelse--ifif es:es:

ifif ( <( <expresiexpresióón_booleann_boolean> )> )

<<declaracideclaracióón_o_bloquen_o_bloque>>

elseelse ifif ( <( <expresiexpresióón_booleann_boolean> )> )

<<declaracideclaracióón_o_bloquen_o_bloque>>

Page 103: Información básica Java

DeclaraciDeclaraci óón de switchn de switch•• La sintaxis de la declaraciLa sintaxis de la declaracióón de switch es:n de switch es:

switch ( <expresiswitch ( <expresióón> ) {n> ) {

case <constante1>:case <constante1>:

<<declaracideclaracióón_o_bloquen_o_bloque>*>*

[[breakbreak;];]

case <constante2>:case <constante2>:

<<declaracideclaracióón_o_bloquen_o_bloque>*>*

[[breakbreak;];]

defaultdefault::

<<declaracideclaracióón_o_bloquen_o_bloque>*>*

[[breakbreak;];]

}}

Page 104: Información básica Java

DeclaraciDeclaraci óón de switchn de switch•• Un ejemplo de la declaraciUn ejemplo de la declaracióón switch es:n switch es:

switch ( switch ( carModelcarModel ) {) {

case DELUXE:case DELUXE:

addAireaddAire();();

addRadioaddRadio();();

addLlantasaddLlantas();();

addMotoraddMotor();();

breakbreak;;

Page 105: Información básica Java

DeclaraciDeclaraci óón de switchn de switchcase STANDARD:case STANDARD:

addRadioaddRadio();();

addLlantasaddLlantas();();

addMotoraddMotor();();

breakbreak;;

defaultdefault::

addLlantasaddLlantas();();

addMotoraddMotor();();

}}

Page 106: Información básica Java

DeclaraciDeclaraci óón de switchn de switch•• Esta declaraciEsta declaracióón switch es equivalente al ejemplo n switch es equivalente al ejemplo

anterior:anterior:switch ( switch ( carModelcarModel ) {) {

case DELUXE:case DELUXE:

addAireaddAire();();

case STANDARD:case STANDARD:

addRadioaddRadio();();

defaultdefault::

addLlantasaddLlantas();();

addMotoraddMotor();();

}}

Page 107: Información básica Java

DeclaraciDeclaraci óón de switchn de switch•• Sin la declaraciSin la declaracióón n breakbreak, la ejecuci, la ejecucióón continua a n continua a

travtravéés de cada subsiguiente cls de cada subsiguiente clááusula caseusula case

Page 108: Información básica Java

DeclaraciDeclaraci óón de ciclosn de ciclos•• Ciclo Ciclo forfor::

forfor ( <( <init_exprinit_expr>; <>; <test_exprtest_expr>; <>; <alter_expralter_expr> )> )

<<declaracideclaracióón_o_bloquen_o_bloque>>

•• Ejemplo:Ejemplo:forfor ( ( intint i = 0; i < 10; i++ )i = 0; i < 10; i++ )

System.out.println(iSystem.out.println(i + " el cuadrado es " + (i*i));+ " el cuadrado es " + (i*i));

•• o (recomendado):o (recomendado):forfor ( ( intint i = 0; i < 10; i++ ) {i = 0; i < 10; i++ ) {

System.out.println(iSystem.out.println(i + " el cuadrado es " + (i*i));+ " el cuadrado es " + (i*i));

}}

Page 109: Información básica Java

DeclaraciDeclaraci óón de ciclosn de ciclos•• Ciclo Ciclo whilewhile::

whilewhile ( <( <test_exprtest_expr> )> )

<<declaracideclaracióón_o_bloquen_o_bloque>>

•• Ejemplo:Ejemplo:intint i = 0;i = 0;

whilewhile ( i < 10 ) {( i < 10 ) {

System.out.println(iSystem.out.println(i + " el cuadrado es " + (i*i));+ " el cuadrado es " + (i*i));

i++;i++;

}}

Page 110: Información básica Java

DeclaraciDeclaraci óón de ciclosn de ciclos•• Ciclo do/Ciclo do/whilewhile::

dodo

<<declaracideclaracióón_o_bloquen_o_bloque>>

whilewhile ( <( <test_exprtest_expr> );> );

•• Ejemplo:Ejemplo:intint i = 0;i = 0;

do {do {

System.out.println(iSystem.out.println(i + " el cuadrado es " + (i*i));+ " el cuadrado es " + (i*i));

i++;i++;

} } whilewhile ( i < 10 );( i < 10 );

Page 111: Información básica Java

Controles de flujo Controles de flujo especialesespeciales

•• El comando El comando breakbreak [<[<labellabel>];>];

•• El comando El comando continuecontinue [<[<labellabel>];>];

•• El comando <El comando <labellabel>:<declaraci>:<declaracióón>, donde n>, donde <declaraci<declaracióón> debe ser un ciclon> debe ser un ciclo

Page 112: Información básica Java

DeclaraciDeclaraci óón n breakbreakdo {do {

declaracideclaracióón;n;

ifif ( condici( condicióón ) {n ) {

breakbreak;;

}}

declaracideclaracióón;n;

} } whilewhile ( <( <test_exprtest_expr> );> );

Page 113: Información básica Java

DeclaraciDeclaraci óón n continuecontinuedo {do {

declaracideclaracióón;n;

ifif ( condici( condicióón ) {n ) {

continuecontinue;;

}}

declaracideclaracióón;n;

} } whilewhile ( <( <test_exprtest_expr> );> );

Page 114: Información básica Java

Usando la declaraciUsando la declaraci óón n breakbreakcon con LabelsLabels

outerouter::

do {do {

declaracideclaracióónn1;1;

do {do {

declaracideclaracióónn2;2;

ifif ( condici( condicióón ) {n ) {

breakbreak outerouter;;

}}

declaracideclaracióónn3;3;

} } whilewhile ( ( test_exprtest_expr ););

declaracideclaracióónn4;4;

} } whilewhile ( ( test_exprtest_expr ););

Page 115: Información básica Java

Usando la declaraciUsando la declaraci óón n continuecontinue con con LabelsLabels

outerouter::

do {do {

declaracideclaracióónn1;1;

do {do {

declaracideclaracióónn2;2;

ifif ( condici( condicióón ) {n ) {

continuecontinue outerouter;;

}}

declaracideclaracióónn3;3;

} } whilewhile ( ( test_exprtest_expr ););

declaracideclaracióónn4;4;

} } whilewhile ( ( test_exprtest_expr ););

Page 116: Información básica Java

ArreglosArreglos

Docente:Docente:

Freddy Mendez OrtizFreddy Mendez Ortiz

Page 117: Información básica Java

DeclaraciDeclaraci óón de Arreglosn de Arreglos•• Grupo de datos de un mismo tipo. ColecciGrupo de datos de un mismo tipo. Coleccióón n

HomogHomogééneanea

•• DeclaraciDeclaracióón de arreglos de tipo primitivo y de n de arreglos de tipo primitivo y de clase:clase:

–– charchar s [ ];s [ ];

–– MiPuntoMiPunto p [ ];p [ ];

•• Crea espacio para una referenciaCrea espacio para una referencia

•• Un arreglo es un objeto, este se debe crear con Un arreglo es un objeto, este se debe crear con newnew

Page 118: Información básica Java

CreaciCreaci óón de Arreglosn de Arreglos•• Se usa la palabra Se usa la palabra newnew para crear un Objeto arreglopara crear un Objeto arreglo

•• Ejemplo de arreglo de tipo primitivo (Ejemplo de arreglo de tipo primitivo (charchar):):publicpublic charchar[] [] crearArreglocrearArreglo() {() {

charchar[] s;[] s;

s = s = newnew charchar[26];[26];

forfor ( ( intint i=0; i<26; i++ ) {i=0; i<26; i++ ) {

s[is[i] = (] = (charchar) () (’’AA’’ + i);+ i);

}}

returnreturn s;s;

}}

Page 119: Información básica Java

CreaciCreaci óón de Arreglo de n de Arreglo de charchar

s

this

Stack de Ejecución

HeapMemory

A

char [ ]

main

crearArreglo

B

C

D

Page 120: Información básica Java

CreaciCreaci óón de Arreglos de n de Arreglos de ReferenciaReferencia

•• Ejemplo de arreglo de tipo de referencia de objeto:Ejemplo de arreglo de tipo de referencia de objeto:publicpublic MiPuntoMiPunto[] [] crearArreglocrearArreglo() {() {

MiPuntoMiPunto[] p;[] p;

p = p = newnew MiPuntoMiPunto[10];[10];

forfor ( ( intint i=0; i<10; i++ ) {i=0; i<10; i++ ) {

p[ip[i] = ] = newnew MiPunto(iMiPunto(i, i+1);, i+1);

}}

returnreturn p;p;

}}

Page 121: Información básica Java

CreaciCreaci óón de Arreglo de n de Arreglo de Referencia Referencia MiPuntoMiPunto

p

this

Stack de Ejecución

HeapMemory

MiPunto [ ]

main

crearArreglo …

0

MiPunto

1

x

y

1

MiPunto

2

x

y

Page 122: Información básica Java

InicializaciInicializaci óón de Arreglosn de Arreglos•• Inicializar un elemento del arregloInicializar un elemento del arreglo

•• Crear un arreglo con valores inicialesCrear un arreglo con valores inicialesStringString[] nombres;[] nombres;

nombres = nombres = newnew StringString[3];[3];

nombres[0] = "nombres[0] = "GeorgiannaGeorgianna";";

nombres[1] = "nombres[1] = "JenJen";";

nombres[2] = "Simon";nombres[2] = "Simon";

StringString[] nombres = { "[] nombres = { "GeorgiannaGeorgianna", "", "JenJen", "Simon", "Simon““ };};

Page 123: Información básica Java

InicializaciInicializaci óón de Arreglosn de ArreglosMiFechaMiFecha[] fechas;[] fechas;

fechas = fechas = newnew MiFechaMiFecha[3];[3];

fechas[0] = fechas[0] = newnew MiFechaMiFecha(22, 7, 1964);(22, 7, 1964);

fechas[1] = fechas[1] = newnew MiFechaMiFecha(1, 1, 2000);(1, 1, 2000);

fechas[2] = fechas[2] = newnew MiFechaMiFecha(22, 12, 1964);(22, 12, 1964);

MiFechaMiFecha[] fechas = { [] fechas = { newnew MiFechaMiFecha(22, 7, 1964),(22, 7, 1964),

newnew MiFechaMiFecha(1, 1, 2000), (1, 1, 2000), newnew MiFechaMiFecha(22, 12, 1964) };(22, 12, 1964) };

Page 124: Información básica Java

Arreglos MultidimencionalesArreglos Multidimencionales•• Arreglos de arreglosArreglos de arreglos

intint[][] [][] dosDimdosDim = = newnew intint[4][];[4][];

dosDimdosDim[0] = [0] = newnew intint[5];[5];

dosDimdosDim[1] = [1] = newnew intint[5];[5];

intint[][] [][] dosDimdosDim = = newnew intint[][4]; // ilegal[][4]; // ilegal

Page 125: Información básica Java

Arreglos MultidimencionalesArreglos Multidimencionales•• Arreglos de arreglos no rectangularesArreglos de arreglos no rectangulares

intint[][] [][] dosDimdosDim = = newnew intint[4][];[4][];

dosDimdosDim[0] = [0] = newnew intint[2];[2];

dosDimdosDim[1] = [1] = newnew intint[4];[4];

dosDimdosDim[2] = [2] = newnew intint[6];[6];

dosDimdosDim[3] = [3] = newnew intint[8];[8];

•• Arreglo de 4 arreglos de 5 enterosArreglo de 4 arreglos de 5 enterosintint[][] [][] dosDimdosDim = = newnew intint[4][5];[4][5];

Page 126: Información básica Java

Limites de los ArreglosLimites de los Arreglos•• Todos los arreglos inician en la posiciTodos los arreglos inician en la posicióón cero (0)n cero (0)

publicpublic voidvoid imprimirElementos(intimprimirElementos(int[] lista) {[] lista) {

forfor ((intint i = 0; i < i = 0; i < lista.lengthlista.length; i++) {; i++) {

System.out.println(lista[iSystem.out.println(lista[i]);]);

}}

}}

Page 127: Información básica Java

Ciclo Ciclo forfor mejoradomejorado

publicpublic voidvoid imprimirElementos(intimprimirElementos(int[] lista) {[] lista) {

forfor ((intint elemento : lista) {elemento : lista) {

System.out.println(elementoSystem.out.println(elemento););

}}

}}

•• Se puede leer para cada elemento en la lista hagaSe puede leer para cada elemento en la lista haga

Page 128: Información básica Java

RedimensiRedimensi óón de Arreglosn de Arreglos•• Un arreglo no se puede redimensionarUn arreglo no se puede redimensionar

•• Se puede usar la misma variable de referencia Se puede usar la misma variable de referencia para apuntar a un nuevo arreglo:para apuntar a un nuevo arreglo:intint[] [] miArreglomiArreglo = = newnew intint[6];[6];

miArreglomiArreglo = = newnew intint[10];[10];

Page 129: Información básica Java

Copiando ArreglosCopiando Arreglos•• El mEl méétodo todo System.arraycopySystem.arraycopy() permite copiar el () permite copiar el

contenidocontenido1 //arreglo original1 //arreglo original

2 2 intint[] [] miArreglomiArreglo = { 1, 2, 3, 4, 5, 6 };= { 1, 2, 3, 4, 5, 6 };

33

4 //nuevo arreglo mas grande4 //nuevo arreglo mas grande

5 5 intint[] [] holdhold = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };= { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };

66

7 // copia todo el arreglo 7 // copia todo el arreglo miArreglomiArreglo en el arreglo en el arreglo holdhold,,

8 // iniciando desde la posici8 // iniciando desde la posicióón 0n 0

9 9 System.arraycopy(miArregloSystem.arraycopy(miArreglo, 0, , 0, holdhold, 0, , 0, miArreglo.lengthmiArreglo.length););

Page 130: Información básica Java

DiseDiseñño de Claseso de Clases

Docente:Docente:

Freddy Mendez OrtizFreddy Mendez Ortiz

Page 131: Información básica Java

SubclasesSubclases•• La clase Empleado:La clase Empleado:

publicpublic classclass Empleado {Empleado {

publicpublic StringString nombre = "";nombre = "";

publicpublic doubledouble salario;salario;

publicpublic Date Date fechaNacimientofechaNacimiento;;

publicpublic StringString getDetallesgetDetalles() {...}() {...}

}}

Page 132: Información básica Java

SubclasesSubclases•• La clase Administrador:La clase Administrador:

publicpublic classclass Administrador {Administrador {

publicpublic StringString nombre = "";nombre = "";

publicpublic doubledouble salario;salario;

publicpublic Date Date fechaNacimientofechaNacimiento;;

publicpublic StringString departamento;departamento;

publicpublic StringString getDetallesgetDetalles() {...}() {...}

}}

Page 133: Información básica Java

Diagrama de clase del uso Diagrama de clase del uso de Herenciade Herencia

publicpublic classclass Empleado {Empleado {

publicpublic StringString nombre = "";nombre = "";

publicpublic doubledouble salario;salario;

publicpublic Date Date fechaNacimientofechaNacimiento;;

publicpublic StringString getDetallesgetDetalles() {...}() {...}

}}

publicpublic classclass Administrador Administrador

extendsextends Empleado {Empleado {

publicpublic StringString departamento;departamento;

}}

Page 134: Información básica Java

Herencia SimpleHerencia Simple•• Cuando una clase hereda solo de una clase padre, Cuando una clase hereda solo de una clase padre,

se llama Herencia Simplese llama Herencia Simple

•• Interfaces proveen los beneficios de herencia Interfaces proveen los beneficios de herencia simple sin inconvenientessimple sin inconvenientes

•• Sintaxis de una clase de Java:Sintaxis de una clase de Java:<modificador> <modificador> classclass <nombre> [<nombre> [extendsextends <superclase>] {<superclase>] {

<declaraci<declaracióón>*n>*

}}

Page 135: Información básica Java

Herencia SimpleHerencia Simple

Page 136: Información básica Java

Control de AccesoControl de Acceso

SiSiSiSiSiSiSiSipublicpublic

SiSiSiSiSiSiprotectedprotected

SiSiSiSidefaultdefault

SiSiprivateprivate

UniversoUniversoSubclaseSubclaseMismo Mismo PaquetePaquete

Misma Misma ClaseClase

ModificadorModificador

Page 137: Información básica Java

SobrescrituraSobrescritura de Mde Méétodostodos•• Una clase puede modificar el comportamiento Una clase puede modificar el comportamiento

heredado de una clase Padreheredado de una clase Padre

•• Una subclase puede crear un mUna subclase puede crear un méétodo con diferente todo con diferente funcionalidad que el mfuncionalidad que el méétodo de su Padre pero con todo de su Padre pero con mismo:mismo:–– NombreNombre

–– Tipo de retorno *Tipo de retorno *

–– Lista de argumentosLista de argumentos

* El tipo de retorno puede ser una subclase* El tipo de retorno puede ser una subclase

del tipo retornado J2SE 5.0del tipo retornado J2SE 5.0

Page 138: Información básica Java

SobrescrituraSobrescritura de Mde Méétodostodospublicpublic classclass Empleado {Empleado {

protectedprotected StringString nombre;nombre;

protectedprotected doubledouble salario;salario;

protectedprotected Date Date fechaNacimientofechaNacimiento;;

publicpublic StringString getDetallesgetDetalles() {() {

returnreturn ““Nombre: Nombre: ““ + nombre + + nombre +

““\\nn”” + + ““Salario: Salario: ““ + salario;+ salario;

}}

}}

publicpublic classclass Administrador Administrador extendsextendsEmpleado {Empleado {protectedprotected StringString departamento;departamento;

publicpublic StringString getDetallesgetDetalles () {() {returnreturn ““Nombre: Nombre: ““ + nombre + + nombre + ““\\nn”” + + ““Salario: Salario: ““ + salario ++ salario +““AdminAdmin de: de: ““ + departamento;+ departamento;}}}}

Page 139: Información básica Java

MMéétodos Sobrescritos no todos Sobrescritos no pueden ser menos accesiblespueden ser menos accesibles

publicpublic classclass Padre {Padre {

publicpublic voidvoid hacerAlgohacerAlgo () {}() {}

}}

publicpublic classclass Hijo Hijo extendsextends Padre {Padre {

privateprivate voidvoid hacerAlgohacerAlgo () {} // ilegal() {} // ilegal

}}

publicpublic classclass UseAmbosUseAmbos {{publicpublic voidvoid hacerOtraCosahacerOtraCosa() {() {PadrePadre p1 = p1 = newnew Padre();Padre();PadrePadre p2 = p2 = newnew Hijo();Hijo();p1. p1. hacerAlgohacerAlgo ();();p2. p2. hacerAlgohacerAlgo ();();}}}}

Page 140: Información básica Java

InvocaciInvocaci óón de mn de m éétodos todos sobrescritossobrescritos

•• Un mUn méétodo de una subclase puede invocar un todo de una subclase puede invocar un mméétodo de la clase Padre usando la palabra todo de la clase Padre usando la palabra reservada reservada supersuper–– La palabra La palabra supersuper es usada en una clase para referirse a es usada en una clase para referirse a

la superclasela superclase

–– La palabra La palabra supersuper es usada en una clase para referirse a es usada en una clase para referirse a los miembros de la superclase, tanto atributos como los miembros de la superclase, tanto atributos como mméétodostodos

–– El comportamiento invocado no tiene que ser el de la El comportamiento invocado no tiene que ser el de la superclase, este puede subir jersuperclase, este puede subir jeráárquicamenterquicamente

Page 141: Información básica Java

InvocaciInvocaci óón de mn de m éétodos todos sobrescritossobrescritos

publicpublic classclass Empleado {Empleado {

protectedprotected StringString nombre;nombre;

protectedprotected doubledouble salario;salario;

protectedprotected Date Date fechaNacimientofechaNacimiento;;

publicpublic StringString getDetallesgetDetalles() {() {

returnreturn ““Nombre: Nombre: ““ + nombre + + nombre +

““\\nn”” + + ““Salario: Salario: ““ + salario;+ salario;

}}

}}

publicpublic classclass Administrador Administrador extendsextendsEmpleado {Empleado {protectedprotected StringString departamento;departamento;

publicpublic StringString getDetallesgetDetalles () {() {returnreturn super.getDetallessuper.getDetalles() +() +““AdminAdmin de: de: ““ + departamento;+ departamento;}}}}

Page 142: Información básica Java

PolimorfismoPolimorfismo•• La habilidad de tener varias formas. La habilidad de tener varias formas. EjEj; La clase ; La clase

Administrador tiene acceso a los mAdministrador tiene acceso a los méétodos desde la todos desde la clase Empleadoclase Empleado

•• Un objeto tiene una sola formaUn objeto tiene una sola forma

•• Una variable de referencia puede referenciar a Una variable de referencia puede referenciar a objetos de diferentes formasobjetos de diferentes formas

Page 143: Información básica Java

PolimorfismoPolimorfismo•• Empleado e = Empleado e = newnew Administrador();Administrador();

•• e.departamentoe.departamento = = ““VentasVentas””;;

•• ilegal tratar de asignar al atributo de Administradorilegal tratar de asignar al atributo de Administrador

•• La variable es declarada de tipo Empleado, aun La variable es declarada de tipo Empleado, aun cuando el objeto Administrador tenga este atributocuando el objeto Administrador tenga este atributo

Page 144: Información básica Java

InvocaciInvocaci óón virtual de n virtual de mméétodostodos

•• La invocaciLa invocacióón virtual de mn virtual de méétodos es desarrollada todos es desarrollada de la siguiente forma:de la siguiente forma:

Empleado e = Empleado e = newnew Administrador();Administrador();

e.getDetallese.getDetalles();();

•• El tipo en tiempo de compilaciEl tipo en tiempo de compilacióón y en tiempo de n y en tiempo de ejecuciejecucióón tiene las siguientes caractern tiene las siguientes caracteríísticas:sticas:

Page 145: Información básica Java

InvocaciInvocaci óón virtual de n virtual de mméétodostodos

–– El nombre del mEl nombre del méétodo debe ser un miembro del todo debe ser un miembro del tipo de variable declarada; en este caso tipo de variable declarada; en este caso Empleado tiene un mEmpleado tiene un méétodo llamado todo llamado getDetallesgetDetalles()()

–– La implementaciLa implementacióón del mn del méétodo usado es basado todo usado es basado en el tipo de Objeto en tiempo de ejecucien el tipo de Objeto en tiempo de ejecucióón; en n; en este caso Administrador tiene una este caso Administrador tiene una implementaciimplementacióón del mn del méétodo todo getDetallesgetDetalles()()

Page 146: Información básica Java

Colecciones HeterogColecciones Heterog ééneasneas•• Las colecciones de objetos del mismo tipo son Las colecciones de objetos del mismo tipo son

llamadas colecciones homogllamadas colecciones homogééneas. Por ejemplo:neas. Por ejemplo:MiFechaMiFecha[] fechas = [] fechas = newnew MiFechaMiFecha[2];[2];

fechas[0] = fechas[0] = newnew MiFechaMiFecha(22, 12, 1964);(22, 12, 1964);

fechas[1] = fechas[1] = newnew MiFechaMiFecha(22, 7, 1964);(22, 7, 1964);

•• Las colecciones de objetos de diferente tipo son Las colecciones de objetos de diferente tipo son llamadas colecciones heterogllamadas colecciones heterogééneas. Por ejemplo: neas. Por ejemplo: Empleado [] staff = Empleado [] staff = newnew Empleado[1024];Empleado[1024];

staff[0] = staff[0] = newnew Administrador();Administrador();

staff[1] = staff[1] = newnew Empleado();Empleado();

staff[2] = staff[2] = newnew Ingeniero();Ingeniero();

Page 147: Información básica Java

Argumentos Argumentos PolimorficosPolimorficos•• Puesto que un Administrador es un Empleado, lo Puesto que un Administrador es un Empleado, lo

siguiente es valido:siguiente es valido:publicpublic classclass ImpuestoServicioImpuestoServicio {{

publicpublic TasaImpTasaImp buscarTasaImp(EmpleadobuscarTasaImp(Empleado e) {e) {

// calcula la tasa de impuesto del empleado// calcula la tasa de impuesto del empleado

}}

}}

// Mientras tanto, en otra parte de la aplicaci// Mientras tanto, en otra parte de la aplicacióónn

ImpuestoServicioImpuestoServicio impSerimpSer = = newnew ImpuestoServicioImpuestoServicio();();

Administrador m = Administrador m = newnew Administrador();Administrador();

TasaImpTasaImp t = t = impSer.buscarTasaImp(mimpSer.buscarTasaImp(m););

Page 148: Información básica Java

El operador El operador instanceofinstanceofpublicpublic classclass Empleado Empleado extendsextends ObjectObject

publicpublic classclass Administrador Administrador extendsextends EmpleadoEmpleado

publicpublic classclass Ingeniero Ingeniero extendsextends EmpleadoEmpleado

--------------------------------------------------------------------------------

publicpublic voidvoid hacerAlgo(EmpleadohacerAlgo(Empleado e) {e) {

ifif ( e ( e instanceofinstanceof Administrador ) {Administrador ) {

// Procesa un Administrador// Procesa un Administrador

} } elseelse ifif ( e ( e instanceofinstanceof Ingeniero ) {Ingeniero ) {

// Procesa un Ingeniero// Procesa un Ingeniero

} } elseelse {{

// Procesa cualquier otro tipo de Empleado// Procesa cualquier otro tipo de Empleado

}}

}}

Page 149: Información básica Java

Casting de ObjetosCasting de Objetospublicpublic voidvoid hacerAlgo(EmpleadohacerAlgo(Empleado e) {e) {

ifif ( e ( e instanceofinstanceof Administrador ) {Administrador ) {

Administrador m = (Administrador) e;Administrador m = (Administrador) e;

System.out.println(System.out.println(““Este es el Administrador de Este es el Administrador de ””

+ + m.getDepartamentom.getDepartamento());());

} // Resto del c} // Resto del cóódigodigo

}}

Page 150: Información básica Java

Casting de ObjetosCasting de Objetos•• Use el operador Use el operador instanceofinstanceof para probar el tipo de para probar el tipo de

un Objeto.un Objeto.

•• Devuelve la funcionalidad de un objeto usando Devuelve la funcionalidad de un objeto usando casting.casting.

•• Compruebe un correcto casting usando los Compruebe un correcto casting usando los siguientes lineamientos:siguientes lineamientos:

•• Casting hacia arriba en la jerarquCasting hacia arriba en la jerarquíía es realizado a es realizado implimplíícitamente.citamente.

Page 151: Información básica Java

Casting de ObjetosCasting de Objetos•• Casting hacia abajo debe ser a una subclase y es Casting hacia abajo debe ser a una subclase y es

chequeado por el compilador.chequeado por el compilador.

•• El tipo del objeto es chequeado en tiempo de El tipo del objeto es chequeado en tiempo de ejecuciejecucióón cuando un error de ejecucin cuando un error de ejecucióón ocurre.n ocurre.

Page 152: Información básica Java

Sobrecarga de MSobrecarga de M éétodostodos•• Uso de la sobrecarga:Uso de la sobrecarga:

publicpublic voidvoid println(intprintln(int i)i)

publicpublic voidvoid println(floatprintln(float f)f)

publicpublic voidvoid println(Stringprintln(String s)s)

•• Lista de argumentos debe ser diferente.Lista de argumentos debe ser diferente.

•• Tipo de retorno puede ser diferente.Tipo de retorno puede ser diferente.

Page 153: Información básica Java

MMéétodos usando variable de todos usando variable de argumentosargumentos

•• Los mLos méétodos usando variables de argumentos todos usando variables de argumentos permite mpermite múúltiples nltiples núúmeros de argumentos en el meros de argumentos en el mméétodo. Por ejemplo:todo. Por ejemplo:publicpublic classclass EstadisticasEstadisticas {{

publicpublic floatfloat promedio(intpromedio(int... ... numsnums) {) {

intint sumsum = 0;= 0;

forfor ( ( intint x : x : numsnums ) {) {

sumsum += x;+= x;

}}

returnreturn ((((floatfloat) ) sumsum) / ) / nums.lengthnums.length;;

}}

}}

Page 154: Información básica Java

MMéétodos usando variable de todos usando variable de argumentosargumentos

•• El parEl paráámetro metro varargsvarargs es tratado como un arreglo. es tratado como un arreglo. Por ejemplo:Por ejemplo:floatfloat gradoPromediogradoPromedio = = stats.promediostats.promedio(4, 3, 4);(4, 3, 4);

floatfloat edadPromedioedadPromedio = = stats.promediostats.promedio(24, 32, 27, 18);(24, 32, 27, 18);

Page 155: Información básica Java

Sobrecarga de constructoresSobrecarga de constructores•• publicpublic classclass EjemploAlcanceEjemploAlcance {{

•• Como con los mComo con los méétodos, los constructores pueden todos, los constructores pueden ser sobrecargados. Por ejemplo:ser sobrecargados. Por ejemplo:publicpublic Empleado(StringEmpleado(String nombre, nombre, doubledouble salario, Date salario, Date fnfn))

publicpublic Empleado(StringEmpleado(String nombre, nombre, doubledouble salario)salario)

publicpublic Empleado(StringEmpleado(String nombre, Date nombre, Date fnfn))

•• La lista de argumentos debe ser diferente.La lista de argumentos debe ser diferente.

•• UdUd puede usar la referencia puede usar la referencia thisthis como primera como primera linealinea del constructor para llamar a otro constructor.del constructor para llamar a otro constructor.

Page 156: Información básica Java

Sobrecarga de constructoresSobrecarga de constructorespublicpublic classclass Empleado {Empleado {

privateprivate staticstatic final final doubledouble BASE_SALARIOBASE_SALARIO = 15000.00;= 15000.00;

privateprivate StringString nombre;nombre;

privateprivate doubledouble salario;salario;

privateprivate Date Date fechaNacimientofechaNacimiento;;

publicpublic Empleado(StringEmpleado(String nombre, nombre, doubledouble salario, Date salario, Date fnfn) {) {

thisthis. nombre = . nombre = nombrenombre;;

thisthis. salario = . salario = salariosalario;;

this.fechaNacimientothis.fechaNacimiento = = fnfn;;

}}

Page 157: Información básica Java

Sobrecarga de constructoresSobrecarga de constructorespublicpublic Empleado(StringEmpleado(String nombre, nombre, doubledouble salario) {salario) {

this(nombrethis(nombre, salario, , salario, nullnull););

}}

publicpublic Empleado(StringEmpleado(String nombre, Date nombre, Date fnfn) {) {

this(nombrethis(nombre, , BASE_SALARIOBASE_SALARIO, , fnfn););

}}

// mas c// mas cóódigo de Empleado...digo de Empleado...

}}

Page 158: Información básica Java

Constructores no se heredanConstructores no se heredan•• Una subclase hereda todos los mUna subclase hereda todos los méétodos y todos y

variables de la superclase (clase Padre).variables de la superclase (clase Padre).

•• Una subclase no hereda el constructor de la Una subclase no hereda el constructor de la superclase.superclase.

•• Dos formas para incluir un constructor son:Dos formas para incluir un constructor son:

•• Usar el constructor por Usar el constructor por defaultdefault..

•• Escribir uno o mas constructores explEscribir uno o mas constructores explíícitamente.citamente.

Page 159: Información básica Java

Invocando el constructor de Invocando el constructor de la superclasela superclase

•• Para invocar el constructor del Padre, debe colocar Para invocar el constructor del Padre, debe colocar el llamado a el llamado a supersuper en la primera len la primera líínea de el nea de el constructor.constructor.

•• UdUd puede llamar a un constructor especifico del puede llamar a un constructor especifico del Padre por los argumentos que se usen al llamar a Padre por los argumentos que se usen al llamar a supersuper..

Page 160: Información básica Java

Invocando el constructor de Invocando el constructor de la superclasela superclase

•• Si los llamados Si los llamados thisthis o o supersuper no son usados en el no son usados en el constructor, entonces el compilador agrega un constructor, entonces el compilador agrega un llamado implllamado implíícito a cito a supersuper() que llama al constructor () que llama al constructor del Padre sin argumentos (el cual podrdel Padre sin argumentos (el cual podríía ser el a ser el constructor por constructor por defaultdefault). ).

•• Si la clase Padre define constructores, pero no Si la clase Padre define constructores, pero no provee uno sin argumentos, entonces el provee uno sin argumentos, entonces el compilador genera un mensaje de error.compilador genera un mensaje de error.

Page 161: Información básica Java

publicpublic classclass Administrador Administrador extendsextends Empleado {Empleado {

privateprivate StringString departamento;departamento;

publicpublic Administrador(StringAdministrador(String nombre, nombre, doubledouble salario, salario, StringString deptdept) {) {

super(nombresuper(nombre, salario);, salario);

thisthis. departamento = . departamento = deptdept;;

}}

Invocando el constructor de Invocando el constructor de la superclasela superclase

Page 162: Información básica Java

•• La memoria es asignada y la inicializaciLa memoria es asignada y la inicializacióón por n por defecto ocurre.defecto ocurre.

•• La inicializaciLa inicializacióón de variables de instancia usa estos n de variables de instancia usa estos pasos recursivamente:pasos recursivamente:

1. Vincula los par1. Vincula los paráámetros del constructor.metros del constructor.

2. Si existe llamado explicito a 2. Si existe llamado explicito a thisthis(), este llama (), este llama recursivamente, y salta al paso 5.recursivamente, y salta al paso 5.

Construyendo e Inicializando Construyendo e Inicializando ObjetosObjetos

Page 163: Información básica Java

3. Llamado recursivo de al 3. Llamado recursivo de al supersuper explicita o explicita o implimplíícitamente, excepto para citamente, excepto para ObjectObject..

4. Ejecuta la inicializaci4. Ejecuta la inicializacióón explicita de variables n explicita de variables de instancia.de instancia.

5. Ejecuta el cuerpo de el actual constructor.5. Ejecuta el cuerpo de el actual constructor.

Construyendo e Inicializando Construyendo e Inicializando ObjetosObjetos

Page 164: Información básica Java

publicpublic classclass ObjectObject {{

publicpublic ObjectObject() {}() {}

}}

Ejemplo ConstrucciEjemplo Construcci óón e n e InicializaciInicializaci óónn

Page 165: Información básica Java

publicpublic classclass Empleado Empleado extendsextends ObjectObject {{

privateprivate StringString nombre;nombre;

privateprivate doubledouble salario = 15000.00;salario = 15000.00;

privateprivate Date Date fechaNacimientofechaNacimiento;;

publicpublic Empleado(StringEmpleado(String n, Date n, Date fnfn) {) {

// llamado a // llamado a supersuper() impl() implíícito;cito;

nombre = n;nombre = n;

fechaNacimientofechaNacimiento = = fnfn;;

}}

publicpublic Empleado(StringEmpleado(String n) {n) {

this(nthis(n, , nullnull););

}}

}}

Ejemplo ConstrucciEjemplo Construcci óón e n e InicializaciInicializaci óónn

Page 166: Información básica Java

publicpublic classclass Administrador Administrador extendsextends Empleado {Empleado {

privateprivate StringString departamento;departamento;

publicpublic Administrador(StringAdministrador(String n, n, StringString d) {d) {

super(nsuper(n););

departamento = d;departamento = d;

}}

}}

Ejemplo ConstrucciEjemplo Construcci óón e n e InicializaciInicializaci óónn

Page 167: Información básica Java

0 Inicializaci0 Inicializacióón bn báásicasica

0.1 Asigna memoria para el objeto completo Administrador0.1 Asigna memoria para el objeto completo Administrador

0.2 Inicializa todas las variables de instancia con su valor por0.2 Inicializa todas las variables de instancia con su valor pordefecto (0 defecto (0 oror nullnull))

1 Llama al constructor Administrador("Joe Smith", 1 Llama al constructor Administrador("Joe Smith", ““Ventas")Ventas")

1.1 Vincula los par1.1 Vincula los paráámetros del constructor: n="Joe Smith", metros del constructor: n="Joe Smith", d="Ventas"d="Ventas"

1.2 No existe llamado explicito a 1.2 No existe llamado explicito a thisthis()()

1.3 Llamado al 1.3 Llamado al super(nsuper(n) para ) para Empleado(StringEmpleado(String))

1.3.1 Vincula los par1.3.1 Vincula los paráámetros del constructor: n="Joe Smith"metros del constructor: n="Joe Smith"

1.3.2 Llama 1.3.2 Llama this(nthis(n, , nullnull) para ) para Empleado(StringEmpleado(String, Date), Date)

Ejemplo ConstrucciEjemplo Construcci óón e n e InicializaciInicializaci óónn

Page 168: Información básica Java

1.3.2.1 Vincula los par1.3.2.1 Vincula los paráámetros del constructor: n="Joe Smith", metros del constructor: n="Joe Smith", fnfn==nullnull

1.3.2.2 No existe llamado explicito a 1.3.2.2 No existe llamado explicito a thisthis

1.3.2.3 Llamado al 1.3.2.3 Llamado al supersuper() para () para ObjectObject()()

1.3.2.3.1 Vinculaci1.3.2.3.1 Vinculacióón no es necesarian no es necesaria

1.3.2.3.2 No existe llamado explicito a 1.3.2.3.2 No existe llamado explicito a thisthis

1.3.2.3.3 No existe llamado a 1.3.2.3.3 No existe llamado a supersuper ((ObjectObject es la es la raizraiz))

1.3.2.3.4 No existe inicializaci1.3.2.3.4 No existe inicializacióón explicita de variables para n explicita de variables para ObjectObject

1.3.2.3.5 No existe cuerpo en el constructor llamado1.3.2.3.5 No existe cuerpo en el constructor llamado

1.3.2.4 inicializaci1.3.2.4 inicializacióón explicita de variables de Empleado: n explicita de variables de Empleado: salario=15000.00;salario=15000.00;

Ejemplo ConstrucciEjemplo Construcci óón e n e InicializaciInicializaci óónn

Page 169: Información básica Java

1.3.2.5 Ejecuta el cuerpo: nombre="Joe Smith"; 1.3.2.5 Ejecuta el cuerpo: nombre="Joe Smith"; fechaNacimientofechaNacimiento==nullnull;;

1.3.3 1.3.3 -- 1.3.4 Pasos saltados1.3.4 Pasos saltados

1.3.5 Ejecuta el cuerpo: No existe cuerpo en 1.3.5 Ejecuta el cuerpo: No existe cuerpo en Empleado(StringEmpleado(String))

1.4 No existe inicializaci1.4 No existe inicializacióón explicita de variables para n explicita de variables para AdministradorAdministrador

1.5 Ejecuta el cuerpo: departamento=1.5 Ejecuta el cuerpo: departamento=““Ventas"Ventas"

Ejemplo ConstrucciEjemplo Construcci óón e n e InicializaciInicializaci óónn

Page 170: Información básica Java

La clase La clase ObjectObject•• La clase La clase ObjectObject es la raes la raííz de todas las clases en z de todas las clases en

JavaJava

•• Una declaraciUna declaracióón que no tenga la cln que no tenga la clááusula usula extendsextends, , implica que hereda de implica que hereda de ObjectObject..publicpublic classclass EmpleadoEmpleado

•• Es equivalente a:Es equivalente a:publicpublic classclass Empleado Empleado extendsextends ObjectObject

•• Dos mDos méétodos importantes son:todos importantes son:

•• equalsequals()()

•• toStringtoString()()

Page 171: Información básica Java

El mEl m éétodo todo equalsequals•• El operador == determina El operador == determina ifif dos referencias son dos referencias son

iguales (esto es, referenciar al mismo objeto).iguales (esto es, referenciar al mismo objeto).

•• El mEl méétodo todo equalsequals determina si los objetos son determina si los objetos son iguales pero no necesariamente idiguales pero no necesariamente idéénticos.nticos.

•• La implementaciLa implementacióón de n de ObjectObject de el mde el méétodo todo equalsequalsusa el operador ==.usa el operador ==.

Page 172: Información básica Java

El mEl m éétodo todo equalsequals•• Usuarios de clases pueden sobrescribir el mUsuarios de clases pueden sobrescribir el méétodo todo

equalsequals para implementar una prueba especifica para implementar una prueba especifica para igualdad.para igualdad.

•• Nota: Nota: UdUd deberdeberíía sobrescribir el ma sobrescribir el méétodo todo hashCodemethodhashCodemethod si sobrescribe el msi sobrescribe el méétodo todo equalsequals..

Page 173: Información básica Java

Un ejemplo de Un ejemplo de equalsequalspublicpublic classclass MiFechaMiFecha {{

privateprivate intint diadia;;

privateprivate intint mes;mes;

privateprivate intint anioanio;;

publicpublic MiFecha(intMiFecha(int diadia, , intint mes, mes, intint anioanio) {) {

this.diathis.dia = = diadia;;

this.mesthis.mes = mes;= mes;

this.aniothis.anio = = anioanio;;

}}

Page 174: Información básica Java

Un ejemplo de Un ejemplo de equalsequalspublicpublic booleanboolean equals(Objectequals(Object o) {o) {

booleanboolean resultado = resultado = falsefalse;;

ifif ( (o != ( (o != nullnull) && (o ) && (o instanceofinstanceof MiFechaMiFecha) ) {) ) {

MiFechaMiFecha d = (d = (MiFechaMiFecha) o;) o;

ifif ( (( (diadia == == d.diad.dia) && (mes == ) && (mes == d.mesd.mes) && () && (anioanio == == d.aniod.anio) ) {) ) {

resultado = resultado = truetrue;;

}}

}}

returnreturn resultado;resultado;

}}

Page 175: Información básica Java

Un ejemplo de Un ejemplo de equalsequalspublicpublic intint hashCodehashCode() {() {

returnreturn ((diadia ^ mes ^ ^ mes ^ anioanio););

}}

}}

Page 176: Información básica Java

Un ejemplo de Un ejemplo de equalsequalsclassclass TestEqualsTestEquals {{

publicpublic staticstatic voidvoid main(Stringmain(String[] [] argsargs) {) {

MiFechaMiFecha fecha1 = fecha1 = newnew MiFechaMiFecha(14, 3, 1976);(14, 3, 1976);

MiFechaMiFecha fecha2 = fecha2 = newnew MiFechaMiFecha(14, 3, 1976);(14, 3, 1976);

ifif ( fecha1 == fecha2 ) {( fecha1 == fecha2 ) {

System.out.printlnSystem.out.println("fecha1 id("fecha1 idééntica a fecha2");ntica a fecha2");

} } elseelse {{

System.out.printlnSystem.out.println("fecha1 no es id("fecha1 no es idééntica a fecha2");ntica a fecha2");

}}

Page 177: Información básica Java

Un ejemplo de Un ejemplo de equalsequalsifif ( fecha1.( fecha1.equals(fecha2equals(fecha2) ) {) ) {

System.out.printlnSystem.out.println("fecha1 es igual a fecha2");("fecha1 es igual a fecha2");

} } elseelse {{

System.out.printlnSystem.out.println("fecha1 no es igual a fecha2");("fecha1 no es igual a fecha2");

}}

System.out.println(System.out.println(““fijarfijar fecha2 = fecha1;");fecha2 = fecha1;");

fecha2 = fecha1;fecha2 = fecha1;

Page 178: Información básica Java

Un ejemplo de Un ejemplo de equalsequalsifif ( fecha1 == fecha2 ) {( fecha1 == fecha2 ) {

System.out.printlnSystem.out.println("fecha1 es id("fecha1 es idééntica a fecha2");ntica a fecha2");

} } elseelse {{

System.out.printlnSystem.out.println("fecha1 no es id("fecha1 no es idééntica a fecha2");ntica a fecha2");

}}

}}

}}

Page 179: Información básica Java

Un ejemplo de Un ejemplo de equalsequals•• Este ejemplo genera la siguiente salida: Este ejemplo genera la siguiente salida:

fecha1 no es idfecha1 no es idééntica a fecha2ntica a fecha2

fecha1 es igual a fecha2fecha1 es igual a fecha2

fijar fecha2 = fecha1;fijar fecha2 = fecha1;

fecha1 es idfecha1 es idééntica a fecha2ntica a fecha2

Page 180: Información básica Java

El mEl m éétodo todo toStringtoString•• El mEl méétodo todo toStringtoString() tiene las siguientes () tiene las siguientes

caractercaracteríísticas:sticas:–– Este mEste méétodo convierte un objeto en un todo convierte un objeto en un StringString

–– Este mEste méétodo se usa durante la concatenacitodo se usa durante la concatenacióón de n de StringString

–– Sobrescribir este mSobrescribir este méétodo para proveer informacitodo para proveer informacióón sobre n sobre un objeto definido por el usuario en formato legible.un objeto definido por el usuario en formato legible.

–– Usado por las clases Usado por las clases wrapperswrappers ((toStringtoString staticstatic mméétodo) todo) para convertir tipos primitivos a para convertir tipos primitivos a StringString..

Page 181: Información básica Java

Clases Clases WrapperWrapper•• Mirando elementos de tipo primitivo como un Mirando elementos de tipo primitivo como un

objetoobjeto

Clase Clase wrapperwrapperTipo de dato primitivoTipo de dato primitivo

DoubleDoubledoubledouble

FloatFloatfloatfloat

LongLonglonglong

IntegerIntegerintint

ShortShortshortshort

CharacterCharactercharchar

ByteBytebytebyte

BooleanBooleanbooleanboolean

Page 182: Información básica Java

Clases Clases WrapperWrapper•• Un ejemplo para la clase Un ejemplo para la clase wrapperwrapper es:es:

intint pIntpInt = 420;= 420;

IntegerInteger wIntwInt = = newnew Integer(pIntInteger(pInt); // Esto es llamado ); // Esto es llamado boxingboxing

intint p2 = p2 = wInt.intValuewInt.intValue(); // Esto es llamado (); // Esto es llamado unboxingunboxing

•• Otros mOtros méétodos son:todos son:intint x = x = Integer.valueOf(strInteger.valueOf(str).).intValueintValue();();

intint x = x = Integer.parseInt(strInteger.parseInt(str););

Page 183: Información básica Java

AutoboxingAutoboxing de tipos de tipos primitivosprimitivos

•• AutoboxingAutoboxing tiene la siguiente descripcitiene la siguiente descripcióón:n:

•• ConversiConversióón de tipos primitivos a los objetos n de tipos primitivos a los objetos equivalentesequivalentes

•• Las clases Las clases wrapeswrapes no son siempre necesariasno son siempre necesarias

•• Ejemplo:Ejemplo:intint pIntpInt = 420;= 420;

IntegerInteger wIntwInt = = newnew Integer(pIntInteger(pInt); // Esto es ); // Esto es autoboxingautoboxing

intint p2 = p2 = wInt.intValuewInt.intValue(); // Esto es (); // Esto es autoboxingautoboxing

Page 184: Información básica Java

AutoboxingAutoboxing de tipos de tipos primitivosprimitivos

•• WrappedWrapped primitivos tambiprimitivos tambiéén son usables en n son usables en expresiones aritmexpresiones aritmééticas.ticas.