Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Apuntes de Java
Apuntes de Java
ndice General
ndice General
Prlogo
iii
Introduccin
1.1 Tipos de datos
1.2 Constantes
1.3 Variables
1.4 Comentarios
1
1
2
2
2
Estructuras de control
2.1 Condicionales
2.1.1 Sentencia if
2.1.2 Sentencia switch
2.2 Bucles
2.2.1 Sentencia while
2.2.2 Sentencia do .. while
2.2.3 Sentencia for
2.3 Sentencias try .. catch
3
3
3
3
4
4
4
4
5
Clases y Objetos
3.1 Clases
3.1.1 Mtodos
3.1.2 Variables y mtodos de clase
3.2 Control de acceso a los miembros de una clase
3.2.1 Acceso predeterminado
3.2.2 Acceso pblico
3.2.3 Acceso privado
3.2.4 Acceso protegido
3.3 Objetos
3.3.1 Asignacin
3.3.2 Igualdad
3.4 Herencia
3.4.1 Subclases
3.4.2 Clases abstractas
7
7
8
8
9
9
9
9
9
10
10
10
11
11
12
Packages
4.1 Introduccin
4.2 Crear un paquete
4.3 Referenciar un paquete
4.4 Los paquetes y la visibilidad de variables y mtodos
13
13
13
14
14
ii
ndice General
Tratamiento de errores
5.1 Excepciones y errores
5.2 Manejo de excepciones
5.2.1 Capturar excepciones
5.2.2 Lanzar excepciones
5.2.3 Generar excepciones
5.2.4 Denir nuevas excepciones
5.3 El requisito "capturar o lanzar"
17
17
17
18
18
19
19
19
21
21
21
21
22
22
23
23
24
24
Bibliografa
25
Prlogo
A
iii
iv
Prlogo
Captulo 1
Introduccin
1.1
Tipos de datos
Los tipos de datos son porttiles entre todas las plataformas que reconocen Java. Se clasican
en tipos primitivos y tipos referenciados.
Tipos primitivos
Hay ocho tipos que se pueden clasicar en tipos numricos y el tipo boolean. Los tipos numricos se pueden dividir en tipos enteros y tipos reales.
Se les llama tipos primitivos porque estn integrados en el sistema y no son objetos, esto
hace que su uso sea ms eciente. De todas formas, la biblioteca de Java proporciona las
clases: Byte, Character, Short, Integer, Long, Float, Double y Boolean para encapsular cada
uno de los tipos.
Byte: datos enteros comprendidos entre -128 y +127.
Short: datos enteros comprendidos entre -32678 y +32367.
Int: datos enteros comprendidos entre -2147483648 y +2147483647.
Long: datos enteros comprendidos entre -9223372036854775808 y +9223372036854775807.
Char: se utiliza para declarar datos enteros en el rango \u0000 .. \uF F F F en Unicode
(0 a 65535). Los valores de 0 a 127 se corresponden con los caracteres ASCII del mismo
cdigo.
Float: datos en coma otante de 32 bits. Para especicar que una constante es de tipo
oat hay que aadir al nal de su valor la letra f o F.
Double: datos en coma otante de 64 bits. Una constante es de tipo double a no ser que
se especique lo contrario.
Boolean: se utiliza para indicar si el resultado de la evaluacin de una expresin booleana
es verdadero o falso. Los dos posibles valores son true y false.
Tipos referenciados
Hay tres categoras: clases, interfaces y arrays.
1
Captulo 1. Introduccin
1.2
Constantes
Hay que indicar al compilador Java el nombre de la constante y su valor. Esto se hace utilizando
el calicador nal y/o el static.
final static int cte=3.14159F;
La constante puede estar denida en el cuerpo de la clase o dentro de un mtodo. En el
primer caso la constante puede estar calicada adems de con nal, con static. En el segundo
caso, no se puede utilizar static, la constante slo ser visible dentro del mtodo, es local al
mtodo. Una constante local no puede ser declarada static.
1.3
Variables
1.4
Comentarios
Captulo 2
Estructuras de
control
2.1
2.1.1
Condicionales
Sentencia if
Permite a un programa tomar una decisin para ejecutar una accin u otra basndose en el
resultado verdadero o falso de una expresin. La sintaxis es:
if (condicin)
sentencia 1;
else sentencia 2;
Como consecuencia de las sentencias if anidadas aparece la sentencia else if:
if (condicin 1)
sentencia 1;
else if (condicin 2)
sentencia 2;
else if (condicin 3)
sentencia 3;
else
sentencia n;
2.1.2
Sentencia switch
Permite ejecutar una de varias acciones en funcin del valor de una expresin. Es una sentencia
para decisiones mltiples. La sintaxis es:
switch (expresin)
{
case expresin-constante 1:
sentencia 1;
case expresin-constante 2:
sentencia 2;
default:
sentencia n;
}
3
2.2
2.2.1
Bucles
Sentencia while
Ejecuta una sentencia, simple o compuesta, cero o ms veces, dependiendo del valor de una
expresin booleana. Su sintaxis es:
while (condicin)
sentencia;
ta.
donde condicin es cualquier expresin booleana y sentencia puede ser simple o compues-
2.2.2
Sentencia do .. while
Ejecuta una sentencia, simple o compuesta, una o ms veces, dependiendo del valor de una
expresin booleana. Su sintaxis es:
do
sentencia;
while (condicin);
2.2.3
Sentencia for
Permite ejecutar una sentencia simple o compuesta un nmero de veces conocido. Su sintaxis
es:
for (v1=e1, v2=e2;condicin;progreso-condicin)
sentencia;
donde v1, v2, ... representan variables de control que sern iniciadas con las expresiones e1, e2, ...
2.3
Cuando durante la ejecucin de un programa ocurre un error, Java lanza una excepcin que
visualiza un mensaje acerca de lo ocurrido y detiene la ejecucin. Si no queremos que se
detenga la ejecucin podemos utilizar un try para alertar a la aplicacin acerca del cdigo que
puede lanzar una excepcin y emplear catch para capturar y manejar la excepcin.
try
{
Captulo 3
Clases y Objetos
3.1
Clases
Una clase es un tipo denido por el usuario que describe los atributos y los mtodos de los
objetos que se crearn a partir de ella. El estado del objeto viene determinado por los atributos
y los mtodos son las operaciones que denen su comportamiento. Dentro de los mtodos se
encuentran los constructores que permiten crear un objeto y los destructores que permiten
destruirlo. Los atributos y los mtodos se denominan en general miembros de la clase.
La denicin de una clase consta de dos partes: el nombre de la clase precedido por la
palabra reservada class y el cuerpo de la clase entre llaves:
class nombre-clase
{
cuerpo de la clase
}
Dentro del cuerpo de la clase podemos encontrar atributos y mtodos.
Ejemplo:
class Circunferencia
{
private double x,y, radio;
public Circunferencia()
{
}
public Circunferencia(double cx, double cy, double r)
{
x=cx; y=cy; radio=r;
}
public void ponRadio(double r)
{
radio=r;
}
public double longitud()
{
return 2*Math.PI*radio;
}
}
7
En este ejemplo se dene la clase Circunferencia, puede ser usada dentro de una programa
de la misma manera que cualquier otro tipo. Un objeto de esta clase tiene tres atributos
(coordenadas del centro y valor del radio), dos constructores y un mtodo. Los constructores
se distinguen fcilmente porque tienen el mismo nombre que la clase.
Los atributos se declaran de la misma manera que cualquier variable. En una clase, cada
atributo debe tener un nombre nico.
Siguiendo las recomendaciones de la programacin orientada a objetos, cada clase se debe
implementar en un chero .java, de esta manera es ms sencillo modicar la clase.
Una aplicacin es un programa Java que consiste de una o ms clases. Una de las clases
tiene que ser una clase aplicacin (clase que incluye el mtodo main). La denicin del mtodo
main es la siguiente:
public static void main(String[] args)
{
cuerpo del mtodo
}
El mtodo main es pblico, esttico, no devuelve nada y tiene un argumento de tipo String
que almacena los argumentos pasados en la lnea de rdenes cuando se invoca a la aplicacin
para su ejecucin.
Cuando se compile el chero que contiene la aplicacin, el compilador Java genera un
chero .class por cada una de las clases que la componen. Cada chero generado tiene el
mismo nombre que la clase que lo contiene.
3.1.1
Mtodos
Los mtodos forman lo que se denomina interfaz de los objetos, denen las operaciones que
se pueden realizar con los atributos. Desde el punto de vista de la Programacin Orientada a
Objetos, el conjunto de mtodos se corresponde con el conjunto de mensajes que los objetos
de una clase pueden responder.
Los mtodos permiten al programador modularizar sus programas. Todas las variables
declaradas en las deniciones de mtodos son variables locales: slo se conocen en el mtodo
que las dene. Casi todos los mtodos tienen una lista de parmetros que permiten comunicar
informacin. La denicin de un mtodo indica el tipo de datos del resultado que devuelve
public double longitud(). Para mtodos que no devuelven nada se utiliza la palabra reservada void.
3.1.2
Cada objeto de una clase tiene su propia copia de todas las variables de la clase. En ciertos casos, resulta adecuado tener una sola copia de una variable en concreto para que sea compartida
por todos los objetos de esa clase. Para ello se utilizan las variables de tipo static.
Para acceder a un miembro static hay que anteponer el nombre de la clase y el operador
de punto al nombre del miembro de la clase. Los miembros static de una clase son accesibles
aunque no existan objetos creados de esa clase. Es por ello que el mtodo main es static: se
le llama sin necesidad de que haya un objeto ya creado de la clase que lo contiene.
class Cuadrado
{
static int anchoLinea=2;
}
...
Cuadrado.ponAnchoLinea(4);
Aunque los miembros estticos son accesibles a travs de un objeto de la clase (de la
forma habitual, nombreObjeto.miembro) se considera ms adecuado acceder a ellos mediante
el nombre de la clase. Un ejemplo clsico es la constante Math.PI.
3.2
3.2.1
Acceso predeterminado
3.2.2
Acceso pblico
Un miembro declarado public (pblico) est accesible para cualquier clase que quiera utilizarlo.
Los atributos static de una clase generalmente se declaran como pblicos. Un ejemplo es el
atributo PI de la clase Math (public static final double PI).
3.2.3
Acceso privado
Un miembro declarado private slo es accesible por los mtodos de su propia clase.
3.2.4
Acceso protegido
Un miembro declarado protected se comporta igual que un miembro privado para los mtodos
de las otras clases excepto para los mtodos de las clases del mismo paquete o de sus subclases,
para las que se comporta como un miembro pblico.
10
3.3
Objetos
Un objeto consta de una estructura interna (los atributos) y de una interfaz que permite acceder
y manipular dicha estructura (los mtodos). Para construir un objeto de una clase cualquiera
hay que llamar a un mtodo de iniciacin, el constructor. Para ello se utiliza el operador new.
Circunferencia circ = new Circunferencia();
La funcin del constructor es iniciar nuevos objetos de su clase. Cuando se crea un objeto,
Java hace lo siguiente:
Asignar memoria al objeto por medio del operador new.
Iniciar los atributos de ese objeto, sus valores iniciales o los valores predeterminados por
el sistema: los atributos numricos a cero, los alfanumricos a nulos y las referencias a
objetos a null.
Llamar al constructor de la clase.
Si no hay suciente memoria para ubicar el objeto, el operador new lanza una excepcin
OutOfMemoryError. Para acceder desde un mtodo de una clase a un miembro de un objeto
de otra clase diferente se utiliza la sintaxis: objeto.miembro. Cuando el miembro accedido es
un mtodo se entiende que el objeto ha recibido un mensaje, el especicado por el nombre
del mtodo y responde ejecutando ese mtodo.Los objetos se destruyen con un recolector de
basura, de eso se ocupa Java.
3.3.1
Asignacin
3.3.2
Igualdad
Creamos dos objetos iguales (con los mismos valores de sus variables miembro), al preguntar
si las variables que apuntan a esos objetos son iguales nos devolver false.
Circunferencia c1 = new Circunferencia(0,0,15);
Circunferencia c2 = new Circunferencia(0,0,15);
if (c1==c2)
3.4. Herencia
3.4
11
Herencia
3.4.1
Subclases
Cuando queremos denir una clase que tenga las mismas capacidades que otra pero aadiendo
algunas caractersticas lo hacemos deniendo una subclase. Para ello utilizamos la palabra
clave extends. Si no se especica la clasula extends con el nombre de la superclase se entiende
que la superclase es la clase Object.
public class CuentaCredito extends Cuenta
{
// Cuentacredito hereda los miembros de Cuenta
}
Java slo permite la herencia simple, no permite que una clase herede de dos o ms clases.
Una subclase hereda todos los miembros de su superclase, excepto los constructores. De
todas formas eso no quiere decir que tenga acceso directo a todos los miembros (depende de
cmo se haya denido el control de acceso de su superclase).
Atributos con el mismo nombre
Es posible denir en la subclase un atributo con el mismo que en la superclase. Para distinguir
a que atributo nos referimos, utilizamos las clasulas super y this.
class ClaseBase
{
public int valor = 1;
}
class ClaseDerivada extends ClaseBase
{
int valor = 5;
public int metodoA()
{
return 200 + super.valor; \* atributo valor de la superclase *\
}
public int metodoB()
{
return this.valor; \* atributo valor de la subclase *\
}
12
3.4.2
Clases abstractas
Cuando se disea una clase para ser genrica, lo ms probable es que no necesitemos crear
objetos de ella; lo que interesa es proporcionar los atributos y comportamientos que sern
compartidos por todas sus subclases. Una clase con estas caractersticas se denomina clase
abstracta y se dene con el calicativo abstract
public abstract class Entidad {
// Cuerpo de la clase
}
Una clase abstracta puede contener el mismo tipo de miembros que una clase que no lo sea
y adems puede contener mtodos abstractos.
Si un mtodo heredado por una subclase es abstracto, es obligatorio redenirlo, de lo contrario la subclase tambin debera ser declarada abstracta.
Captulo 4
Packages
Los paquetes (packages) de Java desempean un papel equivalente al de las libreras de otros
lenguajes. De hecho, las libreras estndar que incorpora el JDK estn denidas como packages. Aqu veremos para qu sirve un package, cmo se crea y cmo se referencian las clases
denidas en l.
4.1
Introduccin
4.2
Crear un paquete
Para especicar que las clases denidas en un chero pertenecen a un determinado paquete,
hay que emplear la sentencia
package nombrePaquete;
Esta sentencia debe ser la primera que aparezca en el chero. En caso de que no aparezca
la sentencia package, se asume que las clases denidas pertenecen a un paquete "sin nombre".
Para ponerle nombre a un paquete se sigue un estilo jerrquico similar al Sistema de
Nombres de Dominio empleado en Internet. As, por ejemplo, podramos tener un chero
esfera.java, perteneciente a una hipottica librera grca y especicar que pertenece al
mismo paquete en el que denimos los restantes objetos 3D de la siguiente manera:
13
14
Captulo 4. Packages
package graficos.3D.objetos;
class Esfera {
public void Esfera(float x, float y, float z, float radio) {
...
}
...
}
La mquina virtual Java asumir que el chero reside en una estructura de directorios que
reeja el nombre del paquete. Es decir, debe existir un directorio graficos, dentro de l
debe haber otro directorio 3D y dentro de este ltimo otro directorio objetos, en el que est
almacenado nuestro chero. Para que el compilador y el intrprete Java puedan localizar las
clases del paquete, toda esta estructura de directorios debe residir en un directorio incluido
en el classpath (ver apartado 7.1).
4.3
Referenciar un paquete
Para referenciar una clase denida en un paquete distinto al actual, podemos hacerlo mediante
el nombre de la clase precedido por el nombre del paquete. Por ejemplo, para crear un objeto
de la clase Esfera denida en el ejemplo anterior se hara:
Esfera e = new graficos.3D.objetos.Esfera(0.0, 0.0, 0.0, 1.0);
Evidentemente, esta forma de referenciar una clase es bastante engorrosa. Para evitarla,
Java proporciona la sentencia import, que nos permite referirnos a las clases denidas en un
paquete sin necesidad de poner el nombre del mismo, por ejemplo:
import graficos.3D.objetos.Esfera;
Esfera e = new Esfera(0.0, 0.0, 0.0, 1.0);
No obstante, en caso de que se tengan dos clases con el mismo nombre dentro de dos
paquetes distintos, para referenciarlas ser necesario utilizar el nombre de la clase precedido
del paquete.
El import del ejemplo anterior importara nicamente la clase Esfera. Para importar todas
las clases de un paquete, hay que utilizar el smbolo *, por ejemplo:
import graficos.3D.objetos.*;
Hay que destacar que con una sola sentencia import se puede importar una clase o bien
todas, pero no se pueden importar algunas s y otras no.
Para facilitar la programacin, la mquina virtual Java importa automticamente tres paquetes: el paquete "sin nombre" (clases no metidas dentro de ningn paquete concreto), el
paquete java.lang y el paquete al que pertenece la clase actual.
4.4
Por defecto, las variables y mtodos denidos en una clase perteneciente a un paquete son
accesibles desde cualquier otra clase del mismo paquete. El modicador protected hace que
15
16
Captulo 4. Packages
Captulo 5
Tratamiento de
errores
Java utiliza un mecanismo de gestin de errores bastante distinto al de la mayora de lenguajes
imperativos "clsicos". En lenguajes como C, cada vez que se llama a una funcin susceptible
de producir un error es responsabilidad del programador comprobar que todo ha ido correctamente (generalmente a travs del valor de retorno de la funcin). En Java (y otros lenguajes,
como C++), se puede especicar que cuando se produzca un error dentro de un bloque de
cdigo, el ujo de ejecucin salte a otro bloque encargado de manejar los errores. Como se
ver, este mecanismo de gestin de errores es mucho ms potente que el tradicional y genera
cdigo "ms limpio".
5.1
Excepciones y errores
Una excepcin es cualquier evento que interrumpe el ujo de ejecucin normal de un programa.
La causa de una excepcin puede ser muy variada: desde errores de hardware hasta fallos de
programacin, como un ndice de matriz fuera de rango. Las excepciones son clases Java,
todas descendientes de la clase Exception denida en la librera estndar. Para saber cul es
la jerarqua de clases denida para las excepciones, lo mejor es consultar la documentacin
del API Java que viene con el JDK.
En realidad, hay otra jerarqua de clases, descendientes de error, pero normalmente el
programador puede ignorarlas, ya que representan errores graves, que suelen hacer que la
mquina virtual imprima un mensaje y nalice inmediatamente la ejecucin del programa.
5.2
Manejo de excepciones
18
5.2.1
Capturar excepciones
Para gestionar explcitamente lo que debe hacer un programa cuando se produzca una determinada excepcin se utilizan las sentencias try y catch. La sentencia try debe envolver al
bloque en el que se quiere comprobar si ha habido alguna excepcin, mientras que el catch
representa el cdigo que se ejecutar en caso de que sta se produzca. Por ejemplo:
try {
...
z=x/y;
...
}
catch(ArithmeticException e) {
System.out.println("error aritmetico:
}
" + e);
Como puede verse, la sentencia catch acta como si fuera un mtodo, aceptando como
parmetro el tipo de excepcin que se desea capturar. Para capturar cualquier excepcin, habr
que utilizar la clase base Exception. En el ejemplo se capturan nicamente las excepciones
aritmticas (clase ArithmeticException), cuyo ejemplo ms tpico es la divisin por cero, en
cuyo caso se imprime un mensaje de error por la salida estndar.
Hay que tener en cuenta que una sentencia try puede tener asociadas varias catch, de
manera que cada una de ellas capture un tipo distinto de excepcin. Por ejemplo:
try {
leerFichero("entrada.txt");
...
}
catch(FileNotFoundException e) {
\\ Cdigo a ejecutar en caso de que el fichero no exista
...
}
catch(IOException e) {
\\ Cdigo a ejecutar en caso de que haya error de lectura
...
}
5.2.2
Lanzar excepciones
En caso de que se produzca una excepcin en un trozo de cdigo que no est envuelto en un
try, sta pasa al mtodo desde el que se llam al mtodo actual. De este modo, va ascendiendo
19
por la pila de llamadas a mtodos hasta que es recogida mediante un catch o bien hasta que
llega al nivel superior y pasa al control del intrprete Java. Para que este mecanismo funcione,
es necesario especicar en la cabecera del mtodo que ste lanza la excepcin. Esto se hace
mediante el modicador throws. Por ejemplo:
void leerFichero(String nombre) throws IOException,
FileNotFoundException
La cabecera anterior indica que en el caso de que se produzca una excepcin del tipo
IOException o FileNotFoundException dentro del mtodo leerFichero, sta debe pasar
al mtodo que lo llam.
5.2.3
Generar excepciones
Podemos producir una excepcin mediante la sentencia throw. Esta sentencia detiene el ujo
de control y lo pasa al try/catch ms cercano. Por ejemplo:
throw new Exception("Se ha producido un error");
Normalmente, esta sentencia se usar en conjuncin con clases de excepciones denidas
por el usuario. Cmo denirlas se explica a continuacin.
5.2.4
Para denir nuevas clases de excepciones basta con crearlas como subclases de alguna de la
jerarqua de excepciones incluida en Java. Por ejemplo:
class miExcepcion extends Exception {
miExcepcion(String mens) {
super(mens);
}
}
5.3
20
Captulo 6
Libreras estndar
de Java
Las libreras estndar de Java incorporan un gran nmero de packages que facilitan la programacin en muchas reas distintas. As, tenemos por ejemplo clases para programacin
en red (java.net), entrada/salida (java.io), estructuras de datos como vectores y colecciones (java.util), programacin de applets (java.applet) o de interfaces grcos (java.awt).
Aqu veremos solo algunas de las libreras ms bsicas. Para el resto, lo mejor es consultar la
documentacin sobre el API de Java que se distribuye junto son el SDK.
6.1
6.2
6.2.1
Segn si la operacin est orientada a bytes o caracteres, tenemos dos jerarquas de clases
distintas 1 . Todas las clases que se ocupan de E/S de bytes reciben un nombre del tipo
xxxInputStream (las de entrada) o xxxOutputStream (salida). Las que hacen lo propio con
caracteres son las xxxReader y xxxWriter respectivamente. As, por ejemplo, la clase que
sirve para leer bytes de un array es ByteArrayInputStream, y la clase empleada para escribir
caracteres en un chero, FileWriter.
Las clases que realizan operaciones de entrada (tanto de bytes como de caracteres) comparten el mtodo read. Versiones sobrecargadas de read sirven para leer secuencias de bytes
1 Hay que tener en cuenta que Java usa el juego de caracteres Unicode, que emplea dos bytes por carcter, con lo
que ambos no son equivalentes, al contrario de lo que ocurre en, por ejemplo, C.
21
22
o caracteres y almacenarlos en un array. Lo mismo ocurre con las clases que implementan
operaciones de salida y el mtodo write.
As, el siguiente fragmento de cdigo servira para copiar los contenidos de un chero en
otro:
FileReader in = new FileReader("datos.txt");
FileWriter out = new FileWriter("copia.txt");
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
En el cdigo anterior, se utilizan las clases FileReader y FileWriter que, como es de
suponer, implementan lectura y escritura de caracteres en un chero, respectivamente.
6.2.2
6.2.3
La entrada y salida estndar en Java estn representadas por los objetos System.in y System.out,
respectivamente. El primero es un objeto de la clase inputStream. La salida estndar es un
objeto de la clase PrintStream, que dene los mtodos print y println y que sirven para
imprimir cualquier tipo de dato (println imprime adems un retorno de carro nal).
Captulo 7
7.1
Para que el compilador o el intrprete java puedan localizar las clases empleadas en un programa que no sean parte de las libreras estndar, es necesario indicar en qu directorios pueden
estar almacenadas. Esto se puede hacer mediante la variable de entorno CLASSPATH. Esta variable acta de una manera similar a la variable PATH de DOS o de UNIX, pero en lugar de con
ejecutables, con cheros Java.
Segn cmo estn almacenadas las clases a referenciar habr que hacerlo de una forma u
otra:
1. Para clases almacenadas en un chero .jar o .zip, el classpath debe referenciar el nombre del chero (con la trayectoria para llegar hasta l). Por ejemplo, para emplear la librera graficos.jar que est en el directorio c:\java habr que aadir c:\java\graficos.jar
al classpath
2. Para clases en un chero .class que no estn en ningn paquete el classpath debe
referenciar el directorio donde estn almacenadas.
3. Para clases en un chero .class que estn en un paquete, el classpath debe referenciar
el directorio del que cuelga la estructura de directorios que reeja el nombre del paquete. Por ejemplo, supongamos que se desea utilizar una clase Esfera, denida en el
chero Esfera.class y que se encuentra en el paquete graficos.3D.objetos. Como
se explic en el apartado 4.2, el chero Esfera.class debera estar en un directorio
graficos\3D\objetos. En el classpath habr que aadir, por tanto, la trayectoria para
llegar hasta el directorio graficos (sin el nombre de este ltimo).
Las referencias del classpath se separan mediante el smbolo ; en DOS o : en UNIX, al igual
que en el caso de la variable PATH.
Una alternativa a cambiar el valor de la variable de entorno CLASSPATH es emplear la
opcin -classpath que aceptan todas las herramientas del Java SDK. As se puede especicar
un classpath distinto para cada llamada a la herramienta. Por ejemplo:
java -classpath c:\java\graficos.jar miPrograma
23
24
7.2
El compilador javac
Esta herramienta convierte los cheros fuente .java en cheros .class, que pueden ser interpretados por la mquina virtual. Su uso bsico es:
javac fuente.java
En caso de que en el chero fuente se haga referencia a otras clases, el compilador se
encargar de localizarlas y compilarlas a su vez en caso de que sea necesario. Es decir, el
complador asume funciones que en otros lenguajes se confan a utilidades adicionales, como
make. Por ello, a la hora de compilar un chero Java hay que seguir una serie de normas:
1. Cada chero .java debera denir una nica clase pblica. Aunque hay otros compiladores que aceptarn cheros que no cumplan esta norma, se considera una buena prctica
de programacin.
2. El nombre del chero debe ser el mismo que el de la clase pblica denida en l, incluyendo maysculas y minsculas.
3. La clase principal de nuestro programa debe denir un mtodo main, que ser el que
se ejecute cuando llamemos al intrprete Java. Este mtodo debe tener una signatura
especial:
public static void main(String[] args)
4. Como se describe en el apartado 7.1, las clases empleadas que no formen parte de la
distribucin estndar de Java deben ser localizables a travs del classpath.
7.3
El intrprete java
Es la herramienta que permite ejecutar los programas compilados (cheros .class). Su uso
bsico es:
java clasePrincipal
donde clasePrincipal es la clase que dene el mtodo main. Es importante tener en
cuenta que no se debe especicar la extensin .class del chero que contiene la clase, ya que
de lo contrario el intrprete dar un error de ejecucin. Al igual que en el caso del javac, si
se hace referencia a alguna clase que no forma parte de la distribucin estndar de Java, ser
necesario referenciarla en el classpath.
Captulo 8
Bibliografa
[Arnow and Weiss, 2000] D. Arnow and G. Weiss. Introduccin a la programacin con Java.
Addison Wesley, 2000.
[Ceballos, 2000] Fco. Ceballos. Java 2. Curso de programacin. Ra-Ma, 2000.
[Deitel and Deitel, 1998] H. Deitel and P. Deitel. Cmo programar en Java. Prentice Hall, 1998.
[Niemeyer and Knudsen, 2000] P. Niemeyer and J. Knudsen. Curso de Java. Anaya y OReilly,
2000.
25