Sunteți pe pagina 1din 73

DIATEL-UPM. Programacin III.

Lenguaje Java
Pg. 1


Historia de Java
1990 Sun Microsystem a travs de -FirstPerson Inc.- inicia un proyecto
destinado a dispositivos electrnicos de consumo:
Aparece Oak: lenguaje de programacin de propsito general OO
basado en C/C++ para generar el software (Autor: James Gosling)
basado en el concepto de maquina virtual
1994 Cierra FirstPerson (sin xito)
1995 Sun relanza Java orientndolo a Internet (applets en el navegador
Netscape)
Java JDK 1.0 aparece en el 96, JDK 1.1 en el 97, Java JDK 1.2 en 1998
(conocido como Java 2),
Java JDK 1.5 (Java 5.0) en 2005 y continuar

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 2


Caractersticas de JAVA
Lenguaje orientado a objetos de propsito general.
Independiente de la plataforma de ejecucin.
Lenguaje compilado e interpretado (JVM).
Permite portar Java a cualquier procesador y/o S.O. con poco esfuerzo.
Slo hay que implementar un intrprete:
Mquina Virtual Java (JVM)
Lenguaje orientado a Internet:
Puede cargar objetos a travs de la Red (applets)
Integrado en navegadores Web que pueden incluir la JVM.


PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 3


Caractersticas de JAVA (II)
JVM se implementa en cdigo dependiente de la plataforma.
Lenguaje de la Mquina Virtual Java (JVM): Bytecodes
Equivalente al lenguaje mquina de un procesador.
Formato de fichero mquina: Class file format.
Fuertemente tipado, la JVM verifica los tipos.
Gestin de memoria por la JVM:
Creacin: Operador new.
Liberacin: No hay free delete, a cambio existe el recolector de
basura
No hay punteros estilo C en el lenguaje, slo referencias a objetos.
Admite procesamiento multihilo (procesos ligeros) multithread
La JVM verifica la seguridad en los accesos.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 4


Caractersticas de JAVA (III)
Sun describe Java como un lenguaje simple, orientado a objetos,
distribuido, interpretado, robusto, seguro, de arquitectura neutra, portable,
de altas prestaciones, multitarea y dinmico
Similar en sintaxis a C/C++ (pero mejorado: sin punteros, ficheros .h, )
La ejecucin de un programa Java se puede realizar como:
aplicacin independiente
applet (dentro del navegador al cargar la pgina web)
servlet (ejecutado en servidor de Internet, sin interfaz grfica)
En JAVA no se parte de cero. El JDK (Java Development Kit) contiene
multitud de clases ya implementadas, y organizadas en libreras de clases
llamadas paquetes (packages).

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 5


Herramienta de desarrollo JDK (I)
Java Development Kit (Sun Microsystems, Inc): Entorno de desarrollo para
aplicaciones Java.
No es un Entorno Integrado de Desarrollo en el sentido de aglutinar todas
las herramientas bajo la misma interfaz grfica.
Las herramientas se ejecutan en modo comando:
Compilador (javac). Genera el archivo: Fichero.class.

cmd> javac Fichero.java

Intrprete (java) de la JVM. Ejecuta bytecodes que se encuentran en el
archivo Fichero.class

cmd> java Fichero


PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 6


Herramienta de desarrollo JDK (II)
Visualizador de pginas HTML
cmd> AppletViewer Fichero.html

Desensamblador de ficheros de clases.
cmd> javap Fichero.class > Fichero.java

Depurador de aplicaciones Java.
cmd> jdb Fichero

Generador de documentacin.
cmd> javadoc Fichero.java

Generador de interfaces (*.h) y cdigo intermedio (*.c) para enlazar con
cdigo C/C++
cmd> J avah Fichero.class
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 7


Resumen Entorno Desarrollo del JDK















---
---
---
javac
jdb
java
javah
javadoc
---
---
---
---
---
---
---
---
---
---
---
---
---
---
cdigo
fuente
Java
fichero de
clases
Java
ficheros
documentacin
HTML
ficheros
cabecera
C/C++
Salida del
programa
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 8








Lenguaje Java Bsico
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 9


Ejemplo: Desarrollo de una aplicacin en Java
Desarrollar una aplicacin que saque por una consola de comandos DOS el
mensaje: Hola Mundo





Editar el cdigo fuente en el fichero HolaMundo.java
Compilar el cdigo fuente obteniendo el fichero de cdigos de bytes
HolaMundo.class
cmd> javac HolaMundo.java
Ejecutar el fichero de cdigos de bytes en la Mquina Virtual Java
cmd> java HolaMundo
cmd> Hola Mundo!
/** Comentarios para generar documentacin */

public class HolaMundo {
public static void main(String[] argv){
System.out.println (Hola Mundo!);
}
}

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 10


Caractersticas
Similar sintaxis a C/C++
Sensible a maysculas/minsculas
Identificadores:
Sirven para nombrar clases, variables, constantes, mtodos e interfaces.
Restricciones: Sin espacios en blanco, no deben empezar por nmero.
Hay tres tipos de comentarios:
// Comentarios de una sola lnea
/* Comentario de
varias lneas
*/
/** Comentario para documentacin */
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 11


Convenciones de nomenclatura
Los identificadores utilizados en Java siguen las siguientes reglas de
nomenclatura segn el elemento:
Nombres de clase e interfaces la primera letra con mayscula de
cada palabra.
Ej.: Coche, Empleado, CuentaBancaria, etc.

Nombres de variables y mtodos la primera letra con minscula y la
primera letra de cada palabra anexa con mayscula.
Ej.: loro, estaOcupado, etc.

Nombres de constantes todas las letras con maysculas.
Ej.: PI, MAXIMO, etc.

Nombres de paquetes con minsculas.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 12


Variables
Todas las variables tienen un tipo, un identificador y un mbito.
El tipo indica el conjunto de valores que puede tomar y las
operaciones que se pueden realizar.
El identificador sirve para referenciar esa variable.
El mbito define los lmites en los que existe una variable. Viene
limitado por llaves:
{ ........existenciadeunavariable....... }

Existen dos tipos de variables:
variables de tipo primitivo
variables de tipo referencia.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 13


Tipos primitivos
byte - 8 bits [-128..127]
short - 16 bits [-32768..+32767]
int - 32 bits [-2147483658..+2147483647]
long - 64 bits [-9223372036854775808+9223372036854775807]
float - 32 bits [decimal con signo]
double - 64 bits [decimal con signo]
char - 16 bits [ \u0000 \uFFFF]
boolean - 1 bit [false y true]

Ejemplo:
int unEntero=3;
float unFloat =3.5;
char unChar = a; char otroChar =\u002f;
boolean b = true; // false


NOTA: Java 5.0 incluye un nuevo tipo enumerado: enum fiesta { sabado,domingo };
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 14


Tipo de datos referencia
Las variables de este tipo contienen una referencia a un objeto. A estas
variables se las denomina variables referencia.
Cuando se crea un objeto (con new) el programador se queda con una
variable de tipo referencia para poder operar con ese objeto.
Ejemplo:
Punto p1;
Punto p2;


p1 = new Punto();
p2 = new Punto();





!! Cuidado al comparar con p1== p2 !!
p1
Punto

x, y: double
setX( px:double):void
.
p1 y p2 son variables de
tipo referencia, ya que
contiene la referencia
(similar a puntero) para
acceder a los objetos p1 y
p2. Inicializadas por
defecto a null
Punto
........
p2
p1
p2
null

null
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 15


Operadores
Categoras de operadores: aritmticos, relacionales, condicionales,
manipuladores de bits y lgicos, y asignacin.
Operadores Aritmticos
Operador Uso Descripcin
+ op1 + op2 Suma op1 y op2
- op1 - op2 Resta op2 de op1
* op1 * op2 Multiplica op1 y op2
/ op1 / op2 Divide op1 por op2
% op1 % op2 Calcula el resto de dividir op1 por op2

Java extiende el uso del operador + para la concatenacin de cadenas:
int contador = 1;
System.out.println("La entrada tiene" + contador + " caracteres.");

Operadores relacionales
Operador Uso Devuelve true si
> op1 > op2 op1 is greater than op2
>= op1 >= op2 op1 is greater than or equal to op2
< op1 < op2 op1 is less than to op2
<= op1 <= op2 op1 is less than or equal to op2
== op1 == op2 op1 and op2 are equal
!= op1 != op2 op1 and op2 are not equal

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 16




Los operadores relacionales comparan dos valores y determinan la relacin
entre ellos. Por ejemplo, != devuelve true si los dos operandos son diferentes.
Operadores condicionales
A menudo los operadores relacionales se usan con los operadores
condicionales, para construir expresiones complejas de decisin. Devuelven
un valor de tipo boolean.
Oper ador Uso Devuel ve t r ue si
&& op1 && op2 op1 and op2 are both true
|| op1 || op2 either op1 or op2 is true
! ! op op is false

Operadores de manipulacin de bits y lgicos
Oper ador Uso Oper aci on
>> op1 >> op2 shift bits of op1 right by distance op2
<< op1 << op2 shift bits of op1 left by distance op2
& op1 & op2 bitwise and
| op1 | op2 bitwise or
^ op1 ^ op2 bitwise xor
~ ~ op bitwise complement


PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 17


Operadores de asignacin
Se usa el operador = para asignar un valor a una variable.
int contador =0;

Formas abreviadas:
Oper ador Uso Equi val ent e a
+= op1 += op2 op1 = op1 + op2
-= op1 -= op2 op1 = op1 - op2
*= op1 *= op2 op1 = op1 * op2
/= op1 /= op2 op1 = op1 / op2
%= op1 %= op2 op1 = op1 % op2

&= op1 &= op2 op1 = op1 & op2
|= op1 |= op2 op1 = op1 | op2
^= op1 ^= op2 op1 = op1 ^ op2
<<= op1 <<= op2 op1 = op1 << op2
>>= op1 >>= op2 op1 = op1 >> op2


Operador de moldeado, permite convertir dos tipos:
int contador = (int) 7.6;

NOTA: En Java el compilador es ms estricto y no hace conversiones
automticas de tipos si hay una posible prdida de informacin o un error.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 18


Sentencias de control de flujo
Las sentencias de control de flujo determinan el orden en el que se ejecutan
las sentencias del programa. Sentencias similares a C/C++:

Sentencias Palabra reservada
decisin if-else, switch-case
bucle for, while, do-while
salto break, continue, label:, return
excepcin try-catch-finally, throw


Sentencia de gestin de excepcin:
try {
// codigo
} catch (UnaExcepcion nombreVariable) {
//tratamiento excepcin
} finally {
//siempre se ejecuta
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 19


Tablas (arrays)
Son uno de los tipos de datos ms utilizados por los diferentes lenguajes. Java
los tiene predefinidos en el ncleo del lenguaje, en el paquete java.lang
Una tabla almacena un conjunto de valores del mismo tipo. En Java las tablas
son tipos referencia (no son como en C/C++).
Declaracin:
TipoElemento[] miTabla; // TipoElemento miTabla[];

La declaracin no crea memoria para contener los elementos de la tabla, solo
para la referencia a la tabla. Para crear memoria para los elementos de la
tabla se debe instanciar el objeto tabla con new:
miTabla = new TipoElemento [10];

Una vez instanciado no podemos modificar su tamao. Para acceder a sus
elementos es como en C/C++ (pero si se accede a un elemento inexistente
dar error):
miTabla [0] = elemento1; ; miTabla [9] = elemento10;
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 20



Tambin se puede crear la tabla con sus valores iniciales al declararlo en la
misma linea:
int numeros[] = { 1,2,3,4};

Para conocer el tamao de la tabla podemos utilizar la variable miembro
length:
int tamaArray = numeros.length; // devuelve 4

Las tablas pueden contener elementos tanto de tipos primitivos como de tipos
referencia, siguiendose las mismas reglas ya vistas.
Tambin se pueden construir arrays de arrays:
int tabla[][] = new int[4][5];
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 21


String
Un objeto de clase String almacena una secuencia de caracteres.
Declaracin:
String unaCadena;
unaCadena = new String(esta es la cadena);

String unaCadena;
unaCadena = esta es la cadena;

El compilador genera un objeto de clase String cada vez que se encuentra con
una cadena de caracteres. Una vez creada una cadena no se puede
modificar su valor.
Para concatenar cadenas String se utiliza el operador + :
String c = las cadenas + se + pueden concatenar ;


PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 22


Clases y objetos
Una clase es un modelo o plantilla para la definicin de objetos. Es el elemento
central de un programa Java, todo gira entorno a ella. Una clase se encapsula
en un fichero del mismo nombre que la clase que contiene (extensin .java).
Sintaxis bsica:

public class <NombreClase>
{
// Declaracin de atributos
<acceso> <tipo> <nombreVariable> ;
:

// Declaracin de mtodos
<acceso> <tipo> <nombreMtodo> ( <parametros> ) { ... }
:
}

Donde <acceso> puede ser, entre otros: private (no accesible desde fuera de
la clase) o public (si accesible desde fuera).
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 23


Clases y objetos (II)
Ejemplo: Clase Punto en el plano.

public class Punto {

// atributos (normalmente privados)

private double x, y;

// metodos ( normalmente pblicos)

public void setX( double px) { x = px; }

public double getX() { return x ; }

public void setY( double py) { y = py; }

public double getY() { return y ; }
}

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 24


Creacin de un objeto
Declaracin de una variable de tipo referencia a un punto:

Punto p;

Instanciacin e inicializacin del objeto Punto asociado:

p = new Punto();

Tambin es posible pasar parmetros en la instanciacin si la clase lo
permite (definiendo constructores):

String s = new String(Hola);


PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 25


Atributos y Mtodos
La declaracin de atributos y mtodos siguen la sintaxis C/C++.
Cada objeto perteneciente a una clase contiene los mtodos de esa
clase. Estos mtodos pueden operar sobre los atributos particulares
del objeto sin restriccin alguna.
Los mtodos pueden tener ( no) parmetros y devolver ( no)
valores.
Los mtodos pueden estar sobrecargados (pueden tener el mismo
nombre mientras tengan distintos parmetros que los distingan).
Acceso a un mtodo:
Hay que indicar el nombre del objeto al que pertenece y el
nombre del mtodo, utilizando la sintaxis:
nombreObjeto.nombreMetodo ();

Ej: p.setX(7.2);


PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 26


Paso de parmetros
Se pueden pasar parmetros de tipos primitivos (enteros, char, boolean, etc.) y
tipos referencia (objetos y arrays).
Los parmetros en Java siempre se pasan por valor (son parmetros de
entrada), no hay parmetros de salida, pero:
Si el parmetro es de tipo referencia el mtodo no puede cambiar el
valor de la referencia, pero si puede invocar los mtodos del objeto (y
modificarlo por tanto).
Para pasar parmetros de tipo primitivo se puede envolver el tipo
incluyndolos dentro de una clase para pasarlos como tipo referencia
(wrappers).
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 27


Constructores
Todas las clases pueden tener mtodos especiales que son utilizados para
inicializar un nuevo objeto, son los constructores.
No es obligatorio declarar constructor/es, en tal caso en tiempo de ejecucin
se puede utilizar el constructor por defecto, que no tiene parmetros (si se
declara un constructor ya no se pone automticamente por defecto).
Estos mtodos tienen el mismo nombre que la clase y no tienen valor de
retorno (cuidado!). Ejemplo:
public class EjemConstructores {

public EjemConstructores() {

}

public EjemConstructores(int a) {

}
}

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 28


Programa principal
Una clase puede invocarse como una aplicacin si contiene el mtodo:
public static void main(String[] args) {....}

Ejemplo:














/* Fichero: HacerEco.java */
public class HacerEco {
public void sacarMensajeConsola(String s) {
System.out.println(s);
}
}



/* Fichero: Principal.java */
public class Principal {
public static void main(String[] args){
HacerEco he= new HacerEco ();
he.sacarMensajeConsola (args[0]);
}
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 29


mbito de variable
El mbito de una variable es el bloque de cdigo dentro del cual la variable es
accesible. Tambin, el mbito de una variable determina cuando la variable es
creada y destruida. Podemos distinguir cuatro categoras:
Variables miembro: Son miembros de una clase o un objeto y estn
declaradas dentro de una clase, pero no dentro de los mtodos de la
clase.
Variables locales: Se crean al llamar al mtodo y se destruyen al
terminar su ejecucin.
Variable de parmetro de mtodo.
Variable de manejador de excepciones.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 30


Inicializacin de variables
Las variables miembro pueden ser inicializadas cuando se declaran. Si en la
declaracin no se inicializa el sistema en tiempo de ejecucin asume una
inicializacin por defecto:
Variables numricas a 0.
Variables boolean a false.
Variables char a /u0000.
Variable referencia a null

Las constantes se definen como variables inicializadas y con el atributo final
delante. Ejemplo:

final int NOTAMAXIMA = 10;
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 31


Paquetes JAVA
Hay diversos paquetes de clases reusables que forman parte del JDK,
implementando gran cantidad de funciones: entrada/salida, operaciones de
comunicacin de red, interfaces grficas, etc. Es conveniente conocer estos
paquetes antes de escribir nuestras propias clases porque puede que lo que
queremos hacer est ya hecho.
El paquete del lenguaje JAVA java.lang contiene clases que forman el
ncleo del lenguaje JAVA. Estas clases las podramos agrupar en:

Object:
El gran-padre de todas las clases. Todas las clases heredan de esta.

Encapsuladores Wrappers: Clases que encapsulan a los tipos
primitivos: Boolean, Character, Double, Float, Integer and Long. Son
subclases de la clase abstracta Number.

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 32


Strings y Arrays: Clases que implementan cadenas de caracteres:
String y StringBuffer, y nos permiten definir arrays.
System y Runtime: Clases que permiten el acceso a los recursos del
sistema y al entorno de ejecucin .
Threads hilos: Creacin y gestin de hilos de ejecucin de un
programa.
Class: La clase Class ofrece una descripcin, en tiempo de
ejecucin, de una clase.
Math: Clases y valores matemticos.
Exceptions, Errors and Throwable: Gestin de errores y
excepciones.
Paquete entrada/salida : java.io
Ofrece un conjunto de flujos stream de entrada/salida usados para leer y
escribir datos a ficheros u otras fuentes.

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 33


Paquete utilidades: java.util
Este paquete contiene una coleccin de clases de utilidad: Set, List, Map,
Dictionary, Stack, Vector, Hashtable, etc.
Paquete de red: java.net
Capacidades de red para implementar aplicaciones cliente/servidor: Socket,
URL
Paquete applet.
Clases para implementar aplicaciones imbuidas en html para ejecutar en el
entorno de navegadores.
Paquete AWT, Swing
Clases para implementar interfaces grficas de usuario.

Y muchos ms
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 34


Uso de paquetes
Para utilizar una clase o interfaz dentro del fichero actual (por ejemplo la clase
Circulo del paquete graficos) primero se debe importar con la sentencia:
import graficos.Circulo;

La sentencia import debe estar al comienzo del fichero (detrs del nombre el
paquete si lo hay). Si se desea importar todo el paquete graficos sera:
import graficos.*;

Si por casualidad, una clase tiene el mismo nombre en dos paquetes, para
romper la ambigedad hay que dar el nombre completo de la clase cuando se
utilice:
grafico.Circulo circulo;

Nota: Todas las clases e interfaces pertenecen a algn paquete, incluso, si no se especifica
ninguno, se asume el paquete annimo, en el directorio actual, el cual siempre se importa.
El sistema en tiempo de ejecucin tambin importa por defecto el paquete java.lang
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 35














Lenguaje Java (ampliacin)
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 36


Clases: variables miembro
Formato completo de declaracin:
[acceso] [static] [final] [transient] [volatile] tipoVar nombreVariable;

[] campos opcionales.
acceso, define qu clases pueden acceder a esa variable.
final. Las variables constantes son aquellas que su valor no cambia.
Se definen con final y normalmente con static
Ejemplo:
[acceso] static final float PI= 3.1416;

No podemos hacer despus: PI = 3.1415

transient. Relacionado con el estado persistente del objeto.
volatile. Relacionado con multithread
static. Indica que la variable es una variable miembro de la clase. Si no
tiene el static se dice que es una variable de instancia.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 37


Clases: variables miembro de clase y de instancia
Las variables miembro de clase se declaran con static :
Existe la misma variable para todas las instancias de una clase.
El sistema en tiempo de ejecucin runtime crea la memoria para
estas variables la primera vez que se encuentra con la clase.
Se pueden usar sin crear una instancia (objeto) de la clase, utilizando
el nombre de clase.
Ejemplo:
class MiClase {
public static int numVeces;
}

int b = MiClase.numVeces;

Variable miembro de instancia:
Se crea una variable cada vez que se crea una instancia de la clase:
cada objeto tiene su propia copia.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 38


Clases: mtodos
Declaracin del mtodo:
[acceso] [static] [abstract] [final] [native] [synchronized] tipoRetorno nombreMetodo(parametros){..}

[] campos opcionales.
acceso, define desde qu clases se puede invocar este mtodo.
abstract, es un mtodo que no est implementado, slo se declara, se
implementar en otra clase.
final, mtodo que no puede ser sobrescrito tapado en una clase
derivada.
native, mtodo cuya implementacin no se hace en Java.
synchronized, acceso sincronizado (relacionado con multithread).
static, indica que es un mtodo de clase. Por defecto es de instancia.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 39


Reglas de acceso a mtodos de clase y de instancia
Se siguen la siguientes reglas al mezclar elementos de instancia y de clase:

Mtodos de instancia pueden operar sobre las variables de instancia del
objeto y tambin sobre las variables de clase.
Mtodos de clase no pueden acceder a las variables de instancia
declaradas dentro de la clase.
Mtodos de clase pueden ser invocados sin haber instanciado la clase en
la que estn definidos.
Mtodos de clase slo pueden operar con variables de clase.



PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 40


Ejemplo:
class EjemMetodosEstaticos {
private int x;
public static int getX() {
return x; //error
}
public static void setX (int nuevoX) {
x = nuevoX; //error
}
}


class EjemMetodosEstaticos {
private static int x;
public static int getX() {
return x; //bien
}
public static void setX (int nuevoX) {
x = nuevoX; //bien
}
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 41


this
Cuando queremos referirnos a los miembros del propio objeto, tanto variables
como mtodos, podemos utilizar la palabra reservada this.
Se suele utilizar para romper la ambigedad cuando las variables de los
argumentos de los mtodos tienen el mismo nombre que las variables
miembro del objeto o invocar constructores entre s.
Ejemplo:
class Ejemthis {

Object a;

void metodoEje(Object a) {

this.a = a; // a = a no tendra sentido

}

}

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 42


Ms sobre Clases
Declaracin completa:
[modificadores] class NombreClase [ extends SuperNombreClase ] [implements NombreInterfaz
,OtroInferfaz,...]
{
// miembros de la clase: atributos y mtodos
}

[modificadores]. Pueden ser: public, abstract, final.
public: Puede ser referenciada desde cualquier clase (solo una clase
pblica por fichero).
abstract: Clase que no puede ser instanciada directamente, slo a
travs de una clase que la herede extienda.
final: Clase que no puede heredarse.

Se asume por defecto: clase no pblica, no abstracta, no final, su superclase es
java.lang.Object, y no implementa ningn interfaz.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 43


Paquetes Package
Un paquete es una coleccin de clases e interfaces relacionados, llamado
tambin librera de clases.
Los paquetes hacen que las clases sean ms fciles de encontrar y usar, y
evitan conflictos de nombres (tcnicamente un paquete crea un nuevo espacio
de nombres).
El entorno de desarrollo de Java ofrece diversos paquetes que pueden usarse
en el desarrollo de los programas.
El programador tambin puede crear sus propios paquetes.
La creacin de paquetes se realiza con la palabra reservada package con el
nombre del paquete en la primera lnea de cada fichero de clase.




PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 44


Ejemplo: Creacin del paquete graficos.













// fichero Operaciones.java
package graficos;
public interface Operaciones {
. . .
}

// fichero Circulo.java
package graficos;
public class Circulo {
. . .
}

// fichero Rectangulo.java
package graficos;
public class Rectangulo {
. . .
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 45


Los ficheros *.class generados por el compilador cuando se compilan los *.java
anteriores, pueden estar situados en cualquier parte del Sistema de Ficheros,
pero dentro de un directorio llamado graficos.
Los nombres de los paquetes pueden tener mltiples componentes separados
por puntos:
com.cia.proyectoWeb.ClaseXXX

Cada componente del paquete representar un directorio dentro del Sistema
de Ficheros a partir de la raz que se indique como origen.
Debido a que las clases pueden estar en cualquier parte del Sistema de
Ficheros, debe indicarse al intrprete JAVA dnde se encuentra el directorio
raz origen para buscar las clases que queremos ejecutar.
La variable de entorno CLASSPATH sirve para ste propsito y tambin la
opcin classpath de la lnea de argumentos del interprete JAVA.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 46


Control de acceso a los miembros de una clase

Hay cuatro niveles de acceso: private, protected, public y package que
permiten restringir el acceso:

[acceso] clase package subclase mundo
private X
package X X
protected X X X (*)
public X X X X

X Acceso permitido.

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 47



Las reglas de acceso son las siguientes:
Acceso private, slo puede accederse desde la clase en la que estn
declarados.
Acceso package, es el acceso por defecto. Slo se puede acceder desde
clases del mismo paquete.
Acceso protected, se pueden acceder desde clases del mismo paquete y
desde las subclases.
Acceso public, se puede acceder desde cualquier clase.




PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 48


Herencia
La herencia permite crear nuevas clases (subclases) especializando clases ya
existentes, es por tanto un mecanismo de reutilizacin de cdigo.
Para declarar una subclase, se utiliza la palabra clave extends:
public class Subclase extends SuperClase {


}

Una clase slo puede tener una superclase de forma directa. Por defecto si no
se especifica ninguna se hereda de la clase java.lang.Object. No existe herencia
mltiple en Java.
En la subclase se pueden sobrescribir los mtodos de la superclase y tapar
sus atributos o aadir nuevos atributos y mtodos.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 49



Todas las clases en java heredan de forma directa o indirecta de la clase raz
java.lang.Object

Una subclase o clase derivada hereda los atributos y mtodos de la
superclase, o clase base, y de todas sus ancestros, hasta llegar a Object.
Object

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 50


Ejemplo:









public class Coche {
//Atributos
private String marca;
protected int velocidad;
//Metodos
public void acelera ( int cantidad)
{
velocidad = velocidad + cantidad;
}
}
public class Deportivo extends Coche {
//Atributos
public String nuevoAtributo;
//Metodo sobreescrito
public void acelera(int cantidad) {
velocidad = velocidad + cantidad * 2;
}
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 51


Herencia (II)
Qu variables miembro se heredan?
Se heredan aquellas variables miembro declaradas cmo public, protected o
package (si est en el mismo paquete). No se heredan variables miembros
declaradas con private.
Ejemplo: Tapado de variables miembro:
class SuperClase {
protected int a;
}
class Sub extends SuperClase {
int a; //tapa a la .-a.- de la SuperClase
}

Java ofrece una forma especial para acceder a variables tapadas utilizando
la palabra reservada super (solo del nivel superior):
super.a
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 52


Herencia (III)
Qu mtodos miembro se heredan?
Se aplican los mismos criterios que para las variables.
Construccin de la clase base en la herencia.
Cuando tenemos una clase base que requiere una inicializacin, debemos
hacerlo desde la clase derivada utilizando la palabra reservada super()en el
constructor para invocar al constructor adecuado de la clase base:
class SuperClase {
SuperClase (int a) {......}
SuperClase (float b) {......}
....
}
class Sub extends SuperClase {
Sub(int c,int d) {
super(c);
}
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 53


Herencia (IV)
Hay mtodos que una subclase no puede sobreescribir
Mtodos que hayan sido declarados como final en la clase base.
Mtodos que hayan sido declarados como static en la superclase, en
otras palabras, una subclase no puede sobrescribir mtodos de clase.

Mtodos que una subclase debe sobreescribir:
Mtodos que sean declarados como abstractos abstract (no
implementados ) en la clase base (o declararlos abstract a su vez).


PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 54


Clase java.lang.Object
La clase Object es la raz de la jerarqua de clases de Java.
Todas las clases son descendientes de esta clase (directa indirectamente).
Proporciona un cierto nmero de mtodos de utilidad general que pueden
utilizar todos los objetos con una codificacin por defecto:
Compararse uno mismo con otro objeto.
Convertir a un String cadena leble caractersticas del estado del
objeto.
Devolver la clase a la que pertenece el objeto.
Facilidades de sincronizacin en multithread.

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 55



Mtodo equals()
Se utiliza este mtodo para comparar si dos objetos son iguales, no que sus
referencias sean iguales. Devuelve true o false.

Ejemplo:
Integer uno = new Integer(2);
Integer dos = new Integer(2);

If(uno.equals(dos))
System.out.println(Objetos son iguales);
else
System.out.println(Objetos no son iguales);





PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 56


Mtodo toString()
Este mtodo devuelve una cadena (String) con informacin de estado del
objeto. Esta informacin es especfica de cada objeto.
Ejemplo:
System.out.println(Resultado: +new Integer(88).toString());

Resultado: 88

Mtodo getClass()
Este mtodo es final, no puede sobreescribirse. Devuelve la clase a la que
pertenece este objeto.
Mtodos de sincronizacin de threads.
Mtodo finalize()
:
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 57


Excepciones
Una excepcin es un evento que ocurre durante la ejecucin de un programa e
interrumpe el flujo normal de ejecucin.
En los programas pueden ocurrir errores, la preocupacin principal es saber:
Qu ocurre despus de un error? Cmo se maneja? Quin lo maneja?
Puede un programa recuperarse ante errores? La gestin de excepciones se
basa en la sentencia try/catch/finally
try {
//Sentencias Java que pueden lanzar una excepcin en caso de
detectar un error
}
catch(UnaExcepcion nombreVariable) {
//se captura la excepcin y se trata
}
catch(OtraExcepcion nombreVariable) {
//otro manejador de excepciones
}
finally {
//siempre se ejecuta este bloque de sentencias
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 58


Declarar las Excepciones que puede lanzar un Mtodo
Para indicar que un mtodo puede lanzar excepciones se utiliza la palabra
reservada throws y para lanzarlas la palabra reservada throw

public void metodoQueLanzaExcepciones() throws IOException, MiExcep
{
//cuerpo del mtodo

if(x ==0) throw new MiExcep(); // se interrumpe el flujo normal

//contina el flujo

}


El programador puede definir sus propias excepciones heredando de la clase
Exception:
public class MiExcep extends Exception {}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 59


Jerarqua de Excepciones

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 60


Jerarqua de excepciones
Las excepciones son objetos de la clase Throwable o sus subclases.
El manejador de excepciones puede capturar cualquier clase que derive de
java.lang.Throwable. Si el manejador captura slo clases hoja del rbol de
jerarqua se dice que es un manejador especializado, si por el contrario,
captura clases nodo es un manejador genrico.
Ejemplo:
try {
// Sentencias Java que pueden lanzar una excepcin
}
catch( ClaseDerivadaDeThrowable nombreVariable) {
// se captura la excepcin y se trata
}
catch(OtraClaselaseDerivadaDeThrowable nombreVariable) {
// otro manejador de excepciones
}
finally {
// siempre se ejecuta este bloque de sentencias
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 61


Clases y mtodos abstractos
Abstraccin: la clase o el mtodo se concentra en su interfaz (conducta)
dejando los detalles para despus. Java proporciona abstraccin mediante
clases abstractas (abstract) e interfaces.
Ejemplo:

abstract class EjemClaseAbstracta {

abstract void metodoAbstracto();

int otroMetodoImplem() {

}
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 62



Si una clase es abstracta slo se puede derivar de ella, no se pueden crear
objetos de la misma. Si queremos que la clase derivada se pueda instanciar
debe implementar todos los mtodos abstractos que tuviera la clase base.
Una clase si tiene un mtodo abstracto debe ser declarada como abstracta.
Una clase puede ser declarada como abstracta y no tener mtodos abstractos.
Una clase abstracta no pueden tener mtodos abstractos privados ni
estticos.
Al derivar de la clase base abstracta hay que implementar forzosamente los
mtodos abstractos o declararla abstracta:

class EjemClase extends EjemClaseAbstracta {

void metodoAbstracto() {} //implementacin forzosa

}

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 63


Interfaces
Un interfaz es una coleccin de definicin de mtodos (sin implementacin) y
valores constantes, que definen un protocolo de conducta que puede ser
implementado por cualquier clase independiente de la jerarqua de herencia.
Definicin, la palabra clave es interface
[acceso] interface UnaInterfaz [extends listaDeInterfaces]
{
int MXIMO =10;
void unMetodo(Object obj);
Object dosMetodo(Object obj);
int tresMetodo();
}

Implcitamente, las constantes son public, static y final; y los mtodo public y
abstract.


PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 64


Reglas:
Un interfaz puede extender ms de un interfaz, pero no puede extender
clases.
Un interfaz hereda todas las constantes y mtodos de sus superinterfaces, al
menos, que tape las constantes o sobrescriba los mtodos.
Similar a las clases abstractas, una interfaz tambin especifica un conjunto
de mtodos que se implementan aparte, pero sin necesidad de utilizar la
herencia.
La interfaz proporciona un mecanismo para extender los mismos mtodos a
distintas implementaciones.
Se puede simular la herencia mltiple, una clase puede implementar ms de
una interfaz.
Un interfaz es un tipo de datos referencia, y como tal puede utilizarse, tanto
en argumentos de mtodos como declaracin de variables.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 65


Interfaces: ejemplo de uso
// Definicin de la interfaz
public interface Movil {
final String medidaVelocidad=Km/h;

boolean arrancar();
void girar(int grados);
void setVelocidad(double velocidad);
}

// Clase que implementa la interfaz
public class Automovil implements Movil {

public boolean arrancar(){
// implementacion
}
public void girar(int grados){
// implementacion
}
public void setVelocidad(double velocidad){
// implementacion
}
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 66




// Otra clase que implementa la interfaz

public class Moto implements Movil { }


// El uso de las clases es el normal
:
Automovil auto = new Automovil();
:
// Una interfaz tambin es una referencia
Movil mAuto = new Automovil();
Movil mMoto = new Moto();
Movil movil = new Movil(); // Incorrecto !
:
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 67


Interfaces: extensin de la interfaz
Las interfaces no deben ser modificadas las clases que las implementan se
vern afectadas.
Si es posible definir una nueva interfaz aadiendo funcionalidad a una interfaz
existente utilizando la herencia, que en este caso puede ser mltiple. Ej:
// Extensin de una interfaz
public interface MovilAereo extends Movil {
void setAltura(double altura);
}
// Implementacin de la interfaz extendida
public class Avion implements MovilAereo {
public boolean arrancar() { ... }
public void girar(int grados) { ... }
public void setVelocidad(double velocidad) {...}
public void setAltura(double altura) {...}
}
// Definicion de la interfaz con herencia mltiple
public interface ReMovil extends Otra, MovilAereo {
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 68


Interfaces: conclusiones
Una clase no puede heredar de varias clases (aunque sean abstractas),
pero s puede implementar varias interfaces (sustitucin para la herencia
mltiple en Java)
Una interfaz si puede heredar de varias interfaces, ya que tienen permitida
la herencia mltiple. Por esto las interfaces tienen una jerarqua propia,
independiente y ms flexible que la jerarqua de las clases.
Las interfaces permiten conseguir que dos clases tengan el mismo
comportamiento, independientemente de su situacin en la jerarqua de
clases de Java.
Las interfaces permiten definir el comportamiento de una clase de forma
totalmente abstracta ( en comparacin las clases abstractas normalmente
incluyen una implementacin parcial)

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 69


Clases anidadas
Una de las caractersticas incorporadas a Java en el JDK 1.1 fue la capacidad
de crear clases anidadas, y tambin el uso de sintaxis abreviada (aunque un
tanto crptica) para la definicin de clases annimas y la instanciacin de
objetos annimos desde esas clases.
Una clase se denomina clase anidada cuando se define como miembro de otra
clase.
Ejemplo:
class ClaseExterna{

class UnaClaseAnidada {
}
}

Por regla general, se declara una clase anidada cuando esa clase slo tiene
sentido en ese contexto.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 70


La clase anidada tiene acceso ilimitado a los miembros de la clase, aunque
estos sean privados.
Similar a otras clases, las clases anidadas pueden ser abstractas o finales. El
acceso puede ser private, public o protected y package.
Puede ser declarada static, llamdose clase anidada esttica.
Una clase anidada no esttica se denomina clase interna (inner class):
class ClaseExterna {

static class UnaClaseAnidadaEstatica {

}
class ClaseInterna {

}
}

De forma similar a variables y mtodos de clase, una clase anidada esttica
no puede acceder a miembros de instancia definidos en la clase externa.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 71


Clases internas
Una clase interna, igual que las variables y mtodos de instancia, es asociada
con una instancia de su clase externa y tiene acceso directo a las variables y
mtodos de instancia. Al estar una clase interna asociada con una instancia
esta no puede definir miembros estticos.
Cualquier clase anidada, igual que las clases annimas, pueden declararse en
cualquier bloque de cdigo.
Una clase declarada dentro un mtodo o dentro de otro bloque ms pequeo
tiene acceso a variables finales y a variables declaradas dentro de ese mbito.
Clases internas son usadas principalmente como clases adaptadoras, como
veremos en el mecanismo de gestin de eventos de AWT.
Ejemplo: B es una clase interna de A
A a = new A(); // se crea un objeto de la clase A
A.B b = a.new B(); // se crea el objeto B dentro A


PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 72


Clases Annimas
Las clases annimas son muy similares a las clases internas locales, pero sin
nombre.
A continuacin se presenta un ejemplo de definicin de clase annima,
asociado tambin al modelo de gestin de eventos:
// llamada a una operacion de unObjeto

unObjeto.addActionListener(

new ActionListener() {
public void actionPerformed(ActionEvent e) {

}

);
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com







DIATEL-UPM. Programacin III. Lenguaje Java
Pg. 73


Clases genricas utilizando plantillas (Java 1.5)
Permiten definir clases que trabajan con tipos genricos. Ejemplo:

public class Punto<T>{
private T x;
private T y;
public Punto( T nx, T ny ) {
x = nx;
y = ny;
}
}

public class Programa {
public static void main(String[] args){

Punto<Integer> p;
p= new Punto<Integer> ( new Integer(1), new Integer(2) );

}
}
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

S-ar putea să vă placă și