You are on page 1of 131

Lenguaje java

Copyright (c) 2007, Jose Daniel Gutirrez Porset josedaniel.gutierrez@ehu.es

Licencia de Uso
Acerca de este documento Copyright (c) 2007, Jose Daniel Gutirrez Porset josedaniel.gutierrez@ehu.es Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los trminos de la Licencia de Documentacin Libre de GNU en su versin 1.2 o cualquier otra versin posterior publicada por la Free Software Foundation, siendo todo l invariante. Una copia de la licencia est disponible en la web de la Free Software Foundation, dentro de la seccin titulada GNU Free Documentation License. Este documento ha sido realizado ntegramente con software libre.

ndice

Licenciadeusodeestedocumento Introduccinalaprogramacinorientadaaobjetos Introduccinalatecnologajava Sintaxisbsica FuncionesbsicasdeE/S ClasesyObjetos Herencia Interfaces ArraysyStrings Paquetes Excepciones

Introduccin a la OOP
Formasdeprogramacin:

Procedural:dividecadatareadeunprogramaenunconjuntode estructurasdedatosyfunciones OrientadaaObjetos(OOP):dividecadatareadeunprogramaen unconjuntodeobjetosquetienenasociadosatributosymtodos

Loslenguajespuedensermezcladeambastcnicas. EjemplosdelenguajesquetienenOOP: smalltalk,C++,java,python,ruby,C#,php5

Introduccin a la OOP
Conceptos

Clase:abstraccindelasentidadesdelavidareal, incluyendo:

Atributosocaractersticasdelaclase Mtodosuoperacionesrealizablessobrelaclase.

(Miembros=atributos+mtodos)

Objeto:instanciaconcretadeunaclase Mensaje:loqueseintercambiaentreobjetos

Introduccin a la OOP
Conceptos

Herencia:posibilidaddequeunaclaseadquieraatributos y/omtodosdeotrayaexistente,pudiendoadems aadirseotrosmiembros,yredefinirsemtodosheredados. Alaclasemadreselellamasuperclaseyalahija subclase. Polimorfismo:mtodosconigualnombreimplementan distintasfuncionalidadessegnlasclasessobrelasquese apliquen.Conceptorelacionado:sobrecarga Encapsulamiento:ocultacindecdigoydatosdeobjetos

Introduccin a la tecnologa java


Caractersticas generales del lenguaje

Esmuchomsqueunlenguaje Especificacincompletadellenguaje: http://java.sun.com/docs/books/jls/ Msinformacinen:


http://java.sun.com/j2se/1.5.0/docs/guide/language/ http://en.wikipedia.org/wiki/Java_%28programming_language%29 http://en.wikipedia.org/wiki/Java_version_history

Nacidoenladcadade1990.Antepasado:OAK

Introduccin a la tecnologa java


Caractersticas generales del lenguaje

Orientadoaobjetos Lenguajecompilado(bytecodes)einterpretado(JVM).

JVM:Eselintrpretedebytecodesacdigobinarionativo decadaplataforma. LaJVMestimplementadaenbastantesplataformasHWydeS.O. ysehabladeindependenciadeplataforma.Ej:telfonosmviles Apesardeello,tambinhay:

Compiladorespurosparajavaquetraducenelcdigofuenteacdigo mquinanativo. PluginsJIT(JustInTime)paralaJVMqueaceleranlaejecucinenla JVMmediantelacompilacindebytecodesacdigomquinanativo.

Proporcionaherramientasylibrerasparadesarrollar cdigodistribuido(ej.RMI)

Introduccin a la tecnologa java


JVM
Programa fuente F.java

Compilacin

Byte-codes

Clase1.class Clase2.class ClaseN.class

Mquina 1

Mquina 2

Mquina 3

JVM para la mquina 1

JVM para la mquina 2

JVM para la mquina 3

Interpretacin

Interpretacin

Interpretacin

Cdigo mquina 1

Cdigo mquina 2

Cdigo mquina 3

Introduccin a la tecnologa java


JVM

Gestindelamemoria:

Elprogramadornohadeliberarmemoria.EstolohacelaJVM medianteelrecolectordebasura(garbagecollector),lanzando unthreaddeformaautomtica. Nohaypunteros.MsseguroqueC.

Gestindelcdigoenejecucin:

Cargadinmicaydistribuida:distintaspartesdeunprogramase vancargandosegnsevannecesitando,ypuedenestaren mquinasdiferentes. Ejecucindehilosparalelos(threads)consincronizacin.Mejor rendimientoparalosprocesadoresdehoyenda


10

Accesoahardwarerestringido(slomediantemtodos nativosdeotroslenguajes,noutilizablesporapplets)

Introduccin a la tecnologa java


JVM

Seguridad:

Comprobacindepunterosydelmitesdearrays Excepciones Verificacindebytecodes


Nodesbordamientosdepila Parmetrosconocidosycorrectos Noconversionesilegalesdetipos Accesoslegalesaatributos/mtodosdeobjetos Nointentosdeviolarnormasacceso/seguridad Separaelespaciodenombreslocaldelosrecursosprocedentesdelared NocaballosdeTroya.Lasclasessebuscanprimeroentrelaslocalesy luegoenexteriores

Cargadordeclases:

Aperturadeficherosyarranquedeotrasaplicacionesenmquina11 remota,noenlocal

Introduccin a la tecnologa java


JVM

Distinguir:

Especificacin Implementacin.Ej.SunHotSpot(1999)escritaenC++

Msinfoen:

http://en.wikipedia.org/wiki/Java_Virtual_Machine http://en.wikipedia.org/wiki/List_of_Java_virtual_machines http://en.wikipedia.org/wiki/HotSpot

12

Introduccin a la tecnologa java


Comparacin con C

AlgunasdiferenciasconC:

Notienepreprocesadonificherosdecabecera Nohayestructuras Gestindememoriaautomtica(garbagecollector). Nohaypunteros. Noesposibleaccederaelementosfueraderango(stringsyarray)

Engeneral:

Msseguro Mslentoporserintepretado,aunquehaycompiladoresJIT (pierdeportabilidad)


13

Introduccin a la tecnologa java


Aplicaciones

Programasstandaloneconvencionales.Ej.

Softwareparatelfonosmviles SoftwareparaPC(WindowsoGNU/Linux),ej.azureus Softwareparaservidor,ej.pginaswebdinmicasgeneradaspor unservidorqueejecuteservletsojsp

Applets:programasejecutadosenunnavegadorwebque tengacargadounplugin AplicacionesdetipoJavaWebStart,descargadasatravs deinternetsinnecesidaddeunnavegador.

14

Introduccin a la tecnologa java


Interfaces grficos de usuario

Principales:

AWT(deSun)eselmsantiguo Swing(deSun) SWT(deIBMEclipse).Aparienciadelaplataformasobrelaque corre.

Bindingsparaentornosgrficosespecficos,ej.KDE/qt, GNOME/gtk,...

15

Introduccin a la tecnologa java


Tecnologas Java de Sun

SuntienedistintasfamiliasdeTecnologas:

JavaPlatform,MicroEdition (JavaME):dispositivosej.mviles JavaPlatform,StandardEdition (JavaSE):entornosworkstation JavaPlatform,EnterpriseEdition (JavaEE):entornosdistribuidos Otras:JavaCard,...

Verhttp://java.sun.com/reference/api

16

Introduccin a la tecnologa java


Tecnologas Java de Sun - Familia SE

17

Introduccin a la tecnologa java


Tecnologas Java de Sun - Familia SE

Tienedospartes:

Elentornodeejecucin(JRE)constade:

Librerasjava(bytecodesdelospaquetescompilados)oAPIs (ApplicationProgramInterface) JVMHotspot Pluginsparaejecutarlosappletsenlosnavegadores EntornoJavaWebStartparadescargarylanzaraplicacionesjavaa travsdeinternetsinnecesidaddeunnavegador. DocumentacinyLicencia

Elentornodedesarrollo(JDK)incluyeherramientascomo: Compiladorjavac,javadoc,depuradorjdb,desensambladorjavap,...

Licencia:enNov'06Sunliberaelcompiladorjavac,laJVMyla herramientadeayudasbajolicenciaGPL2.Faltanalgunas libreras,debidoaquenofuerondesarrolladasdirectamentepor 18 Sun.TambindejabajoGPLv2JMEyJEE

Introduccin a la tecnologa java


Tecnologas Java de Sun - APIs

Referencia:http://java.sun.com/reference/api/ Ej.JavaSEversin6:http://java.sun.com/javase/6/docs/api/ Zonasdeintersenlapgina:


Arribaizda:ListadodePaquetes Abajoizda:ListadodeClaseseInterfacesdecadapaquete Derecha:


Visingeneraldetodoslospaquetes Paquetedeunaclaseseleccionada Claseypaquetesenqueseusa rboljerrquico Especificacionesanticuadas,ndiceyayuda


19

Introduccin a la tecnologa java


(Otros Productos no Sun)

Runtime:

JVMs:

Libres/opensource:Kaffe,SableVM,GNUgcj/gij,Apacheharmony, Blackdown(provienedepersonasvoluntariasdeSun),... Privativas:IBM,HP,Apple,BEASyst.,...

Libreras:GNUClasspath(implementacinlibredelasclasesde Java,casitodaslasdeSunversin1.5)

Desarrollo:

IDEs(IntegratedDevelopmentEnvironment):IBMEclipse,Sun Netbeans,jedit Compiladores:GNUgcj(puedegenerarnoslobytecodessino tambincdigonativo,ej:gcj H1.java --main H1),jikes Otrasherramientas:proyectos(ant),paquetes(fastjar), appletviewer,...


20

Introduccin a la tecnologa java


Procedimiento bsico de desarrollo

Edicindelfuente,ej:
emacs NombreClasePublica.java

Compilacin:unficherofuentedaorigenatantos ficheros.classcomoclases+interfacescontenga,sean privadasopblicas.


javac NombreClasePublica.java

Ejecucin:java NombreClasePublica Siseusanpaquetes(vercaptulocorrespondiente):


LavariabledesistemaCLASSPATHdebeestaralvaloradecuado. Paraejecutarelmaindeunaclasenopertenecientealpaquetepor defecto:java nombrePaquete.NombreClasePublica


21

Sintaxis bsica
Caractersticas generales

Lenguajecasesensitive Tipodelneasdeunficherofuente:ademsdelasdeC, nuevocomentario:

Unaomslneasentre/**y*/paragenerardocumentacin

22

Sintaxis bsica
Variables y constantes

Constande:

Identificadoroetiqueta. Valor.Valorinicial. mbito:zonadelprogramadevalidez. Modificador:elementosintcticoparaindicarcaractersticascomo ej.mbitodeacceso,siesconstanteovariable,... Tipo:sedividenentiposprimitivosytiposreferencia Nointeresaladireccinenmemoria.

23

Sintaxis bsica
Variables y constantes Clasificacin

Atributodeunobjetoodeunaclase.

mbito:segnmodificadoresdembitodelatributoydesuclase Inicializacinpordefecto:verlistadetipos

Localesaunmtodo.

mbito:elmtodo Inicializacinpordefecto:noseinicializanyhayquedarlesalgn valorantesdeserusadas;sinoerrordecompilacin

Parmetrosdeunmtodoodeungestordeexcepciones.

mbito:elmtodo Inicializacin:elvalordelallamada.
24

(Nohayvariablesglobalesnimodulares)

Sintaxis bsica
Variables y constantes locales Declaracin

Sintaxisdedeclaracin:

Variablelocal:
<tipo> <identificador> [=<valor>];

Constantelocal:sehadeinicializarenladeclaracin;despusno sepuede.
final <tipo> <identificador>=<valor>;

(Portanto,elnicomodificadorvlido,yqueeselque estableceladiferenciaentreambas,esfinal.Nopuede haberej.static)

25

Sintaxis bsica
Variables y constantes Identificadores

Normasdeidentificadores:idemqueenC,salvoquelas variablespuedenempezarconoincluir$(noestpico) Convencinparaidentificadores:

Lasvariablesempiezanporunaletraminscula.Siunidentificador estcompuestopormsdeunapalabra,laspalabrasseponen juntasylainicialdelasegunda,tercera,...palabraseponeen mayscula.Ej.nombreDato Lasconstantesseescribenenmaysculas.Sitienevariaspalabras seseparancon_Ej:NUM_MAX

26

Sintaxis bsica
Variables y constantes Tipos primitivos

Hay8tiposprimitivos:
Palabra clave byte short int Tamao 1 byte 2 bytes 4 bytes Comentario Con signo Con signo Con signo Valor por defecto 0 0 0 Ejs. de Literales -2 10000 100000 032 (octal) 0x1F (hexadecimal) 3123456789 123.4f 12.4F 12.3 -124.678d 14.678D 1.234e2 1.23E4 \b \t 'x' '\u0108' \n \r \f \ true false \' \\

long float double

8 bytes 4 bytes 8 bytes

Con signo IEEE 754 IEEE 754

0L 0.0f 0.0d

char

2 bytes

Carcter unicode, desde '\u0000' a '\uffff' Sin signo true / false

'\u0000'

boolean

1 bit o 1 byte

false

27

Sintaxis bsica
Variables y constantes Tipos referencia

Untiporeferenciaindicaqueenlavariableseguardarun objetooinstanciadeunaclase. Ocupanelndebytesnecesariosparaalmacenaruna direccin,ydependedelaarquitectura. Seinicializananull. Slopuedeguardarvaloresdeuntipo,(aunquehaycasosen quepuedenserdedetiposdistintos;veranexodeherenciay conversionesentretiposreferencia)ej:


Computer pc; String cadena; cadena=pc; //ERROR
28

Sintaxis bsica
Literales

(losindicadosenlatabladetiposdedatos) Cadenadecaracteres:entrecomillasdobles,ej.cadena

29

Sintaxis bsica
Operadores - Comparacin con C

Nuevosoperadoresbinarios:

op1>>>op2Desplazalosbitsdeop1sinsignoaladerecha,op2 posiciones.Antes,siop1tienemenosbitsqueunintseconviertea int. op1=>>>op2Idemhaciendoasignacinaop1 op1 instanceof op2Determinasiop1esunobjetodeclaseop2

Casting:(slotienesentidoentretiposprimitivos)

Sisevaaperderprecisindaerroralcompilar(castingobligatorio) Eltipobooleannoesconvertiblealrestodetiposyviceversa.

Noexisten:

Operadoresdepunterosymemoria:*&>sizeof Operadorcoma,
30

Sintaxis bsica
Operadores - Tabla de precedencia
Grupo Expresiones varias Operadores unarios Operador () . [] expr++ expr-+ - ! ~ ++expr --expr (typecast) new */% +>> << >>> < > <= >= instanceof == != & ^ | && || ?: = += -= *= /= %= >>= <<= >>>= &= ^= |=
31

Operadores binarios

Operador ternario Asignacin

Sintaxis bsica
Sentencias de control de flujo - Comparacin con C

Condicionales:ejecutanunasolavezunaovariaslneasde cdigodependiendodeunacondicin

if switch

Repetitivas:ejecutanvariasvecesunaovariaslneasde cdigodependiendodeunacondicin

while dowhile for

Entodosloscasoslacondicinhadeserdetipoboolean (nocomoenC)
32

Sintaxis bsica
Funciones - Comparacin con C

Unafuncinnoexisteporindependientesinoqueesparte deunaclase(mtododeunaclase). Pasodeargumentosporvalor(noobstante,para parmetrosdetiporeferenciaspuedehabermodificacin decontenidosapuntados) Sobrecargademtodos:puedehabermtodosconun mismonombrequeejecutandistintocdigo(hacedistintas funcionalidades),ysediferenciansegnelnylostiposde argumentos. Ej:
En C v o id m o s t ra r In t ( in t i) v o id v o id m o s t ra r Lo n g ( lo n g l)v o id v o id m o s t ra r Flo a t ( f lo a t f) o id v E n Ja v a m o s t r a r ( in t i) m o s t r a r ( lo n g l) m o s t r a r ( f lo a t f)

33

Sintaxis bsica
Otras palabras reservadas

Javareservaestaspalabrasparaelfuturo(demomentono tienenunusoespecfico):
byvalue generic outer cast goto rest const inner var future operator

34

Funciones bsicas de E/S


Salida por stdout

ElatributooutdelaclaseSystem(queestenelpaquete java.lang)esdeclasePrintStream(queestenelpaquete java.io),lacualtienevariosmtodosparasacarinformacin porstdout,delaforma:


println (...) Incluyesaltodelnea. Verhttp://java.sun.com/javase/6/docs/api/java/io/PrintStream.html Ej:
System.out.println(Kaixo,+ mundu);

35

Funciones bsicas de E/S


Entrada por stdin

ElatributoindelaclaseSystem(queestenelpaquete java.lang)esdeclaseInputStream(queestenelpaquete java.io),lacualtienevariosmtodosparaleerporstdin,de laforma:


read (...) throws IOException Verhttp://java.sun.com/javase/6/docs/api/java/io/InputStream.html Ej:
public static void main (String [] args) throws IOException { byte b[]=new byte[12]; System.in.read(b, 0, b.length); }

Otraclasedeintersenlaversin6:java.lang.Console

36

Clases y Objetos
Introduccin

Clase:abstraccindelasentidadesdelavidareal, incluyendo:

Atributosocaractersticasdelaclase Mtodosuoperacionesrealizablessobrelaclase.Enjavanoexiste cdigofueradelosmtodos.

(Miembros=atributos+mtodos)

Nomenclaturaporconvenio:

Lasclasescomienzanporletramayscula. Losmtodosempiezanporminscula. Siunidentificadortienemsdeunapalabra,seponenjuntasyla inicialdelasegunda,tercera,...palabravaenmayscula.Ejs. ClasePrincipal,abrirPuerta,... Losatributossiguenelcriteriodadoparavariablesyconstantes

37

Clases y Objetos
Definicin de una clase

Sintaxis:
<declaracin de la clase> { <cuerpo de la clase> }
(laprimerallavepuedeirenlasiguientelnea)

siendo<declaracin de la clase>:
[<modificadoresClase>] class <NombreClase> [extends <NombreSuperclase>] [implements <ListaInterfaces>] (extendseimplementssevernmsadelante)

y<cuerpo de la clase>:

Declaracindeatributos Declaracinycuerpodemtodos
38

Clases y Objetos
Declaracin de una clase modificadores de clase

Modificadores:

Sihayvariosseseparanporespacios Posiblesvalores:

Modificadordembito:public Otrosmodificadores:unodestos(sonexcluyentes):abstract,final

public:

Slolasclasesdeclaradasaspuedenseraccedidasdesdeclasese interfacesqueestnenotrospaquetes.Ysinoespubliclaclase puedeseraccedidaslodesdelasclaseseinterfacesdelpaqueteal quepertenece,peronodesdelasdeotropaquete Todaclasepblicahadeestardefinidaenunficherofuentecon nombrecoincidenteconeldelaclase.Portanto,nopuedehaber otrasclasespblicasointerfacespblicasenunficherofuente.

39

Clases y Objetos
Declaracin de una clase modificadores de clase

abstract:

Defineclasesquenopuedenserinstanciadas.Suusoescomo superclasesdeotras. Siunaclaseesabstractpuedetenermtodosnoabstract,perosi algnmtodoesabstractlaclasehadeserabstract

final:

Deellanosepuedenderivarsubclases.Utilidadej.seguridad. Sialgnmtododeunaclaseesfinal,laclasenotieneporquser final

40

Clases y Objetos
Cuerpo de una clase declaracin de atributos

Sintaxisparacadaatributo: Modificadores:

[<modificadores de atributo>] <tipo> <nombreAtributo>[=valor];

Sihayvariosseseparanporespacios Posiblesvalores:

Modificadoresdembito:unvalordeentrestos: public,protected,friendly(oninguno),private Otrosmodificadores:unoovariosdeentrestos: static,final,transient,volatile

41

Clases y Objetos
Cuerpo de una clase modificadores de atributos

public:

Elatributoesaccesibledesde(mtodosde)cualquierclase,siempre quenotengaunarestriccinpormodificadordeclasenopublic.

protected:

Elatributopuedeseraccedidodesdesubclasesqueloheredany tambindesdeclasesdelmismopaquete

friendly:

Elatributopuedeseraccedidodesdeclasesdelmismopaquete Eselvalorpordefectodemodificadordembito

private:

Elatributoslopuedeseraccedidodesdelamismaclase
42

Clases y Objetos
Cuerpo de una clase modificadores de atributos

final:

Elvalordelatributoesconstanteyseinicializaensudeclaracin.

static:

Esunatributodeclase(nodeinstancia),yalmacenaelmismo valorparatodoslosobjetosdelaclase. Noesnecesariocrearunobjetodelaclaseparaaccederal atributo,ytambinsepuedeaccederalmismoinvocando:


<NombreClase>.<nombreAtributo>

43

Clases y Objetos
Cuerpo de una clase modificadores de atributos

transient:(pocousadoenestaasignatura)

Indicaqueelatributoalmacenainformacinnopersistentedel objeto,yenunprocesodealmacenamientonoseguardara.

volatile:(pocousadoenestaasignatura)

Elatributoalmacenavaloresmodificablespordistintosthreads.

44

Clases y Objetos
Cuerpo de una clase mtodos

Enunaclasepuedehabervariosmtodosconigualnombre quesediferencienenlalistadeparmetros(notipos). Sintaxis:


<declaracin del mtodo> [{ <cuerpo del mtodo> }] [;]
(laprimerallavepuedeirenlasiguientelnea)

siendo<declaracin del mtodo>: [<modificadoresMtodo>] [<tipo>] <nombreMtodo> ([<listaParmetros>])[throws <ListaExcepciones>]


(throwssevermsadelante)
45

Clases y Objetos
Cuerpo de una clase modificadores de mtodos

Modificadores:

Sihayvariosseseparanporespacios Posiblesvalores:

Modificadoresdembito: Unvalordeentrestos(oningunoequivalenteafriendly): public,protected,friendly,private Secomportandeformaidnticaalcasodeatributos Otrosmodificadores:unoovariosdeentrestos:


static,abstract,final,native,synchronized Nosepermitenestascombinaciones:

abstractyfinal abstractystatic
46

Clases y Objetos
Cuerpo de una clase modificadores de mtodos

abstract:

Slosedebeespecificarsudeclaracinoprototipo,peronoel cuerpoquesereemplazapor; Sihayalmenosunmtodoabstractlaclasehadeserabstract Elsentidodeunmtodoabstractesdeclararunmtodoencuanto aparmetros,perodejarquelassubclasesloimplementen. (MsencaptulodeHerencia)

final:

Elmtodonopuedeserredefinidoensubclases.

47

Clases y Objetos
Cuerpo de una clase modificadores de mtodos

static:

Esunmtododeclase(nodeinstancia) Noesnecesariocrearunobjetodelaclaseparaaccederalmtodo, ytambinsepuedeaccederalmismoinvocando: <NombreClase>.<nombreMtodo> Sielmtodoseredefineensubclasesenstashadeserstatic. Siaccedeaatributosy/omtodosdelaclasealaquepertenece, handeserstatic.

48

Clases y Objetos
Cuerpo de una clase modificadores de mtodos

native:(pocousadoenestaasignatura)

Escritoenunlenguajedeprogramacindistintoajava(ej.C). Elmtodonotienecuerpo.

synchronized:(pocousadoenestaasignatura)

Slopuedehaberunmtodosynchronizedenejecucinpara cadaclase.Tieneunafuncindebloqueo.Ej.deuso:enthreads.

49

Clases y Objetos
Cuerpo de una clase tipo y parmetros de mtodos

tipo:unadeestasposibilidades:

Eltipodevuelto(conreturn)obienvoidsinodevuelvenada. Siseindicauntipoynosedevuelveunvalordelmismodaerror encompilacin. Enlosmtodosconstructoresnohayqueponernada(nivoid)

Listadeparmetros:idemqueenC.Diferencia:sinorecibe parmetrosnoseindicanada(voiddaerror).

50

Clases y Objetos
Cuerpo de una clase cuerpo de mtodos

Instruccionesentre{y}salvosielmtodoesabstracten cuyocasosesustituyenpor; Elcuerpodeunmtodopuedeestarvaco(ninguna instruccinentre{y})peronoporelloesabstract. Tendronoreturnsegndevuelvaalgoono.

51

Clases y Objetos
Acceso a atributos y a mtodos

Siseaccedeaatributos/mtodosdelamismaclase,sean staticono:
<nombreAtributo> <nombreMetodo>([params])

Siseaccedeaatributos/mtodosdeotraclase:
<objeto>.<nombreAtributo> <objeto>.<nombreMetodo>([params])

Siseaccedeaatributos/mtodosstaticdeotraclase,otra posibilidades:
<NombreClase>.<nombreAtributo> <NombreClase>.<nombreMetodo>([params])

Otrasposibilidades(msadelante):conthisysuper

52

Clases y Objetos
Mtodo main

Todoprogramaejecutablestandalone(noapplet)hade tenerunaclasepblicaenlaquesedeclareunmtodo llamadomaindeestaforma:


public static void main (String[] args)

Comentarios:

public:poraccederdesdefueradelpaquete static:paraaccederllamndoledesdelaclase(nodesdeunobjeto concreto).Portanto,nopodrallamaramtodosnoestticosdela mismaclase. Conlosargumentosindicados(sino,seraunmtododiferente): arraydestrings


53

Clases y Objetos
Constructores

Sonmtodosespecialesdeunaclasequesirvenpara inicializarobjetos. Siempresonllamadosdurantelacreacindelosmismos, explcitamente(concdigo)oimplcitamente(deforma internadesdelaJVM). Elconstructornocreanuevasinstanciasdeclases,sinoque slolasinicializa. Puedehabermsdeunconstructor,diferencindoseentre ellosenlalistadeparmetros,graciasalapropiedadde polimorfismo.

54

Clases y Objetos
Constructores Sintaxis

Sintaxisdelconstructor:

[<modificadoresMtodo>] <NombreClase> ([<listaParmetros>]) [throws<ListaExcepciones>] { <cuerpo del constructor> }

Diferenciaconotrosmtodos:

Noseindicatipo ElnombrecoincideconeldelaClase

55

Clases y Objetos
Constructores Sintaxis

Cuerpodelconstructor:

Unconstructornodevuelvenada(peropodraemplearreturn sinningunaexpresinacontinuacinpara,ej.salirdelmtodo). Desdeunconstructoresposibleinvocaraotroconstructordela mismaclase(verusosdethis)odelaclaseinmediatamente superior(verherencia).Condiciones:

Slopuedehacerselallamadaenlaprimeralnea.Portantono puedehabermsdeunallamadaaunconstructordelosindicados. Lalistadeargumentosnopuedeincluirreferenciasaatributosdela clase.

56

Clases y Objetos
Constructores Constructor por defecto

Esaqulalquenoselepasaningnparmetro. Sinosedefineningnconstructorparaunaclase,Javacrea elconstructorpordefecto(poresonoesobligatoriodefinir elconstructordecadaclase),elcualinicializatodoslos atributosasusvalorespordefecto.Ej:


public class Point {int x, y;}

equivalea:
public class Point { int x, y; public Point() { super(); } }

Excepcinaloanterior:sisedefinealgnotroconstructor paraunaclase,Javanocreaelconstructorpordefectoyes necesariodefinirlosisequiereusar.

57

Clases y Objetos
Constructores invocacin

Parainvocaraunconstructor(elqueespordefectou otros):
Clase() Clase(<lista1Parmetros>) Clase(<lista2Parmetros>) ...

Puedequealgunosconstructoresdeunaclasesean accesiblesyotrosno.Habrqueinicializarobjetos invocandoalconstructoradecuado. Nosepuedeinvocaraunconstructorconthisosupersi noesdesdeotroconstructordelamismaclase


58

Clases y Objetos
Creacin de objetos

Paracrearunobjetodeunaclasesesiguendospasos:

Declaracindesutiporeferencia.Conestosecreaunareferencia: sereservamemoriaparaalmacenarslolareferencia. Creacineinicializacinllamandoaalgnconstructormediante new Clase(<listaParmetros>):

MediantenewlaJVMreservamemoriaparaalmacenarelnuevo objeto. Medianteelconstructorelnuevoobjetoesinicializado.

Ej:
ClaseA objeto1, objeto2; objeto1 = new ClaseA(); objeto2 = new ClaseA(parm1, parm2); ...
59

Clases y Objetos
Asignacin y copia de objetos

Alempleareloperadorasignacinentrereferenciasa objetos:

Seasignaunanuevareferenciaalobjetorepresentadoporla referenciaorigen(quedandodosreferenciasapuntandoalmismo). Elobjetoantesapuntadoporlareferenciadestinopuedequeyano seatil(ej.sinotienereferenciasqueapuntenalmismo),encuyo casoelgarbagecollectorliberarsumemoria. Nosecreaunnuevoobjeto(paraesto,habraqueemplearun mtodollamadoclone).

Ej:
Punto a1,a2; //se declaran dos referencias a objetos a1=new Punto(4,6); //se crea el primer objeto a2=new Punto(3,42); //se crea el segundo objeto a1=a2; //el antiguo objeto Punto(4,6) es desechable

60

Clases y Objetos
Asignacin y Conversin entre Tipos referencia distintos

Esposiblehacerasignacionesyconversionessincastingentre objetosdetiposreferenciadistintoscuandoelorigen(derecha) desciendade/implementeeldestino(izquierda).

61

Clases y Objetos
Asignacin y Conversin entre Tipos referencia distintos

Casos:(s:origent:destino)

Sitesunasuperclasedes.Ej:
Transporte t; Bici s; t=s; //No es necesario t=(SuperClase)s;

Consecuenciadelanterior:sitesdeclaseObjectysescualquier array,claseointerface. Sitesdetipointerfaceysesdeunaclaseointerfaceque implementa/extiendeelinterfacedet.Ej:


I t; ClaseQueImplementaI s1; t=s1; InterfaceQueExtiendeI s2; t=s2;

Entodosloscasosslosepodraccederalosmtodosdela superclaseosuperinterface,ynoaotros.

62

Clases y Objetos
Usos de this

thisesunareferenciaalpropioobjetoinstanciado Nopuedeaparecerdentrodeunmtodostatic Usos:

Paraaccederaunatributodelamismaclase,enelcasodequeel nombrecoincidaconalgnparmetroovariablelocaldelmtodo desdeelqueseaccede.Ej:


public int metodo(int x) { this.x=2*x; //siendo x un miembro }

Comoparmetrodeunmtodo.Ej:c.sumar(this); Parainvocaraunconstructordesdeotroconstructordelamisma clase,ej:


public Clase(int x, int y) {this(x,y,true); }
63

Clases y Objetos
Clases y ficheros fuente

Unficherofuente:

Puedecontenerunaclasepblica.Enestecasoelnombredel ficherohadeserdelaformaNombreClasePublica.java Puedenocontenerningunaclasepblica.Enestecasoelnombre delficheronoimporta. Encualquieradeloscasosanterioreselficheropuedecontener clasesnopblicas,queseranaccesiblessloparalasclasesdel mismopaquete. Nuncapuedecontenermsdeunaclasepblica.

64

Clases y Objetos
(Anexo: Varios clases)

Inicializadoresdeclaseydeinstancia (JLS8.6Instanceinitializers,8.7Staticinitializers) Tiposdeclases:


Clasetoplevel:lasqueestnfueradeotrasclasesydemtodos Claselocal:dentrodeunmtodo Clasemiembrooanidada:siunaclaseesunatributodeotraclase. Claseannima

65

Clases y Objetos
(Anexo: Clases anidadas)

Usos:

Agrupacinlgica Mayorencapsulacin,ej.accesoalosmiembrosdeunaclaseslo desdeotra

Clasificacin:

Estticas.Creacindeunobjeto:
ClaseExterna.ClaseEstatica o = new ClaseExterna.ClaseEstatica();

Noestticasoinner.Creacindeunobjeto:
ClaseExterna.ClaseInner o = objetoExterno.new ClaseInner();

Claseinnerlocal:declaradaenelcuerpodeunmtodo. Claseinnerannima:idemsinnombrarla
66

Herencia
Introduccin

Definicin:

posibilidaddequeunaclaseadquieraatributosy/omtodosde otrayaexistente, pudiendoademsaadirseotrosatributosy/omtodos, yredefinirsemtodosheredados.

Alaclasemadreselellamasuperclaseyalahija subclase. Utilidad:reutilizacindecdigoenbaseaqueunasclases separecenaotrasensusatributosymtodos. Lasclasessuperioresdescribenuncomportamientoms generalylassubclasesmsespecfico.


67

Herencia
Introduccin herencia en Java

Herenciasimple:unaclasetieneunayslounasuperclase (queserObjectsinoseexplicitaninguna). Seheredantodoslosatributosymtodosaexcepcinde losconstructores. Elaccesoaatributosymtodosdelasuperclasesepuede limitarmediantemodificadoresdembito. rbolAPISunJSE:


http://java.sun.com/javase/6/docs/api/java/lang/packagetree.html

68

Herencia
Sintaxis y limitaciones

Paraindicarqueunaclaseheredadeotraseempleaesta sintaxis:
...class <Subclase> extends <SuperClase>...

Condicin:enlasuperclasehadehaberalgnconstructor accesibleparalasubclase.Casos:

Siambasclasesestnenelmismopaquete,noimportasila superclaseesonopublic,perolasuperclasehadeteneralgn constructoraccesible,esdecirnoprivate.Puedeserelconstructor pordefectouotro. Siambasclasesnoestnenelmismopaquete,lasuperclasedebe serpublicyademshadeteneralgnconstructoraccesible,es decirpublicoprotected.


69

Unaclasefinalnopuedetenersubclases

Herencia
Clase Object

Todaslasclasesenjavadesciendendelaclase java.lang.Object(aunqueelprogramadornoloindiquecon extends),siendodichaclaselarazdetodaslasdems. Definicin: http://java.sun.com/javase/6/docs/api/java/lang/Object.html Mtodosdeintersredefiniblesporelprogramador:


public boolean equals(Object obj) public String toString()

Mtodosdeintersnoredefiniblesporelprogramador:
public final Class<?> getClass()
70

Herencia
Redefinicin de mtodos

Consisteencrearunmtodoenlasubclasecoincidenteen nombreyparmetrosconotromtododelasuperclase Condiciones:


Nosepuedenredefinirlosmtodosfinal Siunmtodostaticseredefineensubclasesenstashadeser tambinstatic. Siunmtodonostaticseredefineensubclasesenstasnopuede serstatic. Losmtodosredefinidospuedenampliarlosderechosdeacceso peronuncarestringirlos.

71

Herencia
Acceso a mtodos de la clase superior

Siseredefineunmtodo,esposiblellamaralmtodo originaldelasuperclaseinmediatamentesuperior(noms niveles)mediante:


super.<nombreMetodo>([parms])

Handecumplirseestascondiciones:

Queelmtododelasuperclaseseaaccesible Quenoseusesuperdesdeunmtodostatic

72

Herencia
Clases y mtodos abstract

Unaclasequederivedeotraclaseabstractconmtodos abstractpodr:

Redefinirtodosellos. Noredefinirtodosellos.Enestecaso,lasubclasetambinhabrde serabstract,yrespectoalosmtodosabstractquesehayan heredadoperonoredefinidohaydosposibilidades:

Volveradeclararlosconabstractigualqueenlasuperclase. Nodeclararlos.

73

Herencia
Constructores en clases derivadas

Unaclasenoheredalosconstructoresdesusuperclase. Unaclasepuedellamaralosconstructoresdesusuperclase delaforma:super([params]) Encasodequesehagaestallamada:

Slosepuedehacerdesdeunconstructor(nodesdecualquier mtodo). Elconstructorinvocadohadeseraccesible. Debeserlaprimerasentenciadelcuerpodedichomtodo,yenel restodelneasdelmtodonopuedellamarseaotroconstructorde lamismaclaseodelasuperclase. Lalistadeargumentosnopuedeincluirreferenciasaatributosde laclase.


74

Herencia
Constructores en clases derivadas

Sienelconstructordeunaclaseelprogramadornoincluye unallamadaaalgnconstructordelasuperclase,Java incluyedeformaautomticaunallamadaalconstructor pordefectodelasuperclase,ysistenoexistehayunerror decompilacin. As,cadavezqueseinicializaunobjetocualquiera:

Sevallamandoalosconstructoresdelassuperclases,biende formaexplcitaobienalconstructorpordefectodelasuperclase. SellegahastalaclaseObject,dondeseinicializaunobjetodela claseObject. Despus,seejecutanhaciaabajolosconstructoresdelrestodela jerarquadeclases,quevanaadiendolascaractersticasdecada una. 75

Herencia
(Anexo: Modificador protected)

SiunatributoomtododeunasuperclaseAtieneel modificadorprotected,entonceselaccesoalmismodesde unasubclaseBdeotropaqueteseronoposiblesegncmo sehagalareferenciaparaintentaracceder:

Sesposible:

<atributo>ythis.<atributo> super.metodo([<params>]) y super([<params>]) objeto.<atributo>siendoobjetodelaclaseA objeto.metodo([<params>])siendoobjetodelaclaseA.Tampoco esposiblesiobjetoesdeunaclaseCqueseasubclasedeAyhermana deB,yelmtodonoestredefinidoenCcomoaccesibleparaB. new A([<params>])siendoelconstructorAprotected


76

Noesposible:

Herencia
(Anexo: Redefinicin de atributos)

Sialhacerunasubclaseosubinterfaceseaadennuevos atributosdeigualnombrealosyaexistentes,(redefinicinde atributos),sedistinguenambosvalores,demodoque: Elaccesoaatributosnodependedelaclaseentiempode ejecucin;elaccesoamtodoss.


Ej:
class S { int x = 0; int z(){ return x;} } class T extends S { int x = 1; int z(){ return x;} } class Test { public static void main(String[] args) { T t = new T(); //t.z() y t.x valen 1 S s = new S(); //s.z() y s.x valen 0 s = t; //s.z() vale 1 pero s.x vale 0 !!! } }

super.<atributo> == ((SuperClase)this).<atributo> != <atributo>

77

Interfaces
Introduccin

Elsentidodeusodeinterfacesescorregirlaimposibilidad deherenciadevariasclasesquehayenjava. Unainterfaceesunconjuntodeconstantesymtodos abstractosqueseimplementarnenclases. Enunainterfaceseestablecenlasfuncionalidades(el qu),yenlasclasesseimplementan(elcmo)las mismas,demodoquepuedehaberdistintas implementacionesdeunamismafuncionalidad(mtodos deigualnombreylistadeparmetrosenclasesdistintas). Larelacinentreficherosfuenteeinterfaces(nombresdel fuente,...)esidnticaaladelasclases.
78

Interfaces
Definicin de una interface

Sintaxis:
<declaracin de la interface> { <declaracin de atributos> <declaracin de mtodos y ;> }
(laprimerallavepuedeirenlasiguientelnea)

siendo<declaracin de la interface>:
[public] interface <NombreInterface> [extends <ListaSuperinterfaces>]

79

Interfaces
Declaracin de una interface

public:

Slolasinterfacesdeclaradasaspuedenseraccedidasdesde claseseinterfacesqueestnenotrospaquetes.Ysinoespublicla interfacepuedeseraccedidaslodesdelasclaseseinterfacesdel paquetealquepertenece,peronodesdelasdeotropaquete Todainterfacepblicahadeestardefinidaenunficherofuente connombrecoincidenteconeldelinterface.Portanto,nopuede habermsclasespblicasointerfacespblicasenunfichero fuente.

extends<ListaSuperInterfaces>:

listaseparadapor,delassuperinterfacesdelasquehereda. Noesposibleextendervariasinterfacesquetenganmtodos igualesennombre,nytipodeparmetros,perodevuelvan distintostiposderesultado

80

Interfaces
Declaracin de atributos y mtodos

Atributos:

Sintaxisparacadaatributo:
[public static final] <tipo> <NOMBRE_ATRIBUTO>=valor;

Todoslosatributossonpublicstaticfinalaunquenoseindique.No puedentenerotromodificador.Esobligatorioinicializarlos.

Mtodos:

Sintaxisparacadamtodo:

[public abstract] <tipo> <nombreMtodo>([<listaParmetros>]) [throws <ListaExcepciones>];

Todoslosmtodossonpublicabstractaunquenoseindique.No puedentenerotromodificador.
81

Interfaces
Implementacin de Interfaces en Clases

Paraindicarqueunaclaseimplementaunaoms interfaces,seindica:
...class <Clase> implements <ListaInterfaces>...
(lasinterfacesdelalistavanseparadaspor,)

Noesposiblesivariasinterfacestienenmtodosigualesen nombre,nytipodeparmetros,perodevuelvendistinto tipoderesultado.

82

Interfaces
Implementacin de Interfaces en Clases

Siunaclasesedeclaraconimplements:

Heredatodoslosatributosdelasinterfaces. Sivariasinterfacestienenatributosconigualnombre,laclaseno podrhacerreferenciaadichosatributos. Respectoalosmtodosdeclaradosencadaunadelasinterfaces, haydosposibilidades:

Redefinirtodosellos. Noredefinirtodosellos.Enestecaso,lasubclasetambinhabrde serabstract,yrespectoalosmtodosheredadosnoredefinidoshay dosposibilidades:


Volveradeclararlosconabstractigualqueenlasuperclase. Nodeclararlos.
83

Losmtodosheredadosydeclaradoshandeserpublic.

Interfaces
Extensin de Interfaces en (Sub)interfaces

Paraindicarqueunainterfaceextiendeunaoms interfaces,seindica:
...interface <I> extends <ListaInterfaces>...
(lasinterfacesdelalistavanseparadaspor,)

Noesposiblesivariasinterfacestienenmtodosigualesen nombre,nytipodeparmetros,perodevuelvendistinto tipoderesultado.

84

Interfaces
Objetos de tipo interface

Sepuedendeclararvariablescuyotiposeaunainterface [VerAsignacin y Conversin entre Tipos referencia distintos]

85

Interfaces
Interface versus Clase abstract pura

Unainterfaceessemejanteaunaclaseabstractcontodos susmtodosabstract,perosondistintas(sino,nose necesitaranlasinterfaces).Diferencias:

Losmodificadoresdelosmiembrosdeunaclaseabstractpura puedenser,ademsdelasposibilidadesdelosinterfaces:

Atributos:private/friendly/protectedynostatic/nofinal. Mtodos:private/friendly/protectedystatic.

Herenciamltiple:unaclaseslopuedederivardeunanicaclase abstractpura,peropuedeimplementarvariosinterfaces.

Unadiferenciaentreinterfacesyclasesabstractengeneral esquestaspuedenteneralgnmtodonoabstract(enel casodequenoseanabstractpuras)


86

Arrays y Strings
Arrays

Sonestructurasquealmacenanenunavariablemltiples valoresdelmismoodistintotipo. Seclasificanen:


Estticos:eltamaoesconstanteentiempodeejecucin Dinmicos:eltamaopuedevariarentiempodeejecucin

Suselementosempiezanenelndice0(comoenC) Siseintentaaccederfueradelrangoadecuadodendices selanzalaexcepcinArrayIndexOutOfBoundException

87

Arrays y Strings
Arrays estticos

Sutamaonopuedecambiarentiempodeejecucin. Sonestructurasquealmacenanenunavariablemltiples valoresdeigualodistintotipo:


Sieltipodelosvaloresesprimitivo,handeserdeunsolotipo. Sieltipodelosvaloresesreferencia,puedenserdeserdetipos distintos.

Internamentesondeunaclaseparacadatipode elementos,quecuentacon:

Atributopublic final int lengthparaindicareln elementos. (Mtodopublic object clone()paracopiarunarrayaotro)


88

Arrays y Strings
Arrays estticos de tipos primitivos

Sintaxisenvariospasos:

1.Declaracindelarray:sereservaespacioparalareferenciadel array.Dosposibilidades:
<tipoPrim> <nombreArray> []; <tipoPrim> [] <nombreArray>;

2.Creacindelarray:sereservaespacioparasuselementos. Dosposibilidades:
<nombreArray>=new <tipoPrim> [<tamao>]; Enladeclaracinaadir = {<elem1>,<elem2>,...<elemN>};

Lospasossepuedencombinar,ej.
<tipoPrim> <nombreArray>[]=new <tipoPrim> [<tamao>];
Nota:[]nosignificaopcionalsinoloscaracteres[y]comotales
89

Arrays y Strings
Arrays estticos de tipos referencia

Sintaxisenvariospasos:

1.Declaracindelarray:sereservaespacioparalareferenciadel array.Dosposibilidades:
<Clase> <nombreArray> []; <Clase> [] <nombreArray>;

2.Creacindelarray:sereservaespacioparasuselementos,que sonreferencias.Posibilidades:
<nombreArray>=new <Clase> [<tamao>]; Enladeclaracinaadir = {<obj1>, <obj2>,...};

Losobjetospuedenexistirocrearseenlacreacindelarray.ejs:
<nombreArray>[<elem>]=new <Clase>([params]); Enladeclaracinaadir= {new <Clase>([params]),...};

Lospasossepuedencombinar,ej.
<Clase> <nombreArray>[] = new <Clase> [<tamao>];
90

Arrays y Strings
Arrays estticos de tipos referencia distintos

Esposibletenerarraysestticosconobjetosdetipos referenciadistintos. Segn[Asignacin y Conversin entre Tipos referencia distintos],seconsiguedeclarandoeltipodel arraydeunadeestasformas:

Queseaunainterfaceimplementadaportodaslasclaseso interfacesdelosobjetosacontener. Queseaunasuperclasedelaquetodoslostiposdelosobjetos hereden.Estoincluyeelcasodedeclararunarrayestticodetipo Object.

91

Arrays y Strings
Arrays estticos multidimensionales

Sonarraysdemsdeunadimensin. Declaracindelarray(para2dimensiones).Posibilidades:
<tipo> <nombreArray> [][]; <tipo> [][] <nombreArray>;

Creacindelarray(para2dimensiones):
<nombreArray>=new <tipo> [<tamao1>][tamao2>];

Declaracinycreacinenunsolopaso:

<tipo> <nombreArray>[][]={{a1,a2,...}{b1,b2,...}...};

Siendo{a1,a2,...}loselementosdela1fila,...

Encasodequetiponoseaprimitivosinoreferencia,es necesariocrearloselementosa1,a2,...,b1,b2,...

92

Arrays y Strings
Arrays dinmicos clase java.util.Vector

Sutamaopuedecambiarentiempodeejecucin, aadiendooquitandoelementos. Seemplealaclasejava.util.Vector(esnecesariasu importacin):


Slopuedecontenerobjetosdetiporeferencia(noprimitivo). Elndicedesuselementoscomienzaen0 Puedeincluirobjetosdedistintasclases. Distingueentretamaoycapacidad:

Tamao:elndeelementosquecontieneenunmomentodado. Cambiaalinsertaroeliminarelementos. Capacidad:previsindelnmximodeelementosquecontendr. Cuandoeltamaosobrepasalacapacidad,staseaumenta automticamenteenlacantidadindicadaporelatributo 93 capacityIncrement.Sistees<=0lacapacidadseaumentaaldoble.

Arrays y Strings
Arrays dinmicos clase java.util.Vector

Atributosdeinters:

capacityIncrement

Mtodosdeinters: (algunospuedenlanzarArrayIndexOutOfBoundException)

Constructores:Vector(),Vector(intinitialCapacity),Vector(int initialCapacity,intcapacityIncrement) Aadir:add,addElement,insertElementAt Reemplazar:set,setElementAt Eliminar:clear,remove,removeAllElements,removeElement, removeElementAt Buscar:contains,elementAt,IndexOf,lastIndexOf Otros:capacity,isEmpty,size,setSize


94

Arrays y Strings
Strings

Sonobjetosparaalmacenarcaracteres. Nosonlomismoquearraydecaracteres:estn representadosporclasesdiferentes,ylosatributosy mtodossondistintos. Clasificacin:

Nocambianencontenidonitamaoentiempodeejecucin(clase java.lang.String) Puedencambiarencontenidootamaoentiempodeejecucin (clasejava.lang.StringBuffer)

95

Arrays y Strings
Strings clase java.lang.String

CreacindeobjetosString:

Medianteunliteral:cuandoelcompiladorencuentraunliteral entredoblecreaunobjetodelaclaseString.
String <nombreString>=Cadena; obien: String <nombreString>; <nombreString>=Cadena; //declarado antes

Llamandoaalgnconstructor(realmenteseinicializaun apuntadoralacadenacreada):
String <nombreString>=new String (Cadena);

LlamandoaunmtodoquedevuelvaunobjetoStringnuevo,ej:

String s1=Hola; //Crea un objeto referenciado en s1 String s2; //Crea una referencia pero no un objeto s2=s1.toUpperCase(); //Crea un objeto referenciado por s2

96

Arrays y Strings
Strings clase java.lang.String

Realmente,enmemoriasloexisteunobjetoStringpor cadacadenaexistenteentiempodeejecucin,apesarde queseempleenew.Ej:


String s1=new String(Hola}; String s2=new String(Hola}; String s3=new String(Hola}; System.out.println (s1.equals(s2)); //true System.out.println (s1.equals(s3)); //true

LosliteralesentredoblenoasignadosavariablesString ocupanmemoriaquevaaserliberadaporelrecolectorde basura.Ej:


String s=Hola; s=Mundo; //Hola es un objeto String desechable
97

Arrays y Strings
Strings clase java.lang.String

Cuandoseusaeloperador+yalgnsumandoesunobjeto String:

seobtieneelStringasociadoalrestodesumandos(sinoson objetosString) ysedevuelveunnuevoobjetoStringconcatenacindetodoslos sumandos.

MtodosdeobtencindeStringasociadoavaloresdetipo primitivoyobjetosdetiporeferencia:

Paratiposprimitivos:enlaclasejava.lang.String static String valueOf (<valorTipoPrimitivo>) Paratiposreferencia:enlaclasejava.lang.Object


String toString()
98

Arrays y Strings
Strings clase java.lang.String

Mtodosdeinters:

Constructores:String(),String(chararray[]),String(String cadena),String(StringBufferbuffer) Subcadenas:charAt,substring Comparaciones:compareTo,endsWith,equals,equalsIgnoreCase, startsWith Concatenar:concat Bsquedas:IndexOf,lastIndexOf Reemplazar:replace,toLowerCase,toUpperCase,trim Otros:length,toCharArray,valueOf

99

Paquetes
Introduccin

Concepto:conjuntodeclaseseinterfacesqueseagrupan porrazonesdeorganizacinyparaevitarproblemasde nomenclaturaoidentificadoresrepetidos.Suusoesms convenientecuantomayorseaelproyecto. EquivalealconceptodelibreraenC. Seidentificanconnombresformadosporpalabras(por convenioenminsculas)separadasporpuntos.Ej: java.applet Sepuedenanidarformandojerarquas,ej:


java.awt:paquetegeneraldelinterfacegrficoawt java.awt.color,java.awt.image,...:otrospaquetesdelajerarqua
100

Paquetes
Paquetes, Directorios y Ficheros .class

Unpaqueteconstadeunoomsficheros.classquehande estarenunnicodirectorio.Taldirectoriosecorresponde contodaslaspalabrasdelnombredelpaquete,cambiando. por/Ej.losficheros.classdelpaquetedenombre<dir1>.<dir2>


estaraneneldirectorio<loquesea>/<dir1>/<dir2>/

Losficheros.classdeundirectorionopuedenpertenecera msdeunpaquete,salvoalpaquetepordefecto(ver apartado). Cuandoenundirectorio,ademsdeficheros.class,hayotros subdirectoriosconmsficheros.classquesecorrespondena otropaquete,sedicequelospaquetesestnanidados. Porsencillezsesuelendejarlosficherosfuenteenelmismo directorioquelosficheros.class,peronoesobligatorio. 101

Paquetes
Declaracin

Paraindicarelpaquetealqueperteneceunficherofuente, laprimeralneadelfuenteser:
package [<dir1>.][<dir2>.]...<dirN>;

siendodir1/dir2/.../dirNunsubdirectorioenelquese vayaaguardarsufichero.class.

Losficherosfuentequeformenelpaqueteserntodoslos queempiecenporlamismaprimeralnea,ytalesquesus ficheros.classseguardeneneldirectorioasociado.

102

Paquetes
Uso Condiciones

Slosepuedenusarlasclaseseinterfacesdeotros paquetesqueseanpblicas. Paraaccederalosatributosymtodosdelasclases (pblicas)importadasdeotrospaqueteshandecumplirse lasrestriccionesdembito,siendoobligatoriaunadeestas posibilidadesparalosatributosymtodosalosquese accede:


Queseanpublic. Queseanprotected,ylaclasedesdelaqueseaccedesea descendientedelaclasealaqueseaccede.

103

Paquetes
Uso Pasos

Sentenciasdeuso VariabledeentornoCLASSPATH:

Indicaeldirectoriobasedondeestnlossubdirectorios correspondientesalosficheros.classdelospaquetesaemplear.Ej:

Paquetea1.b1.c1endirectorio/home/luz/a1/b1/c1 Paquetea2.b2.c2endirectorio/home/luz/a2/b2/c2 Paqueted3.e3endirectorio/usr/local/java/d3/e3 Hacer:export CLASSPATH=/home/luz:/usr/local/java

Esobligatoriotantoencompilacincomoenejecucin.

Alcompilarunaclasequeusaotra,sinoencuentrael.class delaclaseausarcompilastaautomticamente.
104

Paquetes
Uso Alternativa 1: import

Sintaxisparaimportacin:sentenciaimport

Seindicaalprincipiodelfuentedespusdelasentenciapackage (encasodequestaexista)medianteunadeestasformas:

Seimportantodaslasclaseseinterfacesdelpaquete: import <dir1>.<dir2>...<dirN>.*; Seimportanslolasespecficas: import <dir1>.<dir2>...<dirN>.ClasePub1; import <dir1>.<dir2>...<dirN>.InterfacePub2;

Paraelcasodepaquetesanidadossloimportalasclasese interfacesdeldirectorioalquehacereferencia,ynolosqueestn ensubdirectorios

105

Paquetes
Uso Alternativa 1: import

Unavezhechalaimportacin,parausarlaclaseointerface importadahaydosposibilidades:

Indicarelnombredelaclaseimportada,sineldelpaquete Anteponeralnombredelaclaseimportadaelnombredelpaquete alquepertenece.Estoesnecesariosiendistintospaqueteshay coincidenciadenombresdeclases.Ej:


import <dir1>.<dir2>.*; import <dir3>.<dir4>.ClasePub1; ... <dir1>.<dir2>.ClasePub1 a; <dir3>.<dir4>.ClasePub1 b;

106

Paquetes
Uso Alternativa 2: referencia al paquete sin import

Anteponeralnombredelaclaseimportadaelnombredel paquetealquepertenece,sinhacerimport.Ej:
<dir1>.<dir2>.ClasePub1 a;

107

Paquetes
Paquete por defecto

Eselpaqueteformadoportodoslosfuentesdeun directorioquenotienendeclaracinpackage Suusoesparaaplicacionespequeas.

108

Paquetes
Paquete por defecto

Accesoalasclasesdelpaquetepordefecto:

Slopuedehacersedesdeclasesdelpaquetepordefecto.Desde otrospaquetesnoesposible,aunqueseaccedaaclasespblicas. Lasclasesdelpaquetepordefectopuedenaccederaotrasclasesde dichopaquetesinnecesidaddeusarimport. Sidesdeelpaquetepordefectoseusanclasesdedichopaquete, paraquenohayaerroralcompilarhaydosposibilidades:

QuelavariableCLASSPATHnoestdefinida QuelavariableCLASSPATHincluyaaldirectorioactual,ej:

export CLASSPATH=.:/home/luz:/usr/local/java

Paraejecutarelmaindeunaclasenopertenecienteal paquetepordefecto:
java nombrePaquete.NombreClasePublica
109

Paquetes
Paquetes incluidos automticamente

Nosonnecesarios:

Hacerunimportdelpaquetejava.lang IncluirenelCLASSPATHelarchivort.jarquecontienelos paquetesyficheros.classnecesariosparalaejecucin.(Enlas primerasversionesdejavaseranecesario)

110

Paquetes
Paquetes de la especificacin Sun de java

Lospaquetesdelaespecificacincontienenlasclasese interfacesempleadosduranteeltiempodeejecucinporla JVM. Versin N clases N paquetes


Java 1.0 Java 1.1 Java 2 1.2 Java 2 1.3 Java 2 1.4 Java 2 1.5 Java 2 1.6 212 504 1520 1842 2991 3562 8 23 59 76 135 166 202

Verhttp://java.sun.com/javase/6/docs/api/

111

Paquetes
Paquetes de la especificacin Sun de java

java.lang:clasespropiasdellenguaje.

DefinelaclaseObjectylasclasescompatiblescontiposprimitivos: Character,Byte,Short,Integer,Long,Float,Double,Boolean. Respectoastas:

Suutilidadesparahomogeneizareltratamientodetiposprimitivos coneldeclasesyobjetos. Sonmslentasquesisetrabajacontiposprimitivos,ynosonvlidas conoperadores(+*/...),perotienenmsfuncionalidades (atributosymtodos). Tienenunatributoprivadoparaguardarelvalordeltipoprimitivo. Esposibleconvertirenambossentidos,ej:


Integer ii1=new Integer (i1) int i2 = ii2.intValue()

Eselnicopaquetequeseimportaautomticamenteaunque noseindiqueconimport

112

Paquetes
Paquetes de la especificacin Sun de java

java.io:clasesparaentrada/salidadedatosyaccesoa ficheros. java.util:arraysdinmicos,fechas, java.util.zip:compresinzipygzipdeficheros java.applet:herramientasparaapplets. java.awtyjava.swing:componentesparaGUIs(Graphic Userinterface). java.net:funcionesdered. java.sql:accesoabasesdedatossql java.security:encriptacin ...
113

Paquetes
(Anexo: formato de paquetes jar)

Lospaquetes(directorios+ficheros.class)suelen paquetizarseenelformatocomprimidojar.
Ej.paraverlosficheros.classdelAPIdeSun:
unzip -l /usr/lib/jvm/java-1.5.0-sun/jre/lib/rt.jar

Sialgunospaquetesestnenformatojarysequieren importar,hayqueindicarloenelCLASSPATH. Ej.


export CLASSPATH=.:/usr/share/java/qtjava.jar:/dir/p.jar

Avecesseincluyelaclaseejecutableenunfichero.jary paralanzarlaaplicacinseemplea:
jar -j fichero.jar

(Nota:enestecasoseignoralavariableCLASSPATHyparaindicar 114 otrasclasesy.jarsedebeemplearunficheromanifest)

Paquetes
(Anexo: fichero manifest)

Esunficherodetextoempleadocuandolaclaseejecutable estenunficherojar.Elformatotiene,entreotraslneas:
Main-Class: paquete.ClasePrincipal Class-Path: dir1/jar1.jar dir2/jar2.jar dir3/ dir4/...

Siendo:

paquete.ClasePrincipallaclasequecontieneelmtodomain paraejecutarse,queperteneceaunodelospaquetesqueformanel jar;encasodequeseaeldefault,sera: Main-Class: ClasePrincipal dirN/jarN.jar dirM/...rutasabsolutasorelativas(ala ubicacindelpaquetejar)deotrosficherosjarodedirectoriosque contenganclases,todosellosqueestnFUERAdelpaquetejar,ej.en laredlocal. Importante:saltodelneaalfinal
115

Excepciones
Introduccin

Eventoexcepcionalqueocurreduranteelprograma, interrumpiendoelflujonormaldelassentencias,debidoa motivosdiversos:

Hardware:dispositivoestropeado,recursosinsuficientes(memoria, disco),... Software:divisinporcero,accesoaposicionesnopermitidasde unarray,lanzamientoexplcitoporquienprograma,...

Mtodotradicionaldetratamientodeerrores: comprobacindecdigoderetornodelasfunciones. AlgunoslenguajescomoJavatienenmecanismosespeciales paraladeteccinyeltratamientodedichoseventos.


116

Excepciones
Clases para Excepciones

Enjavaunaexcepcinsemodelacomounaclaseque desciendedelaclasejava.lang.Throwable:

ExcepcionesexistentesenelAPIdejava:clasesqueseencuentran endistintospaquetes(java.lang,java.io,java.util.zip,...) Excepcionescreadasporelprogramador:nuevasclasesquese derivendelaclaseThrowable,deformadirectaoindirecta.

Mtodosdeintersdelaclasejava.lang.Throwable:
public String getMessage(): mensajedeerrorasociado public String toString():descripcinbrevedelobjeto public String printStackTrace():imprimeunatrazadelapila

117

Excepciones
Clases para Excepciones

rboldelpaquetejava.lang:
http://java.sun.com/javase/6/docs/api/java/lang/packagetree.html
java.lang.Object java.lang.Throwable (implements java.io.Serializable) java.lang.Error ... java.lang.Exception java.lang.RuntimeException ...

Clasejava.lang.Error:deusopropiodelaJVM.Sonerrores irrecuperablesysefinalizaelprograma.

118

Excepciones
Tipos de excepciones

Nocomprobablesoimplcitas(unchecked):

Nosecompruebandurantelafasedecompilacin. Sonlasclases:

java.lang.Erroryderivadas java.lang.RuntimeExceptionyderivadas,ejs:punterosnull,ndice fueradearray,...

Comprobablesoexplcitas(checked):

Secompruebandurantelafasedecompilacin,yesobligatorio tratarlasodeclararlasenelmtodo. Sonlasderivadasdejava.lang.Exceptionquitandolaclase java.lang.RuntimeExceptionysussubclases.Ejs:IOException, CloneNotSupportedException


119

Excepciones
Lanzamiento de una excepcin

Durantelaejecucindeunmtodosepuedenproduciro lanzar(throw)excepcionesdedosformas:

LaJVMdetectaunasituacinespecial,Hardware(ej.unerroral cargarunapartedelprograma)oSoftware(ej.divisinporcero). Enunmtodoselanzaunaexcepcinporcdigomediantethrow:


throw <objetoDeClaseExcepcion> Ej:throw new Exception();

Enamboscasosseempleaunobjetodelaclase correspondientealaexcepcin(enelprimercasolocreala JVM).

120

Excepciones
Tratamiento de excepciones

Lasexcepciones,tantosisonexplcitascomoimplcitas, puedensertratadasenelmismomtodomediante estructurasdelenguajejavallamadasmanejadoresde excepciones. Unmanejadordeexcepcionesconsisteen:

Unabloquedecdigotryquecontieneelcdigoquepuede generarexcepciones. Unoomsbloquescatchdondeserealizaeltratamientodelas excepcionesquepuedenproducirse. Unbloqueopcionalfinallyenelqueseincluyecdigofinala ejecutarsiempre.Utilidad:paranorepetircdigoentodoslos bloquescatch.Ej.cierredeficherossihayonoerrores.


121

Excepciones
Tratamiento de excepciones Sintaxis
try { <cuerpo del try> } catch (<ClaseExcepcion1> <param1>) { <cuerpo del catch 1> } [catch (<ClaseExcepcion2> <param2>) { <cuerpo del catch 2> }] ... [finally { <cuerpo del finally> }]

Entrelosdistintosbloquestry,catchyfinallynopuede haberotraslneasdecdigo. Dentrodelosbloquescatchyfinallytambinpodrahaber nuevosbloquestrycatchfinally(gestinrecursiva).

122

Excepciones
Tratamiento de excepciones Bloques catch

Sueleexistiralmenosunbloquecatch.Noesobligatorio peroeslousual;sinohayningunohadehaberunfinally. Sihayvariosbloquescatchhandetratarexcepciones distintas. Seproduceunerrordecompilacinsihayvariosbloques catchquetratanexcepcionesrelacionadasporherenciayse escribeprimeroelcatchdelasexcepcionesmsgenerales (antepasadas)ydespuseldelasconcretas(hijas).

123

Excepciones
Tratamiento de excepciones Secuencia

Cuandohayunaexcepcinenunmtodo,elflujose interrumpeylaJVMmirasielmtodoenelqueseha detectadolaexcepcinpuedetratarlamedianteunbloque catchparaesaexcepcinounaantepasadadesta.(Ver diagramadeflujo). Encasonegativo,pasaporelbloquefinallysiexiste,y despusrecorrelacadenademtodosdesdelosquese llam,buscandoalgncatchquepuedatratarlaexcepcin:


Enelcasodeprogramasstandalonellegahastaelmtodomain Sinoencuentraningunoquepuedatratarlo,laJVMmuestraun mensajedeerroryelprogramatermina.


124

Excepciones
Secuencia de una excepcin Diagrama de Flujo
try No Excepcin en bloque try? S Interrupcin bloque try catch finally Hay bloque catch No de la excepcin o de una antepasada? Mtodo actual Mtodo llamante

Salto al primer bloque catch correspondiente

Hay bloque finally?

No

Hay bloque finally?

No

Salto a bloque finally

Salto a bloque finally

Salto a 1 lnea tras bloques try / catch / finally

Salto a mtodo llamante en busca de bloque catch adecuado

125

Excepciones
Excepciones explcitas Uso de throws (i)

Sintaxisdedeclaracindemtodos:
Listadeexcepciones:separadasporcomas

...<nombreMtodo> ([<parmetros>]) throws <ListaExcepciones>

Seusa(yesobligatorio)paraindicaraquellasexcepciones explcitasquesepuedengenerardentrodelmtodo,pero endichomtodonovanasertratadasniellasnisus superclases,sinoqueseesperaquesetratenenmtodos llamantes. Enunmtodosepuedenproducirexcepcionesexplcitas mediantethrowoalllamaraotromtododeclaradocon throwsEExpl.


126

Excepciones
Excepciones explcitas Tratamiento

Seproduceunerrordecompilacinsienunmtodose puedenlanzarexcepcionesexplcitas(conthrowo llamandoaotromtododeclaradoconthrowsEExpl),y dichomtodonocumpleningunadeestasposibilidades:


Tratarenalgncatchdichasexcepcionesosusascendientes. Declararconthrowsdichasexcepcionesosusascendientes:

...<nombreMtodo>([<parmetros>]) throws <ExcepcionesExplicitas>

Consecuencia:alllamaraunmtodoesobligatorioconocer susexcepcionesexplcitasdeclaradasconthrows,yhacer alguna(s)delasopcionesindicadas.(VerEntradapor stdin).


127

Excepciones
Excepciones explcitas Tratamiento

Seproduceunerrordecompilacinsialgnbloquecatch correspondeaunaexcepcinexplcita,ynosecumpleque enelbloquetrysepuedalanzardichaexcepcinoalguna descendiente(amboscasosconthrowollamandoaotro mtododeclaradoconthrowsEExpl). LoanteriornoaplicaparalaclaseException.

128

Excepciones
Excepciones explcitas Herencia

Sienunaclaseseredefinenmtodosqueenlasuperclase lanzanexcepcionesexplcitas,enladeclaracindedichos mtodosdelaclase:

Nosepodrnindicarexcepcionesexplcitasquenoestn declaradasconthrowsenelmtododelasuperclase.Spodrn indicarsemenos. Salvedadaloanterior:sepuedenindicarnuevasexcepciones explcitasqueseandescendientesdelasexcepcionesdeclaradasen elmtododelasuperclase.

Noaplicaparalosconstructores,puesnoseheredan.

129

Excepciones
Excepciones explcitas Uso de throws (ii)

Comoprevisinparasubclases: Enunmtododeunaclasesepuedeindicarunnmero suficientedeexcepcionesexplcitasparaque,aunqueen dichomtodonoseanlanzadas,spuedanincluirseenla declaracindelosmtodosreescritosdeclasesderivadas.

130

Excepciones
(Recomendaciones)

Separarlalgicadelprogramayelcdigodetratamiento deerrormediantegestoresdeexcepciones. Lanzarlasmenosexcepcionesposibles,ypreferentemente queseanexplcitas. Tratamiento:


Nodejarbloquescatchdeexcepcionesconcuerpovaco. Noatraparexcepcionesquevengandejava.lang.Errorporqueson propiasdelaJVMypuedenimplicarestadosinconsistentes. Propagarlomenosposiblelasexcepcionesproducidasenun mtodo,intentandotratarlascuantoantes. Usarfinallyparagestinfinalderecursos(ej.cierredeficheros).


131

You might also like