jueves, 17 de julio de 2008

Capítulo 1. Aspectos básicos de Java (IV)

1.7. Editar, compilar y ejecutar programas


En este capítulo explicaremos como compilar y ejecutar programas en Java, tomando como ejemplo el programa de bienvenida que hemos presentado anteriormente.


Estas operaciones pueden ser llevadas a cabo mediante las herramientas del SDK de Java o utilizando un entorno de desarrollo que las lleve incorporadas. Vamos a estudiar el empleo de ambas opciones.


1.7.1. Utilización de las herramientas del SDK


Aunque en la gran mayoría de las ocasiones se utilizarán IDE’s para la construcción de programas Java, es importante conocer como se realizan estas operaciones a un más bajo nivel. Por ello, comenzaremos analizando la forma de trabajar de los comandos básicos del SDK.


Estos comandos podemos encontrarlos en la carpeta \bin del directorio de instalación del SDK. Si aun no lo tenemos instalado podemos descargarlo de forma gratuita de la página Web de Java: http://java.sun.com. Aquí, dentro de la zona de descargas para la edición estándar, elegiremos la última de las versiones existentes de esta plataforma, actualmente la versión JDK 1.6 (comercialmente llamada Java 6).


Tras la instalación del SDK se crearán una serie de directorios en la ubicación que le hemos indicado, entre ellos el directorio \bin donde están los comandos javac.exe y java.exe (ver figura 2).


Antes de poder utilizar estos comandos, será necesario configurar en nuestra máquina ciertas variables del sistema.


 
 

1.7.1.1. Las variables de entorno PATH y CLASSPATH



Las variables de entorno almacenan datos que pueden ser consultados por las distintas aplicaciones instaladas en nuestro ordenador. En el caso concreto de PATH y CLASSPATH, almacenan información necesaria para poder compilar y ejecutar aplicaciones con el JDK de Java desde cualquier parte del equipo


La manera de configurar una variable de entorno depende del sistema operativo de la máquina; en el caso concreto de Windows, esta operación se realiza a través del panel de control.


La variable de entorno PATH


Esta variable debe contener la ruta de la carpeta del JDK donde se encuentran las herramientas para compilación y ejecución de programas, es decir, la carpeta \bin del directorio de instalación del JDK:


 
 
El motivo por el que se incluye esta dirección en la variable PATH es para permitir que puedan invocarse los comandos de compilación y ejecución de programas desde cualquier directorio del disco.



La variable de entorno CLASSPATH


De cara a que se puedan localizar las clases utilizadas por un programa, tanto a la hora de compilarlo como a la hora de ejecutarlo, la variable de entorno CLASSPATH debe contener las direcciones de las carpetas donde se encuentran los archivos .class utilizados por nuestro programa, incluido el propio .class del programa que se va a ejecutar.


Normalmente, las direcciones de las clases del JDK no es necesario incluirlas en el CLASSPATH ya que implícitamente el compilador sabe dónde encontrarlas. Como normalmente se suele ejecutar un programa desde el mismo directorio en el que se encuentra, se suele incluir el valor “.” en la variable CLASSPATH para hacer referencia al directorio actual.


1.7.1.2. Compilación de una clase Java


Una vez configuradas las variables de entorno, procedemos a codificar el programa, para lo cual utilizaremos un editor de texto cualquiera. El resultado final lo almacenaremos como un archivo de texto con extensión .java y nombre igual al de la clase (Ejemplo.java). Es importante destacar en este punto que el nombre de un archivo de código fuente Java deberá tener el mismo nombre que la clase definida como pública (public).


Seguidamente, podemos proceder a su compilación, la cual generará como resultado un archivo .class por cada clase incluida en el código fuente. En este caso, se generará un único archivo llamado Ejemplo.class.


La compilación se llevará a cabo mediante el comando javac.exe del JDK. Para ello, nos situaremos con la consola de comandos en el directorio donde se encuentra el archivo .java, en nuestro caso donde hayamos colocado el programa Ejemplo.java, y teclearemos:


javac Ejemplo.java






Si el código no presenta ningún error de sintaxis la compilación se hará correctamente y no se generará ningún mensaje de aviso, volviéndose a mostrar en pantalla la línea de comandos.


Empaquetado de una clase Java


Normalmente, las clases Java se estructuran en paquetes. Aunque en temas posteriores volveremos a hablar de los paquetes, es necesario saber que el empaquetado de las clases facilita la organización de las mismas, agrupando en un mismo paquete clases que realicen alguna función similar o estén relacionadas de alguna manera.


Hay que pensar que los paquetes son para las clases lo que las carpetas son para los archivos de un disco. De hecho, físicamente, los paquetes no dejan de ser eso, carpetas o directorios donde se almacenan los archivos .class.


De cara a conseguir distintos niveles organizativos, un paquete puede dividirse a su vez en subpaquetes y cada uno de estos contener nuevos subpaquetes, así hasta conseguir los niveles de anidación que consideremos necesarios.


 
 
En la figura 4 vemos un ejemplo de organización de paquetes, donde una determinada clase llamada Miclase.class se encuentra dentro de un paquete en un tercer nivel de anidación.



Cuando las clase se encuentran dentro de paquetes, el nombre identificativo de la clase, denominado nombre cualificado, es el formado por el nombre de la misma precedido por los distintos paquetes en que se encuentra. Ya veremos más adelante las implicaciones que tiene en un programa de cara a la utilización de las mismas el tener clases incluidas dentro de paquetes.


A la hora de definir la clase, si queremos que esta forme parte de un determinado paquete será necesario indicarlo mediante la sentencia package, sentencia que debe ser la primera en aparecer dentro del archivo .java. En el caso de la clase de ejemplo que aparece en la figura 4, la definición de la misma sería:


package principal.secundario1.subnivel;


public class Miclase{


:


}






Para compilar una clase que está definida dentro de un paquete, se debería utilizar el siguiente formato del comando javac desde el directorio en el que se encuentra el archivo .java (directorio actual):


javac –d . NombreClase.java






En el ejemplo anterior:


javac –d . Miclase.java






Donde el atributo “d” del comando indica que la clase será incluida en el directorio indicado en la sentencia package, mientras que el punto “.” indicaría que la ruta de ese directorio comienza desde el directorio actual. Si dicho directorio no existiera en el momento de la compilación, se crearía al ejecutar el comando anterior. En cualquier caso, la situación final sería la indicada en la figura 4.


1.7.1.3. Ejecución de una clase Java


Como resultado de la compilación, se habrá generado en el mismo directorio en el que se encuentra el archivo de código fuente .java un archivo bytecode llamado Ejemplo.class. Este archivo, tal y como hemos comentado al principio, puede ser transportado a otro equipo para proceder a su ejecución. Dicha ejecución es llevada a cabo también desde la consola de comandos a través del programa java.exe, seguido del nombre de la clase que contiene al método main(). Si seguimos en el directorio donde se encuentra el archivo Ejemplo.class teclearemos lo siguiente para realizar su ejecución:


java Ejemplo






Obsérvese que no se debe especificar la extensión .class para ejecutar la clase que contiene al método main().


Una vez invocado el comando anterior, el programa se ejecutará y mostrará en la consola el mensaje de saludo que definimos durante la codificación del método, tal y como se indica en la figura 5.


 
 
Si la clase estuviera contenida en un paquete, la llamada al comando java.exe debería realizarse desde el directorio actual (el raíz del paquete o desde el que se realizó la compilación) utilizando el siguiente formato:



java paquete.subpaquete.NombreClase






Por ejemplo, para ejecutar la clase Miclase creada según el diagrama de la figura 4, debería especificarse:


java principal.secundario1.subnivel.Miclase






Este capítulo forma parte del Máster de Java-J2EE-XML-AJAX del Grupo SYNCROM.
Más información en
www.syncrom.com o en el Microsite del Máster OnLine de Java-J2EE


No hay comentarios: