Professional Documents
Culture Documents
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.
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
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
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 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 .
/ /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