You are on page 1of 40

GUIA DE JAVA

Prof. Lisbeth Guerra




nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


INTRODUCCION A JAVA

Sun Microsystems, lder en servidores para Internet, uno de cuyos lemas desde hace mucho tiempo ha sido
"the network is the computer" (lo que quiere dar a entender que el verdadero ordenador es la red en su conjunto y no
cada mquina individual), es quien ha inventado el lenguaje Java, en un intento de resolver simultneamente todos
los problemas que se planteaban a los desarrolladores de software por la proliferacin de arquitecturas
incompatibles, tanto entre las diferentes mquinas como entre los diversos sistemas operativos y sistemas de
ventanas que funcionan sobre una misma mquina, aadiendo la dificultad de crear aplicaciones distribuidas en una
red como Internet.

ORIGEN DE JAVA

El uso principal que se hace de Internet e incluso de las redes internas (corporativas) es correo electrnico
(e-mail), aunque actualmente hay un auge sorprendente de la navegacin web. Los documentos web pueden
contener variedad de texto, grficos de todas clases y proporcionar enlaces hipertexto hacia cualquier lugar de la
red. Los navegadores utilizan documentos escritos en lenguaje HTML. La combinacin actual de navegadores
HTML/WWW estn limitados pues, a texto y grficos. Si se quiere reproducir un sonido o ejecutar un programa de
demostracin, primero hemos de bajarnos (download) el fichero en cuestin y luego utilizar un programa en nuestro
ordenador capaz de entender el formato de ese fichero, o bien cargar un mdulo (plug-in) en nuestro navegador para
que pueda interpretar el fichero que hemos bajado.
Hasta ahora, la nica forma de realizar una pgina web con contenido interactivo, era mediante la interfaz
CGI ( Common Gateway Interface ), que permite pasar parmetros entre formularios definidos en lenguaje HTML y
programas escritos en Perl o en C. Esta interfaz resulta muy incmoda de programar y es pobre en sus
posibilidades.
El lenguaje Java y los navegadores con soporte Java, proporcionan una forma diferente de hacer que ese
navegador sea capaz de ejecutar programas. Con Java se puede reproducir sonido directamente desde el
navegador, se pueden visitar home pages con animaciones, se puede ensear al navegador a manejar nuevos
formatos de ficheros, e incluso, cuando se pueda transmitir video por las lneas telefnicas, nuestro navegador estar
preparado para mostrar esas imgenes.
Utilizando Java, se pueden eliminar los inconvenientes de la interfaz CGI y tambin se pueden aadir
aplicaciones que vayan desde experimentos cientficos interactivos de propsito educativo a juegos o aplicaciones
especializadas para la televenta. Es posible implementar publicidad interactiva y peridicos personalizados. Por
ejemplo, alguien podra escribir un programa Java que implementara una simulacin qumica interactiva (una cadena
de adn). Utilizando un navegador con soporte Java, un usuario podra recibir fcilmente esa simulacin e
interaccionar con ella, en lugar de conseguir simplemente un dibujo esttico y algo de texto. Lo recibido cobra vida .
Adems, con Java podemos estar seguros de que el cdigo que hace funcionar el experimento qumico no contiene
ningn trozo de cdigo malicioso que dae al sistema. El cdigo que intente actuar destructivamente o que contenga
errores, no podr traspasar los muros defensivos colocados por las caractersticas de seguridad y robustez de Java.
Adems, Java proporciona una nueva forma de acceder a las aplicaciones.
El software viaja transparentemente a travs de la red. No hay necesidad de instalar las aplicaciones, ellas
mismas vienen cuando se necesitan. Por ejemplo, la mayora de los navegadores del Web pueden procesar un
reducido nmero de formatos grficos (tpicamente GIF y JPEG). Si se encuentran con otro tipo de formato, el
navegador estndar no tiene capacidad para procesarlo, tendra que ser actualizado para poder aprovechar las
ventajas del nuevo formato. Sin embargo, un navegador con soporte Java puede enlazar con el servidor que
contiene el algoritmo que procesa ese nuevo formato y mostrar la imagen. Por lo tanto, si alguien inventa un nuevo
algoritmo de compresin para imgenes, el inventor slo necesita estar seguro de que hay una copia en cdigo Java
de ese algoritmo instalado en el servidor que contiene las imgenes que quiere publicar. Es decir, los navegadores
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


con soporte Java se actualizan a s mismos sobre la marcha, cuando encuentran un nuevo tipo de fichero o
algoritmo.

CARACTERISTICAS DE JAVA

Las caractersticas principales que nos ofrece Java respecto a cualquier otro lenguaje de programacin,
son:

SIMPLE:
Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las caractersticas menos usadas y ms
confusas de stos. C++ es un lenguaje que adolece de falta de seguridad, pero C y C++ son lenguajes ms
difundidos, por ello Java se dise para ser parecido a C++ y as facilitar un rpido y fcil aprendizaje.
Java elimina muchas de las caractersticas de otros lenguajes como C++, para mantener reducidas las
especificaciones del lenguaje y aadir caractersticas muy tiles como el garbage collector (reciclador de memoria
dinmica). No es necesario preocuparse de liberar memoria, el reciclador se encarga de ello y como es un thread de
baja prioridad, cuando entra en accin, permite liberar bloques de memoria muy grandes, lo que reduce la
fragmentacin de la memoria.
Java reduce en un 50% los errores ms comunes de programacin con lenguajes como C y C++ al eliminar
muchas de las caractersticas de stos, entre las que destacan:
9 aritmtica de punteros
9 no existen referencias
9 registros (struct)
9 definicin de tipos (typedef)
9 macros (#define)
9 necesidad de liberar memoria (free)
Aunque, en realidad, lo que hace es eliminar las palabras reservadas (struct, typedef), ya que las clases son
algo parecido.
Adems, el intrprete completo de Java que hay en este momento es muy pequeo, solamente ocupa 215
Kb de RAM.

ORIENTADO A OBJETOS:
Java implementa la tecnologa bsica de C++ con algunas mejoras y elimina algunas cosas para mantener
el objetivo de la simplicidad del lenguaje. Java trabaja con sus datos como objetos y con interfaces a esos objetos.
Soporta las tres caractersticas propias del paradigma de la orientacin a objetos: encapsulacin, herencia y
polimorfismo. Las plantillas de objetos son llamadas, como en C++, clases y sus copias, instancias . Estas
instancias, como en C++, necesitan ser construidas y destruidas en espacios de memoria.
Java incorpora funcionalidades inexistentes en C++ como por ejemplo, la resolucin dinmica de mtodos.
Esta caracterstica deriva del lenguaje Objective C, propietario del sistema operativo Next. En C++ se suele trabajar
con libreras dinmicas (DLLs) que obligan a recompilar la aplicacin cuando se retocan las funciones que se
encuentran en su interior. Este inconveniente es resuelto por Java mediante una interfaz especfica llamada RTTI
(RunTime Type Identification) que define la interaccin entre objetos excluyendo variables de instancias o
implementacin de mtodos. Las clases en Java tienen una representacin en el runtime que permite a los
programadores interrogar por el tipo de clase y enlazar dinmicamente la clase con el resultado de la bsqueda.







nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulC

DISTRIBUIDO:
Java se ha construido con extensas capacidades de i
acceder e interactuar con protocolos como
travs de la red con tanta facilidad como a los ficheros locales.
La verdad es que Java en s no es distribuido, sino
programas puedan ser distribuidos, es decir, que se

ROBUSTO:
Java realiza verificaciones en busca de problemas tanto en
ejecucin. La comprobacin de tipos en Java ayuda a
Java obliga a la declaracin explcita de mtodos,
eliminar las preocupaciones por parte del programad
implementa los arrays autnticos, en vez de listas enlazadas de punteros, con comprob
posibilidad de sobrescribir o corromper memoria resultado de punteros que seal
caractersticas reducen drsticamente el tiempo de
Adems, para asegurar el funcionamiento de la aplicacin, realiza una verific
son el resultado de la compilacin de un programa J
intrprete Java. No es el cdigo mquina directamen
fases del compilador: anlisis de instrucciones, or
rdenes.
Java proporciona, pues:
9 Comprobacin de punteros
9 Comprobacin de lmites de arrays
9 Excepciones
9 Verificacin de byte-codes


ARQUITECTURA NEUTRAL:
Para establecer Java como parte integral
de la red, el compilador Java compila su cdigo a
un fichero objeto de formato independiente de la
arquitectura de la mquina en que se ejecutar.
Cualquier mquina que tenga el sistema de
ejecucin (run-time) puede ejecutar ese cdigo
objeto, sin importar en modo alguno la mquina
en que ha sido generado. Actualmente existen
sistemas run-time para Solaris 2.x, SunOs 4.1.x,
Windows 95, Windows NT, Linux, Irix, Aix, Mac,
Apple y probablemente haya grupos de desarrollo
trabajando en el porting a otras plataformas.

El cdigo fuente Java se "compila" a un
cdigo de bytes de alto nivel independiente de la
mquina. Este cdigo (byte-codes) est diseado para ejecutarse en una mquina
por un sistema run-time, que s es dependiente de la mq
En una representacin en que tuvisemos que indicar
arquitectura de Java sobre una plataforma genrica,
GUIA DE JAVA
nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn
Java se ha construido con extensas capacidades de interconexin TCP/IP. Existen libreras de rutinas pa
acceder e interactuar con protocolos como http y ftp . Esto permite a los programadores acceder a la inf
d como a los ficheros locales.
La verdad es que Java en s no es distribuido, sino que proporciona las libreras y herramientas para
programas puedan ser distribuidos, es decir, que se corran en varias mquinas, interactuando.
liza verificaciones en busca de problemas tanto en tiempo de compilacin como en tiempo de
ejecucin. La comprobacin de tipos en Java ayuda a detectar errores, lo antes posible, en el ciclo de
Java obliga a la declaracin explcita de mtodos, reduciendo as las posibilidades de error. Maneja l
eliminar las preocupaciones por parte del programador de la liberacin o corrupcin de memoria. Tambin
en vez de listas enlazadas de punteros, con comprobacin de lmites, para evitar la
o corromper memoria resultado de punteros que sealan a zonas equivocadas. Estas
caractersticas reducen drsticamente el tiempo de desarrollo de aplicaciones en Java.
uncionamiento de la aplicacin, realiza una verificacin de los
son el resultado de la compilacin de un programa Java. Es un cdigo de mquina virtual que es interpr
intrprete Java. No es el cdigo mquina directamente entendible por el hardware, pero ya ha pasado todas las
fases del compilador: anlisis de instrucciones, orden de operadores, etc., y ya tiene generada la pil
e arrays
Para establecer Java como parte integral
de la red, el compilador Java compila su cdigo a
un fichero objeto de formato independiente de la
arquitectura de la mquina en que se ejecutar.
Cualquier mquina que tenga el sistema de
ejecutar ese cdigo
objeto, sin importar en modo alguno la mquina
en que ha sido generado. Actualmente existen
time para Solaris 2.x, SunOs 4.1.x,
Windows 95, Windows NT, Linux, Irix, Aix, Mac,
Apple y probablemente haya grupos de desarrollo
trabajando en el porting a otras plataformas.
El cdigo fuente Java se "compila" a un
cdigo de bytes de alto nivel independiente de la
codes) est diseado para ejecutarse en una mquina hipottica que es implementada
time, que s es dependiente de la mquina.
En una representacin en que tuvisemos que indicar todos los elementos que forman parte de la
arquitectura de Java sobre una plataforma genrica, obtendramos una figura como la siguiente:
Prof. Lisbeth Guerra
MAS uL LA 8CC8AMAClCn

nterconexin TCP/IP. Existen libreras de rutinas para
. Esto permite a los programadores acceder a la informacin a
que proporciona las libreras y herramientas para que los
tiempo de compilacin como en tiempo de
detectar errores, lo antes posible, en el ciclo de desarrollo.
reduciendo as las posibilidades de error. Maneja la memoria para
or de la liberacin o corrupcin de memoria. Tambin
acin de lmites, para evitar la
an a zonas equivocadas. Estas
acin de los byte-codes , que
ava. Es un cdigo de mquina virtual que es interpretado por el
ible por el hardware, pero ya ha pasado todas las
den de operadores, etc., y ya tiene generada la pila de ejecucin de
hipottica que es implementada
todos los elementos que forman parte de la
obtendramos una figura como la siguiente:
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


















En ella podemos ver que lo verdaderamente dependiente del sistema es la Mquina Virtual Java (JVM) y las
libreras fundamentales, que tambin nos permitiran acceder directamente al hardware de la mquina. Adems,
habr APIs de Java que tambin entren en contacto directo con el hardware y sern dependientes de la mquina,
como ejemplo de este tipo de APIs podemos citar:
9 Java 2D: grficos 2D y manipulacin de imgenes
9 Java Media Framework: Elementos crticos en el tiempo: audio, video...
9 Java Animation: Animacin de objetos en 2D
9 Java Telephony: Integracin con telefona
9 Java Share: Interaccin entre aplicaciones multiusuario
9 Java 3D: Grficos 3D y su manipulacin

SEGURO:
La seguridad en Java tiene dos facetas. En el lenguaje, caractersticas como los punteros o el casting
implcito que hacen los compiladores de C y C++ se eliminan para prevenir el acceso ilegal a la memoria. Cuando se
usa Java para crear un navegador, se combinan las caractersticas del lenguaje con protecciones de sentido comn
aplicadas al propio navegador.
El lenguaje C, por ejemplo, tiene lagunas de seguridad importantes, como son los errores de alineacin. Los
programadores de C utilizan punteros en conjuncin con operaciones aritmticas. Esto le permite al programador
que un puntero referencie a un lugar conocido de la memoria y pueda sumar (o restar) algn valor, para referirse a
otro lugar de la memoria. Si otros programadores conocen nuestras estructuras de datos pueden extraer informacin
confidencial de nuestro sistema. Con un lenguaje como C, se pueden tomar nmeros enteros aleatorios y
convertirlos en punteros para luego acceder a la memoria:
printf( "Escribe un valor entero: " );
scanf( "%u",&puntero );
printf( "Cadena de memoria: %sn",puntero );
Otra laguna de seguridad u otro tipo de ataque, es el Caballo de Troya. Se presenta un programa como una
utilidad, resultando tener una funcionalidad destructiva. Por ejemplo, en UNIX se visualiza el contenido de un
directorio con el comando ls. Si un programador deja un comando destructivo bajo esta referencia, se puede correr el
riesgo de ejecutar cdigo malicioso, aunque el comando siga haciendo la funcionalidad que se le supone, despus
de lanzar su carga destructiva. Por ejemplo, despus de que el caballo de Troya haya enviado por correo el
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


/etc/shadow a su creador, ejecuta la funcionalidad de ls presentando el contenido del directorio. Se notar un retardo,
pero nada inusual.
El cdigo Java pasa muchos tests antes de ejecutarse en una mquina. El cdigo se pasa a travs de un
verificador de byte-codes que comprueba el formato de los fragmentos de cdigo y aplica un probador de teoremas
para detectar fragmentos de cdigo ilegal -cdigo que falsea punteros, viola derechos de acceso sobre objetos o
intenta cambiar el tipo o clase de un objeto-.
Si los byte-codes pasan la verificacin sin generar ningn mensaje de error, entonces sabemos que:
9 El cdigo no produce desbordamiento de operandos en la pila
9 El tipo de los parmetros de todos los cdigos de operacin son conocidos y correctos
9 No ha ocurrido ninguna conversin ilegal de datos, tal como convertir enteros en punteros
9 El acceso a los campos de un objeto se sabe que es legal: public, private, protected
9 No hay ningn intento de violar las reglas de acceso y seguridad establecidas
El Cargador de Clases tambin ayuda a Java a mantener su seguridad, separando el espacio de nombres
del sistema de ficheros local, del de los recursos procedentes de la red. Esto limita cualquier aplicacin del tipo
Caballo de Troya, ya que las clases se buscan primero entre las locales y luego entre las procedentes del exterior.
Las clases importadas de la red se almacenan en un espacio de nombres privado, asociado con el origen.
Cuando una clase del espacio de nombres privado accede a otra clase, primero se busca en las clases predefinidas
(del sistema local) y luego en el espacio de nombres de la clase que hace la referencia. Esto imposibilita que una
clase suplante a una predefinida.
En resumen, las aplicaciones de Java resultan extremadamente seguras, ya que no acceden a zonas
delicadas de memoria o de sistema, con lo cual evitan la interaccin de ciertos virus. Java no posee una semntica
especfica para modificar la pila de programa, la memoria libre o utilizar objetos y mtodos de un programa sin los
privilegios del kernel del sistema operativo. Adems, para evitar modificaciones por parte de los crackers de la red,
implementa un mtodo ultraseguro de autentificacin por clave pblica. El Cargador de Clases puede verificar una
firma digital antes de realizar una instancia de un objeto. Por tanto, ningn objeto se crea y almacena en memoria,
sin que se validen los privilegios de acceso. Es decir, la seguridad se integra en el momento de compilacin, con el
nivel de detalle y de privilegio que sea necesario.
Dada, pues la concepcin del lenguaje y si todos los elementos se mantienen dentro del estndar marcado
por Sun, no hay peligro. Java imposibilita, tambin, abrir ningn fichero de la mquina local (siempre que se realizan
operaciones con archivos, stas trabajan sobre el disco duro de la mquina de donde parti el applet), no permite
ejecutar ninguna aplicacin nativa de una plataforma e impide que se utilicen otros ordenadores como puente, es
decir, nadie puede utilizar nuestra mquina para hacer peticiones o realizar operaciones con otra. Adems, los
intrpretes que incorporan los navegadores de la Web son an ms restrictivos. Bajo estas condiciones (y dentro de
la filosofa de que el nico ordenador seguro es el que est apagado, desenchufado, dentro de una cmara
acorazada en un bunker y rodeado por mil soldados de los cuerpos especiales del ejrcito), se puede considerar que
Java es un lenguaje seguro y que los applets estn libres de virus.
Respecto a la seguridad del cdigo fuente, no ya del lenguaje, JDK proporciona un desemsamblador de
byte-code, que permite que cualquier programa pueda ser convertido a cdigo fuente, lo que para el programador
significa una vulnerabilidad total a su cdigo. Utilizando javap no se obtiene el cdigo fuente original, pero s
desmonta el programa mostrando el algoritmo que se utiliza, que es lo realmente interesante. La proteccin de los
programadores ante esto es utilizar llamadas a programas nativos, externos (incluso en C o C++) de forma que no
sea descompilable todo el cdigo; aunque as se pierda portabilidad. Esta es otra de las cuestiones que Java tiene
pendientes.

PORTABLE:
Ms all de la portabilidad bsica por ser de arquitectura independiente, Java implementa otros estndares
de portabilidad para facilitar el desarrollo. Los enteros son siempre enteros y adems, enteros de 32 bits en
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


complemento a 2. Adems, Java construye sus interfaces de usuario a travs de un sistema abstracto de ventanas
de forma que las ventanas puedan ser implantadas en entornos Unix, Pc o Mac.

INTERPRETADO:
El intrprete Java (sistema run-time) puede ejecutar directamente el cdigo objeto. Enlazar (linkar) un
programa, normalmente, consume menos recursos que compilarlo, por lo que los desarrolladores con Java pasarn
ms tiempo desarrollando y menos esperando por el ordenador. No obstante, el compilador actual del JDK es
bastante lento. Por ahora, que todava no hay compiladores especficos de Java para las diversas plataformas, Java
es ms lento que otros lenguajes de programacin, como C++, ya que debe ser interpretado y no ejecutado como
sucede en cualquier programa tradicional.
Se dice que Java es de 10 a 30 veces ms lento que C, y que tampoco existen en Java proyectos de gran
envergadura como en otros lenguajes. La verdad es que ya hay comparaciones ventajosas entre Java y el resto de
los lenguajes de programacin, y una ingente cantidad de folletos electrnicos que supuran fanatismo en favor y en
contra de los distintos lenguajes contendientes con Java. Lo que se suele dejar de lado en todo esto, es que primero
habra que decidir hasta que punto Java, un lenguaje en pleno desarrollo y todava sin definicin definitiva, est
maduro como lenguaje de programacin para ser comparado con otros; como por ejemplo con Smalltalk, que lleva
ms de 20 aos en cancha.
La verdad es que Java para conseguir ser un lenguaje independiente del sistema operativo y del procesador
que incorpore la mquina utilizada, es tanto interpretado como compilado. Y esto no es ningn contrasentido, me
explico, el cdigo fuente escrito con cualquier editor se compila generando el byte-code. Este cdigo intermedio es
de muy bajo nivel, pero sin alcanzar las instrucciones mquinas propias de cada plataforma y no tiene nada que ver
con el p-code de Visual Basic. El byte-code corresponde al 80% de las instrucciones de la aplicacin. Ese mismo
cdigo es el que se puede ejecutar sobre cualquier plataforma. Para ello hace falta el run-time, que s es
completamente dependiente de la mquina y del sistema operativo, que interpreta dinmicamente el byte-code y
aade el 20% de instrucciones que faltaban para su ejecucin. Con este sistema es fcil crear aplicaciones
multiplataforma, pero para ejecutarlas es necesario que exista el run-time correspondiente al sistema operativo
utilizado.

MULTITHREADED:
Al ser multithreaded (multihilvanado, en mala traduccin), Java permite muchas actividades simultneas en
un programa. Los threads (a veces llamados, procesos ligeros), son bsicamente pequeos procesos o piezas
independientes de un gran proceso. Al estar los threads contruidos en el lenguaje, son ms fciles de usar y ms
robustos que sus homlogos en C o C++.
El beneficio de ser miltithreaded consiste en un mejor rendimiento interactivo y mejor comportamiento en
tiempo real. Aunque el comportamiento en tiempo real est limitado a las capacidades del sistema operativo
subyacente (Unix, Windows, etc.), an supera a los entornos de flujo nico de programa (single-threaded) tanto en
facilidad de desarrollo como en rendimiento.
Cualquiera que haya utilizado la tecnologa de navegacin concurrente, sabe lo frustrante que puede ser
esperar por una gran imagen que se est trayendo. En Java, las imgenes se pueden ir trayendo en un thread
independiente, permitiendo que el usuario pueda acceder a la informacin en la pgina sin tener que esperar por el
navegador.

DINAMICO:
Java se beneficia todo lo posible de la tecnologa orientada a objetos. Java no intenta conectar todos los
mdulos que comprenden una aplicacin hasta el tiempo de ejecucin. Las librera nuevas o actualizadas no
paralizarn las aplicaciones actuales (siempre que mantengan el API anterior).



nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulC

Java tambin simplifica el uso de protocolos nuevos
Java sobre la red y encuentra una pieza de la aplic
anteriores, Java es capaz de traer a
funcionar.

Java, para evitar que los mdulos de byte
de la red cada vez que se necesiten, implementa las
limpie la cach de la mquina.



Conjunto de programas que usa un programador para c
constructor grfico, un compilador y un enlazador.
web de SUN. Es la distribucin base que cualquier kit de Java necesitar. Se puede
http://java.sun.com/j2se/1.4.2/download.html
Adems, en esa misma direccin
la tarea de programar, compilar y resolver errores
lenguajes ms populares y existen multitud de edito
Visual J++ y por supuesto el propio NetBeans, de SU
GUIA DE JAVA
nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn
Java tambin simplifica el uso de protocolos nuevos o actualizados. Si su sistema ejecuta una aplicaci
Java sobre la red y encuentra una pieza de la aplicacin que no sabe manejar, tal como se ha explicado
anteriores, Java es capaz de traer automticamente cualquiera de esas piezas que el sis
Java, para evitar que los mdulos de byte-codes o los objetos o nuevas clases, haya que estar
de la red cada vez que se necesiten, implementa las opciones de persistencia, para que no se eliminen
INSTALACION DEL JSDK
Conjunto de programas que usa un programador para crear una aplicacin. Consta de un editor, un
constructor grfico, un compilador y un enlazador. El SDK de Java (JSDK) se proporciona gratuitamente d
base que cualquier kit de Java necesitar. Se puede obtener desde aqu
http://java.sun.com/j2se/1.4.2/download.html
Adems, en esa misma direccin se puede descargar el NetBeans, un potente editor de Java que
la tarea de programar, compilar y resolver errores entre otras muchas cosas. Java es actualmente uno d
lenguajes ms populares y existen multitud de editores para l. Los ms conocidos son el JDeveloper, J
Visual J++ y por supuesto el propio NetBeans, de SUN.
Prof. Lisbeth Guerra
MAS uL LA 8CC8AMAClCn


o actualizados. Si su sistema ejecuta una aplicacin
acin que no sabe manejar, tal como se ha explicado en prrafos
utomticamente cualquiera de esas piezas que el sistema necesita para

codes o los objetos o nuevas clases, haya que estar trayndolos
opciones de persistencia, para que no se eliminen cuando de
rear una aplicacin. Consta de un editor, un
l SDK de Java (JSDK) se proporciona gratuitamente desde la
obtener desde aqu
otente editor de Java que facilitar
entre otras muchas cosas. Java es actualmente uno de los
res para l. Los ms conocidos son el JDeveloper, JBuilder,
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


Sin embargo, aqu trataremos solo el uso del SDK, sin editor, ya que es lo ms recomendable. Si sabemos
utilizar el SDK sin herramientas adicionales, tendremos mayor facilidad para usar cualquier editor y siempre que
estemos faltos de algn editor, podremos salir del paso sin l.
Las herramientas que trae el SDK y que ms utilizaremos son:
9 java (ejecutable): Ejecuta cualquier programa compilado de Java
9 javac (compilador): Compilar el cdigo fuente escrito en Java.
Java no se ofrece de forma gratuita. No todas las mquinas disponen de la versin del Java Development
Kit para ejecutarse en ellas. Por ello, solamente se comenta la instalacin de JDK en Solaris, Windows y Linux.
Actualmente ya hay entornos de desarrollo integrados completos para Java, diferentes del JDK de Sun.
Oracle dispone de un entorno de desarrollo de Java, la propia SUN ofrece el entorno NetBeans y Borland posee el
JBuilder. Adems Microsoft ofrece soporte Java en su plataforma .NET.
No obstante, trataremos solamente el JDK. El entorno bsico del JDK de Java que proporciona Sun est
formado por herramientas en modo texto, que son: java, intrprete que ejecuta programas en byte-code. Javac,
compilador de Java que convierte el cdigo fuente en byte-code. Javah, crea ficheros de cabecera para implementar
mtodos para cualquier clase. Javap, es un descompilador de byte-code a cdigo fuente Java. Javadoc, es un
generador automtico de documentos HTML a partir del cdigo fuente Java. Javaprof, es un profiler para
aplicaciones de un solo thread.
El entorno habitual consiste en un navegador que pueda ejecutar applets, un compilador que convierta el
cdigo fuente Java a byte-code y el intrprete Java para ejecutar los programas. Estos son los componenetes
bsicos para desarrollar algo en Java. No obstante se necesita un editor para escribir el cdigo fuente, y no son
estrictamente necesarias otras herramientas como el debugger, un entorno visual, la documentacin o un
visualizador de jerarqua de clases. Cualquier navegador actual servir para mostrar los Applets Java que
realicemos.
La instalacin en un principio es como la de cualquier otro programa, pero una vez lo hayamos instalado
tenemos que incluir en el path del sistema operativo la ruta hacia el directorio bin. Por ejemplo si hemos instalado
Java en: c: java En el PATH de nuestro sistema operativo debe estar presente la ruta: c: javabin


CONCEPTOS BASICOS

Java es un lenguaje orientado a objetos, que se deriva en alto grado de C++, de tal forma que puede ser
considerado como un C++ nuevo y modernizado o bien como un C++ al que se le han amputado elementos
heredados del lenguaje estructurado C.

TOKENS
Un token es el elemento ms pequeo de un programa que es significativo para el compilador. Estos tokens
definen la estructura de Java.
Cuando se compila un programa Java, el compilador analiza el texto, reconoce y elimina los espacios en
blanco y comentarios y extrae tokens individuales. Los tokens resultantes se compilan, traducindolos a cdigo de
byte Java, que es independiente del sistema e interpretable dentro de un entorno Java.
Los cdigos de byte se ajustan al sistema de mquina virtual Java, que abstrae las diferencias entre
procesadores a un procesador virtual nico.
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


Los tokens Java pueden subdividirse en cinco categoras: Identificadores, palabras clave, constantes,
operadores y separadores.
a.) Identificadores
Los identificadores son tokens que representan nombres asignables a variables, mtodos y clases para
identificarlos de forma nica ante el compilador y darles nombres con sentido para el programador.
Todos los identificadores de Java diferencian entre maysculas y minsculas (Java es Case Sensitive o
Sensible a maysculas) y deben comenzar con una letra, un subrayado(_) o smbolo de dlar($). Los caracteres
posteriores del identificador pueden incluir las cifras del 0 al 9. Como nombres de identificadores no se pueden usar
palabras claves de Java.
Adems de las restricciones mencionadas existen propuestas de estilo. Es una prctica estndar de Java
denominar:
Las clases: Clase o MiClase.
Las interfaces: Interfaz o MiInterfaz.
Los mtodos: metodo () o metodoLargo ().
Las variables: altura o alturaMedia.
Las constantes: CONSTATE o CONSTANTE_LARGA.
Los paquetes: java.paquete.subpaquete.
Sin entrar en ms detalle en la siguiente lnea de cdigo se puede apreciar la declaracin de una variable
entera (int) con su correspondiente identificador:
Int alturaMedia;
b.) Palabras clave
Las palabras claves son aquellos identificadores reservados por Java para un objetivo determinado y se
usan slo de la forma limitada y especfica. Java tiene un conjunto de palabras clave ms rico que C o que C++, por
lo que s est aprendiendo Java con conocimientos de C o C++, asegrese de que presta atencin a las palabras
clave de Java.
Las siguientes palabras son palabras reservadas de Java:
abstact boolean break byte byvalue
case cast catch char class
const continue default do double
else extends false final finally
float for future generic goto
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


if implements import inner instanceof
int interface long native new
null operator outer package private
protected public rest return short
static super switch syncroniced this
throw throws transient true try
var void volatile while
Las palabras subrayadas son palabras reservadas pero no se utilizan. La definicin de estas palabras clave
no se ha revelado, ni se tiene un calendario respecto a cundo estar alguna de ellas en la especificacin o en
alguna de las implementaciones de Java.
c.) Literales y constantes
Los literales son sintaxis para asignar valores a las variables. Cada variable es de un tipo de datos concreto,
y dichos tipos de datos tienen sus propios literales.
Mediante determinados modificadores (static y final) podremos crear variables constantes, que no modifican
su valor durante la ejecucin de un programa. Las constantes pueden ser numricas, booleanas, caracteres
(Unicode) o cadenas (String).
Las cadenas, que contienen mltiples caracteres, an se consideran constantes, aunque estn
implementadas en Java como objetos. Veamos un ejemplo de constante declarada por el usuario:
final static int ALTURA_MAXIMA = 200;
Se puede observar que utilizamos final static, para que la variable sea total y absolutamente invariable.
d.) Operadores
Conocidos tambin como operandos, indican una evaluacin o computacin para ser realizada en objetos o
datos, y en definitiva sobre identificadores o constantes. Los operadores admitidos por Java son:
+ ^ <= ++ %=
>>>= - ~ >= -
&= . * && <<
== <<= [ / ||
>> += ^= ] %
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


! >>> = != (
& < *= ) |
> ?!! /= >>
As por ejemplo el siguiente fragmento de cdigo incrementa el valor de una variable en dos unidades,
mediante la utilizacin del operador aritmtico + que se utiliza para la suma:
int miNumero=0;
miNumero = miNumero + 2;
e.) Separadores
Se usan para informar al compilador de Java de cmo estn agrupadas las cosas en el cdigo.
Los separadores admitidos por Java son: { } , : ;
f.) Comentarios y espacios en blanco
El compilador de Java reconoce y elimina los espacios en blanco, tabuladores, retornos de carro y
comentarios durante el anlisis del cdigo fuente.
Los comentarios se pueden presentar en tres formatos distintos:
Formato Uso
/*comentario*/ Se ignoran todos los caracteres entre /* */. Proviene del C
//comentario Se ignoran todos los caracteres detrs de // hasta el fin de lnea. Proviene del C++
/**comentario*/ Lo mismo que /* */ pero se podrn utilizar para documentacin automtica.
Por ejemplo la siguiente lnea de cdigo presenta un comentario:
int alturaMinima = 150; // No menos de 150 centmetros

EXPRESIONES
Los operadores, variables y las llamadas a mtodos pueden ser combinadas en secuencias conocidas como
expresiones. El comportamiento real de un programa Java se logra a travs de expresiones, que se agrupan para
crear sentencias.
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


Una expresin es una serie de variables, operadores y llamadas a mtodos (construida conforme a la
sintaxis del lenguaje) que se evala a un nico valor.
Entre otras cosas, las expresiones son utilizadas para realizar clculos, para asignar valores a variables, y
para ayudar a controlar la ejecucin del flujo del programa. La tarea de una expresin se compone de dos partes:
realiza el clculo indicado por los elementos de la expresin y devuelve el valor obtenido como resultado del clculo.
Los operadores devuelven un valor, por lo que el uso de un operador es una expresin.
Por ejemplo, la siguiente sentencia es una expresin:
int contador=1;
contador++;
La expresin contador++ en este caso particular se evala al valor 1, que era el valor de la variable contador
antes de que la operacin ocurra, pero la variable contador adquiere un valor de 2.
El tipo de datos del valor devuelto por una expresin depende de los elementos utilizados en la expresin.
La expresin contador++ devuelve un entero porque ++ devuelve un valor del mismo tipo que su operando y
contador es un entero. Otras expresiones devuelven valores booleanos, cadenas...
Una expresin de llamada a un mtodo se evala al valor de retorno del mtodo; as el tipo de dato de la
expresin de llamada a un mtodo es el mismo que el tipo de dato del valor de retorno de ese mtodo.
Otra sentencia interesante sera:
in.read( ) != -1 // in es un flujo de entrada
Esta sentencia se compone de dos expresiones:
1. La primera expresin es una llamada al mtodo in.read(). El mtodo in.read() ha sido declarado para
devolver un entero, por lo que la expresin in.read() se evala a un entero.
2. La segunda expresin contenida en la sentencia utiliza el operador !=, que comprueba si dos operandos son
distintos. En la sentencia en cuestin, los operandos son in.read() y -1. El operando in.read() es vlido para
el operador != porque in.read() es una expresin que se evala a un entero, as que la expresin in.read()!=-
1 compara dos enteros. El valor devuelto por esta expresin ser verdadero o falso dependiendo del
resultado de la lectura del fichero in.
Como se puede observar, Java permite construir sentencias (expresiones compuestas) a partir de varias
expresiones ms pequeas con tal que los tipos de datos requeridos por una parte de la expresin concuerden con
los tipos de datos de la otra.


GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


BLOQUES Y MBITO
En Java el cdigo fuente est dividido en partes separadas por llaves, denominas bloques. Cada bloque
existe independiente de lo que est fuera de l, agrupando en su interior sentencias (expresiones) relacionadas.
Desde un bloque externo parece que todo lo que est dentro de llaves se ejecuta como una sentencia.
Pero, qu es un bloque externo? Esto tiene explicacin si entendemos que existe una jerarqua de bloques, y que
un bloque puede contener uno o ms subbloques anidados.
El concepto de mbito est estrechamente relacionado con el concepto de bloque y es muy importante
cuando se trabaja con variables en Java. El mbito se refiere a cmo las secciones de un programa (bloques)
afectan el tiempo de vida de las variables.
Toda variable tiene un mbito, en el que es usada, que viene determinado por los bloques. Una variable
definida en un bloque interno no es visible por el bloque externo.
Las llaves de separacin son importantes no slo en un sentido lgico, ya que son la forma de que el
compilador diferencie dnde acaba una seccin de cdigo y dnde comienza otra, sino que tienen una connotacin
esttica que facilita la lectura de los programas al ser humano.
As mismo, para identificar los diferentes bloques se utilizan sangras. Las sangras se utilizan para el
programador, no para el compilador. La sangra (tambin denominada indentacin) ms adecuada para la esttica
de un programa Java son dos espacios:
{
// Bloque externo
int x = 1;
{
// Bloque interno invisible al exterior
int y = 2;
}
x = y; // Da error: Y fuera de mbito
}




GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


TIPOS DE VARIABLES
Una variable es un contenedor de bits que representan a un valor. Se emplean para almacenar datos que
pueden cambiar durante la ejecucin de un programa. En funcin de los datos que almacenan se clasifican en:
Variables primitivas: almacenan datos numricos, valores lgicos o caracteres.
Variables referenciadas: asociadas a objetos o instancias de una clase. Por ejemplo, para almacenar
cadenas de caracteres se emplear una variable referenciada asociada a la clase String, para almacenar
informacin sobre la fecha actual, otra asociada a la clase Date, etc. Se estudiarn ms adelante.
Todos los nombres empleados para hacer referencia a variables deben cumplir lo siguiente:
9 Su primer carcter debe ser una letra, el smbolo del subrayado o el carcter dlar $.
9 No son vlidos las palabras reservadas de Java.
9 No se admiten espacios en blanco.
9 Son case-sensitive (sensibles a maysculas).
Aparte de estas normas conviene que los nombres de las variables indiquen qu dato almacenan con el fin
de facilitar la lectura del programa y, por otra parte, si un nombre tiene ms de dos palabras la primera letra de la
primera palabra ir en minscula, la primera letra de la segunda palabra en mayscula, dem con la tercera y as
sucesivamente.
Ejemplo:
int miVariableEntera=100;
Variables primitivas
De tipo entero: Son variables que almacenan nmeros enteros. Se pueden dividir en los siguientes tipos:

NOTA: el tipo de variable en que se almacena por defecto un nmero entero es int. El valor por defecto asociado a
cualquier variable entera no inicializada es 0.
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


De tipo real o de coma flotante: Son variables que almacenan datos numricos con decimales. Se pueden
dividir en los siguientes tipos:

NOTA: el tipo de variable en que se almacena por defecto un numero decimal es double. El valor por defecto
asociado a cualquier variable real no inicializada es 0.0.
De tipo lgico o booleanas: Son variables que almacenan dos posibles valores: true o false. No se
corresponden con ningn valor numrico. Ejemplo: boolean tienesCalor=true;
NOTA: el valor por defecto asociado a cualquier variable booleana no inicializada es false.
De tipo char o de carcter: Son variables que almacenan caracteres individuales (letra, numero, signo ?,
etc...). El carcter que se inicializa debe ir entre apstrofes o comillas simples 'a'.
El cdigo de caracteres empleado por Java es Unicode y recoge los caracteres de prcticamente todos los
idiomas importantes del mundo (son unos 65.536). Los caracteres Unicode del alfabeto occidental corresponden a
los primeros 256 enteros; es decir van desde [0, 255].
A cada carcter le corresponde unvocamente un nmero entero perteneciente al intervalo [0, 65536] o a [0,
255] si se trabaja slo con el alfabeto occidental. Por ejemplo, la letra es el entero 164. Ms adelante se ver que
el casting entre variables primitivas enteras y la variable char est permitido.
Ejemplo:
char miCaracter='n';
char miCaracter1=110; (dem antes, pero mediante el entero que le corresponde segn Unicode)
char miCaracter2='\u006E'; (dem antes, pero segn notacin Unicode. La notacin Unicode, en general, es as:
\uXXXX siendo X un dgito o cifra fundamental del sistema de numeracin hexadecimal (0,1,2,...,9,A,B,...,F))
Asociado a este tipo de variable se tienen las secuencias de escape. Se emplean para representar
caracteres especiales (por ejemplo, unas comillas dentro de una instruccin que exige una cadena entrecomillada) y
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


caracteres no imprimibles como el tabulador, salto de lnea, etc. Van precedidos de la contrabarra. Algunos de ellos
se detallan en la tabla siguiente:









OPERADORES

Operadores aritmticos
Operador Uso Descripcin
+ op1 + op2 Suma op1 y op2
- op1 - op2 Resta op2 de op1
* op1 * op2 Multiplica op1 por op2
/ op1 / op2 Divide op1 por op2
% op1 % op2 Calcula el resto de dividir op1 entre op2
El lenguaje Java sobrecarga la definicin del operador + para incluir la concatenacin de cadenas.
El siguiente ejemplo utiliza + para concatenar la cadena "Contados ", con el valor de la variable contador y
la cadena " caracteres.": System.out.print("Contados" + contador + "caracteres.");
Esta operacin automticamente convierte el valor de contador a una cadena de caracteres.
Los operadores + y - tienen versiones unarias que realizan las siguientes operaciones:
Operador Uso Descripcin
+ +op Convierte op a entero si es un byte, short o char
- -op Niega aritmticamente op

NOTA: el valor por defecto asociado a cualquier variable char no inicializada es '\u0000'
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


Existen dos operadores aritmticos que funcionan como atajo de la combinacin de otros: ++ que
incrementa su operando en 1, y -- que decrementa su operando en 1.
Ambos operadores tienen una versin prefija, y otra posfija. La utilizacin la correcta es crtica en
situaciones donde el valor de la sentencia es utilizado en mitad de un clculo ms complejo, por ejemplo
para control de flujos:
Operador Uso Descripcin
++ op++ Incrementa op en 1; se evala al valor anterior al incremento
++ ++op Incrementa op en 1; se evala al valor posterior al incremento
-- op-- Decrementa op en 1; se evala al valor anterior al incremento
-- --op Decrementa op en 1; se evala al valor posterior al incremento

Operadores de comparacin y condicionales
Un operador de comparacin compara dos valores y determina la relacin existente entre ambos.
Por ejemplo, el operador!= devuelve verdadero (true) si los dos operandos son distintos. La siguiente tabla
resume los operadores de comparacin de Java:
Operador Uso Devuelve verdadero si
> op1 > op2 op1 es mayor que op2
>= op1 >= op2 op1 es mayor o igual que op2
< op1 < op2 op1 es menor que op2
<= op1 <= op2 op1 es menor o igual que op2
== op1 == op2 op1 y op2 son iguales
!= op1 != op2 op1 y op2 son distintos
Los operadores de comparacin suelen ser usados con los operadores condicionales para
construir expresiones complejas que sirvan para la toma de decisiones. Un operador de este tipo es &&, el
cual realiza la operacin booleana and. Por ejemplo, se pueden utilizar dos operaciones diferentes de
comparacin con && para determinar si ambas relaciones son ciertas
NOTA: Si el programador quiere que se evale la parte derecha, deber utilizar el operador & en lugar de
&&. De la misma manera se relacionan los operadores || y | para la exclusin lgica (OR).


GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


Java soporta cinco operadores condicionales, mostrados en la siguiente tabla:
Operador Uso Devuelve verdadero si...
&& op1 && op2 op1 y op2 son ambos verdaderos, condicionalmente evala op2
& op1 & op2 op1 y op2 son ambos verdaderos, siempre evala op1 y op2
|| op1 || op2 op1 o op2 son verdaderos, condicionalmente evala op2
| op1 | op2 op1 o op2 son verdaderos, siempre evala op1 y op2
! ! op op es falso

Operadores de bit
Un operador de bit permite realizar operaciones de bit sobre los datos. Existen dos tipos: los que
desplazan (mueven) bits, y operadores lgicos de bit.
a.) Operadores de desplazamiento de bits
Operador Uso Operacin
>> op1 >> op2 Desplaza los bits de op1 a la derecha op2 veces
<< op1 << op2 Desplaza los bits de op1 a la izquierda op2 veces
>>> op1 >>> op2 Desplaza los bits de op1 a la derecha op2 veces (sin signo)
Los tres operadores de desplazamiento simplemente desplazan los bits del operando de la parte
izquierda el nmero de veces indicado por el operando de la parte derecha. El desplazamiento ocurre en la
direccin indicada por el operador. Por ejemplo, la siguiente sentencia, desplaza los bits del entero 13 a la
derecha una posicin: 13 >> 1;
La representacin en binario del nmero 13 es 1101. El resultado de la operacin de
desplazamiento es 1101 desplazado una posicin a la derecha, 110 o 6 en decimal. Se debe tener en
cuenta que el bit ms a la derecha se pierde en este caso.
Un desplazamiento a la derecha una posicin es equivalente a dividir el operando del lado
izquierdo por 2, mientras que un desplazamiento a la izquierda de una posicin equivale a multiplicar por 2,
pero un desplazamiento es ms eficiente, computacionalmente hablando, que una divisin o multiplicacin.
El desplazamiento sin signo >>> funciona de la siguiente manera:
Si se desplaza con signo el nmero -1 (1111), seguir valiendo -1, dado que la extensin de signo
sigue introduciendo unos en los bits ms significativos.
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


Con el desplazamiento sin signo se consigue introducir ceros por la izquierda, obteniendo el
nmero 7 (0111).
Este tipo de desplazamientos es especialmente til en la utilizacin de mscaras grficas.

b.) Operadores de lgica de bits
La lgica de bits (lgica de Bool) se utiliza para modelizar condiciones biestado y trabajar con ellas
(cierto/falso, true/false, 1/0).
En Java hay cuatro operadores de lgica de bits:
Operador Uso Operacin
& op1 & op2 AND
| op1 | op2 OR
^ op1 ^ op2 OR Exclusivo
~ ~op2 Complemento


Operadores de asignacin
El operador de asignacin bsico es el =, que se utiliza para asignar un valor a otro. Por ejemplo:
int contador = 0; Inicia la variable contador con un valor 0.
Java adems proporciona varios operadores de asignacin que permiten realizar un atajo en la
escritura de cdigo. Permiten realizar operaciones aritmticas, lgicas, de bit y de asignacin con un nico
operador.
Supongamos que necesitamos sumar un nmero a una variable y almacenar el resultado en la
misma variable, como a continuacin:
i = i + 2; Se puede abreviar esta sentencia con el operador de atajo +=, de la siguiente manera: i += 2;
La siguiente tabla muestra los operadores de atajo de asignacin y sus equivalentes largos:


GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


Operador Uso Equivalente a
+= op1 += op2 op1 = op1 + op2
-= op1 -= op2 op1 = op1 - op2
*= op1 *= op2 op1 = op1 * op2
/= op1 /= op2 op1 = op1 / op2
%= op1 %= op2 op1 = op1 % op2
&= op1 &= op2 op1 = op1 & op2
Precedencia de operadores
Cuando en una sentencia aparecen varios operadores el compilador deber de elegir en qu orden
aplica los operadores. A esto se le llama precedencia.
Los operadores con mayor precedencia son evaluados antes que los operadores con una
precedencia relativa menor.
Cuando en una sentencia aparecen operadores con la misma precedencia:
Los operadores de asignacin son evaluados de derecha a izquierda.
Los operadores binarios, (menos los de asignacin) son evaluados de izquierda a derecha.
Se puede indicar explcitamente al compilador de Java cmo se desea que se evale la expresin
con parntesis balanceados ( ). Para hacer que el cdigo sea ms fcil de leer y mantener, es preferible
ser explcito e indicar con parntesis que operadores deben ser evaluados primero.
La siguiente tabla muestra la precedencia asignada a los operadores de Java. Los operadores de
la tabla estn listados en orden de precedencia: cuanto ms arriba aparezca un operador, mayor es su
precedencia. Los operadores en la misma lnea tienen la misma precedencia:
Tipo de operadores Operadores de este tipo
Operadores posfijos [ ] . (parametros) expr++ expr--
Operadores unarios ++expr --expr +expr -expr ~ !
Creacin o conversin new (tipo) expr
Multiplicacin * / %
Suma + -
Desplazamiento <<
Comparacin < <= = instanceof
Igualdad == !=
AND a nivel de bit &
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


OR a nivel de bit ^
XOR a nivel de bit |
AND lgico &&
OR lgico ||
Condicional ? :
Asignacin = += -= *= /= %= &= ^= |= <<= = =


ENTRADA Y SALIDA DE DATOS ESTANDAR (TECLADO Y MONITOR)

En Java, la entrada desde teclado y la salida a pantalla estn reguladas a travs de la clase System. Esta
clase pertenece al paquete java.lang y agrupa diversos mtodos y objetos que tienen relacin con el sistema local.
Contiene, entre otros, tres objetos static que son:

9 System.in: Objeto de la clase InputStream preparado para recibir datos desde la entrada estndar del
sistema (habitualmente el teclado).
9 System.out: Objeto de la clase PrintStream que imprimir los datos en la salida estndar del sistema
(normalmente asociado con la pantalla).
9 System.err: Objeto de la clase PrintStream. Utilizado para mensajes de error que salen tambin por
pantalla por defecto.

Estas clases permiten la comunicacin alfanumrica con el programa a travs de lo mtodos incluidos en la Tabla
Son mtodos que permiten la entrada/salida a un nivel muy elemental.

Mtodos elementales de lectura y escritura.

Existen tres mtodos de System que permiten sustituir la entrada y salida estndar. Por ejemplo, se utiliza
para hacer que el programa lea de un archivo y no del teclado.
9 System.setIn(InputStream is);
9 System.setOut(PrintStream ps);
9 System.setErr(PrintStream ps);


El argumento de setIn() no tiene que ser necesariamente del tipo InputStream. Es una referencia a la clase
base, y por tanto puede apuntar a objetos de cualquiera de sus clases derivadas (como FileInputStream). Asimismo,
el constructor de PrintStream acepta un OutputStream, luego se puede dirigir la salida estndar a cualquiera de las
clases definidas para salida.


GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


Si se utilizan estas sentencias con un compilador de Java 1.1 se obtiene un mensaje de mtodo obsoleto
(deprecated) al crear un objeto PrintStream. Al sealar como obsoleto el constructor de esta clase se pretenda
animar al uso de PrintWriter, pero existen casos en los cuales es imprescindible un elemento PrintStream.
Afortunadamente, Java 1.2 ha reconsiderado esta decisin y de nuevo se puede utilizar sin problemas.

SALIDA DE TEXTO Y VARIABLES POR PANTALLA

Para imprimir en la pantalla se utilizan los mtodos System.out.print() y System.out.println(). Son los
primeros mtodos que aprende cualquier programador. Sus caractersticas fundamentales son:
Pueden imprimir valores escritos directamente en el cdigo o cualquier tipo de variable primitiva de Java.
System.out.println("Hola, Mundo!");
System.out.println(57);
double numeroPI = 3.141592654;
System.out.println(numeroPI);
String hola = new String("Hola");
System.out.println(hola);

Se pueden imprimir varias variables en una llamada al mtodo correspondiente utilizando el operador + de
concatenacin, que equivale a convertir a String todas las variables que no lo sean y concatenar las cadenas de
caracteres (el primer argumento debe ser un String).
System.out.println("Hola, Mundo! " + numeroPI);
Se debe recordar que los objetos System.out y System.err son de la clase PrintStream y aunque imprimen
las variables de un modo legible, no permiten dar a la salida un formato a medida. El programador no puede
especificar un formato distinto al disponible por defecto.


LECTURA DESDE TECLADO
Para leer desde teclado se puede utilizar el mtodo System.in.read() de la clase InputStream. Este mtodo
lee un carcter por cada llamada. Su valor de retorno es un int. Si se espera cualquier otro tipo hay que hacer una
conversin explcita mediante un cast.
char c;
c=(char)System.in.read();

Este mtodo puede lanzar la excepcin java.io.IOException y siempre habr que ocuparse de ella, por
ejemplo en la forma:

try {
c=(char)System.in.read();
}
catch(java.io.IOException ioex) {
// qu hacer cuando ocurra la excepcin
}
Para leer datos ms largos que un simple carcter es necesario emplear un bucle while o for y unir los
caracteres. Por ejemplo, para leer una lnea completa se podra utilizar un bucle while guardando los caracteres
ledos en un String o en un StringBuffer (ms rpido que String):
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn





char c;
String frase = new String(""); // StringBuffer frase=new StringBuffer("");
try {
while((c=System.in.read()) != '\n')
frase = frase + c; // frase.append(c);
}
catch(java.io.IOException ioex) {}

Una vez que se lee una lnea, sta puede contener nmeros de coma flotante, etc. Sin embargo, hay una
manera ms fcil de conseguir lo mismo: utilizar adecuadamente la librera java.io.

ESTRUCTURAS DE CONTROL
Durante un programa existen acciones que se han de repetir un nmero determinado de veces. Por
ejemplo, leer 3 caracteres de un flujo de entrada in se codificara:
in.read();
in.read();
in.read();
Este cdigo adems de poco elegante sera inviable para una repeticin de 3000 lecturas. Por eso aparecen
las estructuras de control, que facilitan que determinadas acciones se realicen varias veces, mientras que una
condicin se cumpla, y en definitiva, tomar decisiones de qu hacer en funcin de las condiciones que se den en el
programa en un momento dado de su ejecucin.
Ejemplo:
int i=0;
for ( i=0 ; i <= 3 ; i++ )
in.read();
Donde bastara cambiar el 3 por cualquier otro nmero para que la lectura se repitiese ese nmero de veces.



GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


El lenguaje Java soporta las estructuras de control:
Sentencia Clave
Toma de decisin if-else, switch-case
Bucle for, while, do-while
Miscelneo break, continue, label:, return, goto
Aunque goto es una palabra reservada, actualmente el lenguaje Java no soporta la sentencia goto. Se
puede utilizar las sentencias de bifurcacin en su lugar.
LAS SENTENCIAS CONDICIONALES: IF Y SWITCH
A.) LA SENTENCIA IF - ELSE
La sentencia if-else de Java dota a los programas de la habilidad de ejecutar distintos conjuntos de
sentencias segn algn criterio.
La sintaxis de la sentencia if-else es:
if ( condicin )
Bloque de cdigo a ejecutar si la condicin es cierta
else
Bloque de cdigo a ejecutar si la condicin es falsa

La parte del else es opcional, y un bloque de cdigo puede ser simplemente la sentencia vaca; para
representar que en ese caso no se ha de ejecutar nada.
Supongamos que un programa debe realizar diferentes acciones dependiendo de si el usuario oprime el
botn aceptar o el botn cancelar en una ventana de dialogo. Nuestro programa puede realizar esto usando la
sentencia if - else:
// La respuesta es Aceptar o Cancelar
if (respuesta == Aceptar) {
// cdigo para realizar la accin Aceptar
System.out.println( "Su peticion esta siendo atendida" );
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


}
else {
// cdigo para realizar la accin Cancelar
System.out.println( "Cancelando accion" );
}
Se pueden anidar expresiones if-else, para poder implementar aquellos casos con mltiples acciones. Esto
es lo que se suele denominar como sentencias else if.
Por ejemplo, supongamos que se desea escribir un programa que clasifique segn el contenido de una
variable valor, asigne una letra a una variable clasificacion: A para un valor del 100-91, B de 90-81, C para 80-71 y F
si no es ninguno de los anteriores:
int valor;
char clasificacion;
if (valor > 90)
{clasificacion='A';}
else
if (valor > 80)
{clasificacion='B';}
else
if (valor > 70)
{clasificacion='C';}
else
{clasificacion='F';}
Se pueden escribir los if en las mismas lneas que los else, pero desde este tutorial se insta a utilizar la
forma indentada (como se ha podido ver en el ejemplo), pues es ms clara para el lector.
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


Este sistema de programacin (else if) no es demasiado recomendable, y por ello el lenguaje Java incluye la
sentencia switch, que veremos a continuacin, para dirigir el flujo de control de variables con mltiples valores.
B.) LA SENTENCIA SWITCH
Mediante la sentencia switch se puede seleccionar entre varias sentencias segn el valor de cierta
expresin.
La forma general de switch es la siguiente:
switch ( expresionMultivalor ) {
case valor1 : conjuntoDeSentencias; break;
case valor2 : conjuntoDeSentencias; break;
case valor3: conjuntoDeSentencias; break;
default: conjuntoDeSentencias; break;
}
La sentencia switch evala la expresinMultivalor y ejecuta el conjuntoDeSentencias que aparece junto a la
clusula case cuyo valor corresponda con el de la expresinMultivalor.
Cada sentencia case debe ser nica y el valor que evala debe ser del mismo tipo que el devuelto por la
expresinMultivalor de la sentencia switch.
Las sentencias break que aparecen tras cada conjuntoDeSentencias provocan que el control salga del
switch y contine con la siguiente instruccin al switch. Las sentencias break son necesarias porque sin ellas se
ejecutaran secuencialmente las sentencias case siguientes. Existen ciertas situaciones en las que se desea ejecutar
secuencialmente algunas o todas las sentencias case, para lo que habr que eliminar algunos break.
Finalmente, se puede usar la sentencia default para manejar los valores que no son explcitamente
contemplados por alguna de las sentencias case. Su uso es altamente recomendado.
Por ejemplo, supongamos un programa con una variable entera meses cuyo valor indica el mes actual, y se
desea imprimir el nombre del mes en que estemos. Se puede utilizar la sentencia switch para realizar esta operacin:
int meses;
switch ( meses ){
case 1: System.out.println( "Enero" ); break;
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


case 2: System.out.println( "Febrero" ); break;
case 3: System.out.println( "Marzo" ); break;
//Demas meses
// . . .
case 12: System.out.println( "Diciembre" ); break;
default: System.out.println( "Mes no valido" ); break;
}
Por supuesto, se puede implementar esta estructura como una sentencia if else if:
int meses;
if ( meses == 1 ) {
System.out.println( "Enero" );
}
else
if ( meses == 2 ) {
System.out.println( "Febrero" );
}
// Y as para los dems meses

El decidir si usar la sentencia if o switch depende del criterio de cada caso. Se puede decidir cul usar
basndonos en la legibilidad, aunque se recomienda utilizar switch para sentencias con ms de tres o cuatro
posibilidades.
C. SENTENCIAS DE ITERACIN O BUCLES: FOR, DO, WHILE
A.) BUCLE WHILE
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


El bucle while es el bucle bsico de iteracin. Sirve para realizar una accin sucesivamente mientras se
cumpla una determinada condicin.
La forma general del bucle while es la siguiente:
while ( expresinBooleana ) {
sentencias;
};
Las sentencias se ejecutan mientras la expresinBooleana tenga un valor de verdadero.
Se utiliza, por ejemplo para estar en un bucle del que no hay que salir hasta que no se cumpla una
determinada condicin. Por ejemplo, multiplicar un nmero por 2 hasta que sea mayor que 100:
int i = 1;
while ( i <= 100 ) {
i = i * 2;
}
Con l se podran eliminar los bucles do-while y for por ser extensiones de ste, pero que se incluyen en el
lenguaje para facilitar la programacin.
B.) BUCLE DO-WHILE
El bucle do-while es similar al bucle while, pero en el bucle while la expresin se evala al principio del bucle
y en el bucle do-while la evaluacin se realiza al final.
La forma general del bucle do-while es la siguiente:
do {
sentencias;
} while ( expresinBooleana );
La sentencia do-while es el constructor de bucles menos utilizado en la programacin, pero tiene sus usos,
cuando el bucle deba ser ejecutado por lo menos una vez.
Por ejemplo, cuando se lee informacin de un archivo, se sabe que siempre se debe leer por lo menos un
carcter:
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


int c;
do {
c = System.in.read( );
// Sentencias para tratar el carcter c
} while ( c != -1 ); // No se puede leer ms (Fin fichero)
C.) BUCLE FOR
Mediante la sentencia for se resume un bucle do-while con una iniciacin previa. Es muy comn que en los
bucles while y do-while se inicien las variables de control de nmero de pasadas por el bucle, inmediatamente antes
de comenzar los bucles. Por eso el bucle for est tan extendido.
La forma general de la sentencia for es la siguiente:
for ( iniciacin ; terminacin ; incremento )
sentencias;
La iniciacin es una sentencia que se ejecuta una vez antes de entrar en el bucle.
La terminacin es una expresin que determina cundo se debe terminar el bucle. Esta expresin se evala
al final de cada iteracin del bucle. Cuando la expresin se evala a falso, el bucle termina.
El incremento es una expresin que es invocada en cada iteracin del bucle. En realidad puede ser una
accin cualquiera, aunque se suele utilizar para incrementar una variable contador:
for ( i = 0 ; i < 10 ; i++ )
Algunos (o todos) estos componentes pueden omitirse, pero los puntos y coma siempre deben aparecer
(aunque sea sin nada entre s).
Se debe utilizar el bucle for cuando se conozcan las restricciones del bucle (su instruccin de iniciacin,
criterio de terminacin e instruccin de incremento).
Por ejemplo, los bucles for son utilizados comnmente para iterar sobre los elementos de una matriz, o los
caracteres de una cadena:
// cad es una cadena (String)
for ( int i = 0; i < cad.length() ; i++){
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


// hacer algo con el elemento i-simo de cad
}
D. SENTENCIAS DE SALTO: BREAK, CONTINUE Y RETURN
A.) SENTENCIA BREAK
La sentencia break provoca que el flujo de control salte a la sentencia inmediatamente posterior al bloque
en curso. Ya se ha visto anteriormente la sentencia break dentro de la sentencia switch.
El uso de la sentencia break con sentencias etiquetadas es una alternativa al uso de la sentencia goto, que
no es soportada por el lenguaje Java.
Se puede etiquetar una sentencia poniendo una identificador Java vlido seguido por dos puntos antes de la
sentencia: nombreSentencia: sentenciaEtiquetada
La sentencia break se utiliza para salir de una sentencia etiquetada, llevando el flujo del programa al final de
la sentencia de programa que indique:
break nombreSentencia2;
Un ejemplo de esto sera el programa:
void gotoBreak() {
System.out.println("Ejemplo de break como 'goto' ");
a: for( int i=1; i<10; i++ ){
System.out.print(" i="+i);
for( int j=1; j<10; j++ ){
if ( j==5 )
break a; //Sale de los dos bucles!!!
System.out.print(" j="+j);
}
System.out.print("No llega aqu");
}
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


}
Al interpretar break a, no solo se rompe la ejecucin del bucle interior (el de j), sino que se salta al final del
bucle i, obtenindose:
i=1 j=1 j=2 j=3
Nota: Se desaconseja esta forma de programacin, basada en goto, y con saltos de flujo no controlados.

B.) SENTENCIA CONTINUE
Del mismo modo que en un bucle se puede desear romper la iteracin, tambin se puede desear continuar
con el bucle, pero dejando pasar una determinada iteracin. Se puede usar la sentencia continue dentro de los
bucles para saltar a otra sentencia, aunque no puede ser llamada fuera de un bucle.
Tras la invocacin a una sentencia continue se transfiere el control a la condicin de terminacin del bucle,
que vuelve a ser evaluada en ese momento, y el bucle contina o no dependiendo del resultado de la evaluacin. En
los bucles for adems en ese momento se ejecuta la clusula de incremento (antes de la evaluacin). Por ejemplo el
siguiente fragmento de cdigo imprime los nmeros del 0 al 9 no divisibles por 3:
for ( int i = 0 ; i < 10 ; i++ ) {
if ( ( i % 3 ) == 0 )
continue;
System.out.print( " " + i );
}
Del mismo modo que break, en las sentencias continue se puede indicar una etiqueta de bloque al que hace
referencia. Con ello podemos referirnos a un bloque superior, si estamos en bucles anidados. Si dicha etiqueta no es
indicada, se presupone que nos referimos al bucle en el que la sentencia continue aparece.
Por ejemplo, el siguiente fragmento de cdigo:
void gotoContinue( ) {
f: for ( int i=1; i <5; i++ ) {
for ( int j=1; j<5; j++ ) {
if ( j>i ) {
System.out.println(" ");
continue f;
}
System.out.print( " " + (i*j) );
}
}
}
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


En este cdigo la sentencia continue termina el bucle de j y continua el flujo en la siguiente iteracin de i.
Ese mtodo imprimira:
1
2 4
3 6 9
4 8 12 16
Nota: Se desaconseja esta forma de programacin, basada en goto, y con saltos de flujo no controlados.
C.) SENTENCIA RETURN
La ltima de las sentencias de salto es la sentencia return, que puede usar para salir del mtodo en curso y
retornar a la sentencia dentro de la cual se realiz la llamada. Para devolver un valor, simplemente se debe poner el
valor (o una expresin que calcule el valor) a continuacin de la palabra return. El valor devuelto por return debe
coincidir con el tipo declarado como valor de retorno del mtodo. Cuando un mtodo se declara como void se debe
usar la forma de return sin indicarle ningn valor. Esto se hace para no ejecutar todo el cdigo del programa:
int contador;
boolean condicion;
int devuelveContadorIncrementado(){
return ++contador;
}
void metodoReturn(){
//Sentencias
if ( condicion == true )
return;
//Ms sentencias a ejecutar si condicin no vale true
}
E. EXCEPCIONES
Las excepciones son otra forma ms avanzada de controlar el flujo de un programa. Con ellas se podrn
realizar acciones especiales si se dan determinadas condiciones, justo en el momento en que esas condiciones se
den.
CLASES Y OBJETOS

A partir de ahora es cuando entramos la verdadera potencia de Java como lenguaje orientado a objetos: las
clases y los objetos. Durante esta sesin se va a trabajar en la construccin de una clase MiPunto, que modeliza un
punto en un espacio plano:
class MiPunto{
int x, y;
int metodoSuma( int paramX, int paramY ) {
return ( paramX + paramY );
}
double distancia(int x, int y) {
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


int dx= this.x pX;
int dy = this.y pY;
return Math.sqrt(dx*dx + dy*dy);
}
void metodoVacio( ) { }
void inicia( int paramX, int paramY ) {
x = paramX;
y = paramY;
}
void inicia2( int x, int y )
{
x = x; // Ojo, no modificamos la variable de instancia!!!
this.y = y; // Modificamos la variable de instancia!!!
}
MiPunto( int paramX, int paramY ) {
this.x = paramX; // Este this se puede omitir
y = paramY; // No hace falta this
}

MiPunto() {
inicia(-1,-1); //Por defecto ; this(-1,-1) hace lo mismo
}

}

DEFINICIN DE UNA CLASE

El elemento bsico de la programacin orientada a objetos en Java es la clase. Una clase define la forma y
comportamiento de un objeto.
Para crear una clase slo se necesita un archivo fuente que contenga la palabra clave reservada class
seguida de un identificador legal y un bloque delimitado por dos llaves para el cuerpo de la clase.
class MiPunto {
}
Un archivo de Java debe tener el mismo nombre que la clase que contiene, y se les suele asignar la
extensin ".java". Por ejemplo la clase MiPunto se guardara en un fichero que se llamase MiPunto.java. Hay que
tener presente que en Java se diferencia entre maysculas y minsculas; el nombre de la clase y el de archivo
fuente han de ser exactamente iguales.
Aunque la clase MiPunto es sintcticamente correcta, es lo que se viene a llamar una clase vaca, es decir,
una clase que no hace nada. Las clases tpicas de Java incluirn variables y mtodos de instancia. Los programas
en Java completos constarn por lo general de varias clases de Java en distintos archivos fuente.
Una clase es una plantilla para un objeto. Por lo tanto define la estructura de un objeto y su interfaz
funcional, en forma de mtodos. Cuando se ejecuta un programa en Java, el sistema utiliza definiciones de clase
para crear instancias de las clases, que son los objetos reales. Los trminos instancia y objeto se utilizan de manera
indistinta. La forma general de una definicin de clase es:
class Nombre_De_Clase {
tipo_de_variable nombre_de_atributo1;
tipo_de_variable nombre_de_atributo2;
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


// . . .
tipo_devuelto nombre_de_mtodo1( lista_de_parmetros ) {
cuerpo_del_mtodo1;
}
tipo_devuelto nombre_de_mtodo2( lista_de_parmetros ) {
cuerpo_del_mtodo2;
}
// . . .
}

Los tipos tipo_de_variable y tipo_devuelto, han de ser tipos simples Java o nombres de otras clases ya
definidas. Tanto Nombre_De_Clase, como los nombre_de_atributo y nombre_de_mtodo, han de ser identificadores
Java vlidos.

LOS ATRIBUTOS

Los datos se encapsulan dentro de una clase declarando variables dentro de las llaves de apertura y cierre
de la declaracin de la clase, variables que se conocen como atributos. Se declaran igual que las variables locales
de un mtodo en concreto.
Por ejemplo, este es un programa que declara una clase MiPunto, con dos atributos enteros llamados x e y.
class MiPunto {
int x, y;
}

Los atributos se pueden declarar con dos clases de tipos: un tipo simple Java (ya descritos), o el nombre de
una clase (ser una referencia a objeto, vase el punto C.a de este mismo apartado).
Cuando se realiza una instancia de una clase (creacin de un objeto) se reservar en la memoria un
espacio para un conjunto de datos como el que definen los atributos de una clase. A este conjunto de variables se le
denomina variables de instancia.

LOS MTODOS
Los mtodos son subrutinas que definen la interfaz de una clase, sus capacidades y comportamiento. Un
mtodo ha de tener por nombre cualquier identificador legal distinto de los ya utilizados por los nombres de la clase
en que est definido. Los mtodos se declaran al mismo nivel que las variables de instancia dentro de una definicin
de clase.
En la declaracin de los mtodos se define el tipo de valor que devuelven y a una lista formal de parmetros
de entrada, de sintaxis tipo identificador separadas por comas. La forma general de una declaracin de mtodo es:
tipo_devuelto nombre_de_mtodo ( lista-formal-de-parmetros ) {
cuerpo_del_mtodo;
}

Por ejemplo el siguiente mtodo devuelve la suma de dos enteros:
int metodoSuma( int paramX, int paramY ) {
return ( paramX + paramY );
}

GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


En el caso de que no se desee devolver ningn valor se deber indicar como tipo la palabra reservada void.
As mismo, si no se desean parmetros, la declaracin del mtodo debera incluir un par de parntesis vacos (sin
void):
void metodoVacio( ) { };
Los mtodos son llamados indicando una instancia individual de la clase, que tendr su propio conjunto
nico de variables de instancia, por lo que los mtodos se pueden referir directamente a ellas.
El mtodo inicia() para establecer valores a las dos variables de instancia sera el siguiente:
void inicia( int paramX, int paramY ) {
x = paramX;
y = paramY;
}
REFERENCIAS A OBJETO E INSTANCIAS

Los tipos simples de Java describan el tamao y los valores de las variables. Cada vez que se crea una
clase se aade otro tipo de dato que se puede utilizar igual que uno de los tipos simples. Por ello al declarar una
nueva variable, se puede utilizar un nombre de clase como tipo. A estas variables se las conoce como referencias a
objeto.
Todas las referencias a objeto son compatibles tambin con las instancias de subclases de su tipo. Del
mismo modo que es correcto asignar un byte a una variable declarada como int, se puede declarar que una variable
es del tipo MiClase y guardar una referencia a una instancia de este tipo de clase: MiPunto p;
Esta es una declaracin de una variable p que es una referencia a un objeto de la clase MiPunto, de
momento con un valor por defecto de null. La referencia null es una referencia a un objeto de la clase Object, y se
podr convertir a una referencia a cualquier otro objeto porque todos los objetos son hijos de la clase Object.

CONSTRUCTORES
Las clases pueden implementar un mtodo especial llamado constructor. Un constructor es un mtodo que
inicia un objeto inmediatamente despus de su creacin. De esta forma nos evitamos el tener que iniciar las
variables explcitamente para su iniciacin.
El constructor tiene exactamente el mismo nombre de la clase que lo implementa; no puede haber ningn
otro mtodo que comparta su nombre con el de su clase. Una vez definido, se llamar automticamente al
constructor al crear un objeto de esa clase (al utilizar el operador new).
El constructor no devuelve ningn tipo, ni siquiera void. Su misin es iniciar todo estado interno de un objeto
(sus atributos), haciendo que el objeto sea utilizable inmediatamente; reservando memoria para sus atributos,
iniciando sus valores...
Por ejemplo:
MiPunto( ) {
inicia( -1, -1 );
}

Este constructor denominado constructor por defecto, por no tener parmetros, establece el valor -1 a las
variables de instancia x e y de los objetos que construya.
El compilador, por defecto, llamar al constructor de la superclase Object() si no se especifican parmetros
en el constructor.
Este otro constructor, sin embargo, recibe dos parmetros:
MiPunto( int paraX, int paraY ) {
inicia( paramX, paramY );
}
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


La lista de parmetros especificada despus del nombre de una clase en una sentencia new se utiliza para
pasar parmetros al constructor.
Se llama al mtodo constructor justo despus de crear la instancia y antes de que new devuelva el control al
punto de la llamada. As, cuando ejecutamos el siguiente programa:
MiPunto p1 = new MiPunto(10, 20);
System.out.println( "p1.- x = " + p1.x + " y = " + p1.y );
Se muestra en la pantalla:
p1.- x = 10 y = 20

.
EL OPERADOR NEW
El operador new crea una instancia de una clase (objetos) y devuelve una referencia a ese objeto. Por
ejemplo:
MiPunto p2 = new MiPunto(2,3);
Este es un ejemplo de la creacin de una instancia de MiPunto, que es controlador por la referencia a objeto
p2.
Hay una distincin crtica entre la forma de manipular los tipos simples y las clases en Java: Las referencias
a objetos realmente no contienen a los objetos a los que referencian. De esta forma se pueden crear mltiples
referencias al mismo objeto, como por ejemplo:
MiPunto p3 =p2;
Aunque tan slo se cre un objeto MiPunto, hay dos variables (p2 y p3) que lo referencian. Cualquier
cambio realizado en el objeto referenciado por p2 afectar al objeto referenciado por p3. La asignacin de p2 a p3 no
reserva memoria ni modifica el objetoobjeto creado con new
Aunque se haya asignado null a p2, p3 todava apunta al objeto creado por el operador new.
Cuando ya no haya ninguna variable que haga referencia a un objeto, Java reclama automticamente la
memoria utilizada por ese objeto, a lo que se denomina recogida de basura.
Cuando se realiza una instancia de una clase (mediante new) se reserva en la memoria un espacio para un conjunto
de datos como el que definen los atributos de la clase que se indica en la instanciacin. A este conjunto de variables
se le denomina variables de instancia.
La potencia de las variables de instancia es que se obtiene un conjunto distinto de ellas cada vez que se
crea un objeto nuevo. Es importante el comprender que cada objeto tiene su propia copia de las variables de
instancia de su clase, por lo que los cambios sobre las variables de instancia de un objeto no tienen efecto sobre las
variables de instancia de otro.
El siguiente programa crea dos objetos MiPunto y establece los valores de x e y de cada uno de ellos de
manera independiente para mostrar que estn realmente separados.
MiPunto p4 = new MiPunto( 10, 20 );
MiPunto p5 = new MiPunto( 42, 99 );
System.out.println("p4.- x = " + p4.x + " y = " + p4.y);
System.out.println("p5.- x = " + p5.x + " y = " + p5.y);
Este es el aspecto de salida cuando lo ejecutamos.
p4.- x = 10 y = 20
p5.- x = 42 y = 99

EL OPERADOR PUNTO (.)
El operador punto (.) se utiliza para acceder a las variables de instancia y los mtodos contenidos en un
objeto, mediante su referencia a objeto:
referencia_a_objeto.nombre_de_variable_de_instancia
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


referencia_a_objeto.nombre_de_mtodo( lista-de-parmetros );
Hemos creado un ejemplo completo que combina los operadores new y punto para crear un objeto MiPunto,
almacenar algunos valores en l e imprimir sus valores finales:
MiPunto p6 = new MiPunto( 10, 20 );
System.out.println ("p6.- 1. X=" + p6.x + " , Y=" + p6.y);
p6.inicia( 30, 40 );
System.out.println ("p6.- 2. X=" + p6.x + " , Y=" + p6.y);
Cuando se ejecuta este programa, se observa la siguiente salida:
p6.- 1. X=10 , Y=20
p6.- 2. X=30 , Y=40
Durante las impresiones (mtodo println()) se accede al valor de las variables mediante p6.x y p6.y, y entre
una impresin y otra se llama al mtodo inicia(), cambiando los valores de las variables de instancia.
Este es uno de los aspectos ms importantes de la diferencia entre la programacin orientada a objetos y la
programacin estructurada. Cuando se llama al mtodo p6.inicia(), lo primero que se hace en el mtodo es sustituir
los nombres de los atributos de la clase por las correspondientes variables de instancia del objeto con que se ha
llamado. As por ejemplo x se convertir en p6.x.
Si otros objetos llaman a inicia(), incluso si lo hacen de una manera concurrente, no se producen efectos
laterales, ya que las variables de instancia sobre las que trabajan son distintas.

LA REFERENCIA THIS
Java incluye un valor de referencia especial llamado this, que se utiliza dentro de cualquier mtodo para
referirse al objeto actual. El valor this se refiere al objeto sobre el que ha sido llamado el mtodo actual. Se puede
utilizar this siempre que se requiera una referencia a un objeto del tipo de una clase actual. Si hay dos objetos que
utilicen el mismo cdigo, seleccionados a travs de otras instancias, cada uno tiene su propio valor nico de this.
Un refinamiento habitual es que un constructor llame a otro para construir la instancia correctamente. El siguiente
constructor llama al constructor parametrizado MiPunto(x,y) para terminar de iniciar la instancia:
MiPunto() {
this( -1, -1 ); // Llama al constructor parametrizado
}

En Java se permite declarar variables locales, incluyendo parmetros formales de mtodos, que se solapen
con los nombres de las variables de instancia.
No se utilizan x e y como nombres de parmetro para el mtodo inicia, porque ocultaran las variables de
instancia x e y reales del mbito del mtodo. Si lo hubisemos hecho, entonces x se hubiera referido al parmetro
formal, ocultando la variable de instancia x:
void inicia2( int x, int y ) {
x = x; // Ojo, no modificamos la variable de instancia!!!
this.y = y; // Modificamos la variable de instancia!!!
}

LA HERENCIA

La verdadera potencia de la programacin orientada a objetos radica en su capacidad para reflejar la
abstraccin que el cerebro humano realiza automticamente durante el proceso de aprendizaje y el proceso de
anlisis de informacin.
Las personas percibimos la realidad como un conjunto de objetos interrelacionados. Dichas interrelaciones,
pueden verse como un conjunto de abstracciones y generalizaciones que se han ido asimilando desde la niez. As,



nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulC

los defensores de la programacin orientada a objet
del cerebro humano, al permitir descomponer un prob
subordinados del primero.
La capacidad de descomponer un problema o concepto
cuyo comportamiento es fcilmente identificable, pu

JERARQUA
La herencia es el mecanismo fundamental de relacin
clases de manera jerrquica; una clase









Los descendientes de una clase heredan todas las va
especificado como heredables, adems de crear los suyos propios.
La caracterstica de herencia, nos permite definir
especializan de alguna manera. As logramos definir
rbol de herencia.
En todo lenguaje orientado a objetos existe una jer
trminos de herencia. En Java, el punto ms alto de
dems clases.

HERENCIA MLTIPLE
En la orientacin a objetos, se consideran dos tipos de he
una clase slo puede derivar de una nica superclas
superclases.
En Java slo se dispone de herencia simple, para un
cierta manera la inexistencia de herencia mltiple
adelante.

DECLARACIN
Para indicar que una clase deriva de otra, heredando sus propiedades
trmino extends, como en el siguiente ejemplo:
public class SubClase extends SuperClase {
// Contenido de la clase
}

Por ejemplo, creamos una clase MiPunto3D
class MiPunto3D extends MiPunto {
int z;
MiPunto3D( ) {
x = 0; // Heredado de MiPunto
GUIA DE JAVA
nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn
los defensores de la programacin orientada a objetos afirman que esta tcnica se adecua mejor al func
del cerebro humano, al permitir descomponer un problema de cierta magnitud en un conjunto de problemas menores
La capacidad de descomponer un problema o concepto en un conjunto de objetos relacionados entre s, y
cuyo comportamiento es fcilmente identificable, puede ser muy til para el desarrollo de programas informticos.
La herencia es el mecanismo fundamental de relacin entre clases en la orientacin a objetos. Relacion
clases de manera jerrquica; una clase padre o superclase sobre otras clases hijas o subclases.
Los descendientes de una clase heredan todas las variables y mtodos que sus ascendientes hayan
, adems de crear los suyos propios.
La caracterstica de herencia, nos permite definir nuevas clases derivadas de otra ya existent
especializan de alguna manera. As logramos definir una jerarqua de clases, que se puede mostrar medi
En todo lenguaje orientado a objetos existe una jerarqua, mediante la que las clases se relacionan en
trminos de herencia. En Java, el punto ms alto de la jerarqua es la clase Object de la cual derivan todas las
rientacin a objetos, se consideran dos tipos de herencia, simple y mltiple. En el caso de la primera
una clase slo puede derivar de una nica superclase. Para el segundo tipo, una clase puede descender
En Java slo se dispone de herencia simple, para una mayor sencillez del lenguaje, si bien se compensa
cierta manera la inexistencia de herencia mltiple con un concepto denominado interface, que estudiaremos ms
una clase deriva de otra, heredando sus propiedades (mtodos y atributos), se usa el
, como en el siguiente ejemplo:
public class SubClase extends SuperClase {
MiPunto3D, hija de la clase ya mostrada MiPunto:
Prof. Lisbeth Guerra
MAS uL LA 8CC8AMAClCn

os afirman que esta tcnica se adecua mejor al funcionamiento
magnitud en un conjunto de problemas menores
en un conjunto de objetos relacionados entre s, y
ollo de programas informticos.
entre clases en la orientacin a objetos. Relaciona las

riables y mtodos que sus ascendientes hayan
nuevas clases derivadas de otra ya existente, que la
una jerarqua de clases, que se puede mostrar mediante un
arqua, mediante la que las clases se relacionan en
de la cual derivan todas las
rencia, simple y mltiple. En el caso de la primera,
e. Para el segundo tipo, una clase puede descender de varias
a mayor sencillez del lenguaje, si bien se compensa de
, que estudiaremos ms
(mtodos y atributos), se usa el
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


y = 0; // Heredado de MiPunto
z = 0; // Nuevo atributo
}
}

La palabra clave extends se utiliza para decir que deseamos crear una subclase de la clase que es
nombrada a continuacin, en nuestro caso MiPunto3D es hija de MiPunto.

LIMITACIONES EN LA HERENCIA
Todos los campos y mtodos de una clase son siempre accesibles para el cdigo de la misma clase.
Para controlar el acceso desde otras clases, y para controlar la herencia por las subclase, los miembros (atributos y
mtodos) de las clases tienen tres modificadores posibles de control de acceso:
9 public: Los miembros declarados public son accesibles en cualquier lugar en que sea accesible la clase, y
son heredados por las subclases.
9 private: Los miembros declarados private son accesibles slo en la propia clase.
9 protected: Los miembros declarados protected son accesibles slo para sus subclases

Por ejemplo:
class Padre { // Hereda de Object
// Atributos
private int numeroFavorito, nacidoHace, dineroDisponible;
// Mtodos
public int getApuesta() {
return numeroFavorito;
}
protected int getEdad() {
return nacidoHace;
}
private int getSaldo() {
return dineroDisponible;
}
}

class Hija extends Padre {
// Definicin
}

class Visita {
// Definicin
}

En este ejemplo, un objeto de la clase Hija, hereda los tres atributos (numeroFavorito, nacidoHace y
dineroDisponible) y los tres mtodos ( getApuesta(), getEdad() y getSaldo() ) de la clase Padre, y podr invocarlos.
Cuando se llame al mtodo getEdad() de un objeto de la clase Hija, se devolver el valor de la variable de instancia
nacidoHace de ese objeto, y no de uno de la clase Padre.
Sin embargo, un objeto de la clase Hija, no podr invocar al mtodo getSaldo() de un objeto de la clase
Padre, con lo que se evita que el Hijo conozca el estado de la cuenta corriente de un Padre.
GUIA DE JAVA
Prof. Lisbeth Guerra


nl lnlC8M1lCA 18A?LC1C ll 18lMLS18L l A8AulCMAS uL LA 8CC8AMAClCn


La clase Visita, solo podr acceder al mtodo getApuesta(), para averiguar el nmero favorito de un Padre, pero de
ninguna manera podr conocer ni su saldo, ni su edad (sera una indiscrecin, no?).

LA CLASE OBJECT
La clase Object es la superclase de todas las clases da Java. Todas las clases derivan, directa o
indirectamente de ella. Si al definir una nueva clase, no aparece la clusula extends, Java considera que dicha clase
desciende directamente de Object.
La clase Object aporta una serie de funciones bsicas comunes a todas las clases:
9 public boolean equals( Object obj ): Se utiliza para comparar, en valor, dos objetos. Devuelve true si el
objeto que recibe por parmetro es igual, en valor, que el objeto desde el que se llama al mtodo. Si se
desean comparar dos referencias a objeto se pueden utilizar los operadores de comparacin == y !=.
9 public int hashCode(): Devuelve un cdigo hash para ese objeto, para poder almacenarlo en una
Hashtable.
9 protected Object clone() throws CloneNotSupportedException: Devuelve una copia de ese objeto.
9 public final Class getClass(): Devuelve el objeto concreto, de tipo Class, que representa la clase de ese
objeto.
9 protected void finalize() throws Trowable: Realiza acciones durante la recogida de basura.

You might also like