You are on page 1of 7

Primeros Pasos en Java

Anterior | Siguiente 1. Una mnima aplicacin en Java Cap.Anterior | Cap.Siguiente

HolaMundo Compilacin y Ejecucin de HolaMundo Ficheros Fuente Java Compilacin Ejecucin Problemas de Compilacin Otros Ejemplos
2. Un Applet bsico en Java

HolaMundo Componentes Bsicos de un Applet Clases Incluidas La clase Applet Mtodos de Applet Compilacin de un Applet Llamada a Applets Prueba de un Applet
3. Argumentos en la Lnea de Comandos

Como cualquier otro lenguaje, Java se usa para crear aplicaciones. Adems Java tiene la particularidad especial de poder crear aplicaciones muy especiales, son los applets , que es una mini (let) aplicacin (app) diseada para ejecutarse en un navegador. A continuacin se ver en detalle lo mnimo que se puede hacer en ambos casos, lo que permitir presentar la secuencia de edicin, compilacin, ejecucin en Java, que ser imprescindible a la hora de estudiar detalles ms concretos de Java, lo que ayudar a que los ejemplos que se muestren sea mejor comprendidos. Hay que hacer una aclaracin antes de entrar a ver algo, porque muchos programadores que se introducen en Java piensan solamente en applets, pero Java va mucho ms all, y no hay por qu establecer una distincin entre applet como aplicacin grfica y aplicacin independiente como aplicacin de consola. No hay nada que impida a una aplicacin independiente funcionar como una aplicacin en modo grfico, lo nico que hay que hacer es tomarse la molestia de inicializar la ventana de la aplicacin a mano y aadirle el evento de que se cierre cuando el mensaje que se lo indique le llegue, cosas en el caso de los applets estn a cargo del navegador o visualizador que se est empleando. Esto es importante, porque en este Tutorial se utilizarn fundamentalmente aplicaciones Java independientes, porque los applets tienen unas medidas de seguridad tan estrictas que no permiten muchas de las opciones del lenguaje, como por ejemplo el acceso a ficheros o la impresin de documentos.

Una mnima aplicacin en Java


La aplicacin ms pequea posible es la que simplemente imprime un mensaje en la pantalla. Tradicionalmente, el mensaje suele ser "Hola Mundo!". Esto es justamente lo que hace el siguiente fragmento de cdigo:
/ / / /A p l i c a c i nH o l a M u n d od ee j e m p l o / / c l a s sH o l a M u n d o A p p{ p u b l i cs t a t i cv o i dm a i n (S t r i n ga r g s [ ]){ S y s t e m . o u t . p r i n t l n (" H o l aM u n d o ! ") ; }

HolaMundo
Hay que ver en detalle la aplicacin anterior, lnea a lnea. Esas lneas de cdigo contienen los componentes mnimos para imprimir Hola Mundo! en la pantalla. Es un ejemplo muy simple, que no instancia objetos de ninguna otra clase; sin embargo, accede a una de las clases incluida en la plataforma Java.
/ / / /A p l i c a c i nH o l a M u n d od ee j e m p l o / /

Estas tres primeras lneas son comentarios. Hay tres tipos de comentarios en Java, / /es un comentario orientado a lnea.
c l a s sH o l a M u n d o A p p{

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 este caso, el compilador crear un fichero llamado HolaM undoAp p.c las s .
p u b l i cs t a t i cv o i dm a i n (S t r i n ga r g s [ ]){

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 ma in para especificar la primera funcin a ejecutar. En este ejemplo tan simple no se pasan argumentos. pu blic significa que el mtodo main() puede ser llamado por cualquiera, incluyendo el intrprete Java. st atic 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. vo id 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:
%j a v aH o l a M u n d o A p pa r g 1a r g 2. . . S y s t e m . o u t . p r i n t l n (" H o l aM u n d o ! ") ;

A una variable de tipo class se puede acceder sin necesidad de instanciar ningn objeto de esa clase. Por ello ha de ser un tipo bsico o primitivo, o bien puede ser una referencia que apunta a otro objeto. La variable out es una referencia que apunta a un objeto de otro tipo, en este caso una instancia de la clase PrintStream (un objeto PrintStream ), que es automticamente instanciado cuando la clase System es cargada en la aplicacin. El mtodo println() toma una cadena como argumento y la escribe en el canal de salida estndar; en este caso, la ventana desde donde se lanza la aplicacin. La clase PrintStream tiene un mtodo instanciable llamado println(), que permite presentar en la salida estndar del Sistema el argumento que se le pase. En este caso, se utiliza la variable o instancia de out para acceder al mtodo.
}

Finalmente, se cierran las llaves que limitan el mtodo main() y la clase HolaMundoApp.

Compilacin y Ejecucin de HolaMundo


A continuacin se puede ver el resultado de esta primera y sencilla aplicacin Java en pantalla. Se genera un fichero con el cdigo fuente de la aplicacin, se compilar y se utilizar el intrprete Java para ejecutarlo.

Ficheros Fuente Java


Los ficheros fuente en Java terminan con la extensin ".java". El lector puede crear un fichero utilizando cualquier editor de texto que tenga como contenido el cdigo de las ocho lneas de la mnima aplicacin, y guardarlo 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.

Compilacin
El compilador javac se encuentra en el directorio bin por debajo del directorio java, o aquel donde se haya instalado la plataforma Java 2. Este directorio bin, si se han seguido las instrucciones de instalacin, debera formar parte de la variable de entorno P A TH 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 el fichero fuente HolaMundoApp.java , se puede compilar con la lnea siguiente lnea de comandos:
%j a v a cH o l a M u n d o A p p . j a v a

Si no se han cometido errores al teclear ni se han tenido problemas con el P A TH a la hora de especificar el fichero fuente y del compilador, no debera aparecer mensaje alguno en la pantalla, y cuando vuelva a aparecer el indicador 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 este captulo, 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 en donde se haya instalado la plataforma Java 2. Se ejecutar la aplicacin con la lnea:
%j a v aH o l a M u n d o A p p

y debera aparecer en pantalla la respuesta de Java:


% H o l aM u n d o !

El smbolo %representa al prompt del sistema, y se utilizar aqu para presentar las respuestas que devuelva el sistema como resultado de la ejecucin de los comandos que se introduzcan por teclado o para indicar las lneas de comandos a introducir.

Cuando se ejecuta una aplicacin Java, el intrprete Java busca e invoca al mtodo main() de la clase cuyo nombre coincida con el nombre del fichero .c las s que se indique en la lnea de comandos. En el ejemplo, se indica al Sistema Operativo que arranque el intrprete Java y luego se indica al intrprete Java que busque y ejecute el mtodo main() de la aplicacin Java almacenada en el fichero HolaM und oAp p.c las s .

Problemas de compilacin
A continuacin se encuentra una lista de los errores ms frecuentes que se presentan a la hora de compilar un fichero con cdigo fuente Java, tomando como base los errores provocados sobre la mnima aplicacin Java que se est utilizando como ejemplo, pero tambin podra generalizarse sin demasiados problemas.
%b a s h :j a v a c :c o m m a n dn o tf o u n d

No se ha establecido correctamente la variable P A TH del sistema para el compilador javac . El compilador javac se encuentra en el directorio bin, que cuelga del directorio donde se haya instalado la plataforma Java, o JDK (Java Development Kit), segn se le quiera llamar. Tambin es posible que se deba a que la plataforma Java no ha sido instalada.
%H o l a M u n d o A p p . j a v a : 6 :c a n n o tr e s o l v es y m b o l s y m b o l :m e t h o dp r i n t l( j a v a . l a n g . S t r i n g ) l o c a t i o n :c l a s sj a v a . i o . P r i n t S t r e a m S y s t e m . o u t . p r i n t l (" H o l aM u n d o ! "); ^ 1e r r o r

Error tipogrfico, el mtodo es println no pr int l.


% I nc l a s sH o l a M u n d o A p p :m a i nm u s tb ep u b l i ca n ds t a t i c

Error de ejecucin, se olvid colocar la palabra static en la declaracin del mtodo main de la aplicacin.
%E x c e p t i o ni nt h r e a d" m a i n "j a v a . l a n g . N o C l a s s D e f F o u n d E r r o r :H o l a M u n d o a p p

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 el fichero de cdigo fuente de la aplicacin HolaMundoApp.java se coloca en vez de la declaracin actual de la clase HolaMundoApp, la lnea:
c l a s sH o l a M u n d o a p p{

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.
%N o t e :p r u e b a . j a v au s e sad e p r e c a t e dA P I . R e c o m p i l ew i t h" d e p r e c a t i o n "f o rd e t a i l s .1W a r n i n g

Esto es originado por otra de las novedades que ha introducido la plataforma Java a partir del JDK 1.1 como son los elementos obsoletos (deprecated), es decir, aquellas clases o mtodos que no se recomienda utilizar, aunque sigan siendo vlidos, porque estn destinados a desaparecer de la faz de la Tierra a partir de alguna de las versiones posteriores del JDK. Si se compila un programa que hace uso de uno de estas clases, o bien utiliza o sobrecarga un mtodo obsoleto, el compilador mostrar un mensaje de este tipo. Solamente se genera un aviso por mdulo, independientemente del nmero de mtodos obsoletos que se estn utilizando, por eso hay que seguir la recomendacin del aviso si se quiren saber los detalles completos de todas las clases y mtodos obsoletos que se estn utilizando. La llamada a estos mtodos rara vez tiene excusa, aunque haya casos especiales en que se escriba cdigo para que sea llamado

tanto por programas generados con la versin 1.0 del JDK como con versiones posteriores. En este caso JavaSoft recomienda indicarle al compilador que se est haciendo uso intencionado del mtodo obsoleto, y esto se consigue colocando el comentario /** @ deprec ate d */ justo antes del mtodo sobrecargado, por ejemplo:
/ * *@ d e p r e c a t e d* / p u b l i cb o o l e a nh a n d l e E v e n t (E v e n te v t){ i f (e v t . i d= =E v e n t . W I N D O W _ D E S T R O Y) S y s t e m . e x i t (0) ; r e t u r n (f a l s e) ; }

No obstante, en este caso y a pesar de estos avisos, el compilador genera cdigo perfectamente ejecutable.

Otros Ejemplos
Se muestran ejemplos que modifican el ejemplo HolaMundo La primera modificacin, HolaMundoApp2.java, es para imprimir el texto en una lnea usando mltiples sentencias
/ /H o l a M u n d o A p p 2 . j a v a / /I m p r i m i e n d ou n al n e ad et e x t oc o ns e n t e n c i a sm l t i p l e s p u b l i cc l a s sH o l a M u n d o A p p 2{ p u b l i cs t a t i cv o i dm a i n(S t r i n ga r g s [ ]){ S y s t e m . o u t . p r i n t (" H o l a") ; S y s t e m . o u t . p r i n t l n (" M u n d o ! ") ; } / /f i nd e lm t o d om a i n }/ /f i nd el ac l a s eH o l a M u n d o A p p 2

La siguiente modificacin, HolaMundoApp3.java, permite repetir el ejemplo anterior, empleando una sola sentencia y mediante el caracter de escape
/ /H o l a M u n d o A p p 3 . j a v a / /I m p r i m i e n d om l t i p l e sl n e a sd et e x t oc o nu n as o l as e n t e n c i a p u b l i cc l a s sH o l a M u n d o A p p 3{ p u b l i cs t a t i cv o i dm a i n(S t r i n ga r g s [ ]){ S y s t e m . o u t . p r i n t l n (" H o l a \ n \ t M u n d o ! ") ; } / /f i nd e lm t o d om a i n }/ /f i nd el ac l a s eH o l a M u n d o A p p 3

Normalmente, los carcteres en una cadena son mostrados exactamente como aparecen entre las dobles comillas. Sin embargo, se observa que los carcteres precedidos por la retrobarra (\ ) no se muestran en la pantalla, este carcter es conocido como el carcter de escape. Con este se le indica al mtodo pr int y al mtodo println que un carcter especial ser mostrado, con lo que se combina con el siguiente carcter que est enseguida de la retrobarra. En la siguiente tabla se listan varias secuencias de escape comunes y se describe como afectan los carcteres que se muestran en la ventana de comandos. \n \t Nueva lnea. Coloca el cursor de la pantalla al inicio de la siguiente lnea. Tabulador horizontal. Mueve el cursor de la pantalla a la siguiente parada de tabulador. Retorno de carro. Coloca el cursor de pantalla al inicio de la lnea actual -no avanza a la siguiente lnea. Cualquier carcter que se muestre despus del retorno de carro sobreescribir los carcteres previamente mostrados

\r

\\ \"

en la lnea. Retrobarra. Usado para mostrar la retrobarra. Comillas Dobles. Usadas para mostrar el carcter de comillas dobles.

Salida Formateada
En Java SE 5.0 se agreg el mtodo Sy ste m.out. printf para mostrar datos formateados. El siguiente ejemplo, HolaMundoApp4.java, muestra la forma como debe realizarse.
/ /H o l a M u n d o A p p 4 . j a v a / /I m p r i m i e n d om l t i p l e sl n e a sd et e x t oc o nS y s t e m . o u t . p r i n t f p u b l i cc l a s sH o l a M u n d o A p p 4{ p u b l i cs t a t i cv o i dm a i n(S t r i n ga r g s [ ]){ S y s t e m . o u t . p r i n t f (" % s \ n \ t % s \ n " ," H o l a " ," M u n d o ! ") ; } / /f i nd e lm t o d om a i n }/ /f i nd el ac l a s eH o l a M u n d o A p p 4

El primer argumento de pr int f es una cadena de formato que podra consistir de texto fijo y especificadores de formato. El texto fijo es mostrado tal como lo hara pr int o println . Cada especificador de formato es un marcador de posicin para un valor y especifica el tipo de dato para la salida. Los especificadores de formato podran incluir informacin opcional de formateo. La siguiente tabla indica algunos especificadores de formato. d o x X e E f g oG a oA c s Muestra un entero en base diez. Muestra un entero en base ocho. Muestra un entero en base hexadecimal. Muestra un valor de punto flotante en notacin cientfica. Muestra un valor de punto flotante en formato decimal. Muestra un valor de punto flotante en formato decimal o en notacin cientfica. Muestra un valor de punto flotante en formato hexadecimal. Muestra un carcter. Muestra una cadena.

En los campos se puede indicar su ancho insertando un entero entre el signo de porciento y el carcter de conversin, por ejemplo % 4 d en el especificador de formato. Si el ancho del campo es ms largo que el dato que ser impreso, el dato ser justificado a la derecha si es un nmero. Cuando se emplean carcteres de conversin de punto flotante, se puede indicar la precisin, (nmero de dgitos que aparecen despus del punto decimal), colocar el punto decimal y un entero representando la precisin antes del carcter de conversin, por ejemplo % . 3g , % 9.3f .

Introduccin de Valores desde la Entrada Estndar


El siguiente ejemplo, suma.java, lee dos enteros tecleados por el usuario, y realiza la suma de los valores y muestra el resultado. El programa deber guardar los nmeros dados por el usuario para despus hacer el clculo. El programa recuerda los nmeros y otros datos en la memoria de la computadora y los accede los datos a travs de elementos del programa llamados variables .
/ /s u m a . j a v a / /P r o g r a m ad es u m aq u em u e s t r al as u m ad ed o sn m e r o s . i m p o r tj a v a . u t i l . S c a n n e r ; p u b l i cc l a s ss u m a{

/ /m t o d om a i nq u ei n i c i al ae j e c u c i n p u b l i cs t a t i cv o i dm a i n (S t r i n ga r g s [ ]){ / /c r e a ru nS c a n n e rp a r ao b t e n e rl ae n t r a d ad e s d el av e n t a n ad ec o m a n d o s S c a n n e re n t r a d a=n e wS c a n n e r (S y s t e m . i n) ; i n tn u m e r o 1 ;/ /e lp r i m e ro p e r a n d o i n tn u m e r o 2 ;/ /e ls e g u n d oo p e r a n d o i n ts u m a ; / /s u m ad e ln u m e r o 1yn u m e r o 2 S y s t e m . o u t . p r i n t (" I n g r e s a re lp r i m e re n t e r o :") ;/ /i n d i c a d o r n u m e r o 1=e n t r a d a . n e x t I n t ( ) ; / /l e e re lp r i m e rn m e r od e lu s u a r i o S y s t e m . o u t . p r i n t (" I n g r e s a re ls e g u n d oe n t e r o :") ;/ /i n d i c a d o r n u m e r o 2=e n t r a d a . n e x t I n t ( ) ; / /l e e re ls e g u n d on m e r od e lu s u a r i o s u m a=n u m e r o 1+n u m e r o 2 ; / /a g r e g a rl o sn m e r o s

S y s t e m . o u t . p r i n t f (" L as u m ad e% dy% de s% d \ n " ,n u m e r o 1 ,n u m e r o 2 ,s u m a) ; } / /f i nd e lm t o d om a i n } / /f i nd el ac l a s es u m a

Entrada/Salida usando la GUI


Varias aplicaciones que son usadas diariamente usan ventanas o cuadros de dilogo (tambin llamados dilogos ) para interactuar con el usuario. Los cuadros de dilogo son ventanas en el cual el programa muestra mensajes importantes al usuario u obtiene informacin de este. La clase JO ptionP ane del paquete ja vax.sw ing proporciona cuadros de dilogo para la entrada y la salida. Estos dilogos son mostrados invocando los mtodos st atic J Opt ionP an e . Se presenta a continuacin el programa Suma.java, que es una aplicacin de suma que usa dos dilogos de entrada para obtener enteros del usuario y un mensaje de dilogo para mostrar la suma de los enteros que el usuario ingreso.
/ /S u m a . j a v a / /P r o g r a m aS u m aq u eu s aJ O p t i o n P a n ep a r al ae n t r a d ayl as a l i d a . i m p o r tj a v a x . s w i n g . J O p t i o n P a n e ;/ /e lp r o g r a m au s aJ O p t i o n P a n e p u b l i cc l a s sS u m a{ p u b l i cs t a t i cv o i dm a i n (S t r i n ga r g s [ ]){ / /o b t e n e re n t r a d ad e lu s u a r i od e s d el o sc u a d r o sd ee n t r a d ad eJ O p t i o n P a n e S t r i n gp r i m e r N m e r o= J O p t i o n P a n e . s h o w I n p u t D i a l o g (" E n t r a re lp r i m e re n t e r o ") ; S t r i n gs e g u n d o N m e r o= J O p t i o n P a n e . s h o w I n p u t D i a l o g (" E n t r a re ls e g u n d oe n t e r o ") ; / /c o n v e r t i rl a sc a d e n a sd ee n t r a d aav a l o r e se n t e r o sp a r au s a r l o se ne l / /c l c u l o . i n tn m e r o 1=I n t e g e r . p a r s e I n t (p r i m e r N m e r o) ; i n tn m e r o 2=I n t e g e r . p a r s e I n t (s e g u n d o N m e r o) ; i n ts u m a=n m e r o 1+n m e r o 2 ;/ /s u m a rl o sn m e r o s / /m o s t r a re lr e s u l t a d oe nu nm e n s a j ed ed i l o g od eJ O p t i o n P a n e J O p t i o n P a n e . s h o w M e s s a g e D i a l o g (n u l l ," L as u m ae s"+s u m a , " S u m ad eD o sE n t e r o s " ,J O p t i o n P a n e . P L A I N _ M E S S A G E) ; }/ /f i nd el ac l a s em a i n }/ /f i nd el ac l a s eS u m a