Ejemplos java y C/linux

Tutoriales

Enlaces

Licencia

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Para reconocer la autoría debes poner el enlace http://www.chuidiang.com

Hola mundo con paquetes en java

Una vez hecho nuestro programa Hola Mundo en java, vamos a hacer uno similar, pero usando paquetes.

QUÉ SON PAQUETES EN JAVA

Cuando hacemos programas más grandes, es normal que el número de clases vaya creciendo. Cada vez tenemos más y más clases. Meterlas todas en el mismo directorio no suele ser bonito. Es mejor hacer grupos de clases, de forma que todas las clases que traten de un determinado tema o estén relacionadas entre sí vayan juntas. Por ejemplo, si hacemos un programa de una agenda de teléfonos que los guarde en una base de datos, podemo meter todas las clases que tratan con la base de datos en un paquete (grupo), todas las de ventanas en otro, las de imprimir en otro, etc, etc.

Un paquete de clases es un grupo de clases que agrupamos juntas porque consideramos que están relacionadas entre sí o tratan de un tema común.

LA CLASE HOLA MUNDO EN UN PAQUETE

Java nos ayuda a organizar las clases en paquetes. En cada fichero .java que hagamos, al principio, podemos indicar a qué paquete pertenece la clase que hagamos en ese fichero.

Por ejemplo, si decidimos agrupar nuestros programas de pruebas, incluido el Hola Mundo, en un paquete "prueba", pondríamos esto en nuestro fichero HolaMundo.java

package prueba;

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

El código es exactamente igual al de nuestro Hola Mundo original, pero hemos añadido la línea "package prueba;" al principio.

Hasta aquí todo correcto. Sin embargo, al hacer esto, para que todo funcione bien, java nos obliga a organizar los directorios, compilar y ejecutar de cierta forma.

ESTRUCTURA DE DIRECTORIOS ASOCIADA

Si hacemos que HolaMundo.java  pertenezca al paquete prueba, java nos obliga a crear un subdirectorio "prueba" y meter el HolaMundo.java ahí.

Es decir, debemos tener esto así (unix y windows)

/<directorio_usuario>/mi_proyecto_HolaMundo/prueba/HolaMundo.java
C:\<directorio_usuario>\mi_proyecto_HolaMundo\prueba\HolaMundo.java

Nuevamente, las mayúsculas y minúsculas son importantes. Tal cual lo pongamos en "package", debemos poner el nombre del subdirectorio.

COMPILAR UNA CLASE QUE ESTÁ EN UN PAQUETE

Para compilar la clase que está en el paquete debemos situarnos en el directorio padre del paquete y compilar desde ahí

$ cd /<directorio_usuario>/mi_proyecto_HolaMundo
$ javac prueba/HolaMundo.java
C:\> cd C:\<directorio_usuario>\mi_proyecto_HolaMundo
C:\> javac prueba\HolaMundo.java

Si todo va bien, en el directorio "prueba" se nos creará un HolaMundo.class

EJECUTAR UNA CLASE QUE ESTÁ EN UN PAQUETE

Una vez generado el HolaMundo.class en el directorio prueba, para ejecutarlo debemos estar situados en el directorio padre de "prueba". El nombre "completo" de la clase es "paquete.clase", es decir "prueba.HolaMundo". Por ello, para ejecutar, debemos hacerlo así

$ cd /<directorio_usuario>/mi_proyecto_HolaMundo
$ java prueba.HolaMundo
Hola Mundo
C:\> cd C:\<directorio_usuario>\mi_proyecto_HolaMundo
C:\> java prueba.HolaMundo
Hola Mundo

Si todo va como debe, debería salir "Hola Mundo" en la pantalla

EL CLASSPATH CUANDO LAS CLASES ESTÁN EN PAQUETES

Cuando las clases están en paquetes, la variable CLASSPATH debe ponerse de tal forma que encuentre el paquete, NO la clase. Es decir, en nuestro ejemplo

$ CLASSPATH=/<directorio_usuario>/mi_proyecto_HolaMundo
$ export CLASSPATH
$ java prueba.HolaMundo
Hola Mundo
C:\> set CLASSPATH="C:\<directorio_usuario>\mi_proyecto_HolaMundo"
C:\> java prueba.HolaMundo
Hola Mundo

o bien, si usamos la opción -cp en la línea de comandos

$ java -cp /<directorio_usuario>/mi_proyecto_HolaMundo prueba.HolaMundo
Hola Mundo
C:\> java -cp "C:\<directorio_usuario>\mi_proyecto_HolaMundo" prueba.HolaMundo
Hola Mundo

PAQUETES ANIDADOS

Para poder organizar mejor las cosas, java permite hacer subpaquetes de los paquetes y subpaquetes de los subpaquetes y así sucesivamente. Por ejemplo, si quiero partir mis clases de prueba en pruebas básicas y pruebas avanzadas, puedo poner más niveles de paquetes separando por puntos

package prueba.basicas;
...
package prueba.avanzadas;
...

A nivel de subdirectorios tendría que crear los subdirectorios "basicas" y "avanzadas" debajo de "prueba" y meter ahí las clases que correspondan. Para compilar, en el directorio del proyecto habria que compilar poniendo todo el path hasta llegar a la clase. Idem para el CLASSPATH. Para ejecutar, el nombre de la clase va con todos los paquetes separados por puntos, es decir "prueba.basicas.HolaMundo" y "prueba.avanzadas.HolaMundoRemoto".

Es decir:

/<directorio_usuario>/mi_proyecto_HolaMundo/prueba/basicas/HolaMundo.java
$ cd /<directorio_usuario>/mi_proyecto_HolaMundo
$ javac prueba/basicas/HolaMundo.java
$ java -cp /<directorio_usuario>/mi_proyecto_HolaMundo prueba.basicas.HolaMundo
Hola Mundo
C:\<directorio_usuario>\mi_proyecto_HolaMundo\prueba\basicas\HolaMundo.java
C:\> cd C:\<directorio_usuario>\mi_proyecto_HolaMundo
C:\> javac prueba\basicas\HolaMundo.java
C:\> java -cp C:\<directorio_usuario>\mi_proyecto_HolaMundo prueba.basicas.HolaMundo
Hola Mundo

Para la próxima, el cómo empaquetar los .class en ficheros .jar ...

Estadísticas y comentarios

Numero de visitas desde el 4 Feb 2007: