Sesión 1

Compilación. Paquetes. Hola Mundo.

1. Instalación del JDK 1.4

En este primer ejercicio vamos a realizar la instalación del JDK, necesario para compilar y ejecutar programas Java.

  1. Instala el SDK (Software Developer Kit) Java 1.4.2 (se encuentra en la página de recursos). Es el conjunto de herramientas que Sun proporciona para desarrollar en Java.
  2. Comprueba que la instalación ha funcionado correctamente, ejecutando el compilador de Java:
  3. > C:\j2sdk1.4.2_02\bin\javac
  4. Actualiza la variable de entorno PATH, añadiendo el directorio C:\j2sdk1.2.4_02\bin para que no tengas que teclear todo el camino cada vez que quieras ejecutar algún programa de Java. Para obtener información más detallada sobre cómo actualizar la variable de entorno PATH, puedes consultar el apéndice B de los apuntes del curso.
  5. Comprueba que todo funciona bien, cambiándote a cualquier directorio (por ejemplo C:\tmp y escribiendo:
  6. C:\tmp> javac

2. Mis primeros programas Java

En este ejercicio vamos a realizar, compilar y ejecutar dos programas Java. En uno de ellos habrá algún error y deberás corregirlo.

  1. Antes de empezar a programar, lee el apartado 1.1 (Compilación y ejecución de programas Java) de los apuntes.
  2. Crea el directorio C:\java, este va a ser el directorio de trabajo donde vas a guardar los programas ejemplo de esta primera sesión. Escribe el siguiente programa Java en un fichero de texto con un editor de texto cualquiera, como el Notepad. Graba el programa con el nombre Ejemplo1.java (es importante la "E" mayúscula).
    public class Ejemplo1 {
    public static void main(String[] args) {
    System.out.println("Hola mundo");
    }
    }
    Compila la clase y verás como se genera el fichero .class que contiene los bytecodes. Este fichero es el que después debe ejecutar la máquina virtual java (JVM):
    C:\java> javac Ejemplo1.java
    C:\java> dir

    . <DIR> 16/06/04 1:59a .
    .. <DIR> 16/06/04 1:59a ..
    EJEMPL~1 CLA 433 16/06/04 2:07a Ejemplo1.class
    EJEMPL~1 JAV 130 16/06/04 1:59a Ejemplo1.java
    Ejecuta el programa con la JVM:
    C:\java>java Ejemplo1
    Hola mundo

    Para ejecutar un programa Java, debes invocar con la JVM una clase que contenga un método estático llamado main; este es el método que se ejecutará.

  3. Escribe ahora el siguiente programa, y sálvalo con el nombre de Ejemplo2.java.
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import javax.swing.*;

    public class MiPrimerGUI {
    public static void main(String[] args) {
    // Defino la accion a ejecutar
    Action action = new AbstractAction("Hola mundo") {
    public void actionPerformed(ActionEvent evt) {
    System.out.println("Hola mundo");
    }
    };

    JButton button = new JButton(action);
    JFrame frame = new JFrame();

    // Añado el boton al marco
    frame.getContentPane().add(button, BorderLayout.CENTER);

    // Dimensiones del marco
    int frameWidth = 100;
    int frameHeight = 100;
    frame.setSize(frameWidth, frameHeight);

    // Muestro el marco
    frame.setVisible(true);

    // Le digo al frame que salga de la aplicacion
    // cuando se cierre
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    }
    Compila el programa y dará un mensaje de error. ¿Cuál es el error? ¿Cómo corregirlo? (contestalo en el fichero respuestas.txt). Corrige el error y ejecuta la clase. Deberá aparecer la siguiente ventana, y cada vez que pinches en el botón debería aparecer "Hola mundo" en la salida estándar.

    No intentes entender el código. Esto es sólo un aperitivo de lo que vendrá en el último módulo del curso.

3. Trabajando con paquetes

Vamos ahora a realizar unos cortos ejemplos para introducir el uso de paquetes en las clases Java.

  1. Vamos ahora a actualizar la variable CLASSPATH. Seguimos en el directorio C:\java, en el que se encuentra la clase compilada Ejemplo1.class. Si actualizamos el CLASSPATH (recuerda que es la variable del entorno que le indica al compilador y al intérprete Java dónde buscar las clases) de la siguiente forma

    set CLASSPATH=C:\

    y vuelves a probar a ejecutar el programa ejemplo

    C:\java> java Ejemplo1
    <MENSAJE DE ERROR>

    veras que aparece un mensaje de error. Para que funcione correctamente debes volver a actualizar el CLASSPATH 

    C:\java> set CLASSPATH=.
    C:\java> java Ejemplo1
    Hola mundo
  2. ¿Qué ha causado el error? ¿Por qué se ha arreglado? ¿Qué pasará si actualizas el CLASSPATH de la siguiente forma:  "set CLASSPATH = .;C:\java" ? (contesta en el fichero respuestas.txt).

  3. Vamos a declarar que la clase Ejemplo1 se defina en el paquete modulo1.sesion1. Para eso debemos cambiar el código fuente de la siguiente forma.

    package modulo1.sesion1; 

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

    Compila el programa, crea la estructura de directorios modulo1\sesion1 y coloca allí la nueva clase compilada. Puedes hacerlo con:

    C:\java> javac Ejemplo1.java
    C:\java> mkdir modulo1
    C:\java> cd modulo1
    C:\java\modulo1> mkdir sesion1
    C:\java\modulo1> cd ..
    C:\java> copy Ejemplo1.class modulo1\sesion1
    C:\java> del Ejemplo1.class

    Una forma más directa de hacer lo mismo es usando la directiva -d del compilador de Java. Esta directiva permite indicarle al compilador un directorio en el que vamos a dejar los ficheros .class generados. Si los ficheros .class están en un package, el compilador se encargará de crear los directorios necesarios:

    C:\java> javac Ejemplo1.java -d .

    Por último, para ejecutar el programa recién compilado hay que llamar a la clase indicando todo su camino (modulo1.sesion1.Ejemplo1). La variable CLASSPATH debe contener el directorio padre y podemos llamar al programa desde cualquier directorio.

    C:\java>set CLASSPATH=.;C:\java
    C:\java>cd ..
    C:\> java modulo1.sesion1.Ejemplo1
    Hola mundo
  4. Por último, vamos a crear un fichero JAR en el que se incluya la clase Ejemplo1 y el paquete en el que reside:
    C:\java> jar cvf ejemplo.jar modulo1 
    manifest agregado
    agregando: modulo1/(entrada = 0) (salida= 0)(almacenado 0%)
    agregando: modulo1/sesion1/(entrada = 0) (salida= 0)(almacenado 0%)
    agregando: modulo1/sesion1/Ejemplo1.class(entrada = 442) (salida= 305)(desinflado 30%)

    Actualizamos el CLASSPATH con el camino del fichero JAR y ya podemos llamar al intérprete

    C:\java> set CLASSPATH=C:\java\ejemplo.jar
    C:\java> java modulo1.sesion1.Ejemplo1
    Hola mundo
  5. ¿Qué valor deberías poner en el CLASSPATH para poder usar la clase misclases.utils.Robot que tiene siguiente PATH en el sistema operativo: C:\java\lib\misclases\utils\Robot.class? ¿Y si la clase se encuentra en el mismo paquete dentro del fichero JAR misclases.jar, que tiene el PATH: C:\java\lib\misclases.jar? (contesta en el fichero respuestas.txt)

4. El juego de los números

Vamos ahora a un ejercicio en el que compilarás un programa algo más completo.

  1. Vamos a ver un ejemplo algo más completo, en el que se utilizan objetos y clases definidas por el usuario. Escribe y compila la siguiente clase, es una clase con un único método (startGame). Lo siguiente es una imagen, por lo que tendrás que teclearlo todo. Corrige los errores (seguro que tendrás más de uno al copiar!) hasta que los únicos errores pendientes sean los derivados de que la clase Player no está definida (6 errores).

  2. Escribe y compila la clase Player (en el directorio actual) para que el programa funcione correctamente.

    Como verás, ninguna clase tiene el método main, por lo que no se puede lanzar el programa; escribe la clase GameLauncher, con el método main que lance el programa. El resultado debe ser algo como:
        C:\plj\modulo1>java GameLauncher
    Estoy pensando un numero entre 0 y 9 ...
    El numero a adivinar es: 2
    Yo digo: 0
    Yo digo: 6
    Yo digo: 2
    El jugador 1 dice: 0
    El jugador 2 dice: 6
    El jugador 3 dice: 2
    Tenemos un ganador!
    El jugador 1 ha hacertado?: false
    El jugador 2 ha hacertado?: false
    El jugador 3 ha hacertado?: true

5. Un último programa

Por último, vas a escribir un programa completo a partir de un ejemplo.

  1. Veamos un último programa, que escribe en la salida estándar los argumentos que se le pasan, separados por dos puntos ":".

    public class Echo {
    public static void main(String[] args) {
    int i=0;
    while (i < args.length){
    System.out.print(args[i]);
    System.out.print(":");
    i++;
    }
    System.out.println();
    }
    }
  2. Escribe un programa Reverse que escriba en la salida estándar los argumentos que se le pasa al intérprete Java, pero invertidos y separados por dos puntos ":".
    C:\java>java Reverse Hola que tal
    tal:que:Hola
  3. Escribe un último programa Reverse2 que invierta también los caracteres de cadaa palabra. Para ello, puedes acceder al carácter i-ésimo de una palabra usando el método charAt de la clase String. Por ejemplo str.charAt(0) devuelve el carácter 0 (el primero) del objeto String que está en la variable str. También necesitas saber la longitud de una palabra. Puedes obtener la longitud de un String str, llamando al método length así: str.length().
    C:\java>java Reverse2 Hola que tal
    lat:euq:aloH:

PARA ENTREGAR

Debes crear un ZIP llamado sesion1.zip con:

¡No lo entregues todavía! Debes entregar todas las sesiones del primer módulo juntas.