You are on page 1of 18

CursodeprogramacinJava

ArtculopublicadooriginalmenteenlarevistaSloProgramadores Esteartculoserelprimerodeunaserieorientadaaintroducirallectorenellenguajede programacinJava.EstelenguajedeprogramacincreadoporSunMicrosystemsamediadosdela dcadadelos90esellenguajedeprogramacinmspopularenlaactualidad.Aslodemuestrael ndiceTIOBE. ElndiceTIOBEtratadereflejarel"estadodesalud"delosdistintoslenguajesdeprogramacin.El ndicereparte100puntosentretodosloslenguajesdeprogramacinexistentes;elnmerodepuntos quesellevacadalenguajedependedelnmerodeofertasdetrabajoqueparadicholenguajehayaen portalescomoMonsterysimilares,delnmeroderespuestasquevariosbuscadoresdeInternet (entreellosGoogleyYahoo)devuelvenalrealizarconsultasrelacionadasconellenguaje,del nmerodelibroseditadosyvendidossobredicholenguaje...yotrasmtricassimilares.Comose puedeverenlafigura1,Javalideradichondice;ylollevaliderandodesdeprincipiosdel2001,con laexcepcindeunospocosmesesentornoa2005,momentoenelquefuetemporalmente sobrepasadoporC.OtrodelosmritosquepuedeatribuirseeselliderarelrankingdeSourceforge denmerodeproyectosdesarrolladosenundeterminadolenguaje.Enabrildel2005superal actualtercerlenguajedeprogramacin,C,yennoviembredel2005superalactualsegundo,C++. RankingdelndiceTIOBEconlos11lenguajesdeprogramacinmspopulares

Java,aligualquesurivalmsdirecto(.NET),esmuchomsqueunsimplelenguajede programacin,comopodraserelcasodeCoC++.Esunaplataformadedesarrollodeaplicaciones completaqueproporcionacontenedoreswebylenguajesdescriptparalacreacindepginasweb dinmicas;soporteparacomponentestransaccionalesdistribuidos;mapeadoresobjetosrelacionales paraencargarsedelapersistenciadelaaplicacin;colasdemensajeraparaelprocesamiento asncronodetareas;soporteparadesarrollodeaplicacionesparatarjetasinteligentesyotros dispositivosempotrados;soporteparadesarrollodeaplicacionesparaterminalesmviles;untoolkit grficoconsoporteparaanimaciones2Dy3D;soporteparaeldesarrollodeaplicacionesquese ejecutarnempotradasenunnavegador;yunlargoetctera. Laplataformasedivideentresgrandesbloques.Unodeellos,JavaSE(anteriormenteconocido comoJ2SE)eslomsparecidoaunlenguajedeprogramacinestndar.Proporcionaunasintaxis paraunlenguajedeprogramacin,unentornodeejecucinparalasaplicacionescreadasendicho lenguajeyunextensoconjuntodelibrerasenlascualessepuedenapoyardichasaplicaciones.Java SEserelobjetivodeestaseriedeartculosyeselpuntoporelque,habitualmente,los desarrolladoresquequierenaprenderJavaseacercanalaplataforma. JavaME(anteriormenteconocidocomoJ2ME)esunaedicindeJavaorientadaaprogramacin dedispositivosmvilesyempotrados.Enestacategoraencajandesdelastarjetasinteligentes (comolasqueseempleanenlosDNIelectrnicos,enlastarjetasprepagooenlasSIMdelos telfonosmviles)hastaterminalesmvilesdeltimageneracin,pasandoporlosreproductoresdel

formatodevideodealtadefinicinBlueRay,osoftwaredecontroldecoches.JavaMEproporciona unsubconjuntodelaslibrerasydelascaractersticasdellenguajedeJavaSE.Estesubconjunto puedevariardependiendodeparaqudispositivosestemosprogramando;siestamosprogramando paraterminalesmvilesdeltimageneracinestndisponiblesprcticamentetodaslas caractersticasdeJavaSE.Sinembargo,siestamosprogramandoparatarjetasinteligentesel conjuntodelibrerasestconsiderablementereducido,yellenguajedeprogramacinsoporta menoscaractersticas;porejemplo,nosoportatiposdedatosrealesyaqueestosdispositivosslo tienenhardwarepararealizararitmticadeenteros. JavaMEesmuypopularenlaactualidadendispositivosmviles,aunqueamenudopase desapercibido.Paraqueellectorsehagaunaideadelapresenciadeestatecnologa,simplemente mencionarquesehanmanufacturado3.500.000.000detarjetasinteligentesbasadasenlatecnologa Java,ymsde1.400.000.000detelfonosmvilesconsoporteparaaplicacionesJavaME.Contoda probabilidad,tutelfonomvilescapazdeejecutaraplicacionesJavaME.Y,porcierto,lainmensa mayoradelosjuegosyaplicacionesparaterminalesmvilesquevesanunciadosentelevisinyen revistasestndesarrolladosenJavaME. SiJavaMEpuedeconsiderarsecomounsubconjuntodeJavaSE,JavaEE(anteriormenteconocido comoJ2EE)puedeconsiderarsecomounsuperconjunto.Enestecaso,noseextiendenisemodifica deningnmodoellenguajedeprogramacin.Seaadeunconjuntoampliodelibrerasyunaserie decontenedoresdeaplicaciones(contenedoreswebydeEJB).Estoscontenedoresproporcionan servicios,deunmodoautomticoytransparenteparaelprogramador,alasaplicacionesque contienen,servicioscomotransaccionalidad,persistencia,autenticacin,autorizacin,etctera. Nuevamente,muchasdelaswebquevisitasdiariamenteestnhechasenJava:lawebdelReal Madrid,elpropioGMail,olaswebdelosministeriosdelgobiernoespaolsonalgunosejemplos. ConellenguajedeprogramacinJavaesposibleprogramartodosestosdispositivos

1Elobjetivodeestaseriedeartculos:JavaSE Unavezterminadalarevisinavistadepjarodelasdistintaspartesqueintegranlaplataforma,es momentodeexplicarexactamentequvamosaabordarenestaseriedeartculos.Nuestroobjetivo serJavaSE:presentaremosellenguajedeprogramacinJavaeintroduciremoslaspartesms esencialesdesulibreraestndar. Losartculosestnescritossuponiendoqueellectorconocealgnlenguajedeprogramaciny,por tanto,dominalosconceptosbsicosdelaprogramacinestructurada:elconceptodevariable, estructurasdecontroldeflujo,elconceptodefuncinoprocedimiento,etctera.Estaseriede artculosnoes,portanto,unsustitutodeuncursobsicodeprogramacin. Aunquenoserimprescindibleparaseguirlosartculos,siseraconsejableposeerconocimientos bsicosdeorientacinaobjetos:elconceptodemtodo,deobjeto,declase,depasodemensajes... sernexpuestosconmuchabrevedad.NoscentraremosmsenpresentarelsoportequeJava proporcionaparalaprogramacinorientadaaobjetos,msqueenpresentarlaprogramacin orientadaaobjetosensmisma.
1.1Java,ellenguaje

Yahemosintroducido,avistadepjaro,loquepodramosdenominar"plataformaJava".Enesta seccinpresentaremosbrevementeculessonlasprincipalescaractersticasdellenguajede

programacinJava. Javaesunlenguajesencillodeaprender.SusintaxisesladeC++simplificada.Loscreadoresde JavapartierondelasintaxisdeC++ytratarondeeliminartodoloqueresultasecomplicadoofuese fuentedeerroresenestelenguaje.Laherenciamltiple,laaritmticadepunteros,lagestinde memoriadinmica(queenJavaserealizademodotransparenteparaelprogramadorgraciasal recogedordebasura)sonejemplosdepuntoscomplicadosdellenguajeC++queenJavasehan eliminadoosimplificado.Estadecisindediseo,intencionada,tenacomoobjetivoatraera desarrolladoresconconocimientosdeC++alnuevolenguajedeprogramacin,objetivoquefue alcanzado. Javaescompletamenteindependientedelamquinayelsistemaoperativoenelqueseejecuta.El cdigogeneradoporelcompiladorJavaesindependientedelaarquitectura:podraejecutarseenun entornoUNIX,MacoWindows;enunprocesadorSparc,x86,PowerPC,ARM,...tantode32como de64bits.Elmotivodeestoesqueelquerealmenteejecutaelcdigogeneradoporelcompilador noeselprocesadordelordenadordirectamente,sinoqueseejecutamedianteunamquinavirtual, queeslaquegeneracdigomquinaadecuadoparacadaarquitectura. Adems,Javaesportableaniveldecdigofuente.Elprrafoanterior,abordalaportabilidadde Javaaniveldebinario:unmismoprogramacompiladopuedeejecutarseendistintasarquitecturas. PeroademsenellenguajeJavanohayaspectosdependientesdelaimplementacin,todaslas implementacionesdeJavasiguenlosmismosestndaresencuantoatamaoyalmacenamientode losdatos,yencuantoalmodelodememoriaquevenlasaplicaciones.Estonoocurreasenotros lenguajescomoCoC++.Enestosdoslenguajes,porejemplo,unenteropuedeteneruntamaode 16,32omsbits,siendolanicalimitacinqueelentero( int seamayoroigualqueunshort ymenoroigualqueunlongint .Asmismo,dependiendodelaimplementacinlosdatospuedenalmacenarseenformatolittle endianoenbigendian.Javalohacesiempreenelmismoformato. Javaesunlenguajedeprogramacinrobustoyseguro.Estascaractersticassurgenenbuenamedida deserunlenguajequenoesejecutadodirectamenteporlaCPU,sinoqueesejecutadoporla mquinavirtual.Estamquinavirtualpuedecontrolarlospermisosqueseleotorganauna determinadaaplicacinygarantizarquedichospermisosnosonviolados.Porejemplo,Java proporcionasoporteparalacreacindeApplets.Estossonprogramasdiseadosparaserejecutados demodoautomticocuandounusuariovisitaunapginaweb.SielAppletnoestuvieserestringido enloquepuedehaceralejecutarse,podracomprometernuestramquina.Sinembargo,Java garantizaqueningnAppletpuedeescribiroleerdenuestrodiscoomandarinformacindel usuarioqueaccedealapginaatravsdelared(como,porejemplo,ladireccindecorreo electrnico).Engeneralnolepermiterealizarcualquieraccinquepudieradaarlamquinao violarlaintimidaddelquevisitalapginaweb. Javaesunlenguajedealtorendimiento.S,dealtorendimiento.Actualmentelavelocidadde ejecucindelcdigoJavaessemejantealadeC++,hayciertaspruebasestndaresdecomparacin (benchmarks)enlasqueJavaganaaC++yviceversa.Estoesasgraciasalusodecompiladores justintime,compiladoresquetraducenlosbytecodesdeJavaencdigomquinaparauna determinadaCPU,cdigoquenoprecisadelamquinavirtualparaserejecutado,yguardanel resultadodedichaconversin,volvindoloallamarencasodevolverloanecesitar,conloquese evitalasobrecargadetrabajoasociadaalainterpretacindelbytecode.Adems,estoscompiladores realizanoptimizacionesquesebasaneninformacinquesloestdisponibleentiempode

ejecucinyque,portanto,sonimposiblesderealizarentiempodecompilacin. Noobstante,pornormageneralelprogramaJavaconsumebastantemsmemoriaqueunprograma C++equivalente,yaquenoslohadecargarenmemorialosrecursosnecesariosparalaejecucin delprograma,sinoqueademsdebesimularunsistemaoperativoyhardwarevirtuales(lamquina virtual).Sinembargo,dadoelbajopreciodelamemoriaRAMenlaactualidadylagrancantidad dememoriaquesuelehaberdisponible,elmayorconsumodememoriaamenudoesirrelevante. Porltimo,enlalneadelaltorendimiento,mencionarqueJavaposeesoportenativoparathreads, loquehacequeescribiraplicacionesJavaquetomenventajadeprocesadoresdevariosncleos(lo mshabitualenlaactualidadesquealmenosdispongamosdedosncleosenunamquina)sea muchomssencilloqueenotroslenguajesdeprogramacin.

2ElkitdedesarrolloJava,JDK ParadesarrollaraplicacionesJavaesnecesarioun"JavaDevelopmentKit"oJDK.Existenmltiples JDKs,desarrolladosporcompaasdiferentes,odesarrolladoscomoproyectosdesoftwarelibre.Yo recomiendoallectorqueempleeelquedistribuyedemodogratuitoSunMicrosystems,quese puededescargardesdehttp://java.sun.com/j2se.LaimplementacindeJavadeSunsueleserlams actualizaday,adems,essoftwarelibre!.Noobstante,ellectorpodraemplearcualquierotroJDK. Laportabilidaddellenguajegarantizaquetodosfuncionarndelmismomodo. EnlaimagensemuestraalDuke,lamascotadeJava.Yltambinsedistribuyebajounalicencia libre!

VariosejemplosdeestaseriedeartculosrequerirnqueseempleeunJDK5osuperior.Java,como lenguaje,hasufridodosrevisionesmayoresensuhistoria.Laprimerafuelaversin1.2,en1998. EnlaactualidadprcticamentenadieempleaJDKsanterioresal1.2,porloquenomerecelapena hacernfasisenlascaractersticasdellenguajeantesdeesemomento.Lasegunda,realizadaen 2004,fueJava5(1.5sisehubieseseguidoconlanumeracinantigua,peroSundecidisaltarde1.4 a5).TodavaexistebastantecdigoescritoenJava1.4.Xytodavaexistenmuchosservidoresde aplicacionesenproduccinquenosoportanJava5.Porellocuandodescribamosunacaracterstica quesloestpresenteenJava5avisaremosallector.Encualquiercaso,noexisteningnmotivo paraqueellectorsedescargueunJDKantiguo;lomsrazonableesquesedescarguelaltima versin(Java6enelmomentodeescribiresteartculo). EsdeconsensoqueelentornoJDKnoeselmsadecuadoparaeldesarrollodeaplicacionesJava, debidoafuncionarnicayexclusivamentemediantecomandosdeconsola.Hoyendala programacinsesueleayudardeentornosvisuales,comoEclipseyNetbeans,quefacilitan enormementelatarea.MipreferenciapersonalhacequetiendaarecomendarNetbeans, especialmenteparaunprogramadornovatoyaqueesteentornodedesarrollorequieremuchamenos configuracinqueEclipse.Adems,enartculosposterioresdeestaserieseproporcionarn tutorialesflashcuyoobjetivoesayudaralusuarioacomenzaratrabajarconNetbeans.Encualquier caso,ambossonexcelentesentornosdedesarrollo,completamentegratuitosysedistribuyenbajo licencialibre.Puedendescargarsedesdehttp://netbeans.orgyhttp://eclipse.org. Aunqueesperoqueparaseguirestaseriedeartculoselelectorempleealgunodeestosentornosde desarrollo,siempreestbiencomprenderqusucedecuandohacemosunclicsobreelbotnde

"Play".EnestaseccinmostraremosculessonloscomponentesbsicosdelJDKycmo emplearlosdesdeconsola.RecomiendoallectorqueparaesteprimerartculoeviteemplearunIDE yquetrabajeconelJDKenlaconsola,parafamiliarizarseconl. ApartirdeahorasupongoqueellectortieneunJDKinstaladoensuequipo.Ladescargadesdela pginadeSunesuninstaladorestndar.Podemosaceptartodaslasopcionespordefecto.Unavez instalado,nuestroequipopodrejecutaraplicacionesJava.Sinembargo,pordefecto,elkitde desarrollonoestaraccesibledesdelaconsoladecomandos. Parasolucionarestodebemosincluirenlavariabledeentorno PATH elnombredeldirectoriodeinstalacindelJDK.Paraellohacemosunclicderechosobreeliconode "MiPC"yseleccionamos"Propiedades".Enlaventanaqueaparecervamosalalengetade "Opcionesavanzadas"yseleccionamoselbotn"Variablesdeentorno".Siyaexisteunavariable llamadaPATH laseleccionamosyledamosalbotnde"Modificar".Sino,creamosdichavariablemedianteel botn"Nueva".Elvalordedichavariabledebesereldirectorio"bin"queseencuentradentrodel directoriodeinstalacindelJDK.SihemosinstaladolaltimaversindelJDKdeSun(la6)enuna mquinaWindowsyhemosaceptadotodaslasopcionespordefectoestedirectorioser "C:\Archivosdeprograma\Java\jdk1.6.0\bin".Siennuestroequipoyaestabadefinidalavariable PATH vamosalfinaldelalneadesudefinicin,aadimosun";"yacontinuacincolocamoslarutadel directoriomencionadoanteriormente.
2.1Compilandonuestraaplicacin:elcomandojavac

Hallegadoyaelmomento(Porfin!)decomenzaraescribiralgodecdigofuente.Todavano hemosexplicadoabsolutamentenadadelasintaxisdeJava;comenzaremosconelloenbreve.Sin embargo,esteprimerprograma,quemostramosenellistado1,esmuysimpledeentenderynocreo quelectortengaproblemascomprendiendoloquehace. :Típicoprogramade"holamundo"desarrolladoenJava.importjava.util.*; /**Programa"holamundo"quemuestralafechaactual. *@authorAbrahamOtero *@version1.0 */ publicclassHolaMundo{ /**Elpuntodeentradadelaaplicación *@paramargsarraydecadenasdecaracteres *@returnnodevuelvenada */ publicstaticvoidmain(String[]args){ //Estalíneaimprimeporconsolalacadenadecaracteres“Holaes:” System.out.println("Holaes:"); //Estasentenciaimprimelafechaactualdelequipo System.out.println(newDate()); } }

Laprimerasentencia, importjava.util.*; ,importaelcontenidodeunalibrera,delacualtomaremosunobjetoquerepresentaunafecha. Todaslassentenciascomprendidasentreun/** yun*/ soncomentariosy,portanto,sernignoradosporelcompilador.Estoscomentariosestnenuna sintaxisespecialqueesinterpretadaporunadelasherramientasdelJDKqueveremosunpocoms adelante.Tambinesposiblecrearcomentariosrodeandounaovariaslneascon/* y*/ ;todoloqueseencuentredespusde/* yhasta*/ seruncomentario.Porltimo,eltercertipodecomentarioquesoportaJavaes// .Enestecasoelcomentariocomienzaenlasdosbarrasyterminaconelfinaldelalnea. Lalnea publicclassHelloDate{ defineunaclase.Javaesunlenguajedeprogramacinorientadoaobjetosyenltodo,aexcepcin delostiposdedatosprimitivos,sonobjetos.Porlodeahorasimplementerecomiendoallectorque ignoreestalnea;lasclasesylosobjetossernabordadosmsenprofundidadeneltercerartculo delaserie. Lalnea publicstaticvoidmain(String[]args){ defineelmain ,elpuntodeentrada,delprograma.Laprimerasentenciaqueseencuentredentrodelbloquede cdigoquecomienzaconlaaperturadellavedelmain serlaprimerasentenciaqueseejecute.Enestecasolasentenciaes System.out.println("Holaes:"); .Enartculosposterioresexplicaremosmsendetalleelporqudeunasintaxistanengorrosacomo System.out.println .Porlodelahoraellectorlonicoquenecesitasaberesqueesasentenciapermiteimprimirporla consolaeltextoqueselepaseentreparntesis,rodeadodecomillas.Laltimasentenciaejecutable delmain creaunobjetodetipoDate ,estoes,creaunobjetodetipofechaylomuestraporconsola. Esteeselmomentoenelquedebemoscogeruneditordetextocualquiera(elBlocdenotasde Windowsesperfectamentevlido)yteclearelcdigoanterior.Deberemosguardarloenunarchivo connombre HolaMundo.java .EnJavaunaclasepblicaobligatoriamentetienequeguardarseenunarchivoconelmismo nombrequelaclase. Paracompilarnuestroprimerprogramanecesitamosabrirunaconsola(enWindows,estopuede

hacersedesdeelmendeinicio,seleccionandolaentradaa"Ejecutar"ytecleandoenlaventanaque aparece cmd ).Empleandoelcomandocd ,nossituaremoseneldirectoriodondehemosguardadoelarchivoHolaMundo.java.Acontinuacin tecleamos: javacHolaMundo.java Javac eselnombredelcompiladordeJava(sunombrevienedeJavaCompiler).Sihemostecleado correctamenteelcdigodelejemplo,elcomandoseejecutarsinmostrarningnmensajeporla consolayeneldirectorioaparecerunarchivoconnombreHolaMundo.class ;hemoscompiladonuestrocdigoconxito.Sihayalgnerrorenelcdigo,elcompiladornos advertirdeellomostrandoelcorrespondientemensajedeerror.Sinuestraconsolanoreconociese elcomandojavac ,obiennohemosinstaladotodavaelJDK,obiennohemosmodificadoadecuadamentelavariable deentornoPATH. 2.2Lanzandolamquinavirtual:elcomandojava Losficheros.classcontienenbytecode,unaespeciede"ensamblador"delaplataformaJava.Este ensambladorpuedeserinterpretadoporcualquiermquinavirtualJava.Lamquinavirtualestar accesibledesdenuestro PATH unavezhayamosinstaladoelJDK,sinnecesidaddehabermodificadoningunavariabledeentorno. Elcomandoparainvocarlaesjava . Paraindicarlealamquinavirtualquedebecomenzarlaejecucindeundeterminadoprograma,el cualdebehabersidocompiladoconantelacin,despusdelcomando java debemosteclearelnombredelaclasequecontieneelmain denuestroprograma.Ennuestrocasoelcomandoser: javaHolaMundo Noesnecesarioaqusuministrarlaextensindelfichero,yaquesiemprehadeserunfichero.class. Elresultadodelaejecucinsemuestraenlafigura4.

Resultadodecompilaryejecutarelcdigo HolaMundo
2.3Generandodocumentacindenuestrocdigofuente

UnadelascosasqueJavahatradoalmundodelaprogramacineslaculturadequetodocdigo fuentedebetenerunadocumentacinasociada.Quizshayasidoporelhechodequedesdeelda ceroJavaproporcionabaherramientasparagenerardocumentacindemodosemiautomticoapartir deuncdigofuenteconcomentarios.Oquizsfueseporelnfasisquelosevangelistasdellenguaje hacansobreesteaspecto.Perounadelascosasquetodavaenlaactualidadesmuyenvidiadapor losdesarrolladoresdeotroslenguajesesladocumentacindenuestraslibrerasylaculturade documentarelcdigofuentequeexistedentrodelaplataformaJava. ElJDKdeSunnosproporcionaunaherramientaqueextraeloscomentariosquecomienzanpor /** deuncdigofuente(losquecomienzanpor/* ypor// sonignorados).Endichoscomentariospuedeemplearseunasintaxisespecialqueesinterpretada porlaherramienta.Apartirdeloscomentarios,yconelsoportededichasintaxissielprogramador lahaempleado,laherramientageneraunapginaHTMLcondocumentacindelcdigofuente. Elcdigoqueestamosusandodeejemploposeevariosdeestoscomentarios,yemplealasintaxis especial.Enlosartculosquesiguenasteiremospresentandomsdetallessobredichasintaxis. Aqusimplementepretendemosmostrarcmoseemplealaherramienta,cuyonombrees javadoc .Paragenerardocumentacinsobrenuestrocdigodeejemplodebemosteclearelcomando: javadocHolaMundo.java EstecomandonosgeneraunmontndepginasHTML,nounasola.Habitualmente,suele emplearseparadocumentarprogramascomplejosdondetienesentidoestructurarladocumentacin generadaendistintaspginasweb.Laquenosinteresaeslaquetienepornombre"index.html". Podemosversucontenidoenlafigura5.Comoellectorpodrobservar,loscomentariosque introdujimosenelcdigofuentehansidoextradosporlaherramientaeinterpretadosdemodo adecuadoparagenerarladocumentacin. Documentacinquegeneraelcomandojavadocparanuestroejemplo

2.4ElvisordeApplets:elcomandoappletviewer

TodavatardaremosvariosnmerosenexplicarquesunApplet.Pero,porcompletitud, presentaremosaqulaltimaherramientadelJDKqueemplearemosenestaseriedeartculos: appletviewer .SetratadeuncomandoqueverificaelcomportamientodeunApplet,esdecir,deunaaplicacin Javadiseadaparaejecutarsedentrodeunnavegadorweb.Laentradadelcomandohadeseruna pginawebquecontengaunareferenciaalappletquedeseamosprobar.Susintaxises: appletviewermipagina.html Elcomandoignoratodoelcontenidodelapginawebquenoseanapplets,yselimitaaejecutar stos.Unejemplodepginawebmnimaparapoderprobarunappletllamado applet.class seraelmostradoenellistado2. PginawebconunaetiquetaqueempotraunAppleteneldocumentoHTML.EnelCDque acompaaestarevistalectorpodrencontrarunarchivoconnombre Appplet.class ,juntoconunapginawebconnombreApplet.html .Puedecopiarambosaldirectoriodetrabajoyprobarconelloselcomandoappletviewer .Tambinpuedeabrirlapginawebconsunavegadorwebfavoritoypodrcomprobarcomo,siya hainstaladoelJDK,puedeverelAppletenelnavegador. 3Tiposdedatosprimitivos EnesteapartadopresentaremoslostiposdedatosprimitivosqueexistenenJava.Aquelloslectores queestnfamiliarizadosconC,oC++,noencontrarnprcticamentenadanuevoenesteapartado: lostipossoncasiidnticosalosdeestoslenguajes,salvoqueaqutodoslosenterossonsigned siempre. EnJavatodavariabledeclaradahadetenersutipo,yademsantesdepoderemplearlahemosde inicializarlaaunvalor,sinoelcompiladorsequejarynogenerarlosarchivos.class.Estonoes necesario,porejemplo,enC,siendofuentedemuchoserroreselemplearenoperacionesvariables quenoshemosolvidadodeinicializar.Acontinuacinpasamosadescribirlosdistintostiposde datosprimitivosqueexistenenJava.
3.1Enteros

Almacenan,comosupropionombreindica,nmerosenteros;estoes,nmerossinpartedecimal.

Cabedestacar,comoyaseindicanteriormente,queporrazonesdeportabilidadtodoslosdatosen Javatienenelmismotamaoyformatoentodaslasplataformas.EnJavahaycuatrotiposde enteros,comosemuestraenlatabla1.Estatablatambinnosmuestraelrango(valoresmnimosy mximos)decadatipoyelespacioqueocupanenmemoria,medidoenbytes. TABLA1:tipodedatosenterosenJava Tipo byte short int long Tamao(bytes) 1 2 4 8 Rango 128a127 32768a32767 2147483648a2147483647 9223372036854775808a 9223372036854775807

Paraindicarqueunliteralenteroesdetipolongdebemosaadirleuna L alfinal:elnmero23 esunint yelnmero23L esunlong .


3.2Reales

Almacenannmerosreales,esdecir,nmerosconpartedecimal.Comosemuestraenlatabla2,hay dostiposdiferentesdenmeroreal;sediferenciantantoenlaprecisin(elnmerodecifras decimalesquesoncapacesderepresentar)comoenelrangodevaloresquepermitenrepresentar. TABLA2:tiposdedatosrealesenJava Tipo Tamao(bytes) Rango 3.40282347E+38a +3.40282347E+38 179769313486231570E+308a+ 179769313486231570E+308

float

double

Siqueremosindicarqueunliteralrealesdetipo float debemosaadirunaF

despusdel:2.3F ,sinopordefectoserdouble .EstosueleserunacausahabitualdequebraderosdecabezaparalosprogramadoresJavanovatos que,cuandoescribenunasentenciadeltipofloatf=2.3; nocomprendenporquelcompiladordaunerror;estamosasignandounnmerodouble ,2.3 ,aunavariabledetipofloat .Enestaoperacinpuedeperderseinformacinyelcompiladornosavisa. estcodificadoenunformatodenominadoUnicode.UnicodeesunaextensindeASCII,yaque steltimoslotenacapacidadpararepresentar256smbolosdistintos.Parapoderrepresentar todoslosalfabetos(chino,japons,ruso...)yunamayorcantidaddesmbolossecreelformato Unicode. EnJava,aligualqueenC,sedistinguelarepresentacindelosdatos char frentealascadenasdecaracteres.Loschar vanentrecomillassimples:charch=‘a’; ,mientrasquelascadenasdecaracteresusancomillasdobles.
3.4Datoslgicos:boolean

Setratadeuntipodedatoquesolopuedetomardosvalores: true yfalse ,querepresentanlosvaloreslgicosciertoyfalso,respectivamente.Porejemplo,lasentencia boleanb=true; inicialavariableb alvalorlgicoquerepresentaunacondicinquesecumple,estoes,unacondicincierta.Esuntipo dedatobastantetilalahoraderealizarchequeossobrecondiciones.EnCnohayundato equivalenteyparasuplirsuausenciamuchasvecesseempleanenterosconvalor1silavariable lgicatomaelvalorlgicociertoy0silavariabletomaelvalorlgicofalso.

4Definicindevariables AligualqueenC,yadiferenciadeFortran,Javarequierequesedeclarenlostiposdetodaslas variablesempleadas.LasintaxisdedeclaracineslamismaqueC: inti;

Sinembargo,yadiferenciaqueenC,serequiereinicializartodaslasvariablesantesdeusarlas,si noelcompiladorgeneraunerroryabortalacompilacin.Sepuededeclarareinicializarvalorauna variableenunamismalnea: inti=0; EnJava,despusdecadalneadecdigosiempredebeirun";".Declaracineinicializacin puedenhacerseenlneasdiferentes: inti; i=0; Esposibledeclarareiniciarvariasvariablesenunalnea: inti=3,j,k=2; Loscaracteresaceptadosenelnombredeunavariablesonloscomprendidosentre AZ ,az ,_ ,$ ycualquiercarcterqueseaunaletraenalgnidioma.EnJava,aligualqueentodolenguajede programacin,hayunaseriedepalabrasreservadasquenopuedenserempleadascomonombresde variables(if ,.int ,char ,else ,goto ...);algunadestassonempleadasenlasintaxisdellenguaje,otras,comogoto noseempleanenlaactualidadperosehanreservadopormotivosdecompatibilidad;porsise decideemplearenelfuturo.

5Reglasdeconversinentredistintostiposnumricos Lasnormasdeconversinentretiposnumricossonlashabitualesenunlenguajedeprogramacin: sienunaoperacinseinvolucranvariosdatosnumricosdedistintostipostodosellosseconvierten altipodedatoquepermiteunamayorprecisinyrangoderepresentacinnumrica;as,por ejemplo: Sicualquieroperandoes

double todosseconvertirnendouble . Sicualquieroperandoes float ynohayningndouble todosseconvertirnafloat . Sicualquieroperandoes long ynohaydatosrealestodosseconvertirnenlong . Sicualquieroperandoes int ynohaydatosrealesnilong todosseconvertirnenint . Encualquierotrocasoelresultadosertambinun int . Javaslotienedostiposdeoperadoresparaoperarnmerosenteros:unoqueaplicaparaoperar datosdetipo long ,yotroqueempleaparaoperardatosdetipoint (estotambinsucedeconlamayorpartedelasCPUactuales).Deestemodocuandooperemosun byte conunbyte ,unshortconunshort

ounshort conunbyte Javaemplearparadichaoperacineloperadordelosdatostipoint ,porloqueelresultadodedichaoperacinserunint siempre. Estasconversionessonimportantesalahoradedeterminarenqutipodevariableguardamosel resultadodelaoperacin;stahadetenerunrangoderepresentacinmayoroigualalrangode representacindelavariableconmayorrangoderepresentacininvolucradaenlaoperacin.Sies derangosuperiornohabrproblemas.Sinorespetamosestaregla,elcompiladorgenerarunerror. Esposibleconvertirundatodejerarquasuperioraunoconjerarquainferior,arriesgndonosa perderinformacinenelcambio.Estetipodeoperacin(almacenarelcontenidodeunavariablede jerarquasuperiorenunadejerarquainferior)sedenominacastomolde.Parallevaracabouncast debemosponerdelantedelavariablecuyotipoqueremoscambiar,entreparntesis,eltipodela variablealcualqueremosrealizarelcambio;porejemplo,lasiguientesentenciarealizauncastde double aint : inti=(int)3.4; Enellistado2mostramosuncdigoJavadondesehaceusodeuncast.Comopodremoscomprobar alejecutarelprograma,alrealizaruncastlavariabledemayorrangoestruncadaparaser almacenadaenlademenorrango;esdecir,3.9999altransformarseaenteromedianteuncastda comoresultado3. Paracomprenderelcdigodellistado2esimportantetenerencuentaqueenJavacuando"sesuma" unvalornumricoaunacadenadecaracteresloquesucedeesquesecreaunanuevacadenade caracteresigualalacadenadecaracteresoriginalconcatenadaconelvalor;esdecir "Edad:"+23 dacomoresultado"Edad:23" . :Estecódigomuestraunejemplodecast. //códigoEjemplo2.javadelCD inti=9,k; floatj=47.9F; System.out.println(“i:“+i+“j:“+j); k=(int)j;//empleodeuncast;kpasaavaler47 System.out.println(“j:“+j+“k:“+k); j=k;//nonecesitacast System.out.println(“j:“+j+“k:“+k);

6Operadores Enesteapartadoveremoslosoperadoresaritmticos,relacionalesylgicosconlosquecuentaJava. 6.1Operadoresaritmticos LosoperadoresaritmticosdeJavason +,,*,/ parasuma,resta,productoydivisin.Eloperador/ representaladivisindeenterossiambosoperandossonenteros.Elmdulodeladivisindedos enterospuedeobtenersemedianteeloperador% .Porejemplo,7/4=1;7%4=3 . Adems,existenlosoperadoresdecrementoeincremento: y++ ,respectivamente.Laoperacinquerealizansonincrementarydecrementarenunaunidadala variablealaqueseaplican.Suaccinesdistintasegnseapliquenantes(preincremento,++a )odespus(postincrementoa++ )delavariable.Enelcasodeloperadorpreincremento,silavariablesobrelaqueseaplicaforma partedeunaexpresinprimeroseincrementarelvalordelavariable,yacontinuacinseevaluar laexpresin.Enelcasodeloperadorpostincremento,silavariablesobrelaqueseaplicaforma partedeunaexpresin,primeroseevaluarlaexpresinyacontinuacinseincrementarelvalor delavariable.Losoperadoresdepredecrementoypostdecrementotienenuncomportamiento anlogo.Ellistado3ilustraestosdistintosescenarios. :Operadoresdepreincrementoypostdecremento. //códigoEjemplo3.javadelCD inti=1; System.out.println("i:"+i); System.out.println("++i:"+++i);//Preincremento,primero//incrementayluegoimprimepor consola System.out.println("i++:"+i++);//Postincremento,primeroimprime//“2”por consolayluegoincrementai. System.out.println("i:"+i);//iporlotantovale3 System.out.println("i:"+i);//Predecremento,primero//decrementaiyluegoloimprimep orconsola System.out.println("i:"+i);//Postdecremento,primeroimprime//iporconsolayluegode decrementa. System.out.println("i:"+i);//Ahoraivale1

6.2Operadoresrelacionales

Losoperadoresrelacionalessonoperadoresquecompruebansisecumpleunadeterminadarelacin, deigualdad,desigualdad,mayorque...entredosvaloresnumricos.Elresultadodelaaplicacinde cualquieroperadorrelacionalessiempreun bolean ,esdecir,laexpresinquesurgedecomparardosvariablesoliteralesmedianteunoperador relacionalslopuedetomardosvalores:true yfalse .Enlatabla3semuestranlosoperadoresrelacionalesdisponiblesenJava,yellistado4muestrasu uso. Enestelistadosegenerannmerosaleatoriosempleandounobjetodetipo Random ;eneltercerartculodeestaserieveremoscmocrearobjetosdesdeJava.Paracomprenderel cdigoellectorlonicoquenecesitasaberesqueelcomandorand.nextInt() generaunnmeroaleatorioentero.Elresultadodeunaposibleejecucindeesteprogramase muestraenellistado5. Tabla1:operadoresrelacionales Operador == != < > <= >= :UsodeoperadoresrelacionalesenJava. //c&oacute;digoEjemplo4.javadelCD Randomrand=newRandom(); //elm&eacute;todonextInt()delobjetoRandomcreadogeneraunn&uacute;meroaleatorioentero. //Elm&oacute;duloentre100deunenteroaleatorioser&aacute;unenteroaleatorioentre0y100. inti=rand.nextInt()%100; Operacinquerealiza Testdeigualdad Testdedesigualdad Menorque Mayorque Menoroigualque Mayoroigualque

intj=rand.nextInt()%100; System.out.println("i="+i); System.out.println("j="+j); System.out.println("i>jes"+(i>j)); System.out.println("i<jes"+(i<j)); System.out.println("i>=jes"+(i>=j)); System.out.println("i<=jes"+(i<=j)); System.out.println("i==jes"+(i==j)); System.out.println("i!=jes"+(i!=j)); :Posibleresultadodelaejecuci&oacute;ndelc&oacute;digodellistado4 i=85 j=4 i>jestrue i<jesfalse i>=jestrue i<=jesfalse i==jesfalse i!=jestrue 6.3Operadoreslgicos Estosoperadoresseaplicansobrevaloreslgicos,esdecir,sobredatosdetipo boolean .EnJavahaytresoperadoreslgicos:lanegacin,elAND(Y)lgicoyelOR(O)lgico.Estos operadoressemuestranenlatabla4.Elcdigodellistado6imprimelatabladeverdadde operadoreslgicosANDyOR,ymuestraelefectodeloperadordenegacin. Tabla4:Operadoreslgicos Operador ! && || :Estec&oacute;digomuestralastablasdeverdaddelosoperadoresl&oacute;gicosANDyOR booleanvariableLogica=false,variableLogica2; variableLogica2=!variableLogica; Operacinquerealiza Notlgico Andlgico Orlgico

System.out.println("variableLogica:"+variableLogica+",variableLogica2:"+variableLogica2) ; System.out.println("variableLogica&&variableLogica2:"+(variableLogica&&variableLogica 2)); System.out.println("variableLogica||variableLogica2:"+(variableLogica||variableLogica2)); System.out.println("\n\nTabladeverdaddeloperador&&:\n"); System.out.println("false&&false:"+(false&&false)); System.out.println("false&&true:"+(false&&true)); System.out.println("true&&false:"+(true&&false)); System.out.println("true&&true:"+(true&&true)); System.out.println("\n\nTabladeverdaddeloperador||:\n"); System.out.println("false||false:"+(false||false)); System.out.println("false||true:"+(false||true)); System.out.println("true||false:"+(true||false)); System.out.println("true||true:"+(true||true)); 7Conclusiones EnesteprimerartculodelaseriehemospresentadoqueslaplataformaJavayculeselpapelque Java,ellenguajedeprogramacin,juegaenella.HemosvistoculessonlascaractersticasdeJava comolenguajedeprogramacin,yhemosaprendidoamanejarlasherramientasbsicasdelkitde desarrolloJava.Tambinhemosvistoculessonlostiposdedatosprimitivosconlosquecuenta Java,cmodefinirvariables,ylosoperadoresaritmticos,relacionalesylgicosdefinidosdentro dellenguaje. Todavanosquedamuchoporandar;enelsiguienteartculodelaseriepresentaremosotrostiposde datosqueseempleanmuycomnmenteenellenguaje,aunqueestaveznosonprimitivos:Strings, enumeracionesyarrays.HaremosunrepasorpidodelalibreramatemticaqueproporcionaJava, ymostraremoslasestructurasdecontroldeflujo(buclesycondicionales)conlasquecuentael lenguaje.Osesperoatodoselmesqueviene. Descargas Cdigosdelartculo

You might also like