0% encontró este documento útil (0 votos)
7 vistas45 páginas

JDK Netbeans

netbeans
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas45 páginas

JDK Netbeans

netbeans
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 45

INTRODUCCIÓN A JAVA

Introducción a Java
Java surgió en 1991 cuando un grupo de ingenieros de Sun Microsystems trataron
de diseñar un nuevo lenguaje de programación destinado a electrodomésticos. La
reducida potencia de cálculo y memoria de los electrodomésticos llevó a
desarrollar un lenguaje sencillo capaz de generar código de tamaño muy
reducido.

Debido a la existencia de distintos tipos de CPUs y a los continuos cambios, era


importante conseguir una herramienta independiente del tipo de CPU utilizada.
Desarrollaron un código "neutro" que no dependía del tipo de electrodoméstico, el
cual se ejecutaba sobre una "máquina hipotética o virtual" denominada Java
Virtual Machine (JVM). Era la JVM quien interpretaba el código neutro
convirtiéndolo a código particular de la CPU utilizada. Esto permitía lo que luego
se ha convertido en el principal lema del lenguaje: "Write Once, Run Everywhere".
A pesar de los esfuerzos realizados por sus creadores, ninguna empresa de
electrodomésticos se interesó por el nuevo lenguaje.

Como lenguaje de programación para computadores, Java se introdujo a �nales


de 1995. La clave fue la incorporación de un intérprete Java en la versión 2.0 del
programa Netscape Navigator, produciendo una verdadera revolución en Internet.
Java 1.1 apareció a principios de 1997, mejorando sustancialmente la primera
versión del lenguaje. Java 1.2, más tarde rebautizado como Java 2, nació a �nales
de 1998.

Al programar en Java no se parte de cero. Cualquier aplicación que se desarrolle


“cuelga” (o se apoya, según como se quiera ver) en un gran número de clases
preexistentes. Algunas de ellas las ha podido hacer el propio usuario, otras pueden
ser comerciales, pero siempre hay un número muy importante de clases que
forman parte del propio lenguaje (el API o Application Programming Interface de
Java). Java incorpora en el propio lenguaje muchos aspectos que en cualquier
otro lenguaje son extensiones propiedad de empresas de software o fabricantes
de ordenadores (threads, ejecución remota, componentes, seguridad, acceso a
bases de datos, etc.). Por eso muchos expertos opinan que Java es el lenguaje
ideal para aprender la informática moderna, porque incorpora todos estos
conceptos de un modo estándar, mucho más sencillo y claro que con las citadas
extensiones de otros lenguajes. Esto es consecuencia de haber sido diseñado más
recientemente y por un único equipo.

El principal objetivo del lenguaje Java es llegar a ser el “nexo universal” que
conecte a los usuarios con la información, esté ésta situada en el ordenador local,
en un servidor de Web, en una base de datos o en cualquier otro lugar.

Java es un lenguaje muy completo (de hecho se está convirtiendo en un macro-


lenguaje: Java 1.0 tenía 12 packages; Java 1.1 tenía 23 y Java 1.2 tiene 59). En cierta
forma casi todo depende de casi todo. Por ello, conviene aprenderlo de modo
iterativo: primero una visión muy general, que se va re�nando en sucesivas
iteraciones. Una forma de hacerlo es empezar con un ejemplo completo en el que
ya aparecen algunas de las características más importantes.

La compañía Sun describe el lenguaje Java como “simple, orientado a objetos,


distribuido, interpretado, robusto, seguro, de arquitectura neutra, portable, de altas
prestaciones, multitarea y dinámico”. Además de una serie de halagos por parte
de Sun hacia su propia criatura, el hecho es que todo ello describe bastante bien
el lenguaje Java, aunque en algunas de esas características el lenguaje sea
todavía bastante mejorable. Algunas de las anteriores ideas se irán explicando a
lo largo de este manual.
Características de JAVA

A continuación haremos una pequeña redacción de las características del


lenguaje, que nos ayudarán a ver para que tipo de problemas está pensado Java:

Simple: Es un lenguaje sencillo de aprender. Su sintaxis es la de C++ "simpli�cada".


Los creadores de Java partieron de la sintaxis de C++ y trataron de eliminar de
este todo lo que resultase complicado o fuente de errores en este lenguaje.

Orientado a Objetos: Posiblemente sea el lenguaje más orientado a objetos de


todos los existentes; en Java todo, a excepción de los tipos fundamentales de
variables (int, char, long...) es un objeto.

Distribuido: Java está muy orientado al trabajo en red, soportando protocolos


como TCP/IP, UDP, HTTP y FTP. Por otro lado el uso de estos protocolos es
bastante sencillo comparandolo con otros lenguajes que los soportan.

Robusto: El compilador Java detecta muchos errores que otros compiladores solo
detectarían en tiempo de ejecución o incluso nunca. (ej: if(a=b) then ... el
compilador Java no nos dejaría compilar este código.

Seguro: Sobre todo un tipo de desarrollo: los Applet. Estos son programas
diseñados para ser ejecutados en una página web. Java garantiza que ningún
Applet puede escribir o leer de nuestro disco o mandar información del usuario
que accede a la página a través de la red (como, por ejemplo, la dirección de
correo electrónico). En general no permite realizar cualquier acción que pudiera
dañar la máquina o violar la intimidad del que visita la página web.

Portable: En Java no hay aspectos dependientes de la implementación, todas las


implementaciones de Java siguen los mismos estándares en cuanto a tamaño y
almacenamiento de los datos. Esto no ocurre así en C++, por ejemplo. En éste un
entero, por ejemplo, puede tener un tamaño de 16, 32 o más bits, siendo lo única
limitación que el entero sea mayor que un short y menor que un long int. Así
mismo C++ bajo UNIX almacena los datos en formato little endian, mientas que
bajo Windows lo hace en big endian. Java lo hace siempre en little edian para
evitar confusiones.
Arquitectura Neutral: El código generado por el compilador Java es
independiente de la arquitectura: podría ejecutarse en un entorno UNIX, Mac o
Windows. El motivo de esto es que el que realmente ejecuta el código generado
por el compilador no es el procesador del ordenador directamente, sino que este
se ejecuta mediante una máquina virtual. Esto permite que los Applets de una web
pueda ejecutarlos cualquier máquina que se conecte a ella independientemente
de que sistema operativo emplee (siempre y cuando el ordenador en cuestión
tenga instalada una máquina virtual de Java).

Rendimiento medio: Actualmente la velocidad de procesado del código Java es


semejante a la de C++, hay ciertas pruebas estándares de comparación
(benchmarks) en las que Java gana a C++ y viceversa. Esto es así gracias al uso
de compiladores just in time, compiladores que traduce los bytecodes de Java en
código para una determinada CPU, que no precisa de la máquina virtual para ser
ejecutado, y guardan el resultado de dicha conversión, volviéndolo a llamar en
caso de volverlo a necesitar, con lo que se evita la sobrecarga de trabajo
asociada a la interpretación del bytecode. No obstante por norma general el
programa Java consume bastante más memoria que el programa C++, ya que no
sólo ha de cargar en memoria los recursos necesario para la ejecución del
programa, sino que además debe simular un sistema operativo y hardware
virtuales (la máquina virtual). Por otro lado la programación grá�ca empleando
las librerías Swing es más lenta que el uso de componentes nativos en las
interfaces de usuario. En general en Java se ha sacri�cado el rendimiento para
facilitar la programación y sobre todo para conseguir la característica de
neutralidad arquitectural, si bien es cierto que los avances en las máquinas
virtuales remedian cada vez más estas decisiones de diseño.

Multithread: Soporta de modo nativo los threads, sin necesidad del uso de de
librerías especí�cas (como es el caso de C++). Esto le permite además que cada
Thread de una aplicación java pueda correr en una CPU distinta, si la aplicación se
ejecuta en una máquina que posee varias CPU. Las aplicaciones de C++ no son
capaces de distribuir, de modo transparente para el programador, la carga entre
varias CPU.
Instalación JDK y NetBeans

Instalación JDK

Está en otro documento porque cambia constantemente el proceso.


Comprobación

¿Todo funciona correctamente?

Para comprobar el funcionamiento de la instalación escribiremos un pequeño


programa Java, lo compilaremos y lo ejecutaremos.

IMPORTANTE: Lo primero será crear la carpeta donde guardaremos los


programas que iremos escribiendo, la llamaremos "ejerjavasrc" y la crearemos
en la raiz del disco duro "c:/ejerjavasrc", en linux crearla en el home del usuario.

Comenzaremos escribiendo el código fuente. Para ello utilizaremos el block de


notas de Windows (notepad.exe) o el gedit de linux, NUNCA UN PROCESADOR DE
TEXTO COMO OFFICE, O LIBREOFFICE y escribir el siguiente código:

/*
* La clase "Prueba de funcionamiento".
*/
public class PruebaFuncionamiento {
public static void main (String[] args) {
System.out.println("Ya funciona");
}
}

Lo guardaremos con el siguiente nombre "PruebaFuncionamiento.java" �jaros


bien en las mayúsculas y minúsculas, de otra forma no funcionará, además ya
nos tenemos que aconstumbrar a ir nombrando los �cheros, variables, etc como
corresponde, los nombres de los programas deben coincidir con el nombre de su
clase principal, deben empezar por mayúscula y si se compone de varias
palabras, todas deben comenzar por mayúscula.

Descarga el �chero pulsando aquí.


Linux

COMPILACIÓN

Javac. Es el comando compilador de Java. Su sintaxis es (suponiendo que


estamos en un directorio llamado ejerjavasrc que cuelga directamente de la raiz):

c:/ejerjavasrc/javac ejemplo.java

La entrada de este comando ha de ser necesariamente un �chero que contenga


código escrito en lenguaje Java y con extensión .Java. El comando nos creará un
�chero .class por cada clase que contenga el �chero Java.

Los �cheros .class contienen código bytecode, el código que es interpretado por la
máquina virtual Java.

Esto ejecuta el compilador javac.exe, el cual, a partir del �chero fuente


PruebaFuncionamiento.java, crea otro, PruebaFuncionamiento.class.

Para compilar este �chero, abrir una ventana de línea de comandos, situate en la
carpeta y escribe el siguiente comando:

javac PruebaFuncionamiento.java

ERROR: No se ha podido encontrar el lugar donde se encuentra el �chero javac, para


compilar nuestro programa.

Tendremos que indicar donde se encuentra el �chero javac, con la siguiente


instrucción:

export PATH=$PATH:/usr/local/jdk1.6.0_17/bin/
Si hemos conseguido el �chero compilado PruebaFuncionamiento.class, solo nos
queda ejecutarlo y ver nuestra primera aplicación Java en funcionamento!

Java. Es el intérprete de Java. Permite ejecutar aplicaciones que previamente


hayan sido compiladas y transformadas en �cheros .class. Su sintaxis es
(suponiendo que estamos en un directorio llamado ejerjavasrc que culaga
directamente de la raiz):

En la ventana de línea de comandos escribir el siguiente comando:


c:\ejerjavasrc>java PruebaFuncionamiento

Esta orden ejecuta la Máquina Virtual de Java java.exe sobre el �chero


PruebaFuncionamiento.class, y ejecuta la aplicación. El resultado es el siguiente:
Windows

COMPILACIÓN

Javac. Es el comando compilador de Java. Su sintaxis es (suponiendo que


estamos en un directorio llamado ejerjavasrc que cuelga directamente de la raiz):

c:/ejerjavasrc/javac ejemplo.java

La entrada de este comando ha de ser necesariamente un �chero que contenga


código escrito en lenguaje Java y con extensión .Java. El comando nos creará un
�chero .class por cada clase que contenga el �chero Java.

Los �cheros .class contienen código bytecode, el código que es interpretado por la
máquina virtual Java.

Esto ejecuta el compilador javac.exe, el cual, a partir del �chero fuente


PruebaFuncionamiento.java, crea otro, PruebaFuncionamiento.class.
Para compilar este �chero, abrir una ventana de línea de comandos, situate en la
carpeta y escribe el siguiente comando:

c:\ejerjavasrc>javac PruebaFuncionamiento.java

ERROR: No se ha podido encontrar el lugar donde se encuentra el �chero javac, para


compilar nuestro programa.

La compilación y ejecución de aplicaciones en Java exige que las herramientas


para compilar (javac.exe) y ejecutar (java.exe) se encuentren accesibles. El
ordenador, desde una ventana de comandos de MS-DOS, sólo es capaz de
ejecutar los programas que se encuentran en los directorios indicados en la
variable PATH del ordenador (o en el directorio activo). Si se desea compilar o
ejecutar código en Java, el directorio donde se encuentran estos programas
(java.exe y javac.exe) deberá encontrarse en el PATH. Tecleando PATH en una
ventana de comandos de MS-DOS se muestran los nombres de directorios
incluidos en dicha variable de entorno.
Para añadir esa dirección pulsaremos con el botón derecho del ratón sobre miPc,
iremos a la pestaña de Opciones avanzadas y pulsaremos el botón de Variables
de entorno.
Buscamos la variable path en la la variables del sistema y pulsamos modi�car:

Añadimos al �nal de la línea la siguiente dirección precidida de punto y coma ";":

C:\Archivos de programa\Java\jdk1.6.0_17\bin

Cerrar la ventana de comandos y volverla abrir para que tenga efecto el cambio.
Si hemos conseguido el �chero compilado PruebaFuncionamiento.class, solo nos
queda ejecutarlo y ver nuestra primera aplicación Java en funcionamento!.

Java. Es el intérprete de Java. Permite ejecutar aplicaciones que previamente


hayan sido compiladas y transformadas en �cheros .class. Su sintaxis es
(suponiendo que estamos en un directorio llamado ejerjavasrc que culaga
directamente de la raiz):
En la ventana de línea de comandos escribir el siguiente comando:

c:\ejerjavasrc>java PruebaFuncionamiento

Esta orden ejecuta la Máquina Virtual de Java java.exe sobre el �chero


PruebaFuncionamiento.class, y ejecuta la aplicación. El resultado es el siguiente:
Ejecutar package

Para ejecutar una clase main que se encuentre en una clase con package
seguiremos la siguiente sintaxis:

java nombre_paquete.nombre_clase

Por ejemplo, si el Package se llama Pruebas y la clase que contiene el main() se


llama PruebaFuncionamiento sería:

java Pruebas.PruebaFuncionamiento

Siempre teniendo en cuenta tener acceso al package en el classpath.


Creando proyectos

Conceptos básicos del IDE.

Antes de comenzar con la creación de proyectos vamos formalizar algunas


cuestiones.

Un proyecto es un conjunto de archivos fuente en java que contiene información


asociada a ese conjunto de archivos, como es el classpath, archivos de librería,
estructura de directorios, etc... Toda esta información reside en una carpeta que
normalmente se llama igual que el nombre del proyecto. En esta carpeta añade
un �chero .xml que es el que se encarga de �jar los pasos para la compilación,
depuración, ejecución y empaquetado del mismo, este mecanismo se conoce
como Ant Project (http://ant.apache.org).

Cuando creamos un proyecto, el IDE genera de forma automática un script Ant


para compilar el proyecto, o bien utilizar un script de Ant que tengamos
prede�nido.

Si accedemos a File -> New Project, vemos que por defecto el IDE contiene un
conjunto de plantillas que podemos utilizar en función del proyecto que vayamos
a crear. En nuestro caso seleccionamos la categoría Java with Ant y como
proyecto Java Appplication:
Proyectos estándar (El IDE genera un script Ant para compilar):

Java Application. Plantilla para crear un esqueleto de un proyecto


J2SE con una clase principal.
Java Class Library. Plantilla para crear un esqueleto en Java sin clase
principal.
Java Project with Existing Sources. Plantilla para crear un proyecto
J2SE basado en un conjunto de �cheros java existentes.
Java Modular Project. Crea una nueva aplicación modular Java SE en
un proyecto IDE estándar. Se pueden agregar varios módulos (como
se especi�ca en JDK 9) a su proyecto.
Java Free-Form Project. Plantilla para crear un proyecto importando
una aplicación Java existente y su script de construcción en un
proyecto de IDE.
Crear un proyecto

Para crear un proyecto File -> New Project (Ctrl. + Mayús + N), a continuación
aparecerá el asistente para la creación del proyecto, podemos seleccionar varias
categorías: aplicaciones web, aplicaciones generales y ejemplos hechos.

En nuestro caso seleccionamos la categoría Java with Ant y como proyecto Java
Application:

Una vez seleccionada la plantilla hacemos clic en Next y rellenamos el nombre


del proyecto, el nombre que le demos al proyecto servirá como nombre de
paquete y creará una carpeta con ese mismo nombre. Para nuestro ejemplo
pondremos como nombre Ejemplo01. Guardaremos el proyecto en una carpeta
de nuestro sistema, seleccionando esta carpeta en la segunda caja de texto.

Marcamos el check Create Main Class, de esta forma nos creará una clase
principal.
Una vez hemos creado el proyecto, en la parte izquierda podemos ver tres
pestañas:

la del proyecto (Projects),


a de los archivos (Files),
y la de Servicios (Services)

La ventana de proyectos (Ctrl. + 1) es el punto principal de entrada a los �cheros


fuentes del proyecto. Muestra una vista lógica de la estructura del proyecto en
cuanto a paquetes y �cheros que lo componen. Mediante el botón de la derecha
del ratón y teniendo seleccionado el nombre del proyecto (en nuestro caso
Ejemplo01), podemos acceder al menú contextual para modi�car las opciones de
compilación, debugger y ejecución del proyecto.
La ventana de �cheros (Ctrl. + 2) muestra la vista de �cheros basada en una
estructura de directorios, incluyendo �cheros y carpetas que no se muestran en la
ventana de proyectos. Desde aquí podemos editar y modi�car tanto �cheros
fuentes del proyecto como scripts de compilación (Ant). Podemos acceder al
proyecto compilado y empaquetado en �cheros JAR, WAR, etc...
Crear y editar ficheros fuente en Java

Una de las funciones más importantes del IDE es la creación, edición y corrección
de �cheros fuente en Java, que al �n y al cabo es donde más tiempo gastamos
cuando estamos programando. NetBeans IDE proporciona una amplia gama de
las herramientas que pueden facilitar el estilo personal de cualquier desarrollador.
En esta sección veremos aspectos de edición, terminación de código, etc..

Crear archivos en Java.

Para crear un archivo y asociarlo al proyecto el IDE nos proporciona un conjunto


de plantillas de archivos que podemos usar para empezar a programar. La forma
más fácil de crear un archivo es crear un proyecto y con el botón derecho sobre
la ventana de proyectos en el nodo del proyecto hacemos clic y seleccionamos la
plantilla del archivo que queramos.

En nuestro caso accedemos al proyecto Ejemplo01 y con el botón de la derecha


accedemos al menú New. Dependiendo del tipo de plantilla seleccionado nos
aparecerá un asistente que nos indicará los pasos necesarios para terminar la
creación de la plantilla, seleccionamos Java Class...
Rellenamos el nombre de la clase y seleccionamos el nombre del package, si los
dejamos en blanco se creará un package nuevo por defecto (si no existe ya) y si
queremos insertarlo en otro sencillamente lo seleccionamos en el desplegable
correspondiente:
Al pulsar Finish, podemos comenzar a escribir nuestro programa:
Compilando aplicaciones

Para hacer una compilación con el IDE es bastante simple. Lo primero es


seleccionar el paquete, proyecto o archivo que queramos compilar. Para compilar
un proyecto, paquete o archivo, nos situamos en la ventana de proyectos (Ctrl. +
1) y elegimos una de las siguientes opciones de la barra de herramientas:

En el menú principal, hacemos clic en Run-> Build Project (F11), para compilar el
proyecto.
En el menú principal, hacemos clic en Run-> Clean and Build Project (Msyús +
F11), para limpiar y compilar el proyecto.
En la ventana de proyectos botón de la derecha sobre el nombre del proyecto y
pulsar Build, para compilar el proyecto.
En la ventana de proyectos botón de la derecha sobre el nombre del proyecto y
Clean and Build, para eliminar los archivos objeto y compilar el proyecto.
En la ventana de proyectos botón de la derecha sobre el nombre del proyecto y
Clean, para eliminar los archivos objeto del proyecto.

También se pueden utilizar los botones de la barra de herramientas:

Siguiendo nuestro ejemplo probamos a compilar el proyecto principal Ejemplo01.


Solucionando Errores de compilación.

Cualquier error que haya en compilación aparece en la ventana de salida Output


(Ctrl. + 4). La ventana de salida es una ventana multi-tabulada que muestra todos
los mensajes que haya habido en la compilación. El mensaje de error aparece
subrayado en azul y es un hipervínculo a la línea de código que ha causado dicho
error.
Ejecutando aplicaciones

Normalmente se �ja el proyecto que contiene la clase principal del programa


(para los proyectos de Java) como el proyecto principal. Para los proyectos web,
el proyecto principal es el proyecto que primero se despliega. Entonces estamos
preparados para ejecutar la aplicación con la opción Run -> Run Main Project
(F6), o por medio del icono de la barra de herramientas.

También se puede ejecutar cualquier �chero que contenga un main por medio de
la opción Run -> Run Other (Shift-F6).

También se puede ejecutar cualquier proyecto haciendo clic con el botón derecho
sobre su nodo del proyecto en la ventana de los proyectos y eligiendo Run
Project.

Cualquier error de compilación e información de salida del programa será


mostrada en la Output Window (Ctrl. + 4).

Siguiendo nuestro ejemplo probaremos a ejecutar el proyecto principal Ejemplo1.


Observar en la Output Window cuál es el resultado.
Editando aplicaciones

El editor es la herramienta principal para editar/corregir código fuente.


Proporciona una amplia gama de las características que hacen la escritura del
código más simple y más rápida, como la terminación del código, destacar los
errores en la compilación, destacar la sintaxis de los elementos de código y el
formato y características de búsqueda avanzadas. Para abrir un archivo fuente
de Java en el editor, nos situamos dentro de la ventana de proyectos en el nodo
del archivo y hacemos doble clic.

En nuestro ejemplo accedemos al �chero Ejemplo01.java y hacemos doble clic


(es muy posible que ya lo tengas abierto en el editor)

Nos situamos en el método principal y escribimos lo siguiente:

System.out.println(“Hola Mundo NetBeans!”); (no copies y pegues,


mejor escríbelo)
Usar abreviaturas, emparejar palabras y autocompletado de código.

El editor proporciona muchas características que le permiten hacer la edición de


código mucho más sencilla y de manera rápida a través de las abreviaturas,
emparejamiento de palabras y auto-completado de código. El auto-completado
de código le permite sólo tecleando algunos caracteres elegir de una lista los
posibles métodos, variables, clases, etc... necesarios para terminar la expresión.
Además incluye una ventana de inspección previa de Javadoc que describe a
modo de ayuda rápida cada una de las opciones seleccionadas.

Se puede añadir abreviaturas personalizadas, para ello accedemos a las


preferencias del entorno

tools-> Options -> Editor -> Code Templates.

Las abreviaturas permiten sólo tecleando un conjunto de caracteres rellenar la


expresión completa de forma automática. Cambiar la opción Expand Template on
a Space (o dejalo con tab) y por ejemplo si escribimos sout y presionamos la tecla
de espacio automáticamente nos rellenara con System.out.println(“_”);.

Trabajar con sentencias import

Se puede añadir las declaraciones import para las clases de java en una de estas
dos formas:

Para el archivo entero, presionando CTRL + Shift + I .

Añade sentencias import cuando son necesarias para que su código


funcione.
Elimina import no necesarios.

Individualmente, presionando Alt + Shift + I (Fast Import) cuando el cursor esta


sobre la clase que queremos añadir el import.
Variables Entorno

INTRODUCCIÓN AL CLASSPATH

Cuando empezamos con java es bastante habitual obtener el error "class not
found" al intentar ejecutar nuestro programa, aunque estamos bastante seguros
de que todo está como debía: existe el .class, he puesto bien el classpath, etc.

Aquí vamos a tratar de explicar por qué se nos producen estos errores y cómo
están interrelacionados los directorios que ponemos en el classpath, también, por
supuesto, qué es eso del classpath, cómo hemos construido nuestro �chero .jar (si
es que lo hemos creado) y las directivas package que hemos puesto en nuestro
código. La relación es bastante estrecha y el poner uno de ellos de una manera y
otro de otra, hará que se nos produzca el error antes mencionado.

CLASSPATH

Vamos a suponer que tenemos un programa java compuesto por varias clases.
En ninguna parte de nuestras clases hemos puesto package y lo tenemos todo
compilado en un mismo directorio, por ejemplo /users/MI_PROYECTO ( o
C:\users\MI_PROYECTO en windows). Supongamos además que nuestro método
main() está en el �chero ClasePrincipal.class.

Si estamos en ese directorio y ejecutamos nuestro programa java, escribimos algo


así como

Código:
$ java ClasePrincipal

El comando java busca las clases que necesita en unos determinados directorios
y �cheros .jar. Por defecto los buscará en los .jar propios de java y en el directorio
en el que se esté ejecutando el comando java. Esto es cierto en la versión de java
1.4 y superiores. Para versiones anteriores es posible que no se busquen las clases
en el directorio actual.

Si estamos en el directorio indicado, tenemos una versión de java moderna y


repito, no hemos puesto package por ningún lado, todo esto funcionará
correctamente.
Mismo directorio

¿Qué pasa si estamos en otro directorio?

Si estamos en otro directorio que no es el que contiene los �cheros .class de


nuestro programa, o si estamos en el mismo directorio pero nuestra versión de
java es antigua, entonces el comando java no los encontrará. Nuestros .class no
están en los directorios en los que java busca por defecto.

Para que java los encuentre, tenemos dos opciones:

De�nir la variable de entorno CLASSPATH. Dándole a esta variable los directorios


donde java debe buscar las clases, todo irá de maravilla. Insisto, no hemos
puesto package por ningún lado.

En linux sería algo así como


Código:
CLASSPATH=/users/MI_PROYECTO; export CLASSPATH

En windows
Código:
set CLASSPATH=C:\users\chuidiang\MI_PROYECTO

Ejecutar java con la opción -cp (o -classpath), en la que se indica el directorio en


el que están las clases.

En linux

Código:
java -cp /users/MI_PROYECTO ClasePrincipal

En windows
Código:
java -cp C:\users\MI_PROYECTO ClasePrincipal
Distintos directorios
¿Qué pasa si tengo mis clases repartidas en varios directorio?

Si nuestros �cheros .class están en varios directorios, el asunto es fácil. Basta


poner todos los directorios seguidos con el separador adecuado (según el sistema
operativo). Si los directorios son MI_PROYECTO/CLASES_1 y
MI_PROYECTO/CLASES_2, sería

Para linux, usando como separador el "dos puntos" ":"

Código:
CLASSPATH=/users/chuidiang/MI_PROYECTO/CLASES_1:/users/chuidiang/MI_PROYECTO/CLAS
export CLASSPATH

o bien

Código:
java -cp /users/MI_PROYECTO/CLASES_1:/users/MI_PROYECTO/CLASES_2 ClasePrincipal

Para windows, usando como separador el "punto y coma" ";" (El "dos puntos" se
usa para poner después de la unidad de disco, por ejemplo, "C:\" )

Código:
set CLASSPATH=C:\users\MI_PROYECTO\CLASES_1;C:\users\MI_PROYECTO/CLASES_2

o bien

Código:
java -cp C:\users\MI_PROYECTO\CLASES_1;C:\users\MI_PROYECTO/CLASES_2 ClasePrinc

Aquí es donde podemos empezar a tener problemas si no nos conocemos bien


los trucos de todo esto.

Hay dos detalles que debemos tener en cuenta:


La opción -cp anula a la variable de entorno CLASSPATH. Es decir, si ejecutamos
java con -cp, se ignora el contenido de CLASSPATH. Por ello, no podemos poner
unos directorios en CLASSPATH y otros en -cp. Es incorrecto, por ejemplo

Código:
CLASSPATH=/users/chuidiang/MI_PROYECTO/CLASES_1; export CLASSPATH
java -cp /users/chuidiang/MI_PROYECTO/CLASES_2 ClasePrincipal

Debemos poner todos los directorios implicados en sólo una de las dos opciones,
o en CLASSPATH, o en -cp.

Sólo se admite una opción -cp. Si ponemos varias, sólo se hará caso a una de
ellas. Sería incorrecto, por ejemplo

Código:
java -cp /users/chuidiang/MI_PROYECTO/CLASES_1 -cp /users/chuidiang/MI_PROYECTO/C

Esto sólo encontraría las clases de uno de los directorios. Debemos poner todos
los directorios en una sola opción -cp, separados por el "dos puntos" o el "punto
y coma", según sea linux o windows.
Con Package

Si hacemos, por ejemplo, una clase con package

Código:
package PAQUETE_1
public class MiClase
{
...
}

Esto "obliga" a que haya un directorio con el mismo nombre que el paquete (es
decir, un directorio PAQUETE_1) y dentro de él el �chero .class correspondiente (es
decir MiClase.class).

Una vez que lo tenemos organizado así, en classpath (me referiré ahora como
classpath a cualquiera de las dos, la variable CLASSPATH o la opción -cp)
tenemos que poner el directorio padre del directorio PAQUETE_1. Es decir, si
tenemos /users/MI_PROYECTO/PAQUETE_1, en classpath debe ponerse /users
/MI_PROYECTO.

Cuando alguna otra clase quiera utilizar esta clase, pondrá

Código:
import PAQUETE_1.MiClase;

y java buscará dentro de los directorios de classpath, un directorio llamado


PAQUETE_1 y dentro de él la clase MiClase.class.

Todo esto puede llevar los niveles de "anidamiento" de paquetes/directorios que


queramos. El classpath siempre será el del directorio que contiene al paquete de
más alto nivel. A partir de él java empezará a buscar directorios que coincidan
con los nombres de los paquetes. Si tenemos

Código:
package PAQUETE.SUB_PAQUETE.SUB_SUB_PAQUETE
...

java buscará dentro del directorio indicado en el classpath un directorio llamado


PAQUETE y dentro de este un SUB_PAQUETE y dentro de ese un
SUB_SUB_PAQUETE y dentro de este la clase.

Efectivamente vamos a necesitar organizar nuestras clases en algún momento


porque nuestro desarrollo puede ir creciendo, y tener un cúmulo de clases todas
juntas en un directorio, sin ningún tipo de organización física ni lógica, no nos
ayudará demasiado.

Java nos permite con los "Packages" evitar esta situación de un modo bastante
elegante y ordenado. Un "Package" es básicamente una agrupación de clases,
por ejemplo la versión 1.2 de Java incluye un total de 59 "Packages" para
organizar todo su API.

Cualquier grupo de clases se puede organizar dentro de un "package" pero


evidentemente lo más normal es que tus clases las organices por algún motivo.
Las clases se suelen organizar según la relación entre ellas.

El uso de "Packages" no solo nos permite organizar nuestras clases, sino que nos
permite diferenciar clases que siendo distintas tengan que tener el mismo
nombre, es decir, ayuda a java con la resolución de nombres.

Veamos ahora como utilizar los "packages" para nuestras clases. Lo primero que
tenemos que tener en cuenta es que todas las clases que van a pertenecer a un
mismo "package" tienen que estar en un mismo directorio que debe coincidir en
nombre con el nombre del "package". Vemos que por tanto el nombre completo
de una clase de un "package" equivale a su ruta desde el directorio que tomemos
de base para nuestras clases.

El directorio de base para nuestras clases es el de�nido por la variable de entorno


CLASSPATH.

El convenio de nombres de Java establece también que los nombres de los


"packages" empiecen por minúsculas.

En segundo lugar para utilizar los "packages" en nuestras clases tenemos que
incluir al principio del �chero de la clase (antes de cualquier otra sentencia) la
linea:

Package nombreDelPackage;

Por último veamos la sentencia "import". "import" permite importar un "package"


a nuestra clase Java. Esto nos permite acceder (en caso de que sean accesibles)
sin usar todo el nombre del "package" a cualquier clase dentro de él. Veámoslo en
el siguiente ejemplo:

Import tratamientoArrays.ordenación.*; //Importamos todas las clases

De todas formas para ejecutar una clase main que se encuentre en una clase con
package seguiremos la siguiente sintaxis:

java nombre_paquete.nombre_clase

Por ejemplo, si el Package se llama Pruebas y la clase que contiene el main() se


llama PruebaFuncionamiento sería:

java Pruebas.PruebaFuncionamiento

Siempre teniendo en cuenta tener acceso al package en el classpath.


JAR

JAR no es más que una versión especí�ca de tar para java. Permite "empaquetar"
en un único �chero .jar varias estructuras de directorios con sus �cheros.

Podemos considerar un �chero .jar como un árbol de directorios y �cheros (que


ha sido empaquetado y no podemos navegar libremente por él, pero que es un
árbol de directorios en todos los sentidos que nos afectan para classpath y
package).

Sin package en el código

Si no hemos puesto package en nuestro código, debemos empaquetar sólo los


.class, sin ningún tipo de directorio. En nuestro caso inicial de un sólo directorio
sería fácil. Basta con irse a ese directorio y escribir

Código:
jar cvf MiLibreria.jar *.class

Esto mete en MiLibreria.jar todas las clases del directorio actual. Las opciones cvf
son para indicar que debe crear el �chero MiLibreria.jar (opción c), que nos vaya
indicando lo que hace (opción v de "verbose" en inglés) y la f que indica que
detrás va el nombre del �chero .jar.

Si tenemos nuestras clases en varios directorios, debemos usar la opción -C para


ir metiendo las clases

Código:
jar cvf MiLibreria.jar -C /users/chuidiang/MI_PROYECTO/CLASES_1 . -C/users/chuidiang/MI_P

La opción -C va seguida de dos parámetros: un directorio y un �chero. El


directorio es en el que debe buscar el �chero a empaquetar y el �chero es el
�chero que debe empaquetar. Si el �chero es "punto" ".", empaqueta todos los
�cheros que encuentre en el directorio indicado. Al usar la opción -C, sólo se
empaqueta el �chero, no se empaqueta ningún directorio.

Sin embargo sería incorrecto

Código:
jar cvf MiLibreria.jar /users/chuidiang/MI_PROYECTO/CLASE_1/*.class ...

puesto que metería todo el árbol de directorios hasta llegar a los .class y luego
metería los .class dentro de esos directorios.

Una vez que tenemos el .jar, en el classpath debemos poner el �chero .jar con su
path absoluto, separado de otros directorios de clases o �cheros .jar por el
separador adecuado al sitema operativo. Como dijimos anteriormente, un .jar es
como si fuera un (o varios) directorio empaquetado, por lo que podemos ponerlo
en un classpath como un directorio más. Por ejemplo

Código:
java -cp /users/MiLibreria.jar:/users/OTRO_DIRECTORIO:/users/OtroFichero.jar ClasePrincip

Con package en el código

Si hemos puesto package en nuestras clases, nos pasa lo mismo que antes.
Debemos crear un directorio con el nombre del paquete y dejar en él nuestros
.class. Luego con jar debemos empaquetar el directorio con las clases que tiene
dentro

En el ejemplo de /users/MI_PROYECTO/PAQUETE_1/MiClase.class, debemos irnos


a /users/MI_PROYECTO y ejecutar

Código:
jar cvf MiLibreria.jar PAQUETE_1/*.class

Esto mete dentro de MiLibreria.jar el directorio con todas sus clases. Al poner en el
classpath este �chero .jar, todo irá correctamente, igual que antes. java busca en
el �chero .jar un directorio con el mismo nombre que el paquete y dentro de él la
clase. Por ello es importante empaquetar también el directorio.

Ojo, es incorrecto esto otro

Código:
jar cvf MiLibreria.jar /users/MI_PROYECTO/PAQUETE_1/*.class

porque metería en nuestro .jar también el directorio users. El package de nuestra


clase debería ser users.MI_PROYECTO.PAQUETE_1.

Si no queremos irnos al directorio MI_PROYECTO para hacer el .jar, debemos usar


nuevamente la opción -C.

Código:
jav cvf MiLibreria.jar -C /users/MI_PROYECTO PAQUETE_1

Esto metería el directorio PAQUETE_1 completo en el .jar.

Para veri�car qué es lo que se ha metido en nuestro .jar y asegurarnos que es lo


que queremos, se usa la opción t

Código:
jar tvf MiLibreria.jar

Esto saca un listado con todos los �cheros y directorios que hay en el �chero .jar.
Al listar cada �chero .class, pone delante el directorio/directorios en los que está
metido (y que debe coincidir con su package si todo es correcto). Si no es así,
debemos rehacer el .jar.

También podría gustarte