You are on page 1of 101

Pgina |1

Universidad Mariano Glvez


Ingeniera en Sistemas de Informacin
4to. Semestre
Seccin A
Programacion II
Ing. Axel Castillo

Manual de programacin de JAVA

Alvin Steve
Padilla Meza
3090-10-11973

Mazatenango 26 de noviembre del 2015

Programacion para Principiantes JAVA

Pgina |2

INDICE
Tema

Pgina

Introduccion.

Objetivos.

Introduccin a JAVA.

Origen de JAVA..

Caracteristicas.. 8-12
Instalacin de JBK. 13
Conceptos Basicos con Respecto a la Estructura de un programa.. 14
Control o Modificadores de Acceso.

17

Separadores..

18

Finalizadores.

18

Objetos..

19

Herencia 20-21
Clases 22-24
Clases que Utilizamos en JAVA..24-35
Control General de Flujo o Sentencias de control35-44
Uso de Variables..44-45
This y Super.45-46
Mtodos Nativos. 46-47
Variables y Metodos Estaticos.47-48
Operadores, Comentarios y Literales..49-54
Excepciones. 54-63
Metodos y Constructores. 63-65
Arrays.65-69
Programacin para Principiantes JAVA

Pgina |3

Referencias y Listas .69-72


Graficas en JAVA 72-76
Interfaces 76-78
Hilos 78-80
Alcances y Objetos y Reciclado de Memoria 80
Paquetes (Packages)80-83
Minima Aplicacin 83
HOLAMUNDO 83-84
Compilacion y Ejecucion de HOLAMUNDO 84-85
Un Applet Basico86
Componentes Basicos de Applet86-87
Metodos de Applets87-89
Uso de Conversiones89-91
Ficheros 91-92
Acceso a la Informacion92-94
Streams de Entrada94-97
Streams de Salida.97-99
Conclusin 100
Bibliografia

Programacion para Principiantes JAVA

101

Pgina |4

Introduccion
En este manual acerca de lo que es el lenguaje de programacin JAVA antes que
nada el usuario va a entrar a lo que es una Breve Introduccion al Mundo de JAVA,
luego de esto vamos a conocer que lo que fue el origen JAVA con una breve
historia de como surgio JAVA, las caractersticas de este lenguaje de
Programacion JAVA esto va a ver con el fin que el usuario se asocie poco a poco
con el mundo de JAVA y con lo que es el lenguaje de programacin de este mismo.
Tambin en este manual vamos a aprender a Instalar lo que es JAVA para
nuestra maquina o computadora. Tambin en este manual vamos a conocer lo que
es la estructuracin de un programa para JAVA.
En este manual vamos a conocer lo que son los temas de Clases, Herencia,
Constructores, modificadores de Acceso,Objetos, Clases, tipos de clases,
Control de Flujo o Sentencias de Control, Estructuras Selectivas: if, else, etc;
estructuras Iterativas, Variables, tipos de variables, Operadores,Comentarios
y Literales, Manejo de Excepciones, Metodos(Constructores), Arrays,
Referencias y Listas,Graficos en JAVA, Packages, Hilos, Interfaces, cada uno
de estos aspectos lo vamos aprender con su respectiva definicin, como
declararlos, como identificar a cada uno o ver sus diferencias, tambin con
Ejemplos y algunos de estos Ejemplos tienen su respectiva Explicacion, etc. Y
luego de ya conocer los aspectos anteriores vamos a aprender a utilizar todo
esto para crear una aplicacin o programa.

Programacin para Principiantes JAVA

Pgina |5

Objetivos
General
Que el Usuario Aprenda a travs de esta manual lo que es el lenguaje de
programacin de JAVA

Especficos:

Definir lo que es el lenguaje de Programacion JAVA, que el usuario


conosca la breve Historia de Java, sus caractersticas, etc.
Conocer lo que es la estructuracin de un programa en JAVA.
Que el usuario aprenda lo que es el gusto de aprender a Programar
correctamente en JAVA.
Que el usuario conosca las especificaciones para aprender a
Programar en JAVA.
Que atraves de los Ejemplos el Usuario conosca los casos de
errores que se pueden observar en un problema al momento de
programar ellos mismos.

Programacion para Principiantes JAVA

Pgina |6

Introduccin a Java
Antes que nada vamos a conocer en este caso una breve explicacin de lo que es un lenguaje de programacin
el cual es un lenguaje formal diseado para realizar procesos que pueden ser llevados a cabo por mquinas
como las computadoras y vamos a definir que en este caso pueden usarse para crear programas que controlen
el comportamiento fsico y lgico de una mquina, para expresar algoritmos con precisin, o como modo de
comunicacin humana. Tambin podemos decir que est formado por un conjunto de smbolos y reglas
sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso
por el cual se escribe, se prueba, se depura, se compila (de ser necesario) y se mantiene el cdigo fuente de un
programa informtico a esto se le conoce como programacin.
En este caso vamos a aprender un lenguaje de programacin conocido como JAVA es un lenguaje orientado a
objetos de propsito general. Aunque ms adelante lo que es Java comenzar a ser conocido como un lenguaje
de programacin de applets que se ejecutan en el entorno de un navegador web, se puede utilizar para construir
cualquier tipo de proyecto. La principal caracterstica de Java es la de ser un lenguaje compilado e interpretado.
Todo programa en Java ha de compilarse y el cdigo que se genera bytecodes es interpretado por una mquina
virtual. De este modo se consigue la independencia de la mquina, el cdigo compilado se ejecuta en mquinas
virtuales que si son dependientes de la plataforma. Cuando trabajamos con JAVA observamos que su sintaxis
es parecida a C y C++.
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 con soporte Java se actualizan
a s mismos sobre la marcha, cuando encuentran un nuevo tipo de fichero o algoritmo.

Programacin para Principiantes JAVA

Pgina |7

ORIGEN DE JAVA
El uso principal que se hace de Internet e incluso de las redes internas (corporativas) es correo electrnico (email), 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.

Programacion para Principiantes JAVA

Pgina |8

Caractersticas de JAVA
Las caractersticas principales que nos ofrece Java respecto a cualquier otro lenguaje de programacin, son:
Es 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:

aritmtica de punteros
no existen referencias
registros (struct)
definicin de tipos (typedef)
macros (#define)
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.
Es 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.
Es DISTRIBUIDO: Java se ha construido con extensas capacidades de interconexin TCP/IP. Existen libreras
de rutinas para acceder e interactuar con protocolos como http y ftp. Esto permite a los programadores acceder
a la informacin a travs de la red con tanta facilidad como a los ficheros locales. La verdad es que Java en s
no es distribuido, sino que proporciona las libreras y herramientas para que los programas puedan ser
distribuidos, es decir, que se corran en varias mquinas, interactuando.
Es ROBUSTO: Java realiza 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
desarrollo. Java obliga a la declaracin explcita de mtodos, reduciendo as las posibilidades de error. Maneja
la memoria para eliminar las preocupaciones por parte del programador de la liberacin o corrupcin de
memoria. Tambin implementa los arrays autnticos, en vez de listas enlazadas de punteros, con comprobacin
de lmites, para evitar la posibilidad de sobreescribir o corromper memoria resultado de punteros que sealan a
zonas equivocadas. Estas caractersticas reducen drsticamente el tiempo de desarrollo de aplicaciones en Java.

Programacin para Principiantes JAVA

Pgina |9
Adems, para asegurar el funcionamiento de la aplicacin, realiza una verificacin de los byte-codes, que son
el resultado de la compilacin de un programa Java. Es un cdigo de mquina virtual que es interpretado por el
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 pila de
ejecucin de rdenes.
Java proporciona, pues:

Comprobacin de punteros
Comprobacin de lmites de arrays
Excepciones
Verificacin de byte-codes

Es de 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 hipottica que es implementada por un sistema runtime, 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:

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,

Programacion para Principiantes JAVA

P g i n a | 10
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:

Java 2D: grficos 2D y manipulacin de imgenes


Java Media Framework: Elementos crticos en el tiempo: audio, video...
Java Animation: Animacin de objetos en 2D
Java Telephony: Integracin con telefona
Java Share: Interaccin entre aplicaciones multiusuario
Java 3D: Grficos 3D y su manipulacin

Es 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 /etc/shadow a su creador, ejecuta la funcionalidad de ls persentando 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:

El cdigo no produce desbordamiento de operandos en la pila


El tipo de los parmetros de todos los cdigos de operacin son conocidos y correctos
No ha ocurrido ninguna conversin ilegal de datos, tal como convertir enteros en punteros
El acceso a los campos de un objeto se sabe que es legal: public, private, protected
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

Programacin para Principiantes JAVA

P g i n a | 11
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.
Es 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 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.
Es 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 mquina propia 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.
Es 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,

Programacion para Principiantes JAVA

P g i n a | 12
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.
Es 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 libreras nuevas o
actualizadas no paralizarn las aplicaciones actuales (siempre que mantengan el API anterior).
Java tambin simplifica el uso de protocolos nuevos o actualizados. Si su sistema ejecuta una aplicacin Java
sobre la red y encuentra una pieza de la aplicacin que no sabe manejar, tal como se ha explicado en prrafos
anteriores, Java es capaz de traer automticamente cualquiera de esas piezas que el sistema necesita para
funcionar.

Java, para evitar que los mdulos de byte-codes o los objetos o nuevas clases, haya que estar trayndolos de la
red cada vez que se necesiten, implementa las opciones de persistencia, para que no se eliminen cuando de
limpie la cach de la mquina.

Programacin para Principiantes JAVA

P g i n a | 13

INSTALACION JSDK
ste manual vamos a aprender a trabajar con el NetBeans with JDK 8, el cual se va a encontrar en esta direccin
web:
http://www.oracle.com/technetwork/java/javase/downloads/index.htmlhttp://www.oracle.com/technetwork/ja
va/javase/downloads/index.html
Y antes de comenzar a descargar debemos de ver la versin que queremos sea de acorde con nuestra mquina,
como por ejemplo: si estuviera descargando el instalador JDK para sistemas de 32 bits para la actualizacin
1.8.0_01, el nombre del archivo: jdk-8version-windows-i586.exe convierte jdk-8u1-windows-i586.exe. Del
mismo modo, si estuviera descargando el instalador JDK para sistemas de 64 bits para la actualizacin 1.8.0_01,
el nombre de archivo jdk-8version-windows-x64.exe convierte jdk-8u1-windows-x64.exe. Luego de a ver visto
la versin que se encuentre de acorde con nuestra maquina vamos a seguir unas cuantas instrucciones necesarias
para su instalacin. Adems, en esa misma direccin podremos descargar el NetBeans, un potente editor de
Java que nos facilitar la tarea de programar, compilar y resolver errores entre otras muchas cosas. Java es
actualmente uno de los lenguajes ms populares y existen multitud de editores para l. Los ms conocidos son
el JDeveloper, JBuilder, Visual J++ y por supuesto el propio NetBeans, de SUN. 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:

Java (ejecutable): Ejecuta cualquier programa compilado de Java


Java (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 comentar 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 pues, 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
En Windows XP, para cambiar las variables del sistema, se debe ir a Inicio > Configuracin
> Panel de Control > Sistema > Opciones Avanzadas > Variables de entorno.
Una vez hecho esto, abrimos la consola, Inicio > Ejecutar > cmd y ya deberan estar
disponibles los comandos "java" y "javac".
En Linux la instalacin es muy similar.

Programacion para Principiantes JAVA

P g i n a | 14

Conceptos Bsicos con Respecto a la Estructura de un Programa


Ahora que ya hemos visto a grandes rasgos lo que Java puede ofrecernos, y antes de entrar a saco en
la generacin de nuestro primer cdigo Java, vamos a echar un vistazo al lenguaje Java en s. Lo
bsico resultar muy familiar a los que tengan conocimientos de C/C++. Los programadores con
experiencia en otros lenguajes procedurales reconocern la mayor parte de las construcciones.
Esperemos que este captulo no resulte demasiado intenso, no obstante, s debe estar presente, porque
ms de una vez recurriremos a l como referencia. En posteriores captulos profundizaremos sobre
aspectos de la programacin en Java por los que aqu pasaremos de puntillas e iremos presentando
ejemplos de cdigo de cada uno de esos aspectos de la programacin en Java.

Programacin:
Debemos saber que cuando se programa en Java, se coloca todo el cdigo en mtodos, de la misma
forma que se escriben funciones en lenguajes como C.
Estructura
Vamos a tocar el tema de cmo realizar un programa en JAVA luego de que conozcamos las
instrucciones para instalar Java, es necesario que el usuario sepa cmo desarrollar un Programa en
Java, es necesario:

Editar el programa
Compilarlo
Ejecutarlo
Depurarlo

Tipos de Datos
En java, hay que distinguir esencialmente dos grandes rubros:
Tipos de datos o variables que se utilizan al trabajar en lo que es la Programacin Orientada a Objetos.
Tipos de Datos Simples o Datos Basicos : se le va a conocer como datos simples o Datos Simples van
a ser aquellos datos los cuales no son objetos y se pueden utilizar directamente en un programa sin
necesidad de crear objetos de este tipo. La biblioteca Java proporciona clases asociadas a estos tipos
que proporcionan mtodos que facilitan su manejo.
Tipos

Descripcin

Boolean

Representa valores TRUE/FALSE. Esta es una


de las grandes diferencias respecto a C

Byte

Representa enteros de 8 bits

char

Al igual que en C, se utiliza para representar


datos de tipo Carcter.

Programacin para Principiantes JAVA

P g i n a | 15
double

Valores de punto flotante pero con doble


precisin

float

Valores de tipo Real con precisin Simple

int

Sirve para representar valores de tipo entero

long

Entero Largo

short

Entero corto

Tabla 2.1
Vamos a conocer un poco acerca del rubro de los datos de tipo Entero:
byte

8 bits

Valores numricos de 128 a 127

short

16 bits

Valores numricos de 32.768 a 32.767

int

32 bits

Valores numricos de 2.147.483.648 a 2.147.483.647

long

64 bits

Valores numricos sin lmite.

Tabla 2.2
OJO: JAVA no soporta enteros son signo, el no especificarlos automticamente los entiende
como si fueran positivos.
Los tipos de datos Orientados a Objetos son:

Clases
Interfaces
Arrays

De los cuales, hablares en su momento.


Un programa en java, debe tener los siguientes elementos:
*LA ZONA DE INCLUSIN: que es similar al pre-procesador de C, donde especificamos los
paquetes que vamos a usar en nuestro programa. Los cuales deben ser especificados al inicio del
programa, con ayuda de la sentencia import y acompaado de un punto y coma (;) al final de la
instruccin.
Eje:
Importjavax.swing.JOptionPane;
import java.io.*;
En java, podemos incluir todo el paquete, como en el caso de java.io, al agregarle el asterisco; o
simplemente, especificamos que archivos del paquete que queremos usar, como en el primer caso, en
el cual estamos incluyendo (o mejor dicho importando) el archivo JOptionPane, del paquete

Programacion para Principiantes JAVA

P g i n a | 16
javax.swing. (El cual nos ayuda para poder usar las cajitas de texto para mandar informacin a la
pantalla o para leerla desde el telado).
*LAS CLASES: Un Programa en java, debe poseer AL MENOS una clase, con la cual se debe
proseguir en la configuracin de nuestro programa.
Eje: class Primer Programa
Como puede verse, una clase se especifica con la palabra reservada class.
Una clase puede ser: Pblica o Privada.
De lo cual hablares ms adelante, por el momento el usuario, debe nicamente especificar una clase,
nicamente con class porque despus comprender la diferencia y podr aplicarlo a sus programas.
Adems el nombre de la clase, debe iniciar con mayscula.
*EL PROGRAMA PRINCIPAL: El cual siempre, siempre, siempre se especificar de la siguiente
manera:
Public static void main (String args [])
Lo que est entre los parentesis, indica nada ms los argumentos que recibe nuestro programa, el cual
SIEMPRE SER uno del tipo String, el nombre de args, puede ser cambiado, pero NUNCA debe
omitirse los corchetes.
OJO: nunca debemos de olvidar que el main, siempre va despus de la declaracin de la clase,
y ambos (el main y la clase) contienen informacin entre llaves.
Ahora veamos un pequeo Ejemplo:
Ejemplo: Disee un programa en Java que muestre en pantalla un saludo de Bienvenida al Usuario.

Import java.lang.*;
Class PrimerPrograma {
Public static void main (String args []) {
System.out.println ("Hola! Bienvenido a Java");
}
}

Ahora vamos a Explicar el ejemplo anterior:


En la lnea nmero Uno, encontramos la llamada al paquete, el cual es java.lang (ste paquete nos
ayuda para usar las funciones matemticas y otras funciones como System.out.println, sin embargo
NO es necesario especificarlo, ya que Java, por defecto, incluye ste paquete en todos los programas
que creamos). Luego encontramos la declaracin de la clase, la cual es Primer Programa, como puede
observar la primera letra es mayscula, y como el nombre est compuesto por dos palabras (Primer y
Programa), es por tal razn que cada una de ellas tiene su primera letra mayscula. Otra cosa
importante es que, el nombre del archivo, (que tiene extensin *.java), SIEMPRE se debe llamar igual
que la clase; es decir que, este cdigo, est guardado como: PrimerPrograma.java. Posteriormente,
encontramos la sentencia System.out.println (), el cual nos sirve para mandar informacin a pantalla,
la cual ser mostrada en la consola de DOS, y ser ms o menos as:

Programacin para Principiantes JAVA

P g i n a | 17

Luego encontramos la llave correspondiente al main y la llave correspondiente a la clase.


OJO: Como puede notar, todas las sentencias en JAVA terminan con punto y coma (;).
CONTROL DE ACCESO O MODIFICADOR DE ACCESO
Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para
las variables de instancia y los mtodos definidos en la clase:
Public
Public void CualquieraPuedeAcceder () {}
Cualquier clase desde cualquier lugar puede acceder a las variables y mtodos de instacia pblicos.
Protected
Protected void SoloSubClases () {}
Slo las subclases de la clase y nadie ms pueden acceder a las variables y mtodos de instancia
protegidos.
Private
Private String NumeroDelCarnetDeIdentidad;
Las variables y mtodos de instancia privados slo pueden ser accedidos desde dentro de la clase. No
son accesibles desde las subclases.
Friendly (sin declaracin especfica)
Void MetodoDeMiPaquete () {}
Por defecto, si no se especifica el control de acceso, las variables y mtodos de instancia se declaran
friendly (amigas), lo que significa que son accesibles por todos los objetos dentro del mismo paquete,
pero no por los externos al paquete. Es lo mismo que protected.
Los mtodos protegidos (protected) pueden ser vistos por las clases derivadas, como en C++, y
tambin, en Java, por los paquetes (packages). Todas las clases de un paquete pueden ver los mtodos
protegidos de ese paquete. Para evitarlo, se deben declarar como private protected, lo que hace que
ya funcione como en C++ en donde slo se puede acceder a las variables y mtodos protegidos de las
clases derivadas.

Programacion para Principiantes JAVA

P g i n a | 18

Separadores
Slo hay un par de secuencias con otros caracteres que pueden aparecer en el cdigo Java; son los
separadores simples, que van a definir la forma y funcin del cdigo. Los separadores admitidos en
Java son:
() - parntesis. Para contener listas de parmetros en la definicin y llamada a mtodos. Tambin se
utiliza para definir precedencia en expresiones, contener expresiones para control de flujo y rodear
las conversiones de tipo.
{} - llaves. Para contener los valores de matrices inicializadas automticamente. Tambin se utiliza
para definir un bloque de cdigo, para clases, mtodos y mbitos locales.
[] - corchetes. Para declarar tipos matriz. Tambin se utiliza cuando se referencian valores de
matriz.
; - punto y coma. Separa sentencias.
, - coma. Separa identificadores consecutivos en una declaracin de variables. Tambin se utiliza
para encadenar sentencias dentro de una sentencia for.
. - punto. Para separar nombres de paquete de su paquetes y clases. Tambin se utiliza para separar
una variable o mtodo de una variable de referencia.
. - punto. Para separar nombres de paquete de su paquetes y clases. Tambin se utiliza para separar
una variable o mtodo de una variable de referencia.

Finalizadores
Java no utiliza destructores (al contrario que C++) ya que tiene una forma de recoger
automticamente todos los objetos que se salen del alcance. No obstante proporciona un mtodo
que, cuando se especifique en el cdigo de la clase, el reciclador de memoria (garbage collector)
llamar:
// Cierra el canal cuando este objeto es reciclado
Protected void finalize () {
Close ();
}

Programacin para Principiantes JAVA

P g i n a | 19

OBJETOS
Luego de conocer lo breve de las variables, pues bien, es importante saber esto, ya que iniciaremos
hablando de lo que es la esencia de Java:
Los Objetos
Un Objeto, es una coleccin de datos y operaciones, que utilizan esos datos.
Declarar un Objeto
Al declarar un objeto, lo nico que hacemos es declarar una variable, de se tipo, la cual har
referencia a se objeto. Por tanto, dicha variable contendr una direccin de memoria (Algo similar a
lo que eran los punteros en C). Un objeto se crea, a partir del operador new y el constructor
correspondiente a la clase, de la cual se est creando el objeto. Por ejemplo, si deseamos crear, un
objeto de la Clase Datos, sera as:
Datos Jefe; //Declaracin del Objeto
Jefe=new Datos (); //Creacin del Objeto
Pero Tambin podemos hacerlo en una sola lnea:
Datos Jefe=new Datos (); //Declaracin y Creacin del Objeto
Puesto que, de la misma manera que, se puede declarar e inicializar una variable; un objeto puede ser
declarado y creado al mismo tiempo.
Creacin de Un Objeto
nomb_clase nomb_objeto=new nomb_clase ([valores]);
Cuando se hace referencia a un mtodo este debe estar declarado y desarrollado al igual que el objeto.
Para declarar y desarrollar un mtodo debe estar dentro de una clase y se debe indicar el valor que
devuelve, el nombre y los valores que se le pasan.
Definicin de los Mtodos
valor devuelto nombre_mtodo([valores])
{
cuerpo;
}
Si tenemos que hacer referencia a las variables de instancia y los mtodos contenidos en un objeto
se necesita el operador punto(.).
Objeto.nomb_mtodo( );
Objeto.nomb_mtodo(valores);
Objeto.variable;
Creacin de Un Objeto
nomb_clase nomb_objeto=new nomb_clase ([valores]);

Programacion para Principiantes JAVA

P g i n a | 20
Cuando se hace referencia a un mtodo este debe estar declarado y desarrollado al igual que el objeto.
Para declarar y desarrollar un mtodo debe estar dentro de una clase y se debe indicar el valor que
devuelve, el nombre y los valores que se le pasan.

Herencia
La herencia es una de las caractersticas fundamentales de la POO, ya que es la que permite un gran
aumento en la reutilizacin de cdigo. La posibilidad de crear nuevas clases basadas en otras preexistentes permite, entre otras cosas, crear bibliotecas genricas, en base a las cuales realizar
pequeos ajustes para adaptarlas a las necesidades puntuales de cada aplicacin.
Para crear una clase basada en una pre-existente se utiliza la siguiente sintaxis:
Class SubClase extends SuperClase
Una subclase hereda todos los mtodos y propiedades que le provee su superclase y puede utilizarlos
como propios. Una superclase puede ser a su vez subclase de otra y as se estructura una jerarqua de
clases, donde hacia abajo aumenta la especializacin y hacia arriba la generalidad. Ejemplo:

En este caso, todos los animales tienen, por ejemplo, un mtodo comer, todos los mamferos un
mtodo mamar y todas las aves un mtodo volar. Aqu el mecanismo de herencia permite desarrollar
una sola vez los mtodos de son comunes a todas las subclases y slo programar en stas aquellas
caractersticas que las diferencian de sus pares.
Se considera que una instancia de una subclase es tambin instancia de toda superclase de la misma,
en el ejemplo, todo perro es un mamfero y tambin un animal, lo cual implica que todo perro tiene
todas las propiedades y mtodos propios de los mamferos, as como tambin aquellas de los animales.
De este modo, una clase puede utilizar mtodos que no tiene definidos de la misma forma en que
utilizara los propios:
class SuperClase
{ protected int unMetodo()
{
return 1;
}}
class SubClase extends SuperClase
{
public void otroMetodo()
{
System.out.println( unMetodo() );
}
Programacin para Principiantes JAVA

P g i n a | 21
}
A su vez, una subclase podra optar por reemplazar algn mtodo heredado de una superclase, para
especificar un comportamiento diferente. Por ejemplo, todos los animales comen, pero para un perro
no significa lo mismo comer que para un gato. En Java, todas las clases automticamente heredan de
una clase llamada Object, la cual provee ciertos mtodos, entre ellos toString(), un mtodo que
muestra la representacin en una cadena de caracteres del objeto en cuestin y que generalmente es
una buena idea sobrescribir.Si una subclase oculta (sobrescribe) un mtodo de su superclase, an
puede querer en algn caso utilizar el original. Para lograr este objetivo se usa la palabra clave super.
Ejemplo: Programa que crea un objeto llamando persona, el cual lee e imprime el nombre y edad
de una persona.
class Persona{
public String Nombre;
public int edad;
public Persona(String nom, int x)
{
Nombre=nom;
edad=x;
}
}
//clase que se deriva de Persona
class Persona2 extends Persona {
public double sueldo;
public Persona2 (String nom, int x, double sal)
{
super (nom, x);
sueldo=sal;
}
La sentencia super lo que hace es llamar al constructor de la superclase (clase de la que heredamos).
En la funcin principal es donde se crea el objeto que llama al miembro constructor, al cual hay que
pasar 3 valores (uno para la clase punto2 y dos para la clase punto).

Programacion para Principiantes JAVA

P g i n a | 22

CLASES
Una clase es una agrupacin de datos (variables o campos) y de funciones (mtodos) que operan
sobre esos datos. A estos datos y funciones pertenecientes a una clase se les denomina variables y
mtodos o funcin miembro. La programacin orientada a objetos se basa en la programacin de
clases. Las clases son lo ms simple de Java. Todo en Java forma parte de una clase, es una

clase o describe cmo funciona una clase. El conocimiento de las clases es fundamental para
poder entender los programas Java.
Todas las acciones de los programas Java se colocan dentro del bloque de una clase o un objeto.
Todos los mtodos se definen dentro del bloque de la clase, Java no soporta funciones o variables
globales. Esto puede despistar a los programadores de C++, que pueden definir mtodos fuera del
bloque de la clase, pero esta posibilidad es ms un intento de no separarse mucho y ser compatible
con C, que un buen diseo orientado a objetos. As pues, el esqueleto de cualquier aplicacin Java se
basa en la definicin de una clase.
Todos los datos bsicos, como los enteros, se deben declarar en las clases antes de hacer uso de ellos.
En C la unidad fundamental son los ficheros con cdigo fuente, en Java son las clases. De hecho son
pocas las sentencias que se pueden colocar fuera del bloque de una clase. La palabra clave import
(equivalente al #include) puede colocarse al principio de un fichero, fuera del bloque de la clase. Sin
embargo, el compilador reemplazar esa sentencia con el contenido del fichero que se indique, que
consistir, como es de suponer, en ms clases. Luego de haber conocido un poco lo que es la clase
vamos a deducir que por la definicin de una clase se realiza en la siguiente forma:
[Public] class Classname {//lo de public es opcional
// Definicin de variables y mtodos
...
}
A continuacin se enumeran algunas caractersticas importantes de las clases:
Todas las variables y funciones de Java deben pertenecer a una clase. No hay variables y
funciones globales.
Si una clase deriva de otra (extends), hereda todas sus variables y mtodos.
Java tiene una jerarqua de clases estndar de la que pueden derivar las clases que crean
los usuarios.
Una clase slo puede heredar de una nica clase (en Java no hay herencia mltiple). Si al
definir una clase no se especifica de qu clase deriva, por defecto la clase deriva de Object.
La clase Object es la base de toda la jerarqua de clases de Java.
En un fichero se pueden definir varias clases, pero en un fichero no puede haber ms que
una clase public. Este fichero se debe llamar como la clase public que contiene con extensin
*.java. Con algunas excepciones, lo habitual es escribir una sola clase por fichero.
Si una clase contenida en un fichero no es public, no es necesario que el fichero se llame
como la clase.
Los mtodos de una clase pueden referirse de modo global al objeto de esa clase al que se
aplican por medio de la referencia this.
Las clases se pueden agrupar en packages, introduciendo una lnea al comienzo del fichero
(package packageName;). Esta agrupacin en packages est relacionada con la jerarqua de
directorios y ficheros en la que se guardan las clases.

Programacin para Principiantes JAVA

P g i n a | 23
Para la creacin de un objeto se necesita el operador new, y que se declaren las variables de
instancia dentro de una clase. Mediante una clase se pueden declarar varios objetos que tendrn
los mismos atributos.
Ejemplo: Disee una Clase, para crear objetos del tipo Alumnos, en el cual, permita ingresar el
nombre, edad y Nota de ciertos objetos de ese tipo.
Solucin:
Digite el siguiente cdigo
/*Archivo Alumnos.Java*/
import javax.swing.*;
public class Alumnos{
//declaracin de los atributos
public String Nombre;
public int Edad;
public double Nota;
//declaracin de los mtodos
public void EstablecerNombre()
{
Nombre=JOptionPane.showInputDialog("Ingrese el nombre: ");
}
public void EstablecerEdad(int x)
{
Edad=x;//el valor recibido lo asigna a Edad
}
public void EstablecerNota(double y)
{
Nota=y;
}
/*Este mtodo, muestra todos los datos del del objeto en pantalla*/
public void MostrarDatos()
{
String salida="Nombre del Alumno: "+Nombre+"\nEdad: "+Edad+"\nNota: "+Nota;
JOptionPane.showMessageDialog(null, salida);
}
}
Luego guarde el archivo, Complelo, pero NO lo ejecute. Con esto estamos creando nuestra Clase,
con la cual, podremos construir Objetos de este tipo. Ahora, y en otro archivo digite las siguientes
sentencias:
/*Archivo UsaAlumnos.java*/
class UsaAlumnos{
public static void main (String args []) {
//declaramos y creamos un objeto del tipo Alumnos

Programacion para Principiantes JAVA

P g i n a | 24
Alumnos Datos=new Alumnos();
//LLamamos a los mtodos
Datos.EstablecerNombre();
Datos.EstablecerEdad(20);
Datos.EstablecerNota(9.5);
//Ahora mostramos los Datos
Datos.MostrarDatos();
}
} Luego Guarde el archivo, Complelo y Ejectelo.
Ahora vamos a explicar el ejemplo Anterior.
En el ejemplo anterior puede notar que, los atributos, son esas variables simples, es las cuales
almacenaremos informacin relevante a los objetos que, crearemos a partir de esa clase. Adems que,
los estamos declarando como pblicos, lo cual indica que tenemos acceso directo desde cualquier
otro archivo a los atributos. Los mtodos son del tipo public y no devuelven ningn valor, por tal
razn son declarados como void. Adems que. El mtodo EstablecerEdad y EstablecerNota, reciben
un argumento cada uno de ellos, el cual es asignado al respectivo atributo.
CLASES QUE UTILIZAMOS EN JAVA
LA CLASE MATH
La clase Math representa la librera matemtica de Java. Las funciones que contiene son las de
todos los lenguajes, parece que se han metido en una clase solamente a propsito de agrupacin, por
eso se encapsulan en Math, y lo mismo sucede con las dems clases que corresponden a objetos que
tienen un tipo equivalente (Character, Float, etc.). El constructor de la clase es privado, por los que
no se pueden crear instancias de la clase. Sin embargo, Math es public para que se pueda llamar
desde cualquier sitio y static para que no haya que inicializarla. Veamos la siguiente tabla:
Mtodo

Descripcin

static double E

Valor del nmero e, base del logaritmo natural.

double PI

Valor del nmero PI (3.1416..)

Tipo abs(tipo a)

Valor absoluto de a.

Tipo max(tipo a, tipo b)

Valor mayor entre a y b

Tipo min(tipo a, tipo b)

Valor menor entre a y b

double random()

Valor aleatorio, comprendido entre 0.0 y 1.0

double rint(double a)

Redondeo de a

double sqrt (double a)

Devuelve la raz cuadrada de a

Programacin para Principiantes JAVA

P g i n a | 25
double exp(double a)

Devuelve el avlor de ea

double log (double a)

Devuelve el logaritmo a de a

double pow(double a, double b)

Devuelve el valor de ab

double acos(double a)

Devuelve el arco coseno de a

double asin(double a)

Devuelve el arco seno de a

double atan(double a)

Devuelve el arco tangente de a

double sin(double a)

Devuelve el seno de a

double cos(double a)

Devuelve el coseno de a

double tan(double a)

Tangente de a

Tabla 4.3
Si se importa la clase, se tiene acceso al conjunto de funciones matemticas estndar:
Math.abs( x )
para int, long, float y double
Math.sin( double )
Math.cos( double )
Math.tan( double )
Math.asin( double )
Math.acos( double )
Math.atan( double )
Math.atan2( double,double )
Math.exp( double )
Math.log( double )
Math.sqrt( double )
Math.ceil( double )
Math.floor( double )
Math.rint( double )
Math.pow( a,b )
Math.round( x )
para double y float
Math.random()
devuelve un double
Math.max( a,b )
para int, long, float y double
Math.min( a,b )
para int, long, float y double
Math.E
para la base exponencial
Math.PI
para PI
Ejemplo: Disee una aplicacin en Java que dado el valor de un ngulo, encuentre su seno, coseno,
tangente. Luego, le permita ingresar un dato al usuario, con el cual, pueda calcular su raz cuadrada.
Import javax. swing.*;
class UsaMetodos

Programacion para Principiantes JAVA

P g i n a | 26
{
public static void main(String args [])
{
String leer;
double angulo, valor;
leer=JOptionPane.showInputDialog("Ingrese el valor del ngulo: ");
angulo=Double.parseDouble(leer);
JOptionPane.showMessageDialog(null, "El valor del seno es: "+Math.sin(angulo)+"\nEl Valor del
Coseno del angulo es: "+Math.cos(angulo)+"\nY la tangente es: "+Math.tan(angulo));
leer=JOptionPane.showInputDialog("Ingrese el valor, al cual le desea calcular la raz cuadrada:");
valor=Double.parseDouble(leer);
JOptionPane.showMessageDialog(null, "La raz cuadrada de: "+valor+" es: "+Math.sqrt(valor));
}
}
Ahora vamos a explicar el Ejemplo Anterior:
Recuerde que, le mtodo showInputDialog, devuelve un tipo de dato String, es por esa razn que,
siempre debemos realizar el cambio al tipo de dato que deseamos usar, en nuestro caso double.
Adems que, para llamar los diferentes mtodos matemticos, lo hacemos de la siguiente forma:
Math.nombre_de_metodo (parmetro);
Adems que, en vez de realizar el clculo y la impresin en la misma lnea (en el mtodo
showMessageDialog), podramos haber calculado los respectivos valores por separado, asignarlos a
tres variables auxiliares, y mandar a impresin esas variables.
LA CLASE CHARACTER
Al trabajar con caracteres se necesitan muchas funciones de comprobacin y traslacin. Estas
funciones estn empleadas en la clase Character. De esta clase s que se pueden crear instancias, al
contrario que sucede con la clase Math.

Declaraciones
La primera sentencia crear un variable carcter y la segunda un objeto Character:
Char c;
Character C;

Comprobaciones booleanas
Character.isLowerCase(c)
Character.isUpperCase(c)
Character.isDigit(c)
Character.isSpace(c)

En este caso, si tuvisemos un objeto Character C, no se podra hacer C.isLowerCase,


porque no se ha hecho un new de Character. Estas funciones son estticas y no conocen al
objeto, por eso hay que crearlo antes.

Programacin para Principiantes JAVA

P g i n a | 27

Traslaciones de caracteres
Char c2 = Character.toLowerCase(c);
Char c2 = Character.toUpperCase(c);

Traslaciones de carcter/dgito
Int i = Character.digit(c, base);
Char c = Character.forDigit (i, base);

Mtodos de la clase Character


C = new Character (J);
Char c = C.charValue ();
String s = C.toString ();

Ejemplo: Disee un Programa que, lea una cadena de Caracteres, y luego, muestre esa misma
cadena en minsculas, maysculas y la longitud de la misma.
import javax.swing.*;
public class UsoCadenas {
public static void main (String args []) {
String cadena, aux;
cadena=JOptionPane.showInputDialog("Ingrese la Cadena");
/*En la variable aux, guardamos la nueva cadena
Note la forma en la que llamamos los mtodos:
Variable.Nombre_del_Metodo();*/
aux=cadena.toLowerCase();
JOptionPane.showMessageDialog(null, "Cadena en Minsculas: "+aux);
aux=cadena.toUpperCase();
JOptionPane.showMessageDialog(null, "Cadena en Maysculas: "+aux);
JOptionPane.showMessageDialog(null, "La longuitud de la cadena es: "+cadena.length());
}
}
Ahora vamos a explicar el Ejemplo Anterior
Declaramos dos referencias a objetos de la clase String, una de ellas es identificada por "cadena", la
cual guardamos, la cadena que, el usuario ha ingresado. La otra referencia (aux), nos sirve para
guardar, el resultado que devuelven los mtodos que hemos llamado. En las lneas 9,10 y 11, puede
observar, la forma en la que se llaman a los mtodos correspondientes, para las operaciones que
deseamos realizar. La sintaxis es la siguiente:
Nombre_de_la_refencia_de_objeto. Nombre_del_metodo ();
Existen, algunos mtodos que, reciben parmetros, los cuales, deben especificarse, dentro de los
parntesis del mismo. Pero, en el ejemplo anterior no es el caso. La clase StringBuffer se utiliza
prcticamente siempre que se desee modificar una cadena de caracteres. Completa los mtodos de
la clase String ya que stos realizan slo operaciones sobre el texto que no conllevan un aumento o
disminucin del nmero de letras del String. Recurdese que hay muchos mtodos cuyos
Programacion para Principiantes JAVA

P g i n a | 28
argumentos deben ser objetos String, que antes de pasar esos argumentos habr que realizar la
conversin correspondiente. La Tabla 4.2 muestra los mtodos ms importantes de la clase
StringBuffer.

LA CLASE FLOAT
Cada tipo numrico tiene su propia clase de objetos. As el tipo float tiene el objeto Float.
De la misma forma que con la clase Character, se han codificado muchas funciones tiles
dentro de los mtodos de la clase Float.
Declaraciones
La primera sentencia crear una variable float y la segunda un objeto Float:
Float f;
Float F;

Valores de Float
Float.POSITIVE_INFINITY
Float.NEGATIVE_INFINITY
Float.NaN
Float.MAX_VALUE
Float.MIN_VALUE

Conversiones de Clase/Cadena
String s = Float.toString (f);
f = Float.valueOf (3.14);

Comprobaciones
Boolean b = Float.isNaN (f);
Boolean b = Float.isInfinite (f);

La funcin isNaN () comprueba si f es un No-Nmero. Un ejemplo de no-nmero es raiz


cuadrada de -2.
Conversiones de Objetos
Float F = new Float (Float.PI);
String s = F.toString ();
Int i = F.intValue ();
Long l = F.longValue ();
Float F = F.floatValue ();
Double d = F.doubleValue ();

Otros Mtodos
Int i = F.hashCode ();
Boolean b = F.equals ( Object obj );
Int i = Float.floatToIntBits ( f );

Programacin para Principiantes JAVA

P g i n a | 29
Float f = Float.intBitsToFloat ( i );

LA CLASE DOUBLE
Cada tipo numrico tiene su propia clase de objetos. As el tipo double tiene el objeto
Double. De la misma forma que con la clase Character, se han codificado muchas
funciones tiles dentro de los mtodos de la clase Double.
Declaraciones
La primera sentencia crear una variable double y la segunda un objeto Double:
Double d;
Double D;

Valores de Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
Double.NaN
Double.MAX_VALUE
Double.MIN_VALUE

Mtodos de Double
D.isNaN ();
Double.isNaN (d);
D.isInfinite ();
Double.isInfinite (d);
Boolean D.equals ();
String D.toString ();
int D.intValue();
long D.longValue();
float D.floatValue();
double D.doubleValue();
int i = D.hashCode();
Double V.valueOf( String s );
long l = Double.doubleToLongBits( d );
double d = Double.longBitsToDouble( l );

LA CLASE INTEGER
Cada tipo numrico tiene su propia clase de objetos. As el tipo int tiene el objeto Integer. De
la misma forma que con la clase Character, se han codificado muchas funciones tiles dentro
de los mtodos de la clase Integer.
Declaraciones
La primera sentencia crear una variable int y la segunda un objeto Integer:
Integer.MIN_VALUE;
Integer.MAX_VALUE;

Programacion para Principiantes JAVA

P g i n a | 30

Valores de Integer
Integer.MIN_VALUE;
Integer.MAX_VALUE;

Mtodos de Integer
String Integer.toString( int i,int base );
String Integer.toString( int i );
int I.parseInt( String s,int base );
int I.parseInt( String s );
Integer Integer.valueOf( String s,int base );
Integer Integer.valueOf( String s );
int I.intValue();
long I.longValue();
float I.floatValue();
double I.doubleValue();
String I.toString();
int I.hashCode();
boolean I.equals( Object obj );

LA CLASE LONG
Cada tipo numrico tiene su propia clase de objetos. As el tipo long tiene el objeto Long. De la misma
forma que con la clase Character, se han codificado muchas funciones tiles dentro de los mtodos
de la clase Long.

Declaraciones
La primera sentencia crear una variable long y la segunda un objeto Long:
long l;
Long L;

Valores de Long
Long.MIN_VALUE;
Long.MAX_VALUE;

Mtodos de Long
String Long.toString( long l,int base );
String Long.toString( long l );
long L.parseLong( String s,int base );
long L.parseLong( String s );
Long Long.valueOf( String s,int base );
Long Long.valueOf( String s );
int L.intValue();
long L.longValue();
float L.floatValue();
double L.doubleValue();
String L.toString();
int L.hashCode();

Programacin para Principiantes JAVA

P g i n a | 31
boolean L.equals( Object obj );

En los mtodos toString (), parseInt () y valueOf () que no se especifica la base sobre la que se trabaja,
se asume que es base 10.

LA CLASE BOOLEAN
Los valores boolean tambin tienen su tipo asociado Boolean, aunque en este caso hay
menos mtodos implementados que para el resto de las clases numricas.
Declaraciones
La primera sentencia crear una variable boolean y la segunda un objeto Boolean:
boolean b;
Boolean B;

Valores de Boolean
Boolean.TRUE;
Boolean.FALSE;

Mtodos de Boolean
boolean B.booleanValue();
String B.toString();
boolean B.equals( Object obj );

LA CLASE STRING
Java posee gran capacidad para el manejo de cadenas dentro de sus clases String y StringBuffer. Un
objeto String representa una cadena alfanumrica de un valor constante que no puede ser cambiada
despus de haber sido creada. Un objeto StringBuffer representa una cadena cuyo tamao puede
variar.

Los Strings son objetos constantes y por lo tanto muy baratos para el sistema. La mayora
de las funciones relacionadas con cadenas esperan valores String como argumentos y
devuelven valores String.
Hay que tener en cuenta que las funciones estticas no consumen memoria del objeto, con
lo cual es ms conveniente usar Character que char. No obstante, char se usa, por ejemplo,
para leer ficheros que estn escritos desde otro lenguaje.
Existen muchos constructores para crear nuevas cadenas:
String();
String( String str );
String( char val[] );

Programacion para Principiantes JAVA

P g i n a | 32
String( char val[],int offset,int count );
String( byte val[],int hibyte );
String( byte val[],int hibyte,int offset,int count );

Tal como uno puede imaginarse, las cadenas pueden ser muy complejas, existiendo muchas
funciones muy tiles para trabajar con ellas y, afortunadamente, la mayora estn
codificadas en la clase String.
Funciones Bsicas
La primera devuelve la longitud de la cadena y la segunda devuelve el carcter que se
encuentra en la posicin que se indica en indice:
int length();
char charAt( int indice );

Funciones de Comparacin de Strings


boolean equals( Object obj );
boolean equalsIgnoreCase( Object obj );

Lo mismo que equals() pero no tiene en cuenta maysculas o minsculas.


int compareTo( String str2 );

Devuelve un entero menor que cero si la cadena es lxicamente menor que str2. Devuelve
cero si las dos cadenas son lxicamente iguales y un entero mayor que cero si la cadena es
lxicamente mayor que str2.
Funciones de Comparacin de Subcadenas
boolean regionMatch( int thisoffset,String s2,int s2offset,int len );
boolean regionMatch( boolean ignoreCase,int thisoffset,String s2,
int s2offset,int 1 );

Comprueba si una regin de esta cadena es igual a una regin de otra cadena.
boolean startsWith( String prefix );
boolean startsWith( String prefix,int offset );
boolean endsWith( String suffix );

Devuelve si esta cadena comienza o termina con un cierto prefijo o sufijo comenzando en
un determinado desplazamiento.
int
int
int
int
int
int

indexOf( int ch );
indexOf( int ch,int fromindex );
lastIndexOf( int ch );
lastIndexOf( int ch,int fromindex );
indexOf( String str );
indexOf( String str,int fromindex );

Programacin para Principiantes JAVA

P g i n a | 33
int lastIndexOf( String str );
int lastIndexOf( String str,int fromindex );

Devuelve el primer/ltimo ndice de un carcter/cadena empezando la bsqueda a partir de


un determinado desplazamiento.
String
String
String
String
String
String
String

substring( int beginindex );


substring( int beginindex,int endindex );
concat( String str );
replace( char oldchar,char newchar );
toLowerCase();
toUpperCase();
trim();

Ajusta los espacios en blanco al comienzo y al final de la cadena.


void getChars( int srcBegin,int srcEnd,char dst[],int dstBegin );
void getBytes( int srcBegin,int srcEnd,byte dst[],int dstBegin );
String toString();
char toCharArray();
int hashCode();

Funciones ValueOf
La clase String posee numerosas funciones para transformar valores de otros tipos de datos
a su representacin como cadena. Todas estas funciones tienen el nombre de valueOf,
estando el mtodo sobrecargado para todos los tipos de datos bsicos.
Veamos un ejemplo de su utilizacin:
String Uno = new String (Hola Mundo);
float f = 3.141592;
String PI = Uno.valueOf( f );
String PI = String.valueOf( f );

// Mucho ms correcto

Funciones de Conversin
String
String
String
String
String
String
String
String

valueOf(
valueOf(
valueOf(
valueOf(
valueOf(
valueOf(
valueOf(
valueOf(

boolean b );
int i );
long l );
float f );
double d );
Object obj );
char data[] );
char data[],int offset,int count );

Usa arrays de caracteres para la cadena.


String copyValueOf( char data[] );
String copyValueOf( char data[],int offset,int count );

Crea un nuevo array equivalente para la cadena.


LA CLASE STRINGBUFFER
Programacion para Principiantes JAVA

P g i n a | 34

Java posee gran capacidad para el manejo de cadenas dentro de sus clases String y
StringBuffer. Un objeto String representa una cadena alfanumrica de un valor constante
que no puede ser cambiada despus de haber sido creada. Un objeto StringBuffer representa
una cadena cuyo tamao puede variar.
La clase StringBuffer dispone de muchos mtodos para modificar el contenido de los
objetos StringBuffer. Si el contenido de una cadena va a ser modificado en un programa,
habr que sacrificar el uso de objetos String en beneficio de StringBuffer, que aunque
consumen ms recursos del sistema, permiten ese tipo de manipulaciones.
Al estar la mayora de las caractersticas de los StringBuffers basadas en su tamao
variable, se necesita un nuevo mtodo de creacin:
StringBuffer();
StringBuffer( int len );
StringBuffer( String str );

Se puede crear un StringBuffer vaco de cualquier longitud y tambin se puede utilizar un


String como punto de partida para un StringBuffer.
StringBuffer Dos = new StringBuffer( 20 );
StringBuffer Uno = new StringBuffer( "Hola Mundo" );

CLASES ABSTRACTAS: Una de las caractersticas ms tiles de cualquier lenguaje orientado a


objetos es la posibilidad de declarar clases que definen como se utiliza solamente, sin tener que
implementar mtodos. Esto es muy til cuando la implementacin es especfica para cada usuario,
pero todos los usuarios tienen que utilizar los mismos mtodos. Un ejemplo de clase abstracta en Java
es la clase Graphics:
public abstract class Graphics {
public abstract void drawLine( int x1,int y1,int x2,
int y2 );
public abstract void drawOval( int x,int y,int width,
int height );
public abstract void drawArc( int x,int y,int width,
int height,int startAngle,int arcAngle );
. . .
}

Los mtodos se declaran en la clase Graphics, pero el cdigo que ejecutar el mtodo est en algn
otro sitio:
public class MiClase extends Graphics {
public void drawLine( int x1,int y1,int x2,int y2 ) {
<cdigo para pintar lneas -especfico de
la arquitectura->
}
}

Cuando una clase contiene un mtodo abstracto tiene que declararse abstracta. No obstante, no
todos los mtodos de una clase abstracta tienen que ser abstractos. Las clases abstractas no pueden
Programacin para Principiantes JAVA

P g i n a | 35
tener mtodos privados (no se podran implementar) ni tampoco estticos. Una clase abstracta tiene
que derivarse obligatoriamente, no se puede hacer un new de una clase abstracta.
Una clase abstracta en Java es lo mismo que en C++ virtual func () = 0; lo que obliga a que al
derivar de la clase haya que implementar forzosamente los mtodos de esa clase abstracta.

Control General del Flujo o Sentencias de Control


Todo lenguaje de programacin cuenta (o al menos debera contar), con una serie de instrucciones
que, le permitan controlar el flujo de ejecucin de las instrucciones. Afortunadamente Java posee dos
grandes rubros de dichas sentencias:

Estructuras Selectivas, en las cuales encontramos el if, elseif y switch.


Estructuras Repetitivas o Cilclos, entre las cuales estn: while, do while y for.

Estructuras Selectivas
En la vida, muchas veces, nos toca elegir entre un camino y otro a seguir. En muchas de las actividades
que realizamos da con da, nos enfrentamos a decisiones que debemos tomar y que, de una u otra
forma, alteran el cause normal de nuestra vida (o de nuestro programa).
Sentencia if
La sentencia if (o si condicional), le permite a un programa decidir, mediante la evaluacin de una
condicin, ejecutar una u otra accin o acciones.
La sintaxis General es La siguiente:
If (condicion1)
Accion1;
En donde:
Condicin 1: Representa una expresin que puede ser del tipo booleana.
Accin 1: es la accin que, al evaluar la condicin como verdadera, se ejecutar.
Si son varias acciones, van entre llaves.
Ejemplo: Disee un programa en Java, que calcule, los descuentos a un trabajador, sabiendo que,
son aplicables, un 6.25% del salario en AFP, slo si ste es superior a $300.00; Adems que, si es un
trabajador hombre, se le descuenta, aparte del AFP, el 3% sobre el sueldo en concepto de ISSS y
10% en concepto de Renta.
import javax.swing.*;
class Descuentos{
public static void main (String args []) {
String datos;
int sexo;
double sueldo, afp=0, isss, totalre, nsueldo, renta;
datos=JOptionPane.showInputDialog("Ingrese el sueldo del empleado (a)");
sueldo=Double.parseDouble(datos);
if(sueldo>300)//Preuntamos si el sueldo es mayor a 300

Programacion para Principiantes JAVA

P g i n a | 36
afp=sueldo*0.0625;// si es mayor, aplicamos descuento
JOptionPane.showMessageDialog(null, "Este empleado tiene un sueldo de: "+sueldo+" y El
descuento del AFP es: "+afp);
datos=JOptionPane.showInputDialog("Ingrese el Sexo: \nSi es Masculino (1)\nSi es Femenino
(2)");
sexo=Integer.parseInt(datos);
if(sexo==1)//Si es de sexo masculino
{
isss=sueldo*0.03;//aplicamos las otras retenciones
renta=sueldo*0.10;
totalre=afp+isss+renta;
nsueldo=sueldo-totalre;
JOptionPane.showMessageDialog(null, "A este empleado, se le retiene: "+isss+" En concepto de
ISSS\nAdems Se le retiene: "+renta+" En Concepto de Renta\nLo que hace un total de:
"+totalre+"\nY su nuevo sueldo es: "+nsueldo);
}//del if
}//del main
}// de la clase
En las sentencias if, podemos agregar la sentencia else, la cual indica que, si al evaluar la condicin,
sta es falsa, entonces, realizar las acciones, que estn despus del else. La sintaxis es la siguiente:
If(condicin1)
{
Acciones;
}
Else
{
Condiciones;
}
OJO: Las Condiciones, a evaluar, pueden ser expresiones compuestas. Es decir, usando
operadores and (&&), Or (11), etc.
Ejemplo: Al ingresar la nota de un alumno, se desea saber si ste aprob o no, una materia en el
colegio. Se sabe que para aprobar, se necesita una nota mayor o igual a 7.0. Disee una aplicacin en
Java que, al ingresar la nota, muestre con un mensaje, si el alumno, aprob o no. Adems se sabe que
si la nota est entre 6.50 y 6.99, tiene la posibilidad de realizar un examen de suficiencia para aprobar.
import javax.swing.*;
public class NotaAlum{
public static void main (String args []){
String leer;
double Nota;
leer=JOptionPane.showInputDialog("Ingrese la nota del alumno");
Nota=Double.parseDouble(leer);
if(Nota>=7.0)

Programacin para Principiantes JAVA

P g i n a | 37
JOptionPane.showMessageDialog(null, "El alumno APROB!!!!!!");
else
{
JOptionPane.showMessageDialog(null, "El alumno reprob");
if(Nota>=6.5 && Nota<=6.99)
JOptionPane.showMessageDialog(null, "Pero tiene la posibilidad de realizar el examen de
suficiencia");
}//del else
}//del main
}//de la clase
Ahora vamos a explicar el Ejemplo Anterior:
En la lnea 13, colocamos una condicin compuesta, es decir que, si el alumno alcanza una nota
mayor o igual a 6.5, pero menor a 7.0 (es decir 6.99), tiene la posibilidad de realizar el examen. Note
adems que, una estructura, puede estar dentro de otra, lo que llamamos Anidamiento, para el
caso, el if de la lnea 13, est dentro del else, que inicia en la lnea 10.
Sentencia elseif
Esta estructura, es una consecuencia de las estructuras if anidadas, su formato es el siguiente:
if(condicion1)
Sentencia 1;
elseif(condicion2)
Sentencia 2;
elseif(condicion3)
Sentencia 3;
...
else
Sentencia n;
Funciona de la siguiente manera:
Se evala la primera condicin, si resulta verdadera se ejecuta la sentencia 1, y se contina con la
ejecucin del programa; de lo contrario, de evala la condicin 2, si resulta verdadera, se ejecuta la
sentencia 2, de lo contrario se evala la condicin 3 y as sucesivamente. Si al evaluar todas las
condiciones, ninguna resulta verdadera, se ejecuta el bloque del else.
Ejemplo: Cree un Applet que, reciba como ingreso la nota de un alumno y la clasifique, segn la
siguiente tabla: Excelente, Muy Bueno, Bueno, Regular, Necesita Mejorar.
Cabe recalcar que dicha escuela, maneja solamente notas cerradas, es decir, sin decimales.
import javax.swing.*;
import java.awt.*;
public class NotasAlumno extends JApplet
{ //declaracion de variables
String leer;

Programacion para Principiantes JAVA

P g i n a | 38
double nota;
public void init()
{
leer=JOptionPane.showInputDialog("Ingrese La Nota:");
nota=Double.parseDouble(leer);
}
public void paint(Graphics g)
{
super.paint(g);
if(nota<=10 && nota>=9)
g.drawString("Excelente!!!!", 50,50);
else if(nota<=8 && nota>=7)
g.drawString("Muy Bueno!!!!", 50,50);
else if(nota<=6 && nota>=5)
g.drawString("Bueno", 50,50);
else if(nota<=4 && nota>=3)
g.drawString("Regular", 50,50);
else if(nota<=2 && nota>=1)
g.drawString("Necesita Mejorar...", 50,50);
else
g.drawString("Nota Incorrecta!!!", 50,50);
}//del paint
}// de la clase
Sentencia switch
Esta sentencia, permite ejecutar, una u otra u otra accin, al evaluar una condicin, cuyo resultado es
el que indica que bloque (o bloques) de instrucciones se van a ejecutar. Su sintaxis es la siguiente:
switch(expresin)
{
case 1:
Sentecia 1;
break;
case 2:
Sentecia 2;
break;
...
default:
Sentencias;
break;
}
En donde, expresin es una condicin que, al evaluarla, nos indicar que camino debemos seguir.
Adems sta puede ser, una expresin entera char, byte, int y short. Adems que, la expresin
constante que acompaa a la palabra reservada case debe ser del mismo tipo que expresin. La
clusula default es opcional y puede omitirse en los programas que desarrollemos.
Programacin para Principiantes JAVA

P g i n a | 39
Ejemplo: En una tienda, se realizan diferentes descuentos, a sus clientes al momento de cancelar
en caja. Ya que, cuando se disponen a cancelar tienen la oportunidad de sacar una bolita, y
dependiendo del color de la misma, se le aplica su respectivo descuento. Si la bolita es roja, se le
aplica un 10% de descuento sobre la compra; si la bola es verde, se le aplica un 5% de descuento, y
si la bolita es blanca, no se le aplica descuento alguno. Disee una aplicacin que de soporte a sta
actividad en el sper mercado.
Import javax. swing.*;
public class SuperMercado
{
public static void main (String args [])
{
String aux;
int bolita;
double compra, descuento=0, monto;
//leemos el import de la compra
aux=JOptionPane.showInputDialog("Ingrese el importe de la compra: ");
compra=Double.parseDouble(aux);
//leemos el color de la bolita
aux=JOptionPane.showInputDialog("Ingrese el color de la Bolita:\nSi es Roja, ingrese 1\nSi fue
Verde, Ingrese 2\nSi fue Blanca, ingrese 3");
bolita=Integer.parseInt(aux);
switch(bolita)
{
case 1:
{
descuento=compra*.10;
monto=compra-descuento;
}
break;
case 2:
{
descuento=compra*.05;
monto=compra-descuento;
}
break;
case 3:
monto=compra;
break;
default:
monto=compra;
break;
}//del switch
JOptionPane.showMessageDialog(null, "El cliente haba consumido: "+compra+" Pero sac una
bolita color: "+bolita+"\nPor lo que se aplic un descuento de: "+descuento+"\nAhora el saldo a
Programacion para Principiantes JAVA

P g i n a | 40
cancelar es: "+monto);
}//del main
}// de la clase
Estructuras Iterativas
OJO: Puede notar que, la estructura else if, y la estructura switch, realizan prcticamente la
misma funcin por lo que para el usuario, es invisible la diferencia entre uno y otro. Sin
embargo, el la estructura else if, podemos colocar intervalos de valores, con la ayuda del && y
el 11, lo que no se puede hacer en el switch.
Es muy comn encontrar en los programas operaciones que se deben ejecutar un nmero repetido de
veces en perodos ms o menos espaciados. Si bien las instrucciones son las mismas, los datos sobre
los que operan varan. A nuestro alrededor, encontramos problemas que presentan esas caractersticas,
por ejemplo: el clculo de la nota final de los estudiantes de Programacin III, se realizar tantas
veces como alumnos hayan inscritos en dicha asignatura, el clculo del salario de los empleados de
una empresa, etc. En estos casos la solucin que se disee para un solo grupo de datos se debe repetir
tantas veces como sea necesario (de acuerdo al nmero de estudiantes y de empleados para los
ejemplos anteriores).Los clculos simples o la manipulacin de pequeos conjuntos de datos se
pueden realizar fcilmente a mano, pero las tareas grandes o repetitivas son realizadas con mayor
eficacia por una computadora, ya que estas estn especialmente preparadas para ello.
Para repetir varias veces un proceso determinado haremos uso de los ciclos repetitivos, a los cuales
se les conoce con el nombre de estructura repetitiva, estructura iterativa, lazo o bucle.
En C, al igual que en Java podemos encontrar tres tipos de ciclos:

Entrada Asegurada (while)


Ciclo Controlado Por Contador (for)
Hacer Mientras (do.. while)

Funcionamiento de Un Ciclo
Un ciclo, funciona de la siguiente manera: Evala una condicin de resultar cierta, realiza una accin
o bloque de acciones, luego vuelve a evaluar la condicin y si nuevamente resulta cierta, realiza la (s)
accin (es). Cuando la condicin de cmo resultado falso, se sale del ciclo y contina con la ejecucin
normal del programa.
Acumulador:
Es una variable, que , como su nombre lo indica se encarga de acumular valores. Esto se vuelve muy
til, por ejemplo, cuando queremos encontrar la suma de los nmeros del 0 al 9, en el acumulador,
vamos guardando los valores de dichas cifras. Puede ser tanto real como entera. Su valor inicial, en
la mayora de los casos es cero.
Contador:
Es una variable de tipo entero, que nos ayuda, en el programa a contabilizar el nmero de ejecuciones
de una misma accin, de un grupo de alumnos etc. Un acumulador tiene tres valores distintos:
Valor Inicial: es el valor con el cual iniciamos nuestro contador. Generalmente es cero. Esta
asignacin puede hacerse cuando se declara la variable.
Programacin para Principiantes JAVA

P g i n a | 41
Valor Final: despus de la ejecucin del ciclo, el valor del contador, ser distinto a su valor inicial,
este puede ser mayo o menor que el mismo, todo depende si fue una cuenta creciente o decreciente.
Valor de Cambio: Es el valor Constante, en el cual se ir incrementando nuestro contador, este puede
ser positivo o negativo; es decir, si la cuanta se realiza de manera ascendente o descendente.
Bandera:
Las variables tipo bandera son aquellas que slo admiten dos valores: cierto o falso, true o false,
hombre o mujer... etc
Ciclo de Entrada Asegurada
La sintaxis es la siguiente:
While (condicin)
Accin;
Funciona de la siguiente manera: primero evala la condicin, si da como resultado cierta realiza la
accin, luego vuelve a evaluar la condicin, si su resultado es falso, se sale del ciclo y contina con
la ejecucin del programa. Hay que tener mucho cuidado, cuando trabajamos con ciclos, ya que
podemos caer en un ciclo infinito, es decir que nunca se sale de l. Por lo cual en las acciones debemos
siempre colocar algo que haga que se modifique el resultado de la condicin, lo cual puede ser una
bandera, un contador o un acumulador.
Ejemplo: En una empresa, se desea se tienen datos correspondientes a los sueldos de 10 empleados,
de los cuales, se desea saber, quien goza del sueldo mayor, quien goza del sueldo menor y cuantos
poseen un sueldo mayor a $300.00
import javax.swing.*;
class UsaWhile{
public static void main (String args []){
String leer;
double sueldo, mayor=0, menor=10000;
int i=1, contador=0;
while(i<=10)
{
leer=JOptionPane.showInputDialog("Ingrese el sueldo del empleado: "+i);
sueldo=Double.parseDouble(leer);
while(sueldo<0)//si el sueldo es negativo
{
leer=JOptionPane.showInputDialog("ERROR, el sueldo no puede ser Negativo\nIngrese el sueldo
del empleado: "+i);
sueldo=Double.parseDouble(leer);
}
if(sueldo>300)
contador=contador+1;
if(sueldo>mayor)
mayor=sueldo;

Programacion para Principiantes JAVA

P g i n a | 42
if(sueldo<menor)
menor=sueldo;
i=i+1;
}
JOptionPane.showMessageDialog(null, "El sueldo mayor es de: "+mayor+"\nEl sueldo menor es:
"+menor+"\n"+contador+" Empleados tienen un sueldo mayor a $300");
}
}
Ciclo Controlado por contador.
En algunas ocasiones, sabemos a ciencia cierta el nmero de veces que se tiene que repetir una misma
accin o bloque de acciones. Y para ello es que nos sirve, esta estructura. Su sintaxis es la siguiente:
For (valor inicial; condicin; incremento) accion;
Donde:
Valor inicial: es el valor con el cual inicializamos nuestra variable de control.
Condicin: si la cumple, ejecuta la accin o acciones e incrementa o decrementa la variable
de control, sino la cumple la condicin, se sale del ciclo.
Incremento; que puede ser positivo o negativo (decremento).
Ejemplo: Escriba un Applet que dibuje un rectngulo, unas lneas u valos en base a la entrada del
usuario.
import java.awt.*;
import javax.swing.*;
public class PruebaFor extends JApplet{
int opcion; //la opcion del usuario
public void init ()
{
String entrada;
//obtener la opcion del usuario
entrada=JOptionPane.showInputDialog("Escriba 1 para dibujer Lineas\nEscriba 2 para dibujar
rectangulos\nEscriba 3 pra dibujar Ovalos");
opcion=Integer.parseInt(entrada);
}//fin del metodo init
//dibujar figuras en el fondo el Applet
public void paint (Graphics g)
{
super.paint(g);
for(int i=0; i<10; i++)
{
switch(opcion)
{
case 1://dibujar lineas
g.drawLine(10,10,250,10+i*10);
break;
Programacin para Principiantes JAVA

P g i n a | 43
case 2://dibujar rectangulos
g.drawRect(10+i*10,10+i*10,50+i*10, 50+i*10);
break;
case 3: //dibujar un Ovalo
g.drawOval(10+i*10, 10+i*10, 50+i*10, 50+i*10);
break;
default: //Valor Incorrecto
g.drawString("Se escribi un valor Incorrecto", 10,20+i*15);
}//fin del switch
}//fin del for
}//fin del paint
}//fin de la clase
Ciclo Do... while
Es te ciclo funciona de la siguiente manera, realiza la accin o conjunto de acciones, luego evala
una condicin de resultar cierta vuelve a realizar la/s accion/es. Cuando sea falsa, se sale del ciclo.
Formato:
Do {
Sentencia;
} While(<expL>);
La diferencia fundamental, entre el ciclo while y do...while, es que en este ultimo, las sentencias se
realizarn por lo menos una vez, en cambio, con while, solo se cumplirn mientras se cumpla la
condicin, lo cual puede ser nunca.
EjemplO: Programa que suma los valores de n1, mientras estos no sean mayores que 100
class fibo{
public static void main(String args[]){
int n1=0;
do{ n1++;
System.out.println(n1+" ");
}while(n1<100);
}
}

Programacion para Principiantes JAVA

P g i n a | 44

Uso de Variables
En todas las aplicaciones que realizamos, se necesitan entre muchas cosas, valores, datos; que
cambien a medida se ejecuta el programa. Por tal razn, un programa que solo muestre en pantalla
datos (como el ejemplo anterior), no es muy funcional que se diga. Para ello, es necesario hacer uso
de las variables que no son ms que una unidad de almacenamiento, la cual tiene la propiedad de
cambiar a medida se ejecuta la aplicacin (a diferencia de las constantes cuyo valor NO cambia).y
para eso ya tenemos que tener en mente que una variable es aquella que tiene la propiedad o capacidad
de cambiar de valor. Durante la ejecucin del programa. Cuando se utiliza una variable estamos
asignando espacio en memoria (el tamao viene dado por el tipo de dato, del cual se est declarando.
Ver tabla 2.2). En dicho espacio, se guardar el valor, que almacenar dicha variable.
Por tanto, una variable tiene tres propiedades bsicas:

Una posicin de memoria para almacenar valor el


El tipo de datos almacenado en la posicin de memoria.
Y el identificar (nombre) asociado a sa posicin de memoria.

Luego de conocer las propiedades bsicas vamos a conocer como es que se declara una variable en
Java, se prosigue de la siguiente forma:
Tipo identificado=valor;
Donde:
Tipo: Es el tipo de dato que almacenar, el cual puede ser cualquiera de los que se muestran
en la tabla 2.1.
Identificar: que hace referencia al nombre de la variable.
SABER: JAVA distingue entre maysculas y minsculas, por tanto una variable declarada
como Nombre No es igual a otra variable invocada como nombre.
Valor: No es necesario, pero Java permite inicializar variables, por ejemplo, los contadores,
acumuladores, etc.;
Ejemplos:

int i;
float suma=0;
double saldo;
String Nombre

En la lnea uno, estamos declarando una variable de tipo entero, identificada por i. en la lnea dos,
tenemos una variable del tipo real, inicializada a cero, podemos asumir que se trata de un acumulador.
Luego, se puede hacer notar que saldo, est declarada como real de doble precisin, y finalmente en
la lnea 4 se encuentre Nombre que es una variable de tipo String, es decir; una cadena de caracteres,
ya que Java soporta este tipo de datos.
Ejemplo: Programa que Muestra el nombre, edad y sueldo de una persona.
class DatosPersonales {
public static void main (String args[]) {
String Nombre="Manuel Ortez";

Programacin para Principiantes JAVA

P g i n a | 45
int edad=20;
double sueldo=500.00;
System.out.println("Nombre del empleado: "+Nombre);
System.out.println("Edad: ");//Impresion de la leyenda edad
System.out.println(edad);
System.out.println("Sueldo: "+sueldo);
}//fin del main
}//fin de la clase
Ahora vamos a explicar el ejemplo anterior:
Como puede notarse, la variable Nombre, es una cadena de caracteres, la cual est inicializada, y
todos los valores de una cadena se escriben entre comillas dobles. Adems note que, en el mtodo
System.out.printl, podemos hacer varias combinaciones al momento de mandar a la impresin. Para
el caso, si una (o ms cadenas) se van a mandar a impresin acompaadas de una (o ms variables),
estos argumentos se unen, mediante el operador +. Sin embargo, esto no es necesario cuando se
trata de la impresin de una sola variable:
System.out.println (edad);
Ejemplo: Programa que calcula el area y el permetro de un crculo
class Circulo {}
public static void main (String args[]) {
double radio=2.3;
double perimetro;
double area;
area=Math.PI*radio*radio;
perimetro=2*Math.PI*radio;
System.out.println("El area es: "+area+"
}
}

el

permetro

es:

"+perimetro);

Ahora vamos a explicar el Ejemplo Anterior.


Me parece que, en lo nico que debemos poner atencin es en dos cosas.
La primera, es que Math.PI es una constante, (3.14159.), la cual, est dentro del paquete de
java.lang; el cual, como ya lo hemos dicho, est incluido, por defecto, en todos nuestros programas
de manera automtica; adems que, note que la nica impresin que se hace, enlazamos los
parmetros con el operador +.
System.out.println ("El area es: "+area+" Y el permetro es: "+perimetro);

THIS Y SUPER
Al acceder a variables de instancia de una clase, la palabra clave this hace referencia a los miembros
de la propia clase. Volviendo al ejemplo de MiClase, se puede aadir otro constructor de la forma
siguiente:
public class MiClase {

Programacion para Principiantes JAVA

P g i n a | 46
int i;
public MiClase() {
i = 10;
}
// Este constructor establece el valor de i
public MiClase( int valor ) {
this.i = valor; // i = valor
}
public void Suma_a_i( int j ) {
i = i + j;
}
}
Aqu this.i se refiere al entero i en la clase MiClase.
Si se necesita llamar al mtodo padre dentro de una clase que ha reemplazado ese mtodo, se puede
hacer referencia al mtodo padre con la palabra clave super:
import MiClase;
public class MiNuevaClase extends MiClase {
public void Suma_a_i( int j ) {
i = i + ( j/2 );
super.Suma_a_i( j );
}
}
En el siguiente cdigo, el constructor establecer el valor de i a 10, despus lo cambiar a 15 y
finalmente el mtodo Suma_a_i () de la clase padre (MiClase) lo dejar en 25:
MiNuevaClase mnc; mnc = new MiNuevaClase (); mnc.Suma_a_i (10);

METODOS NATIVOS
Java proporciona un mecanismo para la llamada a funciones C y C++ desde nuestro cdigo
fuente Java. Para definir mtodos como funciones C o C++ se utiliza la palabra clave
native.
public class Fecha {
int ahora;
public Fecha() {
ahora = time();
}
private native int time();
static {
System.loadLibrary( "time" );
}
}

Una vez escrito el cdigo Java, se necesitan ejecutar los pasos siguientes para poder
integrar el cdigo C o C++:

Programacin para Principiantes JAVA

P g i n a | 47

Utilizar javah para crear un fichero de cabecera (.h)


Utilizar javah para crear un fichero de stubs , es decir, que contiene la declaracin
de las funciones
Escribir el cdigo del mtodo nativo en C o C++, es decir, rellenar el cdigo de la
funcin, completando el trabajo de javah al crear el fichero de stubs
Compilar el fichero de stubs y el fichero .c en una librera de carga dinmica ( DLL
en Windows '95 o libXX.so en Unix)
Ejecutar la aplicacin con el appletviewer

Ms adelante trataremos en profundidad los mtodos nativos, porque aaden una gran
potencia a Java, al permitirle integrar a travs de librera dinmica cualquier algoritmo
desarrollado en C o C++, lo cual, entre otras cosas, se utiliza como mtodo de proteccin
contra la descompilacin completa del cdigo Java.

VARIABLES Y METODOS ESTATICOS


En un momento determinado se puede querer crear una clase en la que el valor de una variable de
instancia sea el mismo (y de hecho sea la misma variable) para todos los objetos instanciados a partir
de esa clase. Es decir, que exista una nica copia de la variable de instancia. Se usar para ello la
palabra clave static.
class Documento extends Pagina {
static int version = 10;
}
El valor de la variable version ser el mismo para cualquier objeto instanciado de la clase Documento.
Siempre que un objeto instanciado de Documento cambie la variable version, sta cambiar para
todos los objetos. De la misma forma se puede declarar un mtodo como esttico, lo que evita que el
mtodo pueda acceder a las variables de instancia no estticas:
class Documento extends Pagina {
static int version = 10;
int numero_de_capitulos;
static void annade_un_capitulo() {
numero_de_capitulos++;
// esto no funciona
}
static void modifica_version( int i ) {
version++;
// esto si funciona
}
}
La modificacin de la variable numero_de_capitulos no funciona porque se est violando una de las
reglas de acceso al intentar acceder desde un mtodo esttico a una variable no esttica.
Todas las clases que se derivan, cuando se declaran estticas, comparten la misma pgina de variables;
es decir, todos los objetos que se generen comparten la misma zona de memoria. Las funciones
estticas se usan para acceder solamente a variables estticas.

Programacion para Principiantes JAVA

P g i n a | 48
class UnaClase {
int var;
UnaClase()
{
var = 5;
}
UnaFuncion()
{
var += 5;
}
}
En el cdigo anterior, si se llama a la funcin UnaFuncion a travs de un puntero a funcin, no se
podra acceder a var, porque al utilizar un puntero a funcin no se pasa implcitamente el puntero al
propio objeto (this). Sin embargo, s se podra acceder a var si fuese esttica, porque siempre estara
en la misma posicin de memoria para todos los objetos que se creasen de UnaClase.

Nombre del Mtodo

Descripcin

StringBuffer()

Constructores del Objeto.

capacity()

Devuelve el espacio disponible del Objeto StringBuffer

charAt(int)

Devuelve el carcter que ocupa la posicin especificada.

getChars(int, int, char[], int) Copia los caracteres indicados en la posicin indicada de un array de
caracteres
insert(int)

Inserta un String (o cualquier otro tipo de dato primitive), en la


posicin que se especifica.

length()

Devuelve la longitud de la cadena.

reverse()

Devuelve una cadena invertida.

setCharAt(int, char)

Cambia el carcter char, el la posicin int.

toString()

Convierte en Objeto del tipo String.

Tabla 4.2

Programacin para Principiantes JAVA

P g i n a | 49

Operadores, Comentarios y Literales.


Tipos de datos No orientados a Objetos (estos datos son muy parecidos a los de C)
En todas las aplicaciones, No solo en Java, sino en cualquier otro lenguaje de programacin, nos
ayudan a enriquecer nuestro cdigo y hacerlo ms robusto y funcional.

Operadores
Los operadores de Java son muy parecidos en estilo y funcionamiento a los de C. En la siguiente tabla
aparecen los operadores que se utilizan en Java, por orden de precedencia:
Un Operador, es un smbolo que le indica al compilador que realice una determinada operacin, ya
sea lgica. Como consecuencia, nacen los diferentes tipos de operadores que existen. En Java,
podemos encontrar los siguientes tipos:

Operadores Aritmticos
Operadores a nivel de Bit
Operadores Relacionales
Operadores Lgicos
Operadores Aritmticos

Estos operadores se utilizan para realizar diferentes operaciones aritmticas, por tal razn se utilizan
en variables de tipo numricas.
.
[]
++
-!
~
*
/
+
<<
>>
<
>
&
^
&&
||
? :
=
op=
String nombre =

()
Instanceof
%
>>>
<=
|

>=

==

(*=
/=
%=
"nombre" + "Apellido";

Aritmticos

DESCRIPCIN

Suma

Resta

Multiplica

Divide

Devuelve el resto de una divisin

++

Incrementa en 1

!=

+=

-=

Programacion para Principiantes JAVA

etc.)

P g i n a | 50
--

Decremento en 1

Tabla 2.2
Ejemplo: Programa que usa varios tipo de instrucciones
class Operadores {
public static void main (String args[]){
int x=10;
int y=12;
int resultado;
resultado=x+y;
System.out.println("El resultado de la suma es: "+resultado);
resultado=y-x;
System.out.println("El resultado de la resta es: "+resultado);
resultado=x/y;
System.out.println("El resultado de la divisin es: "+resultado);
x++;
y++;
System.out.println("Ahora x es: "+x+"y Y es: "+y);
}
}
Operadores Lgicos
Operador

Descripcin

&&

Y lgico. Condicion1 && Condicion2

||

O lgico. Condicion1 || Condicion2

Negacin. !(Condicion1)

Operadores Relacionales
Operador

Descripcin

==

Es igual a

!=

No es igual a (Distinto)

>

Mayor que

<

Menor que

>=

Mayor o Igual a

Programacin para Principiantes JAVA

P g i n a | 51
<=

Menor o igual que

Comentarios
Antes que nada vamos a definir lo que es un comentario el cual es un mensaje cualquiera, que se
escribe entro del cdigo; pero que no es interpretado por el compilador, y que ayuda, al programador
para futuros mantenimientos y para comprender, tiempo despus, la secuencia de ejecucin del
programa. Java, posee tres tipos de comentarios:
Comienza con /* y termina con */, en l podemos escribir una lnea o un prrafo completo. Ejemplo:
/*Ejemplo de un comentario */
/* Tambin podemos escribir
Nuestros comentarios
En varias lneas*/
Tradicional:
De una sola lnea:
Comienzan con una doble barra (//), y se extiende hasta el final de la lnea. Ejemplo:
//Este comentario es vlido slo para una lnea

A su vez tenemos que conocer que en Java hay tres tipos de comentarios:

// Comentarios para una sola lnea


/* Comentarios de una o ms lneas
*/
/** Comentario de documentacin, de una o ms lneas
*/

Los dos primeros tipos de comentarios son los que todo programador conoce y se utilizan del mismo
modo. Los comentarios de documentacin, colocados inmediatamente antes de una declaracin (de
variable o funcin), indican que ese comentario ha de ser colocado en la documentacin que se genera
automticamente cuando se utiliza la herramienta de Java, javadoc. Dichos comentarios sirven como
descripcin del elemento declarado permitiendo generar una documentacin de nuestras clases escrita
al mismo tiempo que se genera el cdigo.
En este tipo de comentario para documentacin, se permite la introduccin de algunos tokens o
palabras clave, que harn que la informacin que les sigue aparezca de forma diferente al resto en la
documentacin.
Comentario de Documentacin
Comienza con /** y termina con */ son comentario especiales que javadoc utiliza para generar,
documentacin acerca del programa.
Ejemplo:
/** Programa Visor 3.11
San Salvador, El Salvador

Programacion para Principiantes JAVA

P g i n a | 52
Por ejemplo:

u????

[????] Es un nmero

Diciembre de 2006*/
OJO: JAVA, por defecto, hace que todas las literales de tipo Flotante, sean doubl. Para
especificarla como flotante, se debe agregar una f o una F al final del valor. Ejemplo: 12.85F,
8.75F
Luego de conocer lo que son los Literales de tipo cadena y cuales son, se especifican entre comillas
dobles. As: "Ejemplo de una cadena"; Adems, un literal de tipo String, puede contener una o ms
secuencias de escape. Por ejemplo, la secuencia de escape \n, se utiliza para cambiar de lnea. As:
"Manuel\nOrtez";
Si mandamos a imprimir esa literal, veremos el siguiente resultado:

Ejemplo: Note, las secuencias de escape que, tambin se pueden utilizar en ste mtodo
Import javax.swing.*;
class Mensaje1 {
public static void main (String args []) {
JOptionPane.showMessageDialog (null,"Manual de Java\nUna forma Facil de Aprender a
Programar\n\n\t\tDiciembre de 2006");
JOptionPane.showMessageDialog (null, "Creado por Manuel Ortez");
}
}
Leer Datos: Para leer los datos, usamos el mtodo ShowInputDialog, de la forma siguiente:
Var=JOptionPane.showInputDialog ("Mensaje");
Donde:
Var: es el nombre de la variable que hace referencia al valor ledo.
Mensaje: Es el mensaje que aparecer, en la caja de dilogo.
Pero debemos tener presente que, ste mtodo devuelve un tipo de dato String, por tal razn
cuando leamos un flotante, double, int, etc, debemos realizar la conversin.
Ejemplo: Se desea Crear una Mini-calculadora, que permita, sumar, restar y multiplicar dos nmeros
ingresados por el usuario.
import javax.swing.*;
class MiniCalcu{
public static void main (String args[]){

Programacin para Principiantes JAVA

P g i n a | 53
double n1, n2, resultado;//Estos son los numeros
String leer;//variable auxiliar con la cual leeremos los datos
leer=JOptionPane.showInputDialog("Escriba el primer Nmero");
//Esta es la forma para hacer el cambio de cadena a doble
n1=Double.parseDouble(leer);
leer=JOptionPane.showInputDialog("Escriba el primer Nmero");
n2=Double.parseDouble(leer);
resultado=n1+n2;
JOptionPane.showMessageDialog(null, "El resultado de la suma es: "+resultado);
resultado=n1-n2;
JOptionPane.showMessageDialog(null, "El resultado de la resta es: "+resultado);
resultado=n1*n2;
JOptionPane.showMessageDialog(null, "El resultado de la multiplicacin es: "+resultado);
resultado=n1/n2;
JOptionPane.showMessageDialog(null, "El resultado de la divisin es: "+resultado);
}
}
Ahora vamos a explicar el Ejemplo Anterior:
El lector, debe notar, la forma en que debe hacer la conversin de un carcter a un valor diferente.
Para el caso, la lnea 8 y 13, despus de haber ledo los valores correspondiente, hacemos el cambio
as:
N1=Double.parseDouble (leer);
Double, es la clase que contiene al tipo de dato double, luego se escribe el mtodo parse, y le pasamos
como argumento, la variable leer, que contiene el nmero (en cadena de caracteres), que deseamos
convertir a double.
Si queremos convertir a entero:

N1=Integer.parseInt(leer);
Si lo que queremos es convertirlo a float:
N1=Float.parseFloat(leer);

Sobrecarga
Cuando en una clase, se definen un mismo mtodo, con diferente nmero de parmetros, o bien con
el mismo nmero de parmetros pero diferencindose en la definicin, en la cual, al menos un
parmetro sea de diferente tipo, cuando esto sucede, se dice que el mtodo est sobrecargado.
Ejemplo: Cree una aplicacin en Java, que imprima un nmero imaginario. Nota, los nmeros
imaginarios, poseen una parte real y otra imaginaria, acompaada por la constante i.
class Imaginario {
private int real, imag;
public Imaginario()
{
real=0;
Programacion para Principiantes JAVA

P g i n a | 54
imag=0;
}
public Imaginario(int x, int y)
{
real=x;
imag=y;
}
public void Mostrar()
{
System.out.println("El Numero Imaginario es: "+real+" + "+imag+"i");
}
}

EXCEPCIONES
MANEJO DE EXCEPCIONES
Vamos a mostrar cmo se utilizan las excepciones, reconvirtiendo nuestro applets de saludo
a partir de la versin iterativa de HolaIte.java: Antes que nada vamos a explicar lo que es una
excepcin es una condicin anormal que surge en una secuencia de cdigo durante la ejecucin. La
gestin de excepciones lleva a la gestin de errores en tiempo de ejecucin. Cuando surge una
condicin excepcional se crea un objeto Exception. El trabajo con excepciones se realiza mediante
las siguientes palabras clave:

import java.awt.*;
import java.applet.Applet;
public class HolaIte extends Applet {
private int i = 0;
private String Saludos[] = {
"Hola Mundo!",
"HOLA Mundo!",
"HOLA MUNDO!!"
};
public void paint( Graphics g ) {
g.drawString( Saludos[i],25,25 );
i++;
}
}

Vamos a reescribir el mtodo paint () de nuestra versin iterativa del saludo:


public void paint( Graphics g ) {
try {
g.drawString( Saludos[i],25,25 );

Programacin para Principiantes JAVA

P g i n a | 55
} catch( ArrayIndexOutOfBoundsException e ) {
g.drawString( "Saludos desbordado",25,25 );
} catch( Exception e ) {
// Cualquier otra excepcin
System.out.println( e.toString() );
} finally {
System.out.println( "Esto se imprime siempre!" );
}
i++;
}

La palabra clave finally define un bloque de cdigo que se quiere que sea ejecutado siempre,
de acuerdo a si se captur la excepcin o no. En el ejemplo anterior, la salida en la consola,
con i=4 sera: Normalmente, un programa termina con un mensaje de error cuando se lanza una
excepcin. Sin embargo, Java tiene mecanismos para excepciones que permiten ver qu excepcin se
ha producido e intentar recuperarse de ella.
Normalmente, un programa termina con un mensaje de error cuando se lanza una excepcin. Sin
embargo, Java tiene mecanismos para excepciones que permiten ver qu excepcin se ha producido
e intentar recuperarse de ella.

GENERAR EXCEPCIONES
Cuando se produce un error se debera generar, o lanzar, una excepcin. Para que un mtodo en Java,
pueda lanzar excepciones, hay que indicarlo expresamente.
void MetodoAsesino() throws NullPointerException,CaidaException
Se pueden definir excepciones propias, no hay por qu limitarse a las predefinidas; bastar con
extender la clase Exception y proporcionar la funcionalidad extra que requiera el tratamiento de esa
excepcin. Tambin pueden producirse excepciones no de forma explcita como en el caso anterior,
sino de forma implcita cuando se realiza alguna accin ilegal o no vlida. Las excepciones, pues,
pueden originarse de dos modos: el programa hace algo ilegal (caso normal), o el programa
explcitamente genera una excepcin ejecutando la sentencia throw (caso menos normal). La
sentencia throw tiene la siguiente forma:
throw ObtejoExcepction;

El objeto ObjetoException es un objeto de una clase que extiende la clase Exception. El


siguiente cdigo de ejemplo origina una excepcin de divisin por cero:
class melon {
public static void main( String[] a ) {
int i=0, j=0, k;
k = i/j;
}

// Origina un error de division-by-zero

Si compilamos y ejecutamos esta aplicacin Java, obtendremos la siguiente salida por


pantalla:
Programacion para Principiantes JAVA

P g i n a | 56
> javac melon.java
> java melon
java.lang.ArithmeticException: / by zero
at melon.main(melon.java:5)

Las excepciones predefinidas, como ArithmeticException, se conocen como excepciones runtime.


Actualmente, como todas las excepciones son eventos runtime, sera mejor llamarlas excepciones
irrecuperables. Esto contrasta con las excepciones que generamos explcitamente, que suelen ser
mucho menos severas y en la mayora de los casos podemos recuperarnos de ellas. Por ejemplo, si un
fichero no puede abrirse, preguntamos al usuario que nos indique otro fichero; o si una estructura de
datos se encuentra completa, podremos sobreescribir algn elemento que ya no se necesite.
EXCEPCIONES PREDEFINIDAS

Las excepciones predefinidas y su jerarqua de clases es la que se muestra en la figura:

Los nombres de las excepciones indican la condicin de error que representan. Las siguientes son
las excepciones predefinidas ms frecuentes que se pueden encontrar:
ArithmeticException

Las excepciones aritmticas son tpicamente el resultado de una divisin por 0:


int i = 12 / 0;

NullPointerException

Se produce cuando se intenta acceder a una variable o mtodo antes de ser definido:
class Hola extends Applet {
Image img;
paint( Graphics g ) {
g.drawImage( img,25,25,this );
}
}

Programacin para Principiantes JAVA

P g i n a | 57
IncompatibleClassChangeException

El intento de cambiar una clase afectada por referencias en otros objetos, especficamente
cuando esos objetos todava no han sido recompilados.
ClassCastException

El intento de convertir un objeto a otra clase que no es vlida.


y = (Prueba) x;
// donde
X no es de tipo Prueba

NegativeArraySizeException

Puede ocurrir si hay un error aritmtico al intentar cambiar el tamao de un array.


OutOfMemoryException

No debera producirse nunca! El intento de crear un objeto con el operador new ha fallado
por falta de memoria. Y siempre tendra que haber memoria suficiente porque el garbage
collector se encarga de proporcionarla al ir liberando objetos que no se usan y devolviendo
memoria al sistema.
NoClassDefFoundException

Se referenci una clase que el sistema es incapaz de encontrar.


ArrayIndexOutOfBoundsException

Es la excepcin que ms frecuentemente se produce. Se genera al intentar acceder a un


elemento de un array ms all de los lmites definidos inicialmente para ese array.
UnsatisfiedLinkException

Se hizo el intento de acceder a un mtodo nativo que no existe. Aqu no existe un mtodo
a.kk
class A {
native void kk();
}

InternalException

Este error se reserva para eventos que no deberan ocurrir. Por definicin, el usuario nunca
debera ver este error y esta excepcin no debera lanzarse.
CREAR EXCEPCIONES

Programacion para Principiantes JAVA

P g i n a | 58

Tambin podemos lanzar nuestras propias excepciones, extendiendo la clase


System.exception. Por ejemplo, consideremos un programa cliente/servidor. El cdigo
cliente se intenta conectar al servidor, y durante 5 segundos se espera a que conteste el
servidor. Si el servidor no responde, el servidor lanzara la excepcin de time-out:
class ServerTimeOutException extends Exception {}
public void conectame( String nombreServidor ) throws Exception {
int exito;
int puerto = 80;
exito = open( nombreServidor,puerto );
if( exito == -1 )
throw ServerTimeOutException;
}

Si se quieren capturar las propias excepciones, se deber utilizar la sentencia try:


public void encuentraServidor() {
...
try {
conectame( servidorDefecto );
catch( ServerTimeOutException e ) {
g.drawString(
"Time-out del Servidor, intentando alternativa",
5,5 );
conectame( servidorAlterno );
}
...
}

Cualquier mtodo que lance una excepcin tambin debe capturarla, o declararla como
parte de la interface del mtodo. Cabe preguntarse entonces, el porqu de lanzar una
excepcin si hay que capturarla en el mismo mtodo. La respuesta es que las excepciones
no simplifican el trabajo del control de errores. Tienen la ventaja de que se puede tener muy
localizado el control de errores y no tenemos que controlar millones de valores de retorno,
pero no van ms all.
CAPTURAR EXCEPCIONES
Las excepciones lanzadas por un mtodo que pueda hacerlo deben recoger en bloque
try/catch o try/finally.
int valor;
try {
for( x=0,valor = 100; x < 100; x ++ )
valor /= x;
}
catch( ArithmeticException e ) {
System.out.println( "Matemticas locas!" );
}
catch( Exception e ) {

Programacin para Principiantes JAVA

P g i n a | 59
System.out.println( "Se ha producido un error" );
}

Try: Es el bloque de cdigo donde se prev que se genere una excepcin. Es como si dijsemos
"intenta estas sentencias y mira a ver si se produce una excepcin". El bloque try tiene que ir seguido,
al menos, por una clusula catch o una clusula finally
Catch: Es el cdigo que se ejecuta cuando se produce la excepcin. Es como si dijsemos "controlo
cualquier excepcin que coincida con mi argumento". En este bloque tendremos que asegurarnos de
colocar cdigo que no genere excepciones. Se pueden colocar sentencias catch sucesivas, cada una
controlando una excepcin diferente. No debera intentarse capturar todas las excepciones con una
sola clusula, como esta:
catch( Excepcion e ) { ...

Esto representara un uso demasiado general, podran llegar muchas ms excepciones de las
esperadas. En este caso es mejor dejar que la excepcin se propague hacia arriba y dar un mensaje de
error al usuario.

Se pueden controlar grupos de excepciones, es decir, que se pueden controlar, a travs del
argumento, excepciones semejantes. Por ejemplo:
class Limites extends Exception {}
class demasiadoCalor extends Limites {}
class demasiadoFrio extends Limites {}
class demasiadoRapido extends Limites {}
class demasiadoCansado extends Limites {}
.
.
.
try {
if( temp > 40 )
throw( new demasiadoCalor() );
if( dormir < 8 )
throw( new demasiado Cansado() );
} catch( Limites lim ) {
if( lim instanceof demasiadoCalor )
{
System.out.println( "Capturada excesivo calor!" );
return;
}
if( lim instanceof demasiadoCansado )
{
System.out.println( "Capturada excesivo cansancio!" );
return;
}
} finally
System.out.println( "En la clausula finally" );

La clusula catch comprueba los argumentos en el mismo orden en que aparezcan en el


programa. Si hay alguno que coincida, se ejecuta el bloque. El operador instanceof se
utiliza para identificar exactamente cual ha sido la identidad de la excepcin.
Finally: Es el bloque de cdigo que se ejecuta siempre, haya o no excepcin. Hay una cierta
controversia entre su utilidad, pero, por ejemplo, podra servir para hacer un log o un
Programacion para Principiantes JAVA

P g i n a | 60

seguimiento de lo que est pasando, porque como se ejecuta siempre puede dejarnos grabado
si se producen excepciones y nos hemos recuperado de ellas o no. Este bloque finally puede
ser til cuando no hay ninguna excepcin. Es un trozo de cdigo que se ejecuta
independientemente de lo que se haga en el bloque try.
Cuando vamos a tratar una excepcin, se nos plantea el problema de qu acciones vamos a
tomar. En la mayora de los casos, bastar con presentar una indicacin de error al usuario y
un mensaje avisndolo de que se ha producido un error y que decida si quiere o no
continuar con la ejecucin del programa.
Por ejemplo, podramos disponer de un dilogo como el que se presenta en el cdigo
siguiente:
public class DialogoError extends Dialog {
DialogoError( Frame padre ) {
super( padre,true );
setLayout( new BorderLayout() );
// Presentamos un panel con continuar o salir
Panel p = new Panel();
p.add( new Button( "Continuar?" ) );
p.add( new Button( "Salir" ) );
add( "Center",new Label(
"Se ha producido un error. Continuar?" ) )
add( "South",p );
}
public boolean action( Event evt,Object obj ) {
if( "Salir".equals( obj ) )
{
dispose();
System.exit( 1 );
}
return false;
}
}

Y la invocacin, desde algn lugar en que se suponga que se generarn errores, podra ser
como sigue:
try {
// Cdigo peligroso
}
catch( AlgunaExcepcion e ) {
VentanaError = new DialogoError( this );
VentanaError.show();
}

PROPAGACION DE EXCEPCIONES
La clusula catch comprueba los argumentos en el mismo orden en que aparezcan en el programa. Si
hay alguno que coincida, se ejecuta el bloque y sigue el flujo de control por el bloque finally (si lo

Programacin para Principiantes JAVA

P g i n a | 61
hay) y concluye el control de la excepcin. Si ninguna de las clusulas catch coincide con la
excepcin que se ha producido, entonces se ejecutar el cdigo de la clusula finally (en caso de que
la haya). Lo que ocurre en este caso, es exactamente lo mismo que si la sentencia que lanza la
excepcin no se encontrase encerrada en el bloque try. El flujo de control abandona este mtodo y
retorna prematuramente al mtodo que lo llam. Si la llamada estaba dentro del mbito de una
sentencia try, entonces se vuelve a intentar el control de la excepcin, y as continuamente.
Veamos lo que sucede cuando una excepcin no es tratada en la rutina en donde se produce. El sistema
Java busca un bloque try...Catch ms all de la llamada, pero dentro del mtodo que lo trajo aqu. Si
la excepcin se propaga de todas formas hasta lo alto de la pila de llamadas sin encontrar un
controlador especfico para la excepcin, entonces la ejecucin se detendr dando un mensaje. Es
decir, podemos suponer que Java nos est proporcionando un bloque catch por defecto, que imprime
un mensaje de error y sale.

No hay ninguna sobrecarga en el sistema por incorporar sentencias try al cdigo. La


sobrecarga se produce cuando se genera la excepcin.
Hemos dicho ya que un mtodo debe capturar las excepciones que genera, o en todo caso, declararlas
como parte de su llamada, indicando a todo el mundo que es capaz de generar excepciones. Esto debe
ser as para que cualquiera que escriba una llamada a ese mtodo est avisado de que le puede llegar
una excepcin, en lugar del valor de retorno normal. Esto permite al programador que llama a ese
mtodo, elegir entre controlar la excepcin o propagarla hacia arriba en la pila de llamadas. La
siguiente lnea de cdigo muestra la forma general en que un mtodo declara excepciones que se
pueden propagar fuera de l:
tipo_de_retorno( parametros ) throws e1,e2,e3 { }

Los nombres e1,e2,... deben ser nombres de excepciones, es decir, cualquier tipo que sea
asignable al tipo predefinido Throwable . Observar que, como en la llamada al mtodo se
especifica el tipo de retorno, se est especificando el tipo de excepcin que puede generar
(en lugar de un objeto exception).
He aqu un ejemplo, tomado del sistema Java de entrada/salida:
byte readByte() throws IOException;
short readShort() throws IOException;
char readChar() throws IOException;
void writeByte( int v ) throws IOException;
void writeShort( int v ) throws IOException;
void writeChar( int v ) throws IOException;

Lo ms interesante aqu es que la rutina que lee un char, puede devolver un char; no el
entero que se requiere en C. C necesita que se devuelva un int, para poder pasar cualquier
valor a un char, y adems un valor extra (-1) para indicar que se ha alcanzado el final del
fichero. Algunas de las rutinas Java lanzan una excepcin cuando se alcanza el fin del
fichero.

Programacion para Principiantes JAVA

P g i n a | 62

En el siguiente diagrama se muestra grficamente cmo se propaga la excepcin que se


genera en el cdigo, a travs de la pila de llamadas durante la ejecucin del cdigo:

Cuando se crea una nueva excepcin, derivando de una clase Exception ya existente, se
puede cambiar el mensaje que lleva asociado. La cadena de texto puede ser recuperada a
travs de un mtodo. Normalmente, el texto del mensaje proporcionar informacin para
resolver el problema o sugerir una accin alternativa. Por ejemplo:
class SinGasolina extends Exception {
SinGasolina( String s ) {
// constructor
super( s );
}
....
// Cuando se use, aparecer algo como esto
try {
if( j < 1 )
Throw new SinGasolina (Usando deposito de reserva" );
} catch (SinGasolina e) {
System.out.println (o.getMessage ());
}

Esto, en tiempo de ejecucin originara la siguiente salida por pantalla:


> Usando depsito de reserva

Otro mtodo que es heredado de la superclase Throwable es printStackTrace (). Invocando


a este mtodo sobre una excepcin se volcar a pantalla todas las llamadas hasta el
momento en donde se gener la excepcin (no donde se maneje la excepcin). Por ejemplo:
// Capturando una excepcin en un mtodo
class testcap {
static int slice0[] = { 0,1,2,3,4 };
public static void main( String a[] ) {
try {

Programacin para Principiantes JAVA

P g i n a | 63
uno();
} catch( Exception e ) {
System.out.println( "Captura de la excepcion en main()" );
e.printStackTrace();
}
}
static void uno() {
try {
slice0[-1] = 4;
} catch( NullPointerException e ) {
System.out.println( "Captura una excepcion diferente" );
}
}
}

Cuando se ejecute ese cdigo, en pantalla observaremos la siguiente salida:


> Captura de la excepcion en main()
> java.lang.ArrayIndexOutOfBoundsException: -1
at testcap.uno(test5p.java:19)
at testcap.main(test5p.java:9)

Con todo el manejo de excepciones podemos concluir que proporciona un mtodo ms


seguro para el control de errores, adems de representar una excelente herramienta para
organizar en sitios concretos todo el manejo de los errores y, adems, que podemos
proporcionar mensajes de error ms decentes al usuario indicando qu es lo que ha fallado
y por qu, e incluso podemos, a veces, recuperarnos de los errores. La degradacin que se
produce en la ejecucin de programas con manejo de excepciones est ampliamente
compensada por las ventajas que representa en cuanto a seguridad de funcionamiento de
esos mismos programas.

Mtodos y Constructores
Un Constructor es una funcin, mtodo, etc, de las clases, la cual es llamada automticamente cuando
se crea un objeto de esa clase. Por ser mtodos, los constructores tambin aceptan parmetros. Cuando
en una clase no especificamos ningn tipo de constructor, el compilador aade uno pblico por
omisin sin parmetros, el cual NO hace nada. Cuando se declara una clase en Java, se pueden
declarar uno o ms constructores opcionales que realizan la inicializacin cuando se instancia (se crea
una ocurrencia) un objeto de dicha clase.
Utilizando el cdigo de ejemplo anterior, cuando se crea una nueva instancia de MiClase, se crean
(instancian) todos los mtodos y variables, y se llama al constructor de la clase:
MiClase mc;
mc = new MiClase();
La palabra clave new se usa para crear una instancia de la clase. Antes de ser instanciada con new no
consume memoria, simplemente es una declaracin de tipo. Despus de ser instanciado un nuevo
objeto mc, el valor de i en el objeto mc ser igual a 10. Se puede referenciar la variable (de instancia)
i con el nombre del objeto:

Programacion para Principiantes JAVA

P g i n a | 64
mc.i++; // incrementa la instancia de i de mc

Al tener mc todas las variables y mtodos de MiClase, se puede usar la primera sintaxis
para llamar al mtodo Suma_a_i() utilizando el nuevo nombre de clase mc:
mc.Suma_a_i( 10 );

Y ahora la variable mc.i vale 21.


Caractersticas de los Constructores
Un constructor, tiene el mismo nombre de la clase a la cual pertenece.
No puede ser Heredado.
No retorna ningn valor (Ni void), por lo cual no debe especificarse ningn tipo de dato.
Debe declararse como public, slo en casos realmente extraordinarios ser de otro tipo.
Supongamos una clase llamada Datos
public class Datos
{
//declaracion de atributos
public Datos();//constructor sin parametros
public Datos(int Edad)
{//Constructor con parmetros
EdadM=Edad;
}
}
Ejemplo: Se Desea crear un objeto del tipo Coordenadas, que indique, la posicin de un punto en el
plano cartesiano, y permita calcular la distancia existente con otro punto, adems del punto medio
entre ellos.
/*Archivo Coordenadas.java*/
public class Coordenadas {
private int x,y;//Atributos
public Coordenadas (int x1 , int y1)//constructor
{
//asignamos esos valores
x=x1;
y=y1;
}
public double Distancia (int x1, int y1)
{
//este mtodo recibe como parametros
//las coordenadas del segundo punto
double D;
D=Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
return D;//Retornamops el valor de la distancia

Programacin para Principiantes JAVA

P g i n a | 65
}
public void Pmedio(int x1, int y1)
{
double p1, p2;
p1=(x+x1)/2;
p2=(y+y1)/2;
System.out.println("El puntomedio es: "+p1+","+p2);
}
}
Ahora vamos a explicar el Ejemplo Anterior:
Un mtodo, si va a devolver algn valor, ste debe especificarse cuando se hace la definicin del
mismo, para el caso, el mtodo Distancia, devuelve el valor de la distancia, es por ello que lo
especificamos como public double. Adems que, cuando realizamos la llamada de ese mtodo, es en
ese preciso lugar que aparecer el valor que devuelve. Por otra parte, los atributos, son de acceso
privado, lo cual implica que, slo podemos acceder a ellos, en la clase Coordenadas.

ARRAYS
Los arreglos en Java son dinmicos, pero no extensibles, lo cual significa que deben ser creados con
el tamao que tendrn hasta el final de su vida. Algunas de sus caractersticas ms importantes de
los arrays son las siguientes:

Los arrays se crean con el operador new seguido del tipo y nmero de elementos.
Se puede acceder al nmero de elementos de un array con la variable miembro implcita
length (por ejemplo, vect.length).
Se accede a los elementos de un array con los corchetes [] y un ndice que vara de lengthSe pueden crear arrays de objetos de cualquier tipo. En principio un array de objetos es un
array de referencias que hay que completar llamando al operador new.
Los elementos de un array se inicializan al valor por defecto del tipo correspondiente (cero
para valores numricos, el carcter nulo para char, false para boolean, null para Strings y
para referencias).
Como todos los objetos, los arrays se pasan como argumentos a los mtodos por
referencia.
Se pueden crear arrays annimos (por ejemplo, crear un nuevo array como argumento
actual en la llamada a un mtodo).

Luego podemos mostrar cmo se declara un array de la siguiente forma:


<Tipo> [] <nombre>;

Se pueden declarar en Java arrays de cualquier tipo:


char s[];

Programacion para Principiantes JAVA

P g i n a | 66
int iArray[];

Incluso se pueden construir arrays de arrays:


int tabla[][] = new int[4][5];

Los lmites de los arrays se comprueban en tiempo de ejecucin para evitar


desbordamientos y la corrupcin de memoria. En Java un array es realmente un objeto,
porque tiene redefinido el operador []. Tiene una funcin miembro: length. Se puede
utilizar este mtodo para conocer la longitud de cualquier array.
int a[][] = new int[10][3];
a.length;
/* 10 */
a[0].length;
/* 3 */

Para crear un array en Java hay dos mtodos bsicos. Crear un array vaco:
int lista[] = new int[50];

O se puede crear ya el array con sus valores iniciales:


String nombres [] = {
"Juan","Pepe","Pedro","Maria"
};

Esto que es equivalente a:


String nombres [];
Nombres = new String [4];
Nombres [0] = new String (Juan);
nombres [1] = new String( "Pepe" );
nombres[2] = new String( "Pedro" );
nombres[3] = new String( "Maria" );

No se pueden crear arrays estticos en tiempo de compilacin:


int lista[50];

// generar un error en tiempo de compilacin

Tampoco se puede rellenar un array sin declarar el tamao con el operador new:
int lista[];
for( int i=0; i < 9; i++ )
lista[i] = i;

Es decir, todos los arrays en Java son estticos. Para convertir un array en el equivalente a
un array dinmico en C/C++, se usa la clase vector, que permite operaciones de insercin,
borrado, etc. en el array.
O sea, para declarar, por ejemplo, un arreglo de nmeros enteros utilizaremos la siguiente
sentencia:
Programacin para Principiantes JAVA

P g i n a | 67
int[] arrInt;
Es importante notar que el arreglo an no ha sido creado, sino meramente declarado. Para crear el
arreglo (reservar su memoria e inicializarlo) deberemos recurrir al operador new:
arrInt = new int[10];
Este comportamiento debe comprenderse de esta forma: en Java todo es un objeto, y los objetos deben
ser creados mediante el operador new. El caso de los arreglos no es diferente, el tipo de datos del
arreglo (int [] en este caso) es una clase y cada una de sus instancias debe ser creada explcitamente,
el tamao puede pensarse como un parmetro al constructor de la clase.
A partir de este momento podemos utilizar arrInt como un arreglo de cualquier otro lenguaje. Una de
las caractersticas que hacen de Java un entorno de programacin seguro, y que se relaciona con el
manejo de los arreglos es que el lenguaje no permite la indexacin de arreglos fuera de rango, o sea,
una asignacin de este tipo generar una excepcin:
ArrInt[25] = 1;
Otra forma de declararlos es la siguiente:
UNIDIMENSIONALES:
tipo nombre_array[]=new tipo[n];
tipo nombre_array[]={valores};
BIDIMENSIONALES:
tipo nombre_array[][]=new tipo[n][n];
tipo nombre_array[][]={valores};
Como de deben de Realizar los arrays:
Los arrays se pueden inicializar con valores entre llaves {...} separados por comas.
Tambin los arrays de objetos se pueden inicializar con varias llamadas a new dentro de
unas llaves {...}.
Si se igualan dos referencias a un array no se copia el array, sino que se tiene un array con
dos nombres, apuntando al mismo y nico objeto.
Creacin de una referencia a un array. Son posibles dos formas:
double[] x; // preferible
double x[];
Creacin del array con el operador new:
x = new double[100];
Las dos etapas 4 y 5 se pueden unir en una sola:
double[] x = new double[100];
Ejemplo: Se sabe que la velocidad de un proyectil est dada por la ecuacin, en forma vectorial: V=
ai+ bj+ ck. Disee una aplicacin que sea capaz de leer los valores de las constantes a, b y c. y
muestre la magnitud y direccin de dicho proyectil.

Programacion para Principiantes JAVA

P g i n a | 68
import javax.swing.*;
public class Proyectil{
public static void main (String args []){
String leer;
double magnitud, direccion, sum;
double vector[]=new double[3];
int ban=1;
while(ban==1)//miestras hayan datos a procesar
{
//leemos el valor de las constantes
leer=JOptionPane.showInputDialog("Ingrese el valor de a:");
vector[0]=Double.parseDouble(leer);
leer=JOptionPane.showInputDialog("Ingrese el valor de b:");
vector[1]=Double.parseDouble(leer);
leer=JOptionPane.showInputDialog("Ingrese el valor de c:");
vector[2]=Double.parseDouble(leer);
//calculamos la magnitud
//la cual es la raz cuadrada de las suma+
//de las componentes al cuadrado
sum=(vector[0]*vector[0])+(vector[1]*vector[1])+(vector[2]*vector[2]);
magnitud=Math.sqrt(sum);
//La direccin viene dada por la tangente inversa
//del cociente de las componentes x,y
direccion=Math.atan(vector[1]/vector[0]);
JOptionPane.showMessageDialog(null, "El valor de la magnitud es: "+magnitud+"\n y con un
angulo direccional de: "+direccion+" Radianes");
leer=JOptionPane.showInputDialog("Hay ms datos a procesar?\n\nSi=1 y No=0");
ban=Integer.parseInt(leer);
}//del while
}//del main
}//de la clase
Ejemplo: Se tienen las notas de 5 exmenes de 10 alumnos, y se desea promediar la nota final de
cada uno de ellos. Disee una aplicacin que solucione este problema.
import javax.swing.*;
public class MatrizNotas{
public static void main (String args []) {
int f,c;
double suma, promedio;
double notas [][]=new double[10][5];
String leer;
for(f=0; f<10; f++)//las filas
{
suma=0;

Programacin para Principiantes JAVA

P g i n a | 69
for(c=0; c<5; c++)
{
leer=JOptionPane.showInputDialog("Ingrese la nota: "+c+" del alumno: "+f);
notas[f][c]=Double.parseDouble(leer);
while(notas[f][c]>10 || notas [f][c]<0)
{
leer=JOptionPane.showInputDialog("Ingrese la nota: "+c+" del alumno: "+f);
notas[f][c]=Double.parseDouble(leer);
}
suma=suma+notas[f][c];
}
promedio=suma/5;
JOptionPane.showMessageDialog(null, "El alumno, tiene un promedio de: "+promedio);
}
}
}
OJO: Los arreglos en JAVA, se tratan de la misma forma que en C/C++, pero la nica
diferencia que existe es que, se debe creae (new). Adems que, al hacer eso, JAVA inicializa los
arreglos (u objetos9 a cero (o su correspondiente equivalente a cero: null, cero, etc).

REFERENCIAS Y LISTAS
Las referencias en Java no son punteros ni referencias como en C++. Este hecho crea un poco de
confusin entre los programadores que llegan por primera vez a Java. Las referencias en Java son
identificadores de instancias de las clases Java. Una referencia dirige la atencin a un objeto de un
tipo especfico. No tenemos por qu saber cmo lo hace ni necesitamos saber qu hace ni, por
supuesto, su implementacin. Pensemos en una referencia como si se tratase de la llave electrnica
de la habitacin de un hotel. Vamos a utilizar precisamente este ejemplo del Hotel para demostrar el
uso y la utilizacin que podemos hacer de las referencias en Java. Primero crearemos la clase
Habitacion, implementada en el fichero Habitacion.java, mediante instancias de la cual
construiremos nuestro Hotel:
public class Habitacion {
private int numHabitacion;
private int numCamas;
public Habitacion() {
habitacion( 0 );
}
public Habitacion( int numeroHab ) {
habitacion( numeroHab );
}
public Habitacion( int numeroHab,int camas ) {
habitacion( numeroHab );
camas( camas );
}
public synchornized int habitacion() {
return( numHabitacion );
}
public synchronized void habitacion( int numeroHab ) {
numHabitacion = numeroHab;

Programacion para Principiantes JAVA

P g i n a | 70
}
public synchronized int camas() {
return( camas );
}
public syncronized void camas( int camas ) {
numCamas = camas;
}
}

El cdigo anterior sera el corazn de la aplicacin. Vamos pues a construir nuestro Hotel
creando Habitaciones y asignndole a cada una de ellas su llave electrnica; tal
comomuestra el cdigo siguiente, Hotel1.java:
public class Hotel1 {
public static void main( String args[] ) {
Habitacion llaveHab1;
Habitacion llaveHab2;
llaveHab1 = new Habitacion ( 222 );
4 y 5
llaveHab2 = new Habitacion ( 1144,3 );
//
^^^^^^^^^
^^^^^^^^^^^^^^ ^^^^^^
//
A
B y D
C
}
}

// paso 1
// pasos 2, 3,

Para explicar el proceso, dividimos las acciones en los cinco pasos necesarios para
poder entrar en nuestra habitacin. Aunque no se incluye, podemos tambin
considerar el caso de que necesitemos un cerrajero, para que cuando perdamos la
llave, nos abra la puerta; y que en nuestro caso sera el garbage collector, que recicla
la habitacin una vez que se hayan perdido todas las llaves.
El primer paso es la creacin de la llave, es decir, definir la variable referencia, por
defecto nula.
El resto de los pasos se agrupan en una sola sentencia Java. La parte B en el cdigo
anterior indica al gerente del Hotel que ya dispone de una nueva habitacin. La parte
C llama al decorador de interiores para que " vista " la habitacin segn un patrn
determinado, para que no desentonen unas habitaciones con otras y no se pierdan las
seas de identidad del hotel. El cdigo electrnico que nos permitir acceder a la
habitacin se genera en la parte D, una vez conocido el interior de la habitacin y se
programa en la llave en la parte A.
Si dejamos el ejemplo real a un lado y nos vamos a lo que ocurre en la ejecucin del
cdigo, vemos que el operador new busca espacio para una instancia de un objeto de
una clase determinada e inicializa la memoria a los valores adecuados. Luego invoca
al mtodo constructor de la clase, proporcionndole los argumentos adecuados. El
operador new devuelve una referencia a s mismo, que es inmediatamente asignada a
la variable referencia.
Podemos tener mltiples llaves para una misma habitacin:
. . . Habitacion llaveHab3,llaveHab4; llaveHab3 = llaveHab1; llaveHab4 = llavehab2;
De este modo conseguimos copias de las llaves. Las habitaciones en s mismas no se
han tocado en este proceso. As que, ya tenemos dos llaves para la habitacin 222 y
otras dos para la habitacin 1144.

Programacin para Principiantes JAVA

P g i n a | 71

Una llave puede ser programada para que funcione solamente con una habitacin en
cualquier momento, pero podemos cambiar su cdigo electrnico para que funcione
con alguna otra habitacin; por ejemplo, para cambiar una habitacin anteriormente
utilizada por un empedernido fumador por otra limpia de olores y con vistas al mar.
Cambiemos pues la llave duplicada de la habitacin del fumador (la 222) por la
habitacin con olor a sal marina, 1144:
. . . llaveHab3 = llaveHab2;
Ahora tenemos una llave para la habitacin 222 y tres para la habitacin 1144.
Mantendremos una llave para cada habitacin en la conserjera, para poder utilizarla
como llave maestra, en el caso de que alguien pierda su llave propia.
Alguien con la llave de una habitacin puede hacer cambios en ella, y los compaeros
que tengan llave de esa misma habitacin, no tendrn conocimiento de esos cambios
hasta que vuelvan a entrar en la habitacin. Por ejemplo, vamos a quitar una de las
camas de la habitacin, entrando en ella con la llave maestra:
. . . llaveHab2.camas ( 2 );
Ahora cuando los inquilinos entren en la habitacin podrn comprobar el cambio
realizado:
llaveHab4.printData ();
Mediante la clase List crearemos el objeto. Este tipo de lista puede admite ms de una seleccin, el
orden de sus elementos es segn han sido aadidos. Los miembros son los mismos que en el control
anterior solo cambia el modo de construirlos. En este control aparecen unas barras de desplazamiento
verticales automticamente.
CREAR:
List nombre_objeto=new List(0,true); mltiple seleccin.
List nombre_objeto=new List(0,false); seleccin simple.
EJEMPLO:
import java.awt.*;
import java.applet.*;
public class lista extends Applet{
Label eti1=new Label("",Label.LEFT);
Label eti2=new Label("",Label.LEFT);
Button mira=new Button("Mostrar");
List lista=new List(0,true);
public void init(){
setLayout(null);
add(eti1);
add(eti2);
add(mira);
add(lista);
eti1.reshape(120,10,40,50);
eti2.reshape(160,10,40,50);
mira.reshape(10,90,75,40);

Programacion para Principiantes JAVA

P g i n a | 72
lista.reshape(10,10,100,75);
lista.addItem("Uno");
lista.addItem("Dos");
lista.addItem("Tres");
lista.addItem("Cuatro");
lista.addItem("Cinco");
lista.addItem("Seis");
}
public boolean action(Event evento,Object obj)
{
if (evento.target instanceof Button)
{
int num=lista.getSelectedIndex();
String cad1=lista.getSelectedItem();
String cad2=String.valueOf(num);
eti1.setText(cad2);
eti2.setText(cad1);
return true;
// int num1=lista.countItems();
// String cad2=String.valueOf(num1);
// eti1.setText(cad2);
}
return false;
}
}

Grficos en Java
Elementos Estamos a punto de iniciar uno de los aspectos ms llamativos de Java, como lo es la
parte grfica, el tratamiento de imgenes En muchas pginas web, nos llaman la atencin las
animaciones, sonidos, y aspectos grficos de las mismas. Y muchos de esos efectos han sido creados
en Java, o al menos la base de los
g.drawImage (img1, 20, 20, this);
Componentes Un Componente es un elemento visual con el cual el usuario puede interactuar a
travs del ratn o el teclado; mientras que un contenedor, es un rea visual, en la cual se encuentran
los componentes.
Ejemplo de Componentes:

Rtulo: es un rea en la cual se puede colocar texto NO editable.


Botn: Es un rea que dispara un evento al dar clic sobre l.
Lista: Es un rea en la cual se exhiben una serie de elementos.
Campo de Texto: Es un rea en la cual el usuario puede ingresar informacin mediante el
teclado.
Programacin para Principiantes JAVA

P g i n a | 73
Las clases que vamos a usar para crear los componentes, forman parte del paquete java.awt.
PORCIN DE LA JERARQUIA DE JAVA.AWT

Toda clase que hereda de la clase Component es un componente. Cualquier clase que hereda de la
clase Container es un contenedor. Un contenedor es un rea en la que podemos colocar
componentes.
Rtulos Como Ya se dijo, en los rtulos podemos colocar texto no editable. Un rtulo se crea a partir
de la clase Label. Dicha clase tiene dos constructores:

Public Label(); El cual construye un rtulo vaco que no exhibe ningn texto.
Public Label (String S); El cual construye un rtulo con el texto S.

Mtodos:
public String getText()
Devuelve el texto del rtulo.
public void setText( String s)
Fija el texto del rtulo
Ejemplo: Muestra el uso de los Labels.
import java.awt.*;
import javax.swing.*;
public class UsaLabel extends JApplet {
Label rotulo1, rotulo2, rotulo3;
public void init()
{
//inicializamos los rtulos
rotulo1=new Label();//rotulo vaco
rotulo2=new Label("Este es un Rtulo");
/*ahora debemos agregar estos componentes al
contenedor, lo que se hace mediante la
instruccin add*/
add(rotulo1);
add(rotulo2);

Programacion para Principiantes JAVA

P g i n a | 74
}//del init
}//del Applet

Botones
Los Botones disparan un evento (accin), cuando son accionados (al dar un clic sobre l). Los
botones se construyen mediante la Clase Button:
Public Button(); //Crea un Botn sin rtulo
Public Button(String S); //Crea un Botn con el rtulo S
Para asociar los controles como botones, listas, casillas, etc... a un mtodo debemos implementar
el mtodo action. En dicho mtodo deberemos escribir las acciones que van a realizar cada uno de
los controles que tengamos en el applet, teniendo en cuenta lo siguiente. El mtodo action recibe
dos parmetros, el primero es un objeto de la clase Event que recoge el evento producido en el
applet. El segundo es un objeto de la clase Object que recoge cual a sido el control que a producido
la accin. Con estos dos objetos lo primero que debemos escribir en el mtodo action son sentencias
if para determinar el tipo de control que a producido la accin (lnea 1). Si hay ms controles del
mismo tipo, deberemos distinguir uno de otro con ms sentencias if dentro de cada if que gestiona
el tipo de control (lnea 2). Por ltimo, cada uno de estos if deben llevar una sentencia return true
para indicar que todo ha ido bien (lineal). Al final del mtodo se debe incluir la sentencia return false
para no hacer nada en caso de que la accin realizada no tenga inters para nuestra aplicacin (lnea
4).
public boolean action(Event nombre_ev, Object nombre_obj) {
if (nombre_ev.target instanceof Button) {
cuerpo con if para cada uno de ese tipo;
return true; }
return false;}
Ejemplo:
Muestra como usar los botones.
//creacion de botones para pulsar
import java.awt.*;
import java.applet.Applet;
public class MisBotones extends Applet
{
private Button boton1, boton2, boton3;
public void init()
{
boton1 = new Button("Pulse aqui");
boton2 = new Button("Yo no hago nada");
boton3 = new Button("Sin rotulo");
//agregar botones

Programacin para Principiantes JAVA

P g i n a | 75
add(boton1);
add(boton2);
add(boton3);
}
//manejar los eventos de boton
public boolean action (Event e, Object o)
{
//verificar si un boton disparo el evento
if (e.target instanceof Button) {
//comprobar si se pulso boton1 o boton2
//no se hara nada si se pulso boton2
// En o se guarda el nombre del boton que se puls
if (e.target == boton1)
showStatus ("Usted pulso: "+ o.toString());
else if (e.target == boton3)
showStatus ("Usted pulso: "+ e.arg);
return true; //el evento se manejo aqui
}
return true;
}
}
Campos de Texto
TextField implementa un rea de entrada de texto de una sola lnea. Todo aquello que escribimos en
una caja de texto es de tipo String por tanto si queremos realizar operaciones matemticas deberemos
transformarlo a un valor numrico.
CREACIN:
TextField nombre_objeto=new TextField (ancho);
Add (nombre_objeto);
POSICIONAMIENTO:
nombre_objeto.reshape(x, y, ancho, alto);
GUARDAR TEXTO: valido para etiquetas.
Variable=nombre_objeto.getText ();
MOSTRAR TEXTO: valido para etiquetas.
nombre_objeto.setText (variable);
Ejemplo:
import java.awt.*;
import javax.swing.*;
public class Contrsena extends JApplet {
Programacion para Principiantes JAVA

P g i n a | 76
Label rotulo;
Button boton1;
TextField text1;
public void init()
{
rotulo=new Label("Ingrese su contrasea");
text1=new TextField(10);
boton1=new Button("Aceptar");
add(rotulo);
add(text1);
add(boton1);
}
public boolean action ( Event e, Object o)
{
if(e.target instanceof Button)
if(e.target==boton1)
{
String password=text1.getText();
if(password.equals("Carolina"))
JOptionPane.showMessageDialog(null, "Contrasea Correcta");
else
JOptionPane.showMessageDialog(null, "Contrasea Incorrecta");
}
return true;
}
}

Interfaces
Vulvalo a Compilar y Ejectelo.
Una interfaz, pareceriera que no tiene ningn tipo de aplicacin o implementacin, dentro de los
programas que, creamos en Java. Sin embargo no es as. Ya que, una interfaz indica, como ser la
"apariencia", que la clase tendr. Adems que, establece cierto "protocolo" entre las clases.
Para declarar una clase haremos uso de la palabra reservada interface (la cual sustituye a la palabra
class). Y para implementar la interfaz, haremos uso de la palabra reservada implements la cual debe
especificarse, al momento de declarar la clase que, implementar dicha interfaz.
Ejemplo: Supongamos que queremos crear un programa que, dadas la base y la altura de un
rectngulo, nos devuelva su area, su permetro y su volumen. Pero haciendo uso de una interfaz.
Solucin:
En archivo nuevo digite el siguiente cdigo:
//declaracin de la interfaz
public interface Calculos {
Programacin para Principiantes JAVA

P g i n a | 77
public double Perimetro (); //calcula el Permetro
public double Area (); //calcula Area
public double Volumen (); //calcula el volumen
}//fin de la interfaz
Guarde este archivo y complelo.
En otro archivo digite el siguiente cdigo:
//Declaracin de la clase que implementa la Interfaz Calculos
public class Rectangulo extends Object implements Calculos{
private double base, altura;
public Rectangulo()//constructor
{
base=0;
altura=0;
}
//establece la base
public void AignarBase(double x)
{
base=x;
}
//estabece el valor de la altura
public void AsignarAltura(double y)
{
altura=y;
}
//Calculamos el Permetro
public double Perimetro()
{
return 2*base+2*altura;
}
//calculamos el area
public double Area()
{
return base*altura;
}
public double Volumen()
{
double espesor=5;
return base*altura*espesor;
}
}
Guarde y compile.

Programacion para Principiantes JAVA

P g i n a | 78
Quiz el lector piense que, una interfaz no tiene mayor uso, y a lo mejor, ni se perciba su
funcionamiento y mucho menos su implementacin. Y siendo franco, al principio, ni yo entenda el
por que usar una interfaz. Sin embargo Las interfaces son tiles para:

Capturar similitudes entre clases no relacionadas sin forzar una relacin entre ellas.
Declarar mtodos que una o varias clases necesitan implementar.
Revelar la interface de programacin de un objeto sin recelar sus clases (los objetos de este
tipo son llamados objetos annimos y pueden ser tiles cuando se comparte un paquete de
clases con otros desarrolladores). El objetivo de definir interfaces es permitir una mayor
abstraccin de datos, por ejemplo, permitiendo que un mtodo reciba un objeto de una
instancia de alguna clase que implementa una interface, de modo que pueda invocarse a un
mtodo definido en esta, aunque no se conozca la clase real que se est utilizando.

Hilos
Los procesadores y los Sistemas Operativos modernos permiten la multitarea, es decir, la realizacin
simultnea de dos o ms actividades (al menos aparentemente). En la realidad, un ordenador con
una sola CPU no puede realizar dos actividades a la vez. Sin embargo los Sistemas Operativos
actuales son capaces de ejecutar varios programas "simultneamente" aunque slo se disponga de
una CPU: reparten el tiempo entre dos (o ms) actividades, o bien utilizan los tiempos muertos de
una actividad (por ejemplo, operaciones de lectura de datos desde el teclado) para trabajar en la
otra. En ordenadores con dos o ms procesadores la multitarea es real, ya que cada procesador
puede ejecutar un hilo o thread diferente. La Figura tomada del Tutorial de Sun, muestra los
esquemas correspondientes a un programa con uno o dos hilos.

Los mtodos de la clase Thread:


currentThread: Representa al hilo que esta ejecutndose en ese momento.
yield: Asegura que los hilos de menor prioridad no sufran inanicin.
sleep: Pone a dormir al hilo en curso durante n milisegundos.
start: Crea un hilo de sistema y ejecuta. Luego llama al mtodo run.
run: Es el cuerpo del hilo. Es llamado por el mtodo start.
stop: Provoca la destruccin del hilo.
suspend: Detiene el hilo, pero no lo destruye. Puede ejecutarse de nuevo.
resume: Para revivir un hilo suspendido.
setName: Asigna un nombre al hilo en curso.
getName: Devuelve el nombre del hilo en ejecucin.
setPriority () Establece la prioridad del hilo. De 1 a 10.
getPriority: Devuelve la prioridad del hilo en curso.

Programacin para Principiantes JAVA

P g i n a | 79
Ejemplo:
public class ContadorAdelante extends Thread {
public ContadorAdelante(String nombre) // constructor
{
if (nombre != null)
setName(nombre);
start(); //el hilo ejecuta su propio mtodo run
}
public ContadorAdelante() { this(null); } // constructor
public void run()
{
for (int i=1; i<=1000; i++)
System.out.print(getName() + " "+i+"\r");
System.out.println();
}
}
El operador new crea un hilo cuenta Adelante (el hilo est en el estado nuevo). El mtodo start
cambia el estado del hilo a preparado. De ahora en adelante y hasta que finalice la ejecucin del
hilo cuentaAdelante, ser el planificador de hilos el que determine cuando ste pasa al estado de
ejecucin y cuando lo abandona para permitir que se ejecuten simultneamente otros hilos. El
mtodo start no hace que se ejecute inmediatamente el mtodo run del hilo, sino que lo sita en el
estado preparado para que compita por la UCP junto con el resto de los hilos que haya en este
estado. Solo el planificador puede asignar tiempo de UCP a un hilo y lo har con cuenta Adelante en
cualquier instante despus de que haya recibido el mensaje start. Por lo tanto, un hilo durante su
tiempo de vida, gasta parte de l en ejecutarse y el resto en alguno de los otros estados. Lo que no
se debe hacer es llamar directamente al mtodo run; esto ejecutara el cdigo de este mtodo sin
que intervenga el planificador. Quiere esto decir que es el mtodo start el que registra el hilo en el
planificador de hilos.
Ejemplo: Dos hilos se crean utilizando el mtodo setPriority con dos niveles de prioridad distintos.
Se inician ambos y se les permite la ejecucin durante 10 segundos. Cada hilo gira en torno a un
bucle que cuenta cuantas veces se ejecuto el mismo.
class pulso implements Runnable{
int pulsa=0;
private Thread hilo;
private boolean corre=true;
public pulso(int p){
hilo=new Thread(this);
hilo.setPriority(p);
}
public void run(){
while(corre){
pulsa++;

Programacion para Principiantes JAVA

P g i n a | 80
}
}
public void stop(){
corre=false;
}
public void start(){
hilo.start();
}
}

ALCANCE DE OBJETOS Y RECICLADO DE MEMORIA


Los objetos tienen un tiempo de vida y consumen recursos durante el mismo. Cuando un objeto no
se va a utilizar ms, debera liberar el espacio que ocupaba en la memoria de forma que las
aplicaciones no la agoten (especialmente las grandes).
En Java, la recoleccin y liberacin de memoria es responsabilidad de un thread llamado automatic
garbage collector (recolector automtico de basura). Este thread monitoriza el alcance de los objetos
y marca los objetos que se han salido de alcance. Veamos un ejemplo:
String s;
// no se ha asignado todavia
s = new String (abc); // memoria asignada
s = "def";
// se ha asignado nueva memoria
// (Nuevo objeto)

Ms adelante veremos en detalle la clase String , pero una breve descripcin de lo que hace esto es;
crear un objeto String y rellenarlo con los caracteres "abc" y crear otro (nuevo) String y colocarle
los caracteres "def".

En esencia se crean dos objetos:


Objeto String "abc"
Objeto String "def"

Al final de la tercera sentencia, el primer objeto creado de nombre s que contiene "abc" se ha salido
de alcance. No hay forma de acceder a l. Ahora se tiene un nuevo objeto llamado s y contiene "def".
Es marcado y eliminado en la siguiente iteracin del thread reciclador de memoria.

Paquetes (Packages)
Un package es una agrupacin de clases. En la API de Java 1.1 haba 22 packages; en Java 1.2 hay
59 packages, lo que da una idea del "crecimiento" experimentado por el lenguaje. Adems, el usuario
puede crear sus propios packages. Para que una clase pase a formar parte de un package llamado
pkgName, hay que introducir en ella la sentencia:
Package pkgName;
Que debe ser la primera sentencia del fichero sin contar comentarios y lneas en blanco.

Programacin para Principiantes JAVA

P g i n a | 81
Los nombres de los packages se suelen escribir con minsculas, para distinguirlos de las clases, que
empiezan por mayscula. El nombre de un package puede constar de varios nombres unidos por
puntos (los propios packages de Java siguen esta norma, como por ejemplo java.awt.event). Todas
las clases que forman parte de un package deben estar en el mismo directorio. Los nombres
compuestos de los packages estn relacionados con la jerarqua de directorios en que se guardan las
clases. Es recomendable que los nombres de las clases de Java sean nicos en Internet. Es el nombre
del package lo que permite obtener esta caracterstica. Una forma de conseguirlo es incluir el nombre
del dominio (quitando quizs el pas), como por ejemplo en el package siguiente:
es.ceit.jgjalon.infor2.ordenar
Las clases de un package se almacenan en un directorio con el mismo nombre largo (path)
que el package. Por ejemplo, la clase,
es.ceit.jgjalon.infor2.ordenar.QuickSort.class
Debera estar en el directorio, CLASSPATH\es\ceit\jgjalon\infor2\ordenar\QuickSort.class
Donde CLASSPATH es una variable de entorno del PC que establece la posicin absoluta de
los directorios en los que hay clases de Java (clases del sistema o de usuario), en este caso
la posicin del directorio es en los discos locales del ordenador.
Pasos Para Crear un Paquete
Seleccionar el Nombre de Paquete. Ejemplo: MiPaquete.es; misClases.Utilidades. Para ello cree una
carpeta llamada Ejemplo, en el disco duro. Crear una estructura Jerrquica de carpetas en el disco
duro. Esta estructura jerrquica se hace corresponder con una estructura en el disco duro con una
estructura jerrquica de carpetas, de tal forma que los nombres de las carpetas coinciden con los
nombres de los elementos del paquete. (Para ello, dentro de la carpeta Ejemplo, cree una carpeta
llamada MIsClases, y dentro de ella, una llamada es) Lo cual se especifica con la variable
CLASSPATH. Para nuestro ejemplo, la variable CLASSPATH debe indicar, entre otras, la ruta de la
carpeta MisClases. En JGRASP en Settings escoger Path/Classpath luego escoger la carpeta
CLASSPATH.
Copie en esta carpeta (Carpeta es) los archivos correspondientes a Alumnos.java, Coordenadas.java
e Imaginario.java (los cuales han sido creados en el captulo anterior).
Package MisClases.es;
Modifique estos archivos, colocndole a cada uno de ellos la instruccin:
Vulvalos a compilar.
Luego copie el archivo que utiliza la clase Coordenadas.java (Nos referimos al archivo
UsaCoordendas.java). este archivo puede guardarlo en la direccin: C:\Ejemplo. Import
MisClases.es.Coordenadas;
Import
Los paquetes de clases se cargan con la palabra clave import, especificando el nombre del paquete
como ruta y nombre de clase (es lo mismo que #include de C/C++). Se pueden cargar varias clases
utilizando un asterisco.

Import java.Date;
import java.awt.*;
Programacion para Principiantes JAVA

P g i n a | 82

Si un fichero fuente Java no contiene ningn package, se coloca en el paquete por defecto
sin nombre. Es decir, en el mismo directorio que el fichero fuente, y la clase puede ser
cargada con la sentencia import:
Import MiClase;
Paquetes de Java
El lenguaje Java proporciona una serie de paquetes que incluyen ventanas, utilidades, un
sistema de entrada/salida general, herramientas y comunicaciones. En la versin actual del
JDK, los paquetes Java que se incluyen son:
java.applet
Este paquete contiene clases diseadas para usar con applets. Hay una clase Applet y tres
interfaces: AppletContext, AppletStub y AudioClip.
java.awt
El paquete Abstract Windowing Toolkit (awt) contiene clases para generar widgets y
componentes GUI (Interfaz Grfico de Usuario). Incluye las clases Button, Checkbox,
Choice, Component, Graphics, Menu, Panel, TextArea y TextField.
java.io
El paquete de entrada/salida contiene las clases de acceso a ficheros: FileInputStream y
FileOutputStream.
java.lang
Este paquete incluye las clases del lenguaje Java propiamente dicho: Object, Thread,
Exception, System, Integer, Float, Math, String, etc.
java.net
Este paquete da soporte a las conexiones del protocolo TCP/IP y, adems, incluye las clases
Socket, URL y URLConnection.
java.util
Este paquete es una miscelnea de clases tiles para muchas cosas en programacin. Se
incluyen, entre otras, Date (fecha), Dictionary (diccionario), Random (nmeros aleatorios)
y Stack (pila FIFO).
Modifique este archivo colocndole la sentencia:
Con lo Anterior ya hemos creado, nuestro primer paquete, lo cual, es de manera similar, que Java
controla, los paquetes que dispone para la realizacin de nuestros programas.
Programacin para Principiantes JAVA

P g i n a | 83

UNA MNIMA APLICACIN


La aplicacin ms pequea posible es la que simplemente imprimir un mensaje en la pantalla.
Tradicionalmente, el mensaje suele ser "Hola Mundo!". Esto es justamente lo que hace el siguiente
fragmento de cdigo:
//
// Aplicacin HolaMundo de ejemplo
//
class HolaMundoApp {
public static void main( String args[] ) {
System.out.println( "Hola Mundo!" ) ;
}
}

HolaMundo
Vamos ver en detalle la aplicacin anterior, lnea a lnea. Esas lneas de cdigo contienen los
componenetes mnimos para imprimir Hola Mundo! en la pantalla.
//
// Aplicacin HolaMundo de ejemplo
//
Estas tres primeras lneas son comentarios. Hay tres tipos de comentarios en Java, // es un comentario
orientado a lnea.
class HolaMundoApp {

Programacion para Principiantes JAVA

P g i n a | 84
Esta lnea declara la clase HolaMundoApp . El nombre de la clase especificado en el fichero fuente
se utiliza para crear un fichero nombredeclase.class en el directorio en el que se compila la aplicacin.
En nuestro caso, el compilador crear un fichero llamado HolaMundoApp.class.
public static void main( String args[] ) {
Esta lnea especifica un mtodo que el intrprete Java busca para ejecutar en primer lugar. Igual que
en otros lenguajes, Java utiliza una palabra clave main para especificar la primera funcin a ejecutar.
En este ejemplo tan simple no se pasan argumentos.
public significa que el mtodo main puede ser llamado por cualquiera, incluyendo el intrprete Java.
static es una palabra clave que le dice al compilador que main se refiere a la propia clase
HolaMundoApp y no a ninguna instancia de la clase. De esta forma, si alguien intenta hacer otra
instancia de la clase, el mtodo main no se instanciara.
void indica que main no devuelve nada. Esto es importante ya que Java realiza una estricta
comprobacin de tipos, incluyendo los tipos que se ha declarado que devuelven los mtodos.
args[] es la declaracin de un array de Strings. Estos son los argumentos escritos tras el nombre de la
clase en la lnea de comandos:
%java HolaMundoApp arg1 arg2 ...
System.out.println( "Hola Mundo!" );
Esta es la funcionalidad de la aplicacin. Esta lnea muestra el uso de un nombre de clase y mtodo.
Se usa el mtodo println() de la clase out que est en el paquete System .
El mtodo println() toma una cadena como argumento y la escribe en el stream de salida estndar; en
este caso, la ventana donde se lanza la aplicacin.
}
}
Finalmente, se cierran las llaves que limitan el mtodo main () y la clase HolaMundoApp.

COMPILACION Y EJECUCION DE HOLA MUNDO


Vamos a ver a continuacin como podemos ver el resultado de nuestra primera aplicacin Java en
pantalla. Generaremos un fichero con el cdigo fuente de la aplicacin, lo compilaremos y
utilizaremos el intrprete java para ejecutarlo.
Ficheros Fuente Java
Los ficheros fuente en Java terminan con la extensin " .java. Crear un fichero utilizando cualquier
editor de texto ascii que tenga como contenido el cdigo de las ocho lneas de nuestra mnima
aplicacin, y salvarlo en un fichero con el nombre de HolaMundoApp.java. Para crear los ficheros
con cdigo fuente Java no es necesario un procesador de textos, aunque puede utilizarse siempre que
tenga salida a fichero de texto plano o ascii, sino que es suficiente con cualquier otro editor.
Programacin para Principiantes JAVA

P g i n a | 85
Compilacin
El compilador javac se encuentra en el directorio bin por debajo del directorio java, donde se haya
instalado el JDK. Este directorio bin, si se han seguido las instrucciones de instalacin, debera formar
parte de la variable de entorno PATH del sistema. Si no es as, tendra que revisar la Instalacin del
JDK. El compilador de Java traslada el cdigo fuente Java a byte-codes, que son los componentes
que entiende la Mquina Virtual Java que est incluida en los navegadores con soporte Java y en
appletviewer.
Una vez creado
%javac HolaMundoApp el fichero fuente HolaMundoApp.java, se puede compilar con la lnea
siguiente: .java
Si no se han cometido errores al teclear ni se han tenido problemas con el path al fichero fuente ni al
compilador, no debera aparecer mensaje alguno en la pantalla, y cuando vuelva a aparecer el prompt
del sistema, se debera ver un fichero HolaMundoApp.class nuevo en el directorio donde se encuentra
el fichero fuente. Si ha habido algn problema, en Problemas de compilacin al final de esta seccin,
hemos intentado reproducir los que ms frecuentemente se suelen dar, se pueden consultar por si
pueden aportar un poco de luz al error que haya aparecido.
Ejecucin
Para ejecutar la aplicacin HolaMundoApp, hemos de recurrir al intrprete java, que tambin se
encuentra en el directorio bin , bajo el directorio java . Se ejecutar la aplicacin con la lnea: %java
HolaMundoApp. Y debera aparecer en pantalla la respuesta de Java: %Hola Mundo!
El smbolo % representa al prompt del sistema, y lo utilizaremos para presentar las respuestas que
nos ofrezca el sistema como resultado de la ejecucin de los comandos que se indiquen en pantalla o
para indicar las lneas de comandos a introducir.
A continuacin presentamos una lista de los errores ms frecuentes que se presentan a la hora de
compilar un fichero con cdigo fuente Java, nos basaremos en errores provocados sobre nuestra
mnima aplicacin Java de la seccin anterior, pero podra generalizarse sin demasiados problemas.
%javac: Command not found. No se ha establecido correctamente la variable PATH del sistema para
el compilador javac . El compilador javac se encuentra en el directorio bin , que cuelga del directorio
java , que cuelga del directorio donde se haya instalado el JDK (Java Development Kit).
%HolaMundoApp.java:3: Method printl(java.lang.String) not found in class java.io.PrintStream.
System.out.printl( "HolaMundo!); ^ Error tipogrfico, el mtodo es println no printl. %In class
HolaMundoApp: main must be public and static. Error de ejecucin, se olvid colocar la palabra
static en la declaracin del mtodo main de la aplicacin. %Cant find class HolaMundoApp.
Este es un error muy sutil. Generalmente significa que el nombre de la clase es distinto al del fichero
que contiene el cdigo fuente, con lo cual el fichero nombre_fichero.class que se genera es diferente
del que cabra esperar. Por ejemplo, si en nuestro fichero de cdigo fuente de nuestra aplicacin
HolaMundoApp.java colocamos en vez de la declaracin actual de la clase HolaMundoApp, la lnea:
class HolaMundoapp {
Se crear un fichero HolaMundoapp.class, que es diferente del HolaMundoApp.class, que es el
nombre esperado de la clase; la diferencia se encuentra en la a minscula y mayscula.
Programacion para Principiantes JAVA

P g i n a | 86

UN APPLET BASICO
Vamos a comenzar la creacin del cdigo fuente del un applet que satisfaga nuestras necesidades.
Recordamos que Java utiliza la extensin .java para designar los ficheros fuente.
HolaMundo
A continuacin est el cdigo fuente del applet HolaMundo, que es la versin applet de la mnima
aplicacin Java que antes habamos escrito. Guardar este cdigo en un fichero fuente Java como
HolaMundo.java .
//
// Applet HolaMundo de ejemplo
//
import java.awt.Graphics;
import java.applet.Applet;
public class HolaMundo extends Applet {
public void paint( Graphics g ) {
g.drawString( "Hola Mundo!",25,25 ) ;
}
}

Componentes bsicos de un Applet


El lenguaje Java implementa un modelo de Programacin Orientada a Objetos. Los objetos sirven de
bloques centrales de construccin de los programas Java. De la misma forma que otros lenguajes de
programacin, Java tiene variables de estado y mtodos.

Veamos como se descompone un applet en sus piezas/objetos:


/*
Seccin de importaciones
*/
public class NombreDelNuevoApplet extends Applet {
/*
Aqu se declaran las variables de estado (public y private)
*/
/*
Los mtodos para la interaccin con los objetos se
declaran y definen aqu
*/
public void MetodoUno( parmetros ) {
/*
Aqu viene para cada mtodo, el cdigo Java que
desempea la tarea.
Qu cdigo se use depende del applet
*/
}
}

Programacin para Principiantes JAVA

P g i n a | 87
Para HolaMundo, se importan las dos clases que necesita. No hay variables de estado, y slo se tiene
que definir un mtodo para que el applet tenga el comportamiento esperado.
Clases incluidas
El comando import carga otras clases dentro de nuestro cdigo fuente. El importar una clase desde
un paquete de Java hace que esa clase importada est disponible para todo el cdigo incluido en el
fichero fuente Java que la importa. Por ejemplo, en el applet HolaMundo se importa la clase
java.awt.Graphics, y podremos llamar a los mtodos de esta clase desde cualquier mtodo de nuestro
programa que se encuentre en el fichero HolaMundo.java. Esta clase define un rea grfica y mtodos
para poder dibujar dentro de ella. La funcin paint () declara a g como un objeto de tipo Graphics;
luego, paint () usa el mtodo drawString () de la clase Graphics para generar su salida.
La clase Applet
Se puede crear una nueva clase, en este caso HolaMundo, extendiendo la clase bsica de Java:
Applet. De esta forma, se hereda todo lo necesario para crear un applet. Modificando determinados
mtodos del applet, podemos lograr que lleve a cabo las funciones que deseamos.
import java.applet.Applet;
public class HolaMundo extends Applet {

Mtodos de Applet
La parte del applet a modificar es el mtodo paint (). En la clase Applet, se llama al mtodo paint ()
cada vez que el mtodo arranca o necesita ser refrescado, pero no hace nada. En nuestro caso, lo
que hacemos es:
public void paint( Graphics g ) {
g.drawString( "Hola Mundo!",25,25 );
}
De acuerdo a las normas de sobrecarga, se ejecutar este ltimo paint () y no el paint () vaco de la
clase Applet . Luego, aqu se ejecuta el mtodo drawString (), que le dice al applet cmo debe
aparecer un texto en el rea de dibujo. Otros mtodos bsicos para dibujar son:
drawLine( int x1,int y1,int x2,int y2 )
drawRect( int x,int y,int ancho,int alto )
drawOval( int x,int y,int ancho,int alto )
Tanto para drawRect () como para drawOval () , las coordenadas ( x,y ) son la esquina superior
izquierda del rectngulo (para drawOval, el valo es encajado en el rectngulo que lo circunscribe).

Cambio de Tamao
El cambio de tamao de un StringBuffer necesita varias funciones especficas para
manipular el tamao de las cadenas:
int length();

Programacion para Principiantes JAVA

P g i n a | 88
char charAt( int index );
void getChars( int srcBegin,int srcEnd,char dst[],int dstBegin );
String toString();
void setLength( int newlength );
void setCharAt( int index,char ch );
int capacity();
void ensureCapacity( int minimum );
void copyWhenShared();

Obervar que una de las funciones devuelve una cadena constante normal de tipo String. Este objeto
se puede usar con cualquier funcin String, como por ejemplo, en las funciones de comparacin.

Modificacin del Contenido


Para cambiar el contenido de un StringBuffer, se pueden utilizar dos mtodos: append () e
insert ().
En el ejemplo CadAppend.java, vemos el uso de estos dos mtodos:
class CadAppend {
public static void main( String args[] ) {
StringBuffer str = new StringBuffer( "Hola" );
str.append( " Mundo" );
System.out.println( str );
}
}

En este otro ejemplo, CadInversa.java, mostramos un mtodo muy simple que le da la vuelta a una
cadena:
class CadInversa {
public static String cadenaInversa( String fuente ) {
int longitud = fuente.length();
StringBuffer destino = new StringBuffer( longitud );
for( int i=(longitud-1); i >= 0; i-- )
destino.append( fuente.charAt( i ) );
return( destino.toString() );
}
public static void main( String args[] ) {
System.out.println( cadenaInversa( "Hola Mundo" ) );
}
}

Las funciones que cambian el tamao son pues:


StringBuffer
StringBuffer
StringBuffer
StringBuffer
StringBuffer

append(
append(
append(
append(
append(

Object obj );
String str );
char str[] );
char str[],int offset,int len );
boolean b );

Programacin para Principiantes JAVA

P g i n a | 89
StringBuffer append( int i );
StringBuffer append( long l );
StringBuffer append( float f );
StringBuffer append( double d );
StringBuffer
StringBuffer
StringBuffer
StringBuffer
StringBuffer
StringBuffer
StringBuffer
StringBuffer
StringBuffer
StringBuffer

append( char ch );
insert( int offset,Object obj );
insert( int offset,String str );
insert( int offset,char str[] );
insert( int offset,boolean b );
insert( int offset,int i );
insert( int offset,long l );
insert( int offset,float f );
insert( int offset,double d );
insert (int offset,char ch );

Operadores de Concatenacin
Hay que recordar que los operadores " + " y " += " tambin se pueden aplicar a cadenas.
Ambos realizan una concatenacin y estn implementados con objetos StringBuffer.
Por ejemplo, la sentencia:
String s = "Qu" + " tal?";

Es interpretada por el compilador como:


String s =
new StringBuffer().append( "Qu" ).append( " tal ?" ).ToString
();

Y se marcara el StringBuffer para borrarlo ya que el contenido pasa al objeto String.


Tambin, la sentencia:
s += " por ah!";

Sera interpretada por el sistema como:


String s =
New StringBuffer ().append(s).append( " por ah!" ).ToString ();

Y volvera a marcar para borrar el nuevo StringBuffer.

USO DE CONVERSIONES
Veamos un ejemplo de utilidad de estas funciones. En el applet Conversion.java, que se muestra en
el cdigo que sigue, se usan estas funciones para producir una salida til en un programa, presentando
las coordenadas en las que se ha hecho click con el botn del ratn.
public class Conversion extends Applet {

Programacion para Principiantes JAVA

P g i n a | 90
int RatonX = 25;
int RatonY = 25;
String Status = "Haz click con el ratn";
public void paint( Graphics g ) {
g.drawString( Status,RatonX,RatonY );
}
public boolean mouseDown( Event evt,int x,int y ) {
Integer X = new Integer( x );
Integer Y = new Integer( y );
RatonX = x;
RatonY = y;
Status = X.toString()+","+Y.toString();
repaint();
return true;
}
}

ENTRADA/SALIDA ESTANDAR
Los usuarios de Unix, y aquellos familiarizados con las lneas de comandos de otros sistemas como
DOS, han utilizado un tipo de entrada/salida conocida comnmente por entrada/salida estndar. El
fichero de entrada estndar (stdin ) es simplemente el teclado. El fichero de salida estndar (stdout)
es tpicamente la pantalla (o la ventana del terminal). El fichero de salida de error estndar (stderr)
tambin se dirige normalmente a la pantalla, pero se implementa como otro fichero de forma que se
pueda distinguir entre la salida normal y (si es necesario) los mensajes de error.

La clase System: Java tiene acceso a la entrada/salida estndar a travs de la clase


System. En concreto, los tres ficheros que se implementan son:
Stdin: System.in implementa stdin como una instancia de la clase InputStream.
Con System.in, se accede a los mtodos read () y skip( ). El mtodo read () permite
leer un byte de la entrada. skip (long n ) , salta n bytes de la entrada.
Stdout: System.out implementa stdout como una instancia de la clase PrintStream.
Se pueden utilizar los mtodos print () y println () con cualquier tipo bsico Java
como argumento.
Stderr: System.err implementa stderr de la misma forma que stdout. Como con
System.out, se tiene acceso a los mtodos de PrintStream.

Vamos a ver un pequeo ejemplo de entrada/salida en Java. El cdigo siguiente, miType.java,


reproduce, o funciona como la utilidad cat de Unix o type de DOS:
import java.io.*;
class miType {
public static void main( String args[] ) throws IOException {
int c;
int contador = 0;
while( (c = System.in.read() ) != 'n' )
{
contador++;
System.out.print( (char)c );
}
System.out.println();
// Lnea en blanco

Programacin para Principiantes JAVA

P g i n a | 91
System.err.println( "Contados "+ contador +" bytes en
total." );
}
}

Clases comunes de Entrada/Salida


Adems de la entrada por teclado y salida por pantalla, se necesita entrada/salida por
fichero, como son:
FileInputStream
DataInputStream
FileOutputStream
DataOutputStream

Tambin existen otras clases para aplicaciones ms especficas, que no vamos a tratar, por
ser de un uso muy concreto:
PipedInputStream
BufferedInputStream
PushBackInputStream
StreamTokenizer
PipedOutputStream
BufferedOutputStream

Ficheros
Antes de realizar acciones sobre un fichero, necesitamos un poco de informacin sobre ese
fichero. La clase File proporciona muchas utilidades relacionadas con ficheros y con la
obtencin de informacin bsica sobre esos ficheros.
FICHEROS DE ACCESO ALEATORIO
A menudo, no se desea leer un fichero de principio a fin; sino acceder al fichero como una base de
datos, donde se salta de un registro a otro; cada uno en diferentes partes del fichero. Java proporciona
una clase RandomAccessFile para este tipo de entrada/salida.

Creacin de un Fichero de Acceso Aleatorio


Hay dos posibilidades para abrir un fichero de acceso aleatorio:
Con el nombre del fichero:
miRAFile = new RandomAccessFile( String nombre,String modo );

Con un objeto File:


miRAFile = new RandomAccessFile( File fichero,String modo );

Programacion para Principiantes JAVA

P g i n a | 92

El argumento modo determina si se tiene acceso de slo lectura (r) o de lectura/escritura


(r/w). Por ejemplo, se puede abrir un fichero de una base de datos para actualizacin:
RandomAccessFile miRAFile;
miRAFile = new RandomAccessFile( "/tmp/kk.dbf","rw" );

Acceso a la Informacin
Los objetos RandomAccessFile esperan informacin de lectura/escritura de la misma manera que los
objetos DataInput/DataOutput. Se tiene acceso a todas las operaciones read() y write() de las clases
DataInputStream y DataOutputStream . Tambin se tienen muchos mtodos para moverse dentro de
un fichero:

long getFilePointer();
Devuelve la posicin actual del puntero del fichero
void seek( long pos );
Coloca el puntero del fichero en una posicin determinada. La posicin se da como
un desplazamiento en bytes desde el comienzo del fichero. La posicin 0 marca el
comienzo de ese fichero.
long length();
Devuelve la longitud del fichero. La posicin length () marca el final de ese fichero.
Actualizacin de Informacin
Se pueden utilizar ficheros de acceso aleatorio para aadir informacin a ficheros
existentes:
miRAFile = new RandomAccessFile( "/tmp/kk.log","rw" );
miRAFile.seek( miRAFile.length() );
// Cualquier write() que hagamos a partir de este punto del cdigo
// aadir informacin al fichero

Vamos a ver un pequeo ejemplo, Log.java, que aade una cadena a un fichero existente:
import java.io.*;
// Cada vez que ejecutemos este programita, se incorporara una nueva
// linea al fichero de log que se crea la primera vez que se ejecuta
//
class Log {
public static void main( String args[] ) throws IOException {
RandomAccessFile miRAFile;
String s = "Informacion a incorporarnTutorial de Javan";
// Abrimos el fichero de acceso aleatorio
miRAFile = new RandomAccessFile( "/tmp/java.log","rw" );
// Nos vamos al final del fichero
miRAFile.seek( miRAFile.leng

Creacin de un objeto File


Programacin para Principiantes JAVA

P g i n a | 93

Para crear un objeto File nuevo, se puede utilizar cualquiera de los tres constructores
siguientes:
File miFichero;
miFichero = new File( "/etc/kk" );o
miFichero = new File( "/etc","kk" );o
File miDirectorio = new File( "/etc" );
miFichero = new File( miDirectorio,"kk" );

El constructor utilizado depende a menudo de otros objetos File necesarios para el acceso. Por
ejemplo, si slo se utiliza un fichero en la aplicacin, el primer constructor es el mejor. Si en
cambio, se utilizan muchos ficheros desde un mismo directorio, el segundo o tercer constructor
sern ms cmodos. Y si el directorio o el fichero es una variable, el segundo constructor ser el
ms til.

Comprobaciones y Utilidades
Una vez creado un objeto File, se puede utilizar uno de los siguientes mtodos para reunir
informacin sobre el fichero:

Nombres de fichero
String getName()
String getPath()
String getAbsolutePath()
String getParent()
boolean renameTo( File nuevoNombre )

Comprobaciones
boolean
boolean
boolean
boolean
boolean
boolean

exists()
canWrite()
canRead()
isFile()
isDirectory()
isAbsolute()

Informacin general del fichero


long lastModified()
long length()

Utilidades de directorio
boolean mkdir()
String[] list()

Vamos a desarrollar una pequea aplicacin que muestra informacin sobre los ficheros
pasados como argumentos en la lnea de comandos, InfoFichero.java:

Programacion para Principiantes JAVA

P g i n a | 94
import java.io.*;
class InfoFichero {
public static void main( String args[] ) throws IOException {
if( args.length > 0 )
{
for( int i=0; i < args.length; i++ )
{
File f = new File( args[i] );
System.out.println( "Nombre: "+f.getName() );
System.out.println( "Camino: "+f.getPath() );
if( f.exists() )
{
System.out.print( "Fichero existente " );
System.out.print( (f.canRead() ?
" y se puede Leer" : "" ) );
System.out.print( (f.canWrite() ?
" y se puese Escribir" : "" ) );
System.out.println( "." );
System.out.println( "La longitud del fichero son "+
f.length()+" bytes" );
}
else
System.out.println( "El fichero no existe." );
}
}
else
System.out.println( "Debe indicar un fichero." );
}
}

STREAMS DE ENTRADA
Hay muchas clases dedicadas a la obtencin de entrada desde un fichero. Este es el
esquema de la jerarqua de clases de entrada por fichero:

Objetos FileInputStream
Los objetos FileInputStream tpicamente representan ficheros de texto accedidos en orden secuencial,
byte a byte. Con FileInputStream, se puede elegir acceder a un byte, varios bytes o al fichero
completo.

Apertura de un FileInputStream
Para abrir un FileInputStream sobre un fichero, se le da al constructor un String o un objeto
File:

Programacin para Principiantes JAVA

P g i n a | 95
FileInputStream mi FicheroSt;
miFicheroSt = new FileInputStream( "/etc/kk" );

Tambin se puede utilizar:


File miFichero FileInputStream miFicheroSt;
miFichero = new File( "/etc/kk" );
miFicheroSt = new FileInputStream(
miFichero );

Lectura de un FileInputStream
Una vez abierto el FileInputStream, se puede leer de l. El mtodo read() tiene muchas
opciones:
int read();
Lee un byte y devuelve -1 al final del stream.
int read( byte b[] );
Llena todo el array, si es posible. Devuelve el nmero de bytes ledos o -1 si se
alcanz el final del stream.
int read( byte b[],int offset,int longitud );
Lee longitud bytes en b comenzando por b[offset]. Devuelve el nmero de bytes
ledos o -1 si se alcanz el final del stream.
Cierre de FileInputStream
Cuando se termina con un fichero, existen dos opciones para cerrarlo: explcitamente, o
implcitamente cuando se recicla el objeto (el garbage collector se encarga de ello).
Para cerrarlo explcitamente, se utiliza el mtodo close():
miFicheroSt.close();

Ejemplo: Visualizacin de un fichero


Si la configuracin de la seguridad de Java permite el acceso a ficheros, se puede ver el
contenido de un fichero en un objeto TextArea. El cdigo siguiente contiene los elementos
necesarios para mostrar un fichero:
FileInputStream fis;
TextArea ta;
public void init() {
byte b[] = new byte[1024];
int i;
// El buffer de lectura se debe hacer lo suficientemente grande
// o esperar a saber el tamao del fichero
String s;
try {
fis = new FileInputStream( "/etc/kk" );
} catch( FileNotFoundException e ) {
/* Hacer algo */
}
try {
i = fis.read( b );
} catch( IOException e ) {

Programacion para Principiantes JAVA

P g i n a | 96
/* Hacer algo */
}
s = new String( b,0 );
ta = new TextArea( s,5,40 );
add( ta );
}

Hemos desarrollado un ejemplo, Agenda.java, en el que partimos de un fichero agenda que dispone
de los datos que nosotros deseamos de nuestros amigos, como son: nombre, telfono y direccin. Si
tecleamos un nombre, buscar en el fichero de datos si existe ese nombre y presentar la informacin
que se haya introducido. Para probar, intentar que aparezca la informacin de Pepe.

Objetos DataInputStream
Los objetos DataInputStream se comportan como los FileInputStream. Los streams de datos
pueden leer cualquiera de las variables de tipo nativo, como floats, ints o chars. Generalmente
se utilizan DataInputStream con ficheros binarios.
Apertura y cierre de DataInputStream
Para abrir y cerrar un objeto DataInputStream, se utilizan los mismos mtodos que
para FileInputStream:

DataInputStream miDStream;
FileInputStream miFStream;
// Obtiene un controlador de fichero
miFStream = new FileInputStream "/etc/ejemplo.dbf" );
//Encadena un fichero de entrada de datos
miDStream = new DataInputStream( miFStream );
// Ahora se pueden utilizar los dos streams de entrada para
// acceder al fichero (si se quiere...)
miFStream.read( b );
i = miDStream.readInt();
// Cierra el fichero de datos explcitamente
//Siempre se cierra primero el fichero stream de mayor nivel
miDStream.close();
miFStream.close();

Lectura de Un DataInputStream
Al acceder a un fichero como DataInputStream, se pueden utilizar los mismos mtodos read()
de los objetos FileInputStream. No obstante, tambin se tiene acceso a otros mtodos
diseados para leer cada uno de los tipos de datos:
byte readByte()
int readUnsignedByte()
short readShort()
int readUnsignedShort()
char readChar()
int readInt()
long readLong()
float readFloat()

Programacin para Principiantes JAVA

P g i n a | 97
double readDouble()
String readLine()

Cada mtodo leer un objeto del tipo pedido.


Para el mtodo String readLine (), se marca el final de la cadena con n, r, rn o con EOF.
Para leer un long, por ejemplo:
long numeroSerie;
...
numeroSerie = miDStream.readLong();

Streams de entrada de URLs: Adems del acceso a ficheros, Java proporciona la posibilidad de
acceder a URLs como una forma de acceder a objetos a travs de la red. Se utiliza implcitamente un
objeto URL al acceder a sonidos e imgenes, con el mtodo getDocumentBase () en los applets:
String imagenFich = new String( "imagenes/pepe.gif" );
imagenes[0] = getImage( getDocumentBase(),imagenFich );

No obstante, se puede proporcionar directamente un URL, si se quiere:


URL imagenSrc;
imagenSrc = new URL( "http://enterprise.com/~info" );
imagenes[0] = getImage( imagenSrc,"imagenes/pepe.gif" );

Apertura de un Stream de entrada de URL


Tambin se puede abrir un stream de entrada a partir de un URL. Por ejemplo, se puede
utilizar un fichero de datos para un applet:
ImputStream is;
byte buffer[] = new byte[24];
is = new URL( getDocumentBase(),datos).openStream();

Ahora se puede utilizar is para leer informacin de la misma forma que se hace con un
objeto FileInputStream:
is.read( buffer,0,buffer.length );

NOTA: Debe tenerse muy en cuenta que algunos usuarios pueden haber configurado la
seguridad de sus navegadores para que los applets no accedan a ficheros.

STREAMS DE SALIDA
La contrapartida necesaria de la lectura de datos es la escritura de datos. Como con los
Stream de entrada, las clases de salida estn ordenadas jerrquicamente:

Programacion para Principiantes JAVA

P g i n a | 98

Examinaremos las clases FileOutputStream y DataOutputStream para complementar los streams de


entrada que se han visto. En los ficheros fuente del directorio $JAVA_HOME/src/java/io se puede
ver el uso y mtodos de estas clases, as como de los streams de entrada ($JAVA_HOME es el
directorio donde se haya instalado el Java Development Kit, en sistemas UNIX).

Objetos FileOutputStream
Los objetos FileOutputStream son tiles para la escritura de ficheros de texto. Como con
los ficheros de entrada, primero se necesita abrir el fichero para luego escribir en l.
Apertura de un FileOutputStream
Para abrir un objeto FileOutputStream, se tienen las mismas posibilidades que para abrir un
fichero stream de entrada. Se le da al constructor un String o un objeto File.
FileOutputStream miFicheroSt;
MiFicheroSt = new FileOutputStream (/etc/kk);

Como con los streams de entrada, tambin se puede utilizar:


File miFichero FileOutputStream miFicheroSt;
File miFichero FileOutputStream miFicheroSt;
MiFichero = new File (/etc/kk);
MiFicheroSt = new FileOutputStream (miFichero);

Escritura en un FileOutputStream: Una vez abierto el fichero, se pueden escribir bytes de


datos utilizando el mtodo write (). Como con el mtodo read () de los streams de entrada,
tenemos tres posibilidades:

void write( int b );


Escribe un byte.
void write( byte b[] );
Escribe todo el array, si es posible.
void write( byte b[],int offset,int longitud );
Escribe longitud bytes en b comenzando por b [offset].

Cierre de FileOutputStream
Cerrar un stream de salida es similar a cerrar streams de entrada. Se puede utilizar el
mtodo explcito:
miFicheroSt.close ();
O, se puede dejar que el sistema cierre el fichero cuando se recicle miFicheroSt.

Programacin para Principiantes JAVA

P g i n a | 99
Ejemplo: Almacenamiento de Informacin
Este programa, Telefonos.java, pregunta al usuario una lista de nombres y nmeros de telfono. Cada
nombre y nmero se aade a un fichero situado en una localizacin fija. Para indicar que se ha
introducido toda la lista, el usuario especfica "Fin" ante la solicitud de entrada del nombre. Una vez
que el usuario ha terminado de teclear la lista, el programa crear un fichero de salida que se mostrar
en pantalla o se imprimir. Por ejemplo:
95-4751232, Juanito
564878, Luisa
123456, Pepe
347698, Antonio
91-3547621, Mara

El cdigo fuente del programa es el siguiente:


import java.io.*;
class Telefonos {
static FileOutputStream fos;
public static final int longLinea = 81;
public static void main( String args[] ) throws IOException {
byte tfno[] = new byte[longLinea];
byte nombre[] = new byte[longLinea];
fos = new FileOutputStream( "telefono.dat" );
while( true )
{
System.err.println( "Teclee un nombre ('Fin' termina)" );
leeLinea( nombre );
if( "fin".equalsIgnoreCase( new String( nombre,0,0,3 ) ) )
break;
System.err.println( "Teclee el numero de telefono" );
leeLinea( tfno );
for( int i=0; tfno[i] != 0; i++ )
fos.write( tfno[i] );
fos.write( ',' );
for( int i=0; nombre[i] != 0; i++ )
fos.write( nombre[i] );
fos.write( 'n' );
}
fos.close();
}
private static void leeLinea( byte linea[] ) throws IOException {
int b = 0;
int i = 0;
while( (i < ( longLinea-1) ) &&
( ( b = System.in.read() ) != 'n' ) )
linea[i++] = (byte)b;
linea[i] = (byte)0;
}

Programacion para Principiantes JAVA

P g i n a | 100

Conclusion
En este manual se busco que el usuario conociera todo lo que es el Lenguaje de
programacion de JAVA, y esto se aprendio conociendo primero una breve
introduccion de lo que es
JAVA, conocimos el Origen de JAVA, las
caractersticas de este lenguaje de Programacion JAVA estos aspectos son
breves para que el usuario aprenda lo que es JAVA. Tambin se aprendio como
es que el usuario puede instalar JSKD = JAVA para su maquina. Tambin con
este manual el usuario aprendio que la estructuracin de un programa para JAVA
consta de Editar el Programa, Compilarlo, Ejecutarlo y Depurarlo.
En este manual conocimos lo que son los temas de Clases, Herencia,
Constructores, modificadores de Acceso,Objetos, Clases, tipos de clases,
Control de Flujo o Sentencias de Control, Estructuras Selectivas: if, else, etc;
estructuras Iterativas, Variables, tipos de variables, Operadores,Comentarios
y Literales, Manejo de Excepciones, Metodos(Constructores), Arrays,
Referencias y Listas,Graficos en JAVA, Packages, Hilos, Interfaces, y como
cada uno de estos aspectos nos ayudan al momento de realizar un programa y
esto se busca que lo aprendael usuario buscando que el conosca la definicin,
como declararla, como identificando a cada uno ubicando sus diferencias, y esto
lo aprendimos tambin por medio de ver ejemplos y algunos de estos ejemplos
los aprendimos a explicar mejor ya que estos tenan una breve explicacion, etc.

Programacin para Principiantes JAVA

P g i n a | 101

Bibliografa
Autor: Alvin Steve Padilla Meza
Programacion para Principiantes JAVA
Lugar: Mazatenango, Suchitepequez
Editorial: A.S.P.M
Fecha: 26/11/2015
Edicin 2016

Programacion para Principiantes JAVA

You might also like