Apuntes Lenguaje Java

12. Compilación y ejecución de programas

12.1. Creación y Compilación de un programa Java
12.2. Ejecución de un programa Java.
12.3. Archivos fuente (.java) y ejecutables (.class

En este apartado se asume que se ha instalado el JDK (J2SE) distribuido por SUN Microsystems y que tanto el compilador (javac) como la JVM (java) están accesibles. Asumiremos que los comandos se emitirán desde una ventana DOS en un sistema Windows, siendo la sintaxis en un entorno UNIX muy parecida. En este capítulo se verán todos los pasos necesarios para crear, compilar y ejecutar un programa Java.

12.1. Creación y Compilación de un programa Java

PASO 1: Con un editor de texto simple (incluso notepad sirve, aunque resulta poco aconsejabe) creamos un archivo con el contenido siguiente:

package Programas.Ejemplo1;

class HolaMundo {
    public static void main ( String [] args) {
        System.out.println("Hola a todos");
    }
}

Guardamos el fichero fuente con nombre HolaMundo.java en la carpeta: C:\ApuntesJava\Programas\Ejemplo1.

PASO 2: Abrimos una ventana DOS y en ella:

C:> cd C:\ApuntesJava 
C:\ApuntesJava>javac Programas\Ejemplo1\HolaMundo.java

Si no hay ningún error en el programa se producirá la compilación y el compilador almacenará en el directorio C:\ApuntesJava\Programas\Ejemplo1 un fichero de nombre HolaMundo.class, con el código ejecutable correspondiente a la clase HolaMundo.

Recuerda que en Java las mayúsculas y minúsculas son significativas. No es lo mismo la clase ejemplo1 que la clase Ejemplo1. Esto suele ser fuente de errores, sobre todo al principio. Sin embargo, ten en cuenta que en algunos sistemas operativos como Windows, o más concretamente en una ventana DOS, esta distinción no existe. Puedes poner cd C:\ApuntesJava o cd C:\APUNTESJAVA  indistintamente: el resultado será el mismo (no así en cualquier UNIX, que sí distingue unas y otras). Asegurate por tanto, de que las palabras están correctamente escritas. 

Cuando pones javac Programas\Ejemplo1\HolaMundo.java estás indicando al compilador que busque un archivo de nombre HolaMundo.java en la ruta Programas\Ejemplo1, a partir del directorio actual; es decir, estás especificando la ruta de un archivo.

En el ejemplo se utiliza la clase del API de Java System. Sin embargo el programa no tiene ningún import. No obstante el compilador no detecta ningún error y genera el código ejecutable directamente. Esto se debe a que la clase System está definida en el package java.lang, que es el único del que no es necesario hacer el import, que es hecho implicitamente por el compilador. Para cualquier clase del API, definida fuera de este package es necesario hacer el impor correspondiente.

12.2. Ejecución de un programa Java

PASO 3: Ejecutar el programa: Desde la ventana DOS.

C:\ApuntesJava>java Programas.Ejemplo1.HolaMundo

Se cargará la JVM, cargará la clase HolaMundo y llamará a su método main que producirá en la ventana DOS la salida:

Hola a todos

Los archivos .class son invocables directamente desde la línea de comandos (con la sintaxis java nombreDeClase) si tienen un método main definido tal como se vio en un capítulo anterior.

Se puede indicar a la JVM que busque las clases en rutas alternativas al directorio actual. Esto se hace con el parámetro -classpath (abreviadamente -cp) en la línea de comandos. Por ejemplo si el directorio actual es otro, podemos invocar el programa de ejemplo de la forma:

C:\Windows>java -cp C:\ApuntesJava Programas.Ejemplo1.HolaMundo

Con el parámetro -cp se puede especificar diversas rutas alternativas para la búsqueda de clases separadas por ;

Cuando pones java Programas.Ejemplo1.HolaMundo estás indicando a la JVM que cargue y ejecute la clase HolaMundo del Package Programas, subpackage Ejemplo1. Para cumplir está orden, expresada en términos Java de clases y packages la JVM buscará el archivo HolaMundo.class en la ruta Programas\Ejemplo1 que es algo expresado en términos del sistema de archivos, y por tanto del Sistema Operativo.

12.3. Archivos fuente (.java) y ejecutables (.class)

El esquema habitual es tener un archivo fuente por clase y asignar al archivo fuente el mismo nombre que la clase con la extensión .java (el nombre .java para la extensión es obligatorio). Esto generará al compilar un archivo .class con el mismo nombre que el fuente ( y que la clase). Fuentes y módulos residirán en el mismo directorio.

Lo habitual es tener uno o varios packages que compartan un esquema jerárquico de directorios en función de nuestras necesidades (packages por aplicaciones, temas, etc.)

Es posible definir más de una clase en un archivo fuente, pero sólo una de ellas podrá ser declarada public (es decir podrá ser utilizada fuera del package donde se define). Todas las demás clases declaradas en el fuente serán internas al package. Si hay una clase public entonces, obligatoriamente, el nombre del fuente tiene que coincider con el de la clase declarada como public . Los modificadores de acceso (public, es uno de ellos) se verán en el capítulo siguiente.

Antonio Bel Puchol - antonio@abelp.net