Compilación. Paquetes. Hola Mundo.
En este primer ejercicio vamos a realizar la instalación del JDK, necesario para compilar y ejecutar programas Java.
> C:\j2sdk1.4.2_02\bin\javac
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.C:\tmp
y escribiendo:C:\tmp> javac
En este ejercicio vamos a realizar, compilar y ejecutar dos programas Java. En uno de ellos habrá algún error y deberás corregirlo.
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 {Compila la clase y verás como se genera el fichero
public static void main(String[] args) {
System.out.println("Hola mundo");
}
}
.class
que contiene los bytecodes. Este fichero es el que después debe
ejecutar la
máquina virtual java (JVM):C:\java> javac Ejemplo1.javaEjecuta el programa con la JVM:
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
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á.
Ejemplo2.java
.import java.awt.*;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.
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);
}
}
Vamos ahora a realizar unos cortos ejemplos para introducir el uso de paquetes en las clases Java.
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
¿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).
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
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
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)Vamos ahora a un ejercicio en el que compilarás un programa algo más completo.
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).Player
(en el directorio actual)
para que el programa funcione correctamente. 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
Por último, vas a escribir un programa completo a partir de un ejemplo.
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();
}
}
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
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.