Está en la página 1de 32

DesarrollodeAplicacionesWeb Tema2

INDICE

1Introduccin...................................................................................................................................2
2Lasvariableseidentificadores......................................................................................................4
2.1Identificadores.......................................................................................................................................4
2.2Normasdeestiloparanombrarvariables..................................................................................................5
2.3Palabrasreservadas...............................................................................................................................6
2.4Tiposdevariables.ConstantesI..............................................................................................................7
2.5Tiposdevariables.ConstantesII................................................................................................................8
Creandonuestroprimerprograma.............................................................................................................................9
3.Lostiposdedatos..........................................................................................................................11
3.1TiposdedatosprimitivosI......................................................................................................................12
http://platea.pntic.mec.es/~lgonzale/tic/binarios/aritmetica.html.............................................................13
3.2TiposdedatosprimitivosII......................................................................................................................13
3.3Declaracineinicializacin.....................................................................................................................15
3.4Tiposreferenciados.................................................................................................................................16
3.5Tiposenumerados...................................................................................................................................17
4.Literalesdelostiposprimitivos.....................................................................................................19
5.Operadoresyexpresiones.............................................................................................................21
5.1Operadoresaritmticos..........................................................................................................................21
5.2Operadoresdeasignacin.......................................................................................................................22
5.3Operadorcondicional..............................................................................................................................23
5.4Operadoresderelacin...........................................................................................................................24
5.5Operadoreslgicos.................................................................................................................................25
5.6Operadoresdebits..................................................................................................................................25
5.7Trabajoconcadenas...............................................................................................................................26
5.8Precedenciadeoperadores....................................................................................................................27
6.Conversindetipo........................................................................................................................29
6.1ConversindetiposdedatosenJava...................................................................................................30
6.1.1ReglasdePromocindeTiposdeDatos..........................................................................................................30
6.1.2ConversindenmerosenComaflotante(float,double)aenteros(int)......................................................31
6.1.3Conversionesentrecaracteres(char)yenteros(int)......................................................................................31
6.1.4Conversionesdetipoconcadenasdecaracteres(String)...............................................................................31
7.Comentarios..................................................................................................................................32

1
Creacindemiprimerprograma DAW

Creacindemiprimerprograma
Caso Prctico
Todos los lenguajes de programacin estn constituidos por elementos concretos que permiten
realizar las operaciones bsicas del lenguaje, como tipos de datos, operadores e instrucciones. Estos
conceptos deben ser dominados por el programador con objeto de incorporarse con ciertas garantas
a un equipo de programacin. Debemos tener en cuenta que los programas trabajan con datos, los
cuales almacenan en memoria y son posteriormente usados para la toma de decisiones en el
programa.
En esta unidad se introducen los distintos tipos de datos que se pueden emplear en Java. En
concreto, se vern los tipos primitivos en Java, as como las variables y las constantes. En posteriores
captulos veremos otros elementos bsicos del lenguaje, incluyendo estructuras de datos ms
sofisticadas.
Mara y Juan han formado equipo para desarrollar una aplicacin informtica para una clnica
veterinaria. Ada ha convocado una reunin con el cliente para concretar los requerimientos de la
aplicacin, pero lo que est claro es que debe ser multiplataforma. El lenguaje escogido ha sido Java.
Mara tiene conocimientos de redes y de pginas web pero est floja en programacin. Juan ha
aprendido Java en su ciclo de DAI hace 4 aos.
Lo que hace falta es entender bien los conceptos de programacin orientada a objetos le
comenta Juan a Mara. Todo lo concerniente al mundo real puede ser modelado a travs de
objetos. Un objeto contiene datos y sobre l se hacen operaciones y gira toda la aplicacin.
Mara est entusiasmada con el proyecto, cree que es una buena oportunidad para aprender un
lenguaje de la mano de Juan que se le da bastante bien todo el mundo de la programacin.

1 - Introduccin
Cada vez que usamos un ordenador, estamos ejecutando varias aplicaciones que nos permiten
realizarciertastareas.Porejemplo,ennuestrodaada,usamoselcorreoelectrnicoparaenviary
recibircorreos,oelnavegadorparaconsultarpginasenInternet;ambasactividadessonejemplos
deprogramasqueseejecutanenunordenador.

Los programas de ordenador deben resolver un problema, para lo cual debemos utilizar de forma
inteligenteylgicatodosloselementosquenosofreceellenguaje.Poresoesimportanteelegirun
lenguajedeprogramacinconelquenossintamoscmodosporquelodominemossuficientemente
y, por supuesto, porque sepamos que no va a ofrecer limitaciones a la hora de desarrollar
aplicacionesparadiferentesplataformas.

El lenguaje que vamos a utilizar en este mdulo es Java, multiplataforma, robusto y fiable. Un
lenguaje que reduce la complejidad y se considera dentro de los lenguajes modernos orientados a
objetos.Estaunidadnosvamosaadentrarensusintaxis,vamosaconocerlostiposdedatosconlos
quetrabaja,lasoperacionesquetienendefinidascadaunodeellos,utilizandoejemplossencillosque
nosmuestrenlautilidaddetodoloaprendido.

Paraello,vamosatratarsobrecmosealmacenanyrecuperanlosdatosdevariablesycadenasen
Java, y cmo se gestionan estos datos desde el punto de vista de la utilizacin de operadores.
Trabajar con datos es fundamental en cualquier programa. Aunque ya hayas programado en este
lenguaje,chaleunvistazoalcontenidodeestaunidad,porquepodrsrepasarmuchosconceptos.

PARASABERMS

2
DesarrollodeAplicacionesWeb Tema2

Ahora que vamos a empezar con la sintaxis de Java, quizs te interese tener a mano la
documentacinqueofrecelapginawebdeOraclesobreJavaSE.LaplataformaJavaSEest
formada principalmente por dos productos: el JDK, que contiene los compiladores y
depuradoresnecesariosparaprogramar,yelJRE,queproporcionalaslibrerasobibliotecas
ylaJVM,entreotraseriedecomponentes.
Puedes consultar informacin de la versin 6 de Java SE, en el siguiente enlace donde
puedesencontrartodaladocumentacinsobreestatecnologa:
EnlacealawebdeOracledondepodrsverinformacinsobrelaplataformaJavaSE.
http://download.oracle.com/javase/6/docs/index.html
Dentro de la documentacin de Oracle sobre Java SE se encuentra el libro The Java
LanguageSpecification.
Este libro est escrito por los inventores del lenguaje, y constituye una referencia tcnica
casi obligada sobre el mismo. Como mucha de la documentacin oficial de Java, se
encuentraeningls.Elenlacedirectoeselsiguiente:
http://java.sun.com/docs/books/jls/index.html

RECOMENDACIN
Acostmbrate a leer y consultar la documentacin sobre la versin de Java que ests
utilizandoentusprogramas.Esoteayudarasabertodaslasposibilidadesquetieneel
lenguaje,ysienunmomentodadoestsutilizandobienunadeterminadacaracterstica.

3
Creacindemiprimerprograma DAW

2 Las variables e identificadores


Caso prctico
Mara y Juan han comprobado que una aplicacin informtica es un trabajo de equipo que debe estar
perfectamente coordinado. El primer paso es la definicin de los datos y las variables que se van a
utilizar.
Las decisiones que se tomen pueden afectar a todo el proyecto, en lo referente al rendimiento de la
aplicacin y ahorro de espacio en los sistemas de almacenamiento.
Despus de la ltima reunin del equipo de proyecto ha quedado claro cules son las
especificaciones de la aplicacin a desarrollar. Juan no quiere perder el tiempo y ha comenzado a
preparar los datos que va a usar el programa. Le ha pedido a Mara que vean juntos qu variables y
tipos de datos se van a utilizar, Juan piensa que le vendr bien como primera tarea para
familiarizarse con el entorno de programacin y con el lenguaje en s.
Unprogramamanejadatosparahacerclculos,presentarloseninformesporpantallaoimpresora,
solicitarlos al usuario, guardarlos en disco, etc. Para poder manejar esos datos, el programa los
guardaenvariables.

Una variable es una zona en la memoria del computador con un valor que puede ser almacenado
paraserusadomstardeenelprograma.Lasvariablesvienendeterminadaspor:

unnombre,quepermitealprogramaaccederalvalorquecontieneenmemoria.Debeserun
identificadorvlido.
untipodedato,queespecificaquclasedeinformacinguardalavariableenesazonade
memoria
unrangodevaloresquepuedeadmitirdichavariable.

Alnombrequeledamosalavariableselellamaidentificador.Losidentificadorespermitennombrar
los elementos que se estn manejando en un programa. Vamos a ver con ms detalle ciertos
aspectossobrelosidentificadoresquedebemostenerencuenta.

CITAS PARA PENSAR


Lasgrandesideasrequierenungranlenguaje.Aristfanes.
PARASABERMS
BruceEckeleselautordeloslibrossobreJavayC++,dirigidosaprogramadoresquedesean
aprendersobreestoslenguajesysobrelaprogramacinorientadaaobjetos.Esteescritorha
tenido la buena costumbre de editar sus libros para que puedan descargarse gratis. As,
podemosaccederdeformatotalmentegratuitaalaterceraedicindesulibroThinkingin
Javaenelsiguienteenlace(eningls):
http://www.mindviewinc.com/Books/downloads.html

A partir de ahora es conveniente que utilices algn manual de apoyo para iniciarte a la
programacinenJava.
TeproponemoseldelaseriedeLibrosAprendaInformticacomosiestuvieraenprimero,
delaEscuelaSuperiordeIngenierosIndustrialesdeSanSebastin(UniversidaddeNavarra):
http://mat21.etsii.upm.es/ayudainf/aprendainf/Java/Java2.pdf

2.1Identificadores
UnidentificadorenJavaesunasecuenciailimitadasinespaciosdeletrasydgitosUnicode,deforma
queelprimersmbolodelasecuenciadebeserunaletra,unsmbolodesubrayado(_)oelsmbolo
dlar($).Porejemplo,sonvlidoslossiguientesidentificadores:

4
DesarrollodeAplicacionesWeb Tema2

x5 NUM_MAX numCuenta

En la definicin anterior decimos que un identificador es una secuencia ilimitada de caracteres


Unicode.PeroquesUnicode?Unicodeesuncdigodecaracteresosistemadecodificacin,un
alfabetoquerecogeloscaracteresdeprcticamentetodoslosidiomasimportantesdelmundo.Las
lneasdecdigoenlosprogramasseescribenusandoeseconjuntodecaracteresUnicode.

EstoquieredecirqueenJavasepuedenutilizarvariosalfabetoscomoelGriego,rabeoJapons.De
estaforma,losprogramasestnmsadaptadosaloslenguajeseidiomaslocales,porloquesonms
significativosyfcilesdeentendertantoparalosprogramadoresqueescribenelcdigo,comopara
los que posteriormente lo tienen que interpretar, para introducir alguna nueva funcionalidad o
modificacinenlaaplicacin.

El estndar Unicode originalmente utilizaba 16 bits, pudiendo representar hasta 65.536 caracteres
distintos, que es el resultado de elevar dos a la potencia diecisis. Actualmente Unicode puede
utilizarmsomenosbits,dependiendodelformatoqueseutilice:UTF8,UTF16UTF32.Acada
carcter le corresponde unvocamente un nmero entero perteneciente al intervalo de 0 a 2
elevadoan,siendonelnmerodebitsutilizadospararepresentarloscaracteres.Porejemplo,la
letraeselentero164.Adems,elcdigoUnicodeescompatibleconelcdigoASCII,yaquepara
loscaracteresdelcdigoASCII,Unicodeasignacomocdigolosmismos8bits,alosquelesaadea
laizquierdaotros8bitstodosacero.LaconversindeuncarcterASCIIaUnicodeesinmediata.

RECOMENDACIN

Una buena prctica de programacin es seleccionar nombres adecuados para las


variables, eso ayuda a que el programa se autodocumente, y evita un nmero excesivo de
comentarios para aclarar el cdigo.

PARASABERMS
Enlace para acceder a la documentacin sobre las distintas versiones de Unicode en la
pginaweboficialdelestndar:
http://www.unicode.org/versions/

2.2Normasdeestiloparanombrarvariables
Alahoradenombrarunidentificadorexistenunaseriedenormasdeestilodeusogeneralizadoque,
nosiendoobligatorias,seusanenlamayorpartedelcdigoJava.Estasreglasparalanomenclatura
devariablessonlassiguientes:

Java distingue las maysculas de las minsculas. Por ejemplo, Alumno y alumno son
variablesdiferentes.
Nosesuelenutilizaridentificadoresquecomiencencon$o_,ademselsmbolodel
dlar,porconvenio,noseutilizanunca.
Nosepuedeutilizarelvalorbooleano(trueofalse)nielvalornulo(null).
Los identificadores deben ser lo ms descriptivos posibles. Es mejor usar palabras
completas en vez de abreviaturas crpticas. As nuestro cdigo ser ms fcil de leer y
comprender. En muchos casos tambin har que nuestro cdigo se autodocumente. Por
ejemplo,sitenemosquedarleelnombreaunavariablequealmacenalosdatosdeuncliente

5
Creacindemiprimerprograma DAW

sera recomendable que la misma se llamara algo as como FicheroClientes o


ManejadorCliente,ynoalgopocodescriptivocomoCl33.

Ademsde estasrestricciones,enlasiguientetablapuedesverotrasconvenciones,que nosiendo


obligatorias,ssonrecomendablesalahoradecrearidentificadoresenJava.

Identificador Convencin Ejemplo


Comienzaporletraminscula,
ysitienenmsdeunapalabra
nombredevariable numAlumnos, suma
secolocanjuntasyelresto
comenzandopormaysculas
Enletrasmaysculas,
separandolaspalabrasconel
nombredeconstante guinbajo,porconvenioel TAM_MAX, PI
guinbajonoseutilizaen
ningnotrositio
nombredeunaclase Comienzaporletramayscula String, MiTipo
modifica_Valor,
nombredefuncin Comienzaconletraminscula obtiene_Valor

AUTOEVALUACIN:
Un identificador es una secuencia de uno o ms smbolos Unicode que cumple las
siguientes condiciones. Seala la afirmacin correcta.
Todos los identificadores han de comenzar con una letra, el carcter subrayado (_) o el
carcter dlar ($).
No puede incluir el carcter espacio en blanco.
Puede tener cualquier longitud, no hay tamao mximo.
Todas las anteriores son correctas.
Adems, se desaconseja el uso del smbolo dlar, y el guin bajo prcticamente slo se utiliza para separar palabras en
variables de tipo Constante.

2.3Palabrasreservadas
Las palabras reservadas, a veces tambin llamadas palabras clave o keywords, son secuencias de
caracteres formadas con letras ASCII cuyo uso se reserva al lenguaje y, por tanto, no pueden
utilizarseparacrearidentificadores.

LaspalabrasreservadasenJavason:

Abstract continue for new switch


assert default goto packages ynchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while

6
DesarrollodeAplicacionesWeb Tema2

Haypalabrasreservadasquenoseutilizanenlaactualidad,comoeselcasodeconst ygoto,que
apenas se utilizan en la actual implementacin del lenguaje Java. Por otro lado, puede haber otro
tipodepalabrasotextoenellenguajequeaunquenoseanpalabrasreservadastampocosepueden
utilizar para crear identificadores. Es el caso de true y false que, aunque puedan parecer palabras
reservadas, porque no se pueden utilizar para ningn otro uso en un programa, tcnicamente son
literalesbooleanos.Igualmente,nullesconsideradounliteral,nounapalabrareservada.

DESTACADO
Cuando tras haber consultado la documentacin de Java an no tengas seguridad de
cmo funciona alguna de sus caractersticas, prubala en tu ordenador, y analiza cada
mensaje de error que te d el compilador para corregirlo. Busca en foros de Internet
erroressimilaresparaayudartedelaexperienciadeotrosusuariosyusuarias.
Normalmente, los editores y entornos integrados de desarrollo utilizan colores para diferenciar las
palabras reservadas del resto del cdigo, los comentarios, las constantes y literales, etc. De esta
forma se facilita la lectura del programa y la deteccin de errores de sintaxis. Dependiendo de la
configuracindelentornoseutilizarnunoscoloresuotros,esposibleennegro
PuedequeteinteresecambiarloscoloresqueutilizaNetbeansparalasintaxisdetusprogramas,por
ejemplosiquieresqueloscomentariosaparezcanenverdeenlugardeengris,oindicarquetienesla
autoradelosmismos,enlugardequeteaparezcaelnombredeusuariodelsistemaoperativo.

2.4Tiposdevariables.ConstantesI
En un programa nos podemos encontrar distintos tipos de variables. Las diferencias entre una
variableyotradependerndevariosfactores,porejemplo,eltipodedatosquerepresentan,sisu
valorcambiaonoalolargodetodoelprograma,oculeselpapelquellevanacaboenelprograma.
Deestaforma,ellenguajedeprogramacinJavadefinelossiguientestiposdevariables:

a) Variables de tipos primitivos y variables referencia, segn el tipo de informacin que


contengan. En funcin de a qu grupo pertenezca la variable, tipos primitivos o tipos
referenciados,podrtomarunosvaloresuotros,ysepodrndefinirsobreellaunasoperaciones
uotras.
b) Variables y constantes, dependiendo de si su valor cambia o no durante la ejecucin del
programa.Ladefinicindecadatiposera:
Variables.Sirvenparaalmacenarlosdatosdurantelaejecucindelprograma,puedenestar
formadas por cualquier tipo de dato primitivo o referencia. Su valor puede cambiar varias
vecesalolargodetodoelprograma.
Constantesovariablesfinales.Sonaquellasvariablescuyovalornocambiaalolargodetodo
elprograma.
c) Variablesmiembroyvariableslocales,enfuncindellugardondeaparezcanenelprograma.La
definicinconcretasera:
Variables miembro. Son las variables que se crean dentro de una clase (Componente
softwarereutilizableexpresadoentrminosdeatributosycomportamientosomtodos.Los
programadores pueden usar sus propias clases o las incluidas en el lenguaje), fuera de
cualquiermtodo(Elementosdeunaclaseuobjetocompuestosporunaseriedesentencias
quesirvenparadescribirlasaccionesarealizarconesaclaseuobjeto).Puedenserdetipos
primitivos o referencias, variables o constantes. En un lenguaje puramente orientado a
objetoscomoesJava,todosebasaenlautilizacindeobjetos(Losobjetossecreanapartir

7
Creacindemiprimerprograma DAW

declases,yrepresentancasosindividualesdeunaclase),loscualessecreanusandoclases.
Enlasiguienteunidadveremoslosdistintostiposdevariablesmiembroquesepuedenusar.
Variableslocales.Sonlasvariablesquesecreanyusandentrodeunmtodoo,engeneral,
dentro de cualquier bloque de cdigo. La variable deja de existir cuando la ejecucin del
bloque de cdigo o el mtodo finaliza. Al igual que las variables miembro, las variables
localestambinpuedenserdetiposprimitivosoreferencias.

AUTOEVALUACIN:
Relaciona los tipos de variables con la caracterstica correspondiente, escribiendo el nmero
asociadoalacaractersticaenelhuecocorrespondiente.
Ejercicioderelacionar
Lasvariables... Relacin Tienenlacaractersticadeque
Locales. 2
1.Unavezinicializadassuvalornuncacambia.
Miembro. 3
2.Vandentrodeunmtodo.
Constantes. 1
3.Vandentrodeunaclase.

2.5Tiposdevariables.ConstantesII
El siguiente ejemplo muestra el cdigo para la creacin de varios tipos de variables. Como ya
veremosenapartadosposteriores,lasvariablesnecesitandeclararse,avecesdandounvaloryotras
conunvalorpordefecto.

Esteprogramacreaunaclasequecontienelassiguientesvariables:

Variable constante llamada PI: esta variable por haberla declarado como constante no
podrcambiarsuvaloralolargodetodoelprograma.
Variablemiembrollamadax:Estavariablepertenecealaclaseejemplovariables.La
variablexpuedealmacenarvaloresdeltipoprimitivoint.Elvalordeestavariablepodrser
modificadoenelprograma,normalmentepormediodealgnotromtodoquesecreeenla
clase.
Variable local llamada valorantiguo: Esta variable es local porque est creada dentro
del mtodo obtenerX(). Slo se podr acceder a ella dentro del mtodo donde est
creada,yaquefueradelnoexiste.

8
DesarrollodeAplicacionesWeb Tema2

En apartados posteriores veremos cmo darle ms funcionalidad a nuestros programas, mostrar


algnresultadoporpantalla,haceroperaciones,etc.Porelmomento,siejecutaselejemploanterior
simplementemostrarelmensajeGENERACIN CORRECTA,indicandoquetodohaidobienyel
programahafinalizado.

Creando nuestro primer programa

9
Creacindemiprimerprograma DAW

10
DesarrollodeAplicacionesWeb Tema2

3. Los tipos de datos


Caso prctico
Mara ya ha hecho sus pinitos como programadora. Ahora mismo est ayudando a Juan con las
variables y le ha surgido un problema.
El lenguaje se est comportando de una forma extraa, quiero llamar a una variable final y no me
deja Le comenta a Juan.
Claro, eso es porque final es una palabra reservada y ya hemos visto que no la puedes utilizar para
nombrar variables le responde Juan.
Vaya! exclama Mara, es verdad!, y qu otros requisitos debo tener en cuenta a la hora de
declarar las variables?
Pues lo importante es saber qu tipo de informacin hay que guardar, para poder asignarles el tipo
de dato adecuado. Tienes un momento y te lo cuento? le dice Juan
Enloslenguajesfuertementetipados,atododato(constante,variableoexpresin)lecorresponde
untipoqueesconocidoantesdequeseejecuteelprograma.

El tipo limita el valor de la variable o expresin, las operaciones que se pueden hacer sobre esos
valores,yelsignificadodeesasoperaciones.Estoesasporqueuntipodedatonoesmsqueuna
especificacindelosvaloresquesonvlidosparaesavariable,ydelasoperacionesquesepueden
realizarconellos.

Debidoaqueeltipodedatodeunavariableseconocedurantelarevisinquehaceelcompilador
paradetectarerrores,oseaentiempodecompilacin,estalaboresmuchomsfcil,yaquenohay
queesperaraqueseejecuteelprogramaparasaberquvaloresvaaconteneresavariable.Estose
consigue con un control muy exhaustivo de los tipos de datos que se utilizan, lo cual tiene sus
ventajaseinconvenientes,porejemplocuandoseintentaasignarunvalordeuntipo,aunavariable
de otro tipo. Sin embargo, en Java, puede haber conversin entre ciertos tipos de datos, como
veremosposteriormente.

Ahoranoeselmomentodeentrarendetallesobrelaconversindetipos,perosdebemosconocer
conexactituddequtiposdedatosdisponeellenguajeJava.Yahemosvistoquelasvariables,segn
la informacin que contienen, se pueden dividir en variables de tipos primitivos y variables
referencia.Peroquesuntipodedatoprimitivo?Yuntiporeferencia?Estoesloquevamosaver
acontinuacin.LostiposdedatosenJavasedividenprincipalmenteendoscategoras:

Tiposdedatossencillosoprimitivos.Representanvaloressimplesquevienenpredefinidosen
ellenguaje;contienenvaloresnicos,comoporejemplouncarcterounnmero.
Tipos de datos referencia. Se definen con un nombre o referencia (puntero) que contiene la
direccinenmemoriadeunvalorogrupodevalores.Dentrodeestetipotenemosporejemplo
losvectoresoarrays,quesonunaseriedeelementosdelmismotipo,olasclases,quesonlos
modelosoplantillasapartirdeloscualessecreanlosobjetos.

En el siguiente apartado vamos a ver con detalle los diferentes tipos de datos que se engloban
dentrodeestasdoscategoras.
AUTOEVALUACIN:
El tipado fuerte de datos supone que:
A todo dato le corresponde un tipo que es conocido antes de que se ejecute el programa.
El lenguaje hace un control muy exhaustivo de los tipos de datos.

11
Creacindemiprimerprograma DAW

El compilador puede optimizar mejor el tratamiento de los tipos de datos.


Todas las anteriores son correctas.
En un lenguaje fuertemente tipado se cumplen todas las condiciones anteriores.

3.1TiposdedatosprimitivosI
Los tipos primitivos son aqullos datos sencillos que constituyen los tipos de informacin ms
habituales:nmeros,caracteresyvaloreslgicosobooleanos.Alcontrarioqueenotroslenguajesde
programacinorientadosaobjetos,enJavanosonobjetos.

Una de las mayores ventajas de tratar con tipos primitivos en lugar de con objetos, es que el
compiladordeJavapuedeoptimizarmejorsuuso.Otraimportantecaracterstica,esquecadauno
delostiposprimitivostieneidnticotamaoycomportamientoentodaslasversionesdeJavaypara
cualquier tipo de ordenador. Esto quiere decir que no debemos preocuparnos de cmo se
representarn los datos en distintas plataformas, y asegura la portabilidad de los programas, a
diferencia de lo que ocurre con otros lenguajes. Por ejemplo, el tipo int siempre se representar
con32bits,consigno,yenelformatoderepresentacincomplementoa2,encualquierplataforma
quesoporteJava.

TIPOSDEDATOSPRIMITIVOS
Valorpor
Tipo Descripcin Bytes Rango
default
byte Enteromuycorto 1 128a127 0
short Enterocorto 2 32,768a32,767 0
int Entero 4 2,147,483,648a2,147,483,647 0
9,223,372,036,854,775,808 a
long Enterolargo 8 0L
9,223,372,036,854,775,807
Numeroconpuntoflotantede +/1.4E45(+/1.4times1045)a
float precisinindividualconhasta 4 +/3.4E38(+/3.4times1038) 0.0f
7dgitossignificativos
Numeroconpuntoflotantede +/4.9E324(+/4.9times10324)
double precisindobleconhasta16 8 a+/1.7E308(+/1.7times10308) 0.0d
dgitossignificativos
\u0000 \u0000
char CarcterUnicode2 a
\uFFFF
boolean ValorVerdaderooFalso 1 trueofalse false

public class Example {


public static void main(String[] args) {
//declarar variables
byte mes = 12;
int contador = 0;
double pi = 3.1415926535897932384626433832795;
float interes = 4.25e2F;
char letra = 'Z';
boolean encontrado = true;
//imprimir valores
System.out.println(mes); //imprimir 12
System.out.println(contador); //imprimir 0
System.out.println(pi); //imprimir 3.141592653589793
System.out.println(interes); //imprimir 425.0

12
DesarrollodeAplicacionesWeb Tema2

System.out.println(letra); //imprimir Z
System.out.println(encontrado); //imprimir true
}
}

SABASQU?.
Javaespecificaeltamaoyformatodetodoslostiposdedatosprimitivosconindependenciadela
plataformaosistemaoperativodondeseejecuteelprograma,deformaqueelprogramadornotiene
que preocuparse sobre las dependencias del sistema, y no es necesario escribir versiones distintas
delprogramaparacadaplataforma.

Hayunapeculiaridadenlostiposdedatosprimitivos,yesqueeltipodedatocharesconsiderado
por el compilador como un tipo numrico, ya que los valores que guarda son el cdigo Unicode
correspondiente al carcter que representa, no el carcter en s, por lo que puede operarse con
caracterescomosisetrataradenmerosenteros.

Porotraparte,alahoradeelegireltipodedatoquevamosautilizarqucriterioseguiremospara
elegiruntipodedatouotro?Puesdeberemostenerencuentacmoeslainformacinquehayque
guardar, si es de tipo texto, numrico, y, adems, qu rango de valores puede alcanzar. En este
sentido, hay veces que aunque queramos representar un nmero sin decimales, tendremos que
utilizardatosdetiporeal.

Porejemplo,eltipodedatointnopodrarepresentarlapoblacinmundialdelplaneta,yaqueel
valor mximo que alcanza es de 2.147.483.647, siendo ste el nmero mximo de combinaciones
posiblescon32bits,teniendoencuentaquelarepresentacindelosnmerosenterosenJavautiliza
complemento a 2. Si queremos representar el valor correspondiente a la poblacin mundial del
planeta, cerca de 7 mil millones de habitantes, tendramos que utilizar al menos un tipo de dato
long,osinotenemosproblemasdeespaciountipofloat.

Sinembargo,lostiposrealestienenotroproblema:laprecisin.Vamosavermssobreellosenel
siguienteapartado.

Si quieres obtener informacin sobre cmo se lleva a cabo la representacin interna de


nmerosenterosysobrelaaritmticabinaria,puedesconsultarelsiguienteenlace:
http://platea.pntic.mec.es/~lgonzale/tic/binarios/aritmetica.html

3.2TiposdedatosprimitivosII
Eltipodedatorealpermiterepresentarcualquiernmerocondecimales.Aligualqueocurreconlos
enteros,lamayoradeloslenguajesdefinenmsdeuntipodedatoreal,enfuncindelnmerode
bitsusadopararepresentarlos.Cuantomayorseaesenmero:

Msgrandepodrserelnmerorealrepresentadoenvalorabsoluto
Mayorserlaprecisindelapartedecimal

Entrecadadosnmerosrealescualesquiera,siempretendremosinfinitosnmerosreales,porloque
la mayora de ellos los representaremos de forma aproximada. Por ejemplo, en la aritmtica
convencional, cuando dividimos 10 entre 3, el resultado es 3.3333333, con la secuencia de 3

13
Creacindemiprimerprograma DAW

repitindoseinfinitamente.Enelordenadorslopodemosalmacenarunnmerofinitodebits,porlo
queelalmacenamientodeunnmerorealsersiempreunaaproximacin.

Losnmerosrealesserepresentanencomaflotante,queconsisteentrasladarlacomadecimalala
primeracifrasignificativadelvalor,conobjetodepoderrepresentarelmximodenmerosposible.

Unnmeroseexpresacomo: Valor=mantisax2exponente

En concreto, slo se almacena la mantisa y el exponente al que va elevada la base. Los bits
empleados por la mantisa representan la precisin del nmero real, es decir, el nmero de cifras
decimales significativas que puede tener el nmero real, mientras que los bits del exponente
expresan la diferencia entre el mayor y el menor nmero representable, lo que viene a ser el
intervaloderepresentacin.

EnJavalasvariablesdetipofloatseempleanpararepresentarlosnmerosencomaflotantede
simpleprecisinde32bits,deloscuales24sonparalamantisay8paraelexponente.Lamantisaes
unvalorentre1.0y1.0yelexponenterepresentalapotenciade2necesariaparaobtenerelvalor
quesequiererepresentar.Porsuparte,lasvariablestipodoublerepresentanlosnmerosencoma
flotantededobleprecisinde64bits,deloscuales53sonparalamantisay11paraelexponente.

La mayora de los programadores en Java emplean el tipo double cuando trabajan con datos de tipo
real, es una forma de asegurarse de que los errores cometidos por las sucesivas aproximaciones
sean menores. De hecho, Java considera los valores en coma flotante como de tipo double por
defecto.
Con el objetivo de conseguir la mxima portabilidad de los programas, Java utiliza el estndar
internacionalIEEE754paralarepresentacininternadelosnmerosencomaflotante,queesuna
formadeasegurarsedequeelresultadodelosclculosseaelmismoparadiferentesplataformas.

PARASABERMS
La siguiente pgina es la web oficial sobre el estndar internacional IEEE 7542008 para
representacindenmerosencomaflotante(eningls):
http://grouper.ieee.org/groups/754/
AUTOEVALUACIN:
Relaciona los tipos primitivos con los bits y rango de valores correspondientes,
escribiendo el nmero asociado en el hueco correspondiente.
Ejercicio de relacionar
Tipo Relacin Caracterstica
short 3 Coma flotante de 64 bits, usando la representacin IEE754-2008
5
Entero de 32 bits, rango de valores de -2.147.483.648 (-231) a 2.147.483.647
byte
(+231-1)
double 1 Entero de 16 bits, rango de valores de -32.768 (-215) a +32.767 (+215-1)
long 6 Coma flotante de 32 bits, usando la representacin IEEE 745-2008
int 2 Entero de 8 bits, rango de valores de -128 (-27) a +127 (+27-1)
4
Entero de 64 bits, rango de valores de -9.223.372.036.854.775.808 (-263)
float
a 9.223.372.036.854.775.807 (+263-1)
Adems de los anteriores, tambin son tipos primitivos el tipo de dato boolean, con valores true y false, y el tipo de datos
char, que almacena el cdigo Unicode de un carcter.

14
DesarrollodeAplicacionesWeb Tema2

3.3Declaracineinicializacin
Llegadosaestepuntocabepreguntarnoscmosecreanlasvariablesenunprograma?Qudebo
hacerantesdeusarunavariableenmiprograma?Puesbien,comopodrsimaginar,debemoscrear
las variables antes de poder utilizarlas en nuestros programas, indicando qu nombre va a tener y
qutipodeinformacinvaaalmacenar,endefinitiva,debemosdeclararlavariable.

Las variables se pueden declarar en cualquier bloque de cdigo, dentro de llaves. Y lo hacemos
indicandosuidentificadoryeltipodedato,separadasporcomassivamosadeclararvariasalavez,
porejemplo: int numAlumnos = 15;
double radio = 3.14, importe = 102.95;

De esta forma, estamos declarando numAlumnos como una variable de tipo int, y otras dos
variables radio e importe de tipo double. Aunque no es obligatorio, hemos aprovechado la
declaracindelasvariablesparainicializarlasalosvalores15,3.14y102.95respectivamente.

Silavariablevaapermanecerinalterablealolargodelprograma,ladeclararemoscomoconstante,
utilizandolapalabrareservadafinaldelasiguienteforma:

final double PI = 3.1415926536;

Enocasionespuedequealdeclararunavariablenoledemosvalor,qucreesqueocurreenestos
casos?Puesqueelcompiladorleasignaunvalorpordefecto,aunquedependedeltipodevariable
quesetrate:

Lasvariablesmiembrosseinicializan automticamente,sinolesdamosunvalor.Cuando
sondetiponumrico,seinicializanpordefectoa0,sidondetipocarcter,seinicializanal
carcternull(\0),sisondetipobooleanselesasignaelvalorpordefectofalse,ysison
tiporeferenciadoseinicializananull.
Las variables locales no se inicializan automticamente. Debemos asignarles nosotros un
valorantesdeserusadas,yaquesielcompiladordetectaquelavariableseusaantesdeque
seleasigneunvalor,produceunerror.Porejemploenestecaso:

int p;
int q = p; // error

Ytambinenesteotro,yaqueseintentausarunavariablelocalquepodranohaberseinicializado:

int p;
if (. . . )
p = 5 ;
int q = p; // error

Enelejemploanteriorlainstruccinifhacequesisecumplelacondicinquehayentreparntesis
(cualquieraqueindiquemos),entonceselprogramaasignarelvalor5alavariablep;sinosecumple
lacondicin,pquedarsininicializar.Perosipnosehainicializado,notendravalorparaasignrselo
aq.

Porello,elcompiladordetectaeseposibleproblemayproduceunerrordeltipoLavariablepodra
nohabersidoinicializada,independientementedesisecumpleonolacondicindelif.

15
Creacindemiprimerprograma DAW

AUTOEVALUACIN:
De las siguientes, seala cul es la afirmacin correcta:
La declaracin de una variable consiste bsicamente en indicar el tipo que va a tener
seguido del nombre y su valor.
Java no tiene restriccin de tipos.
Todos los tipos tienen las mismas operaciones a realizar con ellos: suma, resta,
multiplicacin, etc.
Todas las anteriores son incorrectas.
Nada de lo afirmado sobre declaracin de variables, tipado de datos y operaciones es correcto.

3.4Tiposreferenciados
Apartirdelosochotiposdatosprimitivos,sepuedenconstruirotrostiposdedatos.Estostiposde
datossellamantiposreferenciadosoreferencias,porqueseutilizanparaalmacenarladireccinde
losdatosenlamemoriadelordenador.

int[] arrayDeEnteros;
Cuenta cuentaCliente;

Enlaprimerainstruccindeclaramosunalistadenmerosdelmismotipo,enestecaso,enteros.En
la segunda instruccin estamos declarando la variable u objeto cuentaCliente como una referencia
detipoCuenta.

ComocomentbamosalprincipiodelapartadodeTiposdedatos,cualquieraplicacindehoyenda
necesitanoperderdevistaunaciertacantidaddedatos.Cuandoelconjuntodedatosutilizadotiene
caractersticassimilaressesuelenagruparenestructurasparafacilitarelaccesoalosmismos,sonlos
llamadosdatosestructurados.

Sondatosestructuradoslosarrays,listas,rboles,etc.Puedenestarenlamemoriadelprogramaen
ejecucin,guardadoseneldiscocomoficheros,oalmacenadosenunabasededatos.

Adems de los ocho tipos de datos primitivos que ya hemos descrito, Java proporciona un
tratamientoespecialalostextosocadenasdecaracteresmedianteeltipodedatoString.Javacrea
automticamente un nuevo objeto de tipo String cuando se encuentra una cadena de caracteres
encerradaentrecomillasdobles.Enrealidadsetratadeobjetos,yportantosontiposreferenciados,
perosepuedenutilizardeformasencillacomosifueranvariablesdetiposprimitivos:

String mensaje;
mensaje= "El primer programa";

Hemos visto qu son las


variables,cmosedeclaran
y los tipos de datos que
pueden adoptar.
Anteriormentehemosvisto
un ejemplo de creacin de
variables, en esta ocasin
vamos a crear ms

16
DesarrollodeAplicacionesWeb Tema2

variables, pero de distintos tipos primitivos y los vamos a mostrar por pantalla. Los tipos
referenciadoslosveremosenlasiguienteunidad.

Para mostrar por pantalla un mensaje utilizamos System.out, conocido como la salida estndar
delprograma.Estemtodoloquehaceesescribirunconjuntodecaracteresatravsdelalneade
comandos.EnNetbeansestalneadecomandosapareceenlaparteinferiordelapantalla.Podemos
utilizar System.out.print o System.out.println. En el segundo caso lo que hace el
mtodoesquejustodespusdeescribirelmensaje,sitaelcursoralprincipiodelalneasiguiente.
Eltextoencolorgrisqueapareceentrecaracteres//soncomentariosquepermitendocumentarel
cdigo,peronosontenidosencuentaporelcompiladory,portanto,noafectanalaejecucindel
programa.

3.5Tiposenumerados
Lostiposdedatosenumeradossonunaformadedeclararunavariableconunconjuntorestringido
de valores. Por ejemplo, los das de la semana, las estaciones del ao, los meses, etc. Es como si
definiramosnuestropropiotipodedatos.

Laformadedeclararlosesconlapalabrareservadaenum,seguidadelnombredelavariableylalista
de valores que puede tomar entre llaves. A los valores que se colocan dentro de las llaves se les
consideracomoconstantes,vanseparadosporcomasydebenservaloresnicos.

La lista de valores se coloca entre llaves, porque un tipo de datos enum no es otra cosa que una
especiedeclaseenJava,ytodaslasclasesllevansucontenidoentrellaves.

Al considerar Java este tipo de datos como si de una clase se tratara, no slo podemos definir los
valoresdeuntipoenumerado,sinoquetambinpodemosdefiniroperacionesarealizarconlyotro
tipo de elementos, lo que hace que este tipo de dato sea ms verstil y potente que en otros
lenguajesdeprogramacin.

CITASPARAPENSAR
Oigoyolvido.Veoyrecuerdo.Hagoycomprendo.Proverbiochino.
En el siguiente ejemplo puedes comprobar el uso que se hace de los tipos de datos enumerados.
TenemosunavariableDiasquealmacenalosdasdelasemana.Paraaccederacadaelementodel
tipo enumerado se utiliza el nombre de la variable seguido de un punto y el valor en la lista. Ms
tarde veremos que podemos aadir mtodos y campos o variables en la declaracin del tipo
enumerado,yaquecomohemoscomentadountipoenumeradoenJavatieneelmismotratamiento
quelasclases.

En este ejemplo hemos utilizado el mtodo System.out.print. Como podrs comprobar si lo


ejecutas, la
instruccinnmero18
escribe el texto que
tiene entre comillas
pero no salta a la
siguiente lnea, por lo
que la instruccin

17
Creacindemiprimerprograma DAW

nmero19escribejustoacontinuacin.

Sinembargo,tambinpodemosescribirvariaslneasusandounanicasentencia.Aslohacemosen
la instruccin nmero 20, la cual imprime como resultado tres lneas de texto. Para ello hemos
utilizado un carcter especial, llamado carcter escape (\). Este carcter sirve para darle ciertas
rdenes al compilador, en lugar de que salga impreso en pantalla. Despus del carcter de escape
vieneotrocarcterqueindicalaordenarealizar,juntosrecibenelnombredesecuenciadeescape.
Lasecuenciadeescape\nrecibeelnombredecarcterdenuevalnea.Cadavezqueelcompilador
se encuentra en un texto ese carcter, el resultado es que mueve el cursor al principio de la lnea
siguiente.Enelprximoapartadovamosaveralgunasdelassecuenciasdeescapemsutilizadas.

18
DesarrollodeAplicacionesWeb Tema2

4. Literales de los tipos primitivos


CASO
Ada se encuentra con Mara y Juan.
Cmo van esos avances con Java? Juan sabe lo que significa eso, Ada se interesa por el
trabajo que estn llevando a cabo. Ya tienen claro qu tipos de datos utilizar, pero necesitan
cerciorarse de los valores que pueden almacenar esos tipos de datos, es decir, qu literales pueden
contener, para estar seguros que han hecho la eleccin adecuada.
Muy bien contesta Juan. Si quieres te hacemos una demostracin para que veas la estructura
del programa.
A Ada le satisface la eficacia con que trabajan Mara y Juan, apenas ha comenzado con el proyecto
y pronto podr ver resultados inmediatos.
Unliteral,valorliteraloconstanteliteralesunvalorconcretoparalostiposdedatosprimitivosdel
lenguaje, el tipo String o el tipo null. Los literales booleanos tienen dos nicos valores que
puedeaceptareltipo:

trueyfalse.Porejemplo,conlainstruccinbooleanencontrado=true;estamosdeclarando
unavariabledetipobooleanaalacualleasignamoselvalorliteraltrue.

Losliteralesenterossepuedenrepresentarentresnotaciones:

Decimal:porejemplo20.Eslaformamscomn.
Octal: por ejemplo 024. Un nmero en octal siempre empieza por cero, seguido de dgitos
octales(del0al7).
Hexadecimal: por ejemplo 0x14. Un nmero en hexadecimal siempre empieza por 0x
seguidodedgitoshexadecimales(del0al9,delaaalafodelaAalaF).

LasconstantesliteralesdetipolongseledebeaadirdetrsunalL,porejemplo873L,sinose
considerapordefectodetipoint.SesueleutilizarLparaevitarlaconfusindelaeleminsculacon
1.

Losliteralesrealesoencomaflotanteseexpresanconcomadecimaloennotacincientfica,osea,
seguidosdeunexponenteeE.ElvalorpuedefinalizarseconunafounaFparaindicaelformato
float o con una d o una D para indicar el formato double (por defecto es double). Por
ejemplo, podemos representar un mismo literal real de las siguientes formas: 13.2, 13.2D,
1.32e1, 0.132E2. Otras constantes literales reales son por ejemplo: .54, 31.21E-5, 2.f,
6.022137e+23f,3.141e-9d.

Unliteralcarcterpuedeescribirsecomouncarcterentrecomillassimplescomo'a','','Z','p',etc.
oporsucdigodelatablaUnicode,anteponiendolasecuenciadeescape\sielvalorloponemos
enoctalo\usiponemoselvalorenhexadecimal.Porejemplo,sisabemosquetantoenASCIIcomo
en Unicode, la letra A (mayscula) es el smbolo nmero 65, y que 65 en octal es 101 y 41 en
hexadecimal, podemos representar esta letra como '\101' en octal y '\u0041' en hexadecimal.
Existenunoscaracteresespecialesqueserepresentanutilizandosecuenciasdeescape:

Secuenciadeescape Significado Secuenciadeescape Significado


\b Retroceso \r Retornodecarro
\t Tabulador \ Carctercomillasdobles
\n Saltodelnea \ Carctercomillassimples
\f Saltodepgina \\ Barradiagonal

19
Creacindemiprimerprograma DAW

Normalmente, los objetos en Java deben ser creados con la orden new. Sin embargo, los literales
String no lo necesitan ya que son objetos que se crean implcitamente por Java.
Los literales de cadenas de caracteres se indican entre comillas dobles. En el ejemplo anterior El
primerprogramaesunliteraldetipocadenadecaracteres.Alconstruirunacadenadecaracteresse
puedeincluircualquiercarcterUnicodeexceptouncarcterderetornodecarro,porejemploenla
siguiente instruccin utilizamos la secuencia de escape \ para escribir dobles comillas dentro del
mensaje:

String texto = "Juan dijo: \"Hoy hace un da fantstico\"";

En el ejemplo anterior de tipos enumerados ya estbamos utilizando secuencias de escape, para


introducirunsaltodelneaenunacadenadecaracteres,utilizandoelcarcterespecial\n.

20
DesarrollodeAplicacionesWeb Tema2

5. Operadores y expresiones.
CASO
Mara y Juan tienen definidas las variables y tipos de datos a utilizar en la aplicacin. Es el momento
de ponerse a realizar los clculos que permitan manipular esos datos, sumar, restar, multiplicar,
dividir y mucho ms. En definitiva se trata de llevar los conocimientos matemticos al terreno de la
programacin, ver cmo se pueden hacer operaciones aritmticas, lgicas o de comparacin en el
lenguaje Java.
Tambin necesitarn algn operador que permita evaluar una condicin y decidir las acciones a
realizar en cada caso. Es importante conocer bien cmo el lenguaje evala esas expresiones, en
definitiva, cul es la precedencia que tiene cada operador.
Losoperadoresllevanacabooperacionessobreunconjuntodedatosuoperandos,representados
por literales y/o identificadores. Los operadores pueden ser unarios, binarios o terciarios, segn el
nmero de operandos que utilicen sean uno, dos o tres, respectivamente. Los operadores actan
sobrelostiposdedatosprimitivosydevuelventambinuntipodedatoprimitivo.

Los operadores se combinan con los literales y/o identificadores para formar expresiones. Una
expresin es una combinacin de operadores y operandos que se evala produciendo un nico
resultadodeuntipodeterminado.

Elresultadodeunaexpresinpuedeserusadocomopartedeotraexpresinoenunasentenciao
instruccin.Lasexpresiones,combinadasconalgunaspalabrasreservadasoporsmismas,forman
lasllamadassentenciasoinstrucciones.

Porejemplo,pensemosenlasiguienteexpresinJava:

i + 1

Con esta expresin estamos utilizando un operador aritmtico para sumarle una cantidad a la
variablei,peroesnecesarioindicaralprogramaquhacerconelresultadodedichaexpresin:

suma = i + 1;

Queloalmaceneenunavariablellamadasuma,porejemplo.Enestecasoyatendramosunaaccin
completa,esdecir,unasentenciaoinstruccin.

Msejemplosdesentenciasoinstruccioneslostenemosenlasdeclaracionesdevariables,vistasen
apartados anteriores, o en las estructuras bsicas del lenguaje como sentencias condicionales o
bucles,queveremosenunidadesposteriores.

Como curiosidad comentar que las expresiones de asignacin, al poder ser usadas como parte de
otrasasignacionesuoperaciones,sonconsideradastantoexpresionesensmismascomosentencias.

CITAS PARA PENSAR


Lo que no hemos realizado no es ms que lo que todava no hemos intentado hacer.
AlexisdeTocqueville.

5.1Operadoresaritmticos
Los operadores aritmticos son aquellos operados que combinados con los operandos forman
expresionesmatemticasoaritmticas.

21
Creacindemiprimerprograma DAW

Operador OperacinJava ExpresinJava Resultado


Operadorunariodecambiodesigno 10 10
+ Adicin 1.2+9.3 10.5
Sustraccin 312.512.3 300.2
* Multiplicacin 1.7*1.2 1.02
/ Divisin(enteraoreal) 0.5/0.2 2.5
% Restodeladivisinentera 25%3 1
Elresultadodeestetipodeexpresionesdependedelosoperandosqueutilicen:

Tipodelosoperandos Resultado
Unoperandodetipolongyningunoreal(floatodouble) long
Ningnoperandodetipolongnireal(floatodouble) int
Almenosunoperandodetipodouble double
Almenosunoperandodetipofloatyningunodouble float
Otro tipo de operadores aritmticos son los operadores unarios incrementales y decrementales.
Producenunresultadodelmismotipoqueeloperando,ypodemosutilizarlosconnotacinprefija,si
eloperadorapareceantesqueeloperando,onotacinpostfija,sieloperadoraparecedespusdel
operando.Enlatablapuedesverunejemplodeutilizacindecadaoperadorincremental.

Tipooperador ExpresinJava
++(incremental) Prefija: Postfija:
x=3; x=3;
y=++x; y=x++;
//xvale4eyvale4 //xvale4eyvale3

(decremental) 5//elresultadoes4

En el ejemplo vemos un programa bsico que utiliza operadores aritmticos. Observa que usamos
System.out.printf para mostrar por pantalla un texto formateado. El texto entre dobles
comillasson losargumentosdelmtodoprintfy siusamosmsdeuno,seseparanconcomas.
Primero indicamos cmo queremos que salga el texto, y despus el texto que queremos mostrar.
Fjate que con el primer %s nos estamos refiriendo a una variable de tipo String, o sea, a la
primeracadenadetexto,conelsiguiente%salasegundacadenayconelltimo%salatercera.Con
%fnosreferimosaunargumentodetipofloat,etc.

5.2Operadoresdeasignacin
Elprincipaloperadordeestacategoraeseloperadorasignacin=,quepermitealprogramadarle
unvaloraunavariable,yqueyahemosutilizadoenvariasocasionesenestaunidad.Ademsdeeste
operador, Java proporciona otros operadores de asignacin combinados con los operadores
aritmticos,quepermitenabreviaroreducirciertasexpresiones.

22
DesarrollodeAplicacionesWeb Tema2

Porejemplo,eloperador+=sumaelvalordelaexpresinaladerechadeloperadorconelvalordela
variable que hay a la izquierda del operador, y almacena el resultado en dicha variable. En la
siguientetablasemuestrantodoslosoperadoresdeasignacincompuestosquepodemosutilizaren
Java

Operador EjemploenJava Expresinequivalente


+= op1+=op2 op1=op1+op2
= op1=op2 op1=op1op2
*= op1*=op2 op1=op1*op2
/= op1/=op2 op1=op1/op2
%= op1%=op2 op1=op1%op2
Unejemplodeoperadoresdeasignacincombinadoslotenemosacontinuacin:

Parasaberms
En el siguiente enlace tienes informacin interesante sobre cmo se pueden utilizar los
caracteresespecialesincluidosenlaordenprintf(eningls):
http://www.java2s.com/Tutorial/Java/0120__Development/UsingJavasprintfMethod.htm

5.3Operadorcondicional
Eloperadorcondicional?:sirveparaevaluarunacondicinydevolverunresultadoenfuncindesi
esverdaderaofalsadichacondicin.EselnicooperadorternariodeJava,ycomotal,necesitatres
operandosparaformarunaexpresin.

Elprimeroperandosesitaalaizquierdadelsmbolodeinterrogacin,ysiempreserunaexpresin
booleana, tambin llamada condicin. El siguiente operando se sita a la derecha del smbolo de
interrogacin y antes de los dos puntos, y es el valor que devolver el operador condicional si la
condicinesverdadera.Elltimooperando,queaparecedespusdelosdospuntos,eslaexpresin
cuyoresultadosedevolversilacondicinevaluadaesfalsa.
condicin ? exp1 : exp2

Porejemplo,enlaexpresin:
(x>y)?x:y;
Seevalalacondicindesixesmayorquey,encasoafirmativosedevuelveelvalordelavariable
x,yencasocontrariosedevuelveelvalordey.

23
Creacindemiprimerprograma DAW

El operador condicional se puede sustituir por la sentencia ifthenelse que veremos en la


siguienteunidaddeEstructurasdecontrol.

CITAS PARA PENSAR.


La buena escritura debe ser concisa. Una oracin no debe contener palabras
innecesarias,unprrafonodebeconteneroracionesinnecesarias.
WilliamStrunk,Jr.

5.4Operadoresderelacin
Losoperadoresrelacionalesseutilizanparacomparardatosdetipoprimitivo(numrico,carctery
booleano).Elresultadoseutilizaren otrasexpresionesosentencias,que ejecutarnunaaccin u
otraenfuncindesisecumpleonolarelacin.

EstasexpresionesenJavadansiemprecomoresultadounvalorbooleanotrueofalse.Enlatabla
siguienteaparecenlosoperadoresrelacionalesenJava.

Operador EjemploenJava Significado


== op1==op2 op1igualaop2
!= op1!=op2 op1distintodeop2
> op1>op2 op1mayorqueop2
< op1<op2 op1menorqueop2
>= op1>=op2 op1mayoroigualqueop2
<= op1<=op2 op1menoroigualqueop2
Hastaahorahemosvistoejemplosquecreabanvariablesyseinicializabanconalgnvalor.Peroysi
loquequeremosesqueelusuariointroduzcaunvaloralprograma?
Entonces debemos agregarle interactividad a nuestro programa, por ejemplo utilizando la clase
Scanner.
Aunque no hemos visto todava qu son las
clases y los objetos, de momento vamos a
pensarquelaclaseScannernosvaapermitir
leer los datos que se escriben por teclado, y
que para usarla es necesario importar el
paquetedeclasesquelacontiene.Elcdigodel
ejemplo lo tienes a continuacin. El programa
sequedaresperandoaqueelusuarioescriba
algoeneltecladoypulselateclaintro.Enese
momento se convierte lo ledo a un valor del
tipo int y lo guarda en la variable indicada.
Ademsdelosoperadoresrelacionales,eneste
ejemplo utilizamos tambin el operador
condicional,quecomparasilosnmerossoniguales.Siloson,devuelvelacadenaigualesysino,la
cadenadistintos.

AUTOEVALUACIN:
Seala cules son los operadores relacionales en Java.
= =, ! =, >, <, > =, < =. ==, =!, >, <, =>, =<.
=, !=, >, <, >=, <=. ==, !=, >, <, >=, <=.
Tienes claro cules son los operadores relacionales en Java.

24
DesarrollodeAplicacionesWeb Tema2

5.5Operadoreslgicos
Los operadores lgicos realizan operaciones sobre valores booleanos, o resultados de expresiones
relacionales,dandocomoresultadounvalorbooleano.

Los operadores lgicos los podemos ver en la tabla que se muestra a continuacin. Existen ciertos
casosenlosqueelsegundooperandodeunaexpresinlgicanoseevalaparaahorrartiempode
ejecucin, porque con el primero ya es suficiente para saber cul va a ser el resultado de la
expresin.

Porejemplo,enlaexpresina && bsiaesfalso,nosesiguecomprobandolaexpresin,puesto


queyasesabequelacondicindequeambosseanverdaderonosevaacumplir.Enestoscasoses
ms conveniente colocar el operando ms propenso a ser falso en el lado de la izquierda. Igual
ocurreconeloperador||,encuyocasoesmsfavorablecolocareloperandomspropensoaser
verdaderoenelladoizquierdo.

Operador EjemploenJava Significado


! !op Devuelvetruesieloperandoesfalseyviceversa.
& op1&op2 Devuelvetruesiop1yop2sontrue
| op1|op2 Devuelvetruesiop1uop2sontrue
^ op1^op2 Devuelvetruesislounodelosoperandosestrue
&& op1&&op2 Igualque&,perosiop1esfalseyanoseevalaop2
|| op1||op2 Igualque|,perosiop1estrueyanoseevalaop2

Enelsiguientecdigo
puedes ver un
ejemplodeutilizacin
de operadores
lgicos:

5.6Operadoresdebits
Losoperadoresaniveldebitssecaracterizanporquerealizanoperacionessobrenmerosenteros(o
char)ensurepresentacinbinaria,esdecir,sobrecadadgitobinario.

EnlatablatieneslosoperadoresaniveldebitsqueutilizaJava.

25
Creacindemiprimerprograma DAW

Operador EjemploenJava Significado


~ ~op Realizaelcomplementobinariodeop(invierteelvalordecadabit)
& op1&op2 RealizalaoperacinANDbinariasobreop1yop2
| op1|op2 RealizalaoperacinORbinariasobreop1yop2
^ op1^op2 RealizalaoperacinORexclusivo(XOR)binariasobreop1yop2
<< op1<<op2 Desplazaop2veceshacialaizquierdalosbitsdeop1
>> op1>>op2 Desplazaop2veceshacialaderechalosbitsdeop1
>>> op1>>>op2 Desplazaop2(enpositivo)veceshacialaderechalosbitsdeop1
PARASABERMS
Los operadores de bits raramente los vas a utilizar en tus aplicaciones de gestin. No
obstante, si sientes curiosidad sobre su funcionamiento, puedes ver el siguiente enlace
dedicadoaestetipodeoperadores:
http://www.zator.com/Cpp/E4_9_3.htm

5.7Trabajoconcadenas
YahemosvistoenelapartadodeliteralesqueelobjetoStringsecorrespondeconunasecuencia
decaracteresentrecomillados,comoporejemplohola.EsteliteralsepuedeutilizarenJavacomo
sideuntipodedatosprimitivosetratase,y,comocasoespecial,nonecesitalaordennewparaser
creado.

Nosetrataaqudequenosadentremosenloqueesunaclaseuobjeto,puestoqueloveremosen
unidades posteriores, y trabajaremos mucho sobre ello. Aqu slo vamos a utilizar determinadas
operacionesquepodemosrealizarconelobjetoString,yloversmuchomsclaroconejemplos
descriptivos.

Para aplicar una operacin a una variable de tipo String, escribiremos su nombre seguido de la
operacin, separados por un punto. Entre las principales operaciones que podemos utilizar para
trabajarconcadenasdecaracteresestnlassiguientes:

Creacin.Comohemosvistoenelapartadodeliterales,podemoscrearunavariabledetipo
String simplemente asignndole una cadena de caracteres encerrada entre comillas
dobles.
Obtencin de longitud. Si necesitamos saber la longitud de un String, utilizaremos el
mtodolength().
Concatenacin.Seutilizaeloperador+oelmtodoconcat()paraconcatenarcadenasde
caracteres.
Comparacin. El mtodo equals() nos devuelve un valor booleano que indica si las
cadenascomparadassononoiguales.ElmtodoequalsIgnoreCase()hacelopropio,
ignorandolasmaysculasdelascadenasaconsiderar.
Obtencindesubcadenas.Podemosobtenercadenasderivadasdeunacadenaoriginalcon
el mtodo substring(), al cual le debemos indicar el inicio y el fin de la subcadena a
obtener.
Cambio a maysculas/minsculas. Los mtodos toUpperCase() y toLowerCase()
devuelvenunanuevavariablequetransformaenmaysculasominsculas,respectivamente,
lavariableinicial.
Valueof. Utilizaremos este mtodo para convertir un tipo de dato primitivo (int, long,
float,etc.)aunavariabledetipoString.

26
DesarrollodeAplicacionesWeb Tema2

A continuacin varios ejemplos de las distintas operaciones que podemos realizar con cadenas de
caracteresoStringenJava:

5.8Precedenciadeoperadores
El orden de precedencia de los operadores determina la secuencia en que deben realizarse las
operacionescuandoenunaexpresinintervienenoperadoresdedistintotipo.

LasreglasdeprecedenciadeoperadoresqueutilizaJavacoincidenconlasreglasdelasexpresiones
dellgebraconvencional.Porejemplo:

Lamultiplicacin,divisinyrestodeunaoperacinseevalanprimero.

Si dentro de la misma expresin tengo varias operaciones de este tipo, empezar


evalundolasdeizquierdaaderecha.

Lasumaylarestaseaplicandespusquelasanteriores.Delamismaforma,sidentrodela
mismaexpresintengovariassumasyrestasempezarevalundolasdeizquierdaaderecha.

Alahoradeevaluarunaexpresinesnecesariotenerencuentalaasociatividaddelosoperadores.
Laasociatividadindicaquoperadorseevalaantes,encondicionesdeigualdaddeprecedencia.Los
operadoresdeasignacin,eloperadorcondicional(?:),losoperadoresincrementales(++,--)yel
casting son asociativos por la derecha. El resto de operadores son asociativos por la izquierda, es
decir,queseempiezanacalcularenelmismoordenenelqueestnescritos:deizquierdaaderecha.
Porejemplo,enlaexpresinsiguiente:

10 / 2 * 5

Realmentelaoperacinqueserealizaes(10 / 2 ) * 5,porqueambosoperadores,divisiny
multiplicacin,tienenigualprecedenciayportantoseevalaprimeroelqueantesnosencontramos
por la izquierda, que es la divisin. El resultado de la expresin es 25. Si fueran asociativos por la
derecha, puedes comprobar que el resultado sera diferente, primero multiplicaramos 2 * 5 y
luegodividiramosentre10,porloqueelresultadosera1.Enestaotraexpresin:

x = y = z = 1

27
Creacindemiprimerprograma DAW

Realmentelaoperacinqueserealizaesx = (y = (z = 1)).Primeroasignamoselvalorde1a
lavariablez,luegoalavariabley,paraterminarasignandoelresultadodeestaltimaasignacina
x.Sieloperadorasignacinfueraasociativoporlaizquierdaestaoperacinnosepodrarealizar,ya
queintentaramosasignaraxelvalordey,peroyannohabrasidoinicializada.

En la tabla se detalla el orden de precedencia y la asociatividad de los operadores que hemos


comentadoenesteapartado.Losoperadoressemuestrandemayoramenorprecedencia.

Operador Tipo Asociatividad


++ Unario,notacinpostfija Derecha
+++(cast)!~ Unario,notacinprefija Derecha
*/% Aritmticos Izquierda
+ Aritmticos Izquierda
<<>>>>> Bits Izquierda
<<=>>= Relacionales Izquierda
==!= Relacionales Izquierda
& Lgico,Bits Izquierda
^ Lgico,Bits Izquierda
| Lgico,Bits Izquierda
&& Lgico Izquierda
|| Lgico Izquierda
?: Operadorcondicional Derecha
=+==*=/=%= Asignacin Derecha
REFLEXIONA.
Creesqueesunabuenaprcticadeprogramacinutilizarparntesisenexpresionesaritmticas
complejas,ancuandonoseannecesarios?
Elusodeparntesis,inclusocuandonosonnecesarios,puedehacermsfcildeleerlasexpresiones
aritmticascomplejas.

28
DesarrollodeAplicacionesWeb Tema2

6. Conversin de tipo.
CASO
Mara ha avanzado mucho en sus conocimientos sobre Java y ha contado con mucha ayuda por
parte de Juan. Ahora mismo tiene un problema con el cdigo, y le comenta Estoy atrancada en el
cdigo. Tengo una variable de tipo byte y quiero asignarle un valor de tipo int, pero el compilador me
da un error de posible prdida de precisin t sabes qu significa eso?. Claro le contesta Juan,
es un problema de conversin de tipos, para asignarle el valor a la variable de tipo byte debes
hacer un casting. Ah! dice Mara, y cmo se hace eso?
Imaginaquequeremosdividirunnmeroentreotrotendrdecimaleselresultadodeesadivisin?
Podemos pensar que siempre que el denominador no sea divisible entre el divisor, tendremos un
resultadocondecimales,peronoesas.Sieldenominadoryeldivisorsonvariablesdetipoentero,el
resultadoserenteroynotendrdecimales.Paraqueelresultadotengadecimalesnecesitaremos
hacerunaconversindetipo.

Lasconversionesdetiposerealizanparahacerqueelresultadodeunaexpresinseadeltipoque
nosotrosdeseamos,enelejemploanteriorparahacerqueelresultadodeladivisinseadetiporeal
y,porende,tengadecimales.Existendostiposdeconversiones:

Conversiones automticas. Cuando a una variable de un tipo se le asigna un valor de otro


tiponumricoconmenosbitsparasurepresentacin,serealizaunaconversinautomtica.
Enesecaso,elvalorsedicequeespromocionadoaltipomsgrande(eldelavariable),para
poderhacerlaasignacin.Tambinserealizanconversionesautomticasenlasoperaciones
aritmticas, cuando estamos utilizando valores de distinto tipo, el valor ms pequeo se
promocionaalvalormsgrande,yaqueeltipomayorsiemprepodrrepresentarcualquier
valordeltipomenor(porejemplo,deintalongodefloatadouble).
Conversionesexplcitas.Cuandohacemosunaconversindeuntipoconmsbitsauntipo
con menos bits. En estos casos debemos indicar que queremos hacer la conversin de
maneraexpresa,yaquesepuedeproducirunaprdidadedatosyhemosdeserconscientes
de ello. Este tipo de conversiones se realiza con el operador cast. El operador cast es un
operadorunarioqueseformacolocandodelantedelvaloraconvertireltipodedatoentre
parntesis. Tiene la misma precedencia que el resto de operadores unarios y se asocia de
izquierdaaderecha.

Debemostenerencuentaqueunvalornumriconuncapuedeserasignadoaunavariabledeun
tipomenorenrango,sinoesconunaconversinexplcita.Porejemplo:

int a;
byte b;
a = 12; // no se realiza conversin alguna
b = 12; // se permite porque 12 est dentro
// del rango permitido de valores para b
b = a; // error, no permitido (incluso aunque
// 12 podra almacenarse en un byte)
byte b = (byte) a; // Correcto, forzamos conversin explcita

Enelejemploanteriorvemosuncasotpicodeerrordetipos,yaqueestamosintentandoasignarlea
b el valor de a, siendo b de un tipo ms pequeo. Lo correcto es promocionar a al tipo de datos
byte,yentoncesasignarlesuvaloralavariableb.

29
Creacindemiprimerprograma DAW

6.1ConversindetiposdedatosenJava
TabladeConversindeTiposdeDatosPrimitivos
Tipodestino
boolean char byte short int long float double
boolean N N N N N N N
char N C C Cl Cl Cl Cl
byte N C CI Cl Cl Cl Cl
short N C C Cl Cl Cl Cl
Tipoorigen
int N C C C Cl Cl* Cl
long N C C C C Cl* Cl*
float N C C C C C Cl
double N C C C C C C
Explicacindelossmbolosutilizados:

N: Conversin no permitida (un boolean no se puede convertir a ningn otro tipo y


viceversa).
CI:Conversinimplcitaoautomtica.Unasteriscoindicaquepuedehaberposibleprdida
dedatos.

C:Castingdetiposoconversinexplcita.

Elasteriscoindicaquepuedehaberunaposibleprdidadedatos,porejemploalconvertir
unnmerodetipointqueusalos32bitsposiblesdelarepresentacin,auntipofloat,que
tambinusa32bitsparalarepresentacin,pero8deloscualessonparaelexponente.

En cualquier caso, las conversiones de nmeros en coma flotante a nmeros enteros


siemprenecesitarnunCasting,ydeberemostenermuchocuidadodebidoalaprdidade
precisinqueellosupone.

6.1.1 - Reglas de Promocin de Tipos de Datos

Cuando en una expresin hay datos o variables de distinto tipo, el compilador realiza la
promocindeunostiposenotros,paraobtenercomoresultadoeltipofinaldelaexpresin.
Estapromocindetipossehacesiguiendounasreglasbsicasenbasealascualesserealiza
estapromocindetipos,yresumidamentesonlassiguientes:

Siunodelosoperandosesdetipodouble,elotroesconvertidoadouble.

Encualquierotrocaso:

o Sielunodelosoperandosesfloat,elotroseconvierteafloat

o Siunodelosoperandoseslong,elotroseconviertealong

o Si no se cumple ninguna de las condiciones anteriores, entonces ambos


operandossonconvertidosaltipoint.

30
DesarrollodeAplicacionesWeb Tema2

6.1.2 - Conversin de nmeros en Coma flotante (float, double) a enteros (int)

Cuando convertimos nmeros en coma flotante a nmeros enteros, la parte decimal se


trunca(redondeoacero).Siqueremoshacerotrotipoderedondeo,podemosutilizar,entre
otras,lassiguientesfunciones:
Math.round(num):Redondeoalsiguientenmeroentero.
Math.ceil(num):Mnimoenteroqueseamayoroigualanum.
Math.floor(num):Enteromayor,queseainferioroigualanum.

double num=3.5;
x=Math.round(num); // x = 4
y=Math.ceil(num); // y = 4
z=Math.floor(num); // z = 3

6.1.3 - Conversiones entre caracteres (char) y enteros (int)

Como un tipo char lo que guarda en realidad es el cdigo Unicode de un carcter, los
caracterespuedenserconsideradoscomonmerosenterossinsigno.

Ejemplo:

int num;
char c;
num = (int) A; //num = 65
c = (char) 65; // c = A
c = (char) ((int) A + 1); // c = B

6.1.4 - Conversiones de tipo con cadenas de caracteres (String)

Paraconvertircadenasdetextoaotrostiposdedatosseutilizanlassiguientesfunciones:

num=Byte.parseByte(cad);
num=Short.parseShort(cad);
num=Integer.parseInt(cad);
num=Long.parseLong(cad);
num=Float.parseFloat(cad);
num=Double.parseDouble(cad);
Porejemplo,sihemosledodetecladounnmeroqueestalmacenadoenunavariablede
tipo String llamada cadena, y lo queremos convertir al tipo de datos byte, haramos lo
siguiente:

byte n=Byte.parseByte(cadena);

31
Creacindemiprimerprograma DAW

7. Comentarios.
CASO
Juan ha podido comprobar los avances que ha hecho Mara con la programacin. Ya domina todos
los aspectos bsicos sobre sintaxis, estructura de un programa, variables y tipos de datos. Ada le
acaba de comunicar que van a sumarse al proyecto dos personas ms, Ana y Carlos que estn
haciendo las prcticas del ciclo de Desarrollo de Aplicaciones Multiplataforma en la empresa. Al
principio de cada programa indicaremos una breve descripcin y el autor. En operaciones
complicadas podramos aadir un comentario les ayudar a entender mejor qu es lo que hace
indica Juan. De acuerdo comenta Mara, y podemos ir metiendo los comentarios de la
herramienta esa que me comentaste, Javadoc, para que se cree una documentacin an ms
completa. Aj! asiente Juan, pues manos a la obra!
Loscomentariossonmuyimportantesalahoradedescribirquhaceundeterminadoprograma.A
lolargodelaunidadloshemosutilizadoparadocumentarlosejemplosymejorarlacomprensindel
cdigo. Para lograr ese objetivo, es normal que cada programa comience con unas lneas de
comentario que indiquen, al menos, una breve descripcin del programa, el autor del mismo y la
ltimafechaenquesehamodificado.

Todos los lenguajes de programacin disponen de alguna forma de introducir comentarios en el


cdigo.EnelcasodeJava,nospodemosencontrarlossiguientestiposdecomentarios:

Comentariosdeunasolalnea.Utilizaremoseldelimitador//paraintroducircomentariosde
slounalnea.
// comentario de una sola lnea

Comentariosdemltipleslneas.Paraintroducirestetipodecomentarios,utilizaremosuna
barrainclinadayunasterisco(/*),alprincipiodelprrafoyunasteriscoseguidodeunabarra
inclinada(*/)alfinaldelmismo.
/* Esto es un comentario
de varias lneas */

Comentarios Javadoc. Utilizaremos los delimitadores /** y */. Al igual que con los
comentarios tradicionales, el texto entre estos delimitadores ser ignorado por el
compilador. Este tipo de comentarios se emplean para generar documentacin automtica
del programa. A travs del programa javadoc, incluido en JavaSE, se recogen todos estos
comentariosysellevanaundocumentoenformato.html.
/** Comentario de documentacin.
Javadoc extrae los comentarios del cdigo y
genera un archivo html a partir de este tipo de comentarios
*/

RECOMENDACIN
Una buena prctica de programacin es aadir en la ltima llave que delimita cada bloque de cdigo,
un comentario indicando a qu clase o mtodo pertenece esa llave.
PARASABERMS
SiquieresirfamiliarizndoteconlainformacinquehayenlawebdeOracle,enelsiguiente
enlacepuedesencontrarmsinformacinsobrelaherramientaJavadocincluidaenelKitde
DesarrollodeJavaSE(eningls):
http://download.oracle.com/javase/6/docs/technotes/guides/javadoc/index.html

32