Sie sind auf Seite 1von 83

lnLroduccln a !

ava
ConLenldo
lnLroduccln hlsLrlca
rogramas y paqueLes
Clases y ob[eLos
LlemenLos del lengua[e:
Lxpreslones
Cperadores
lnsLrucclones
8loques
ConLrol de errores
Cadenas de caracLeres
Arrays
Perencla
Clases absLracLas e lnLerfaces
2
lnLroduccln a !ava
uesarrollado por Sun. Aparece en 1991
8asado en C++ (y algo en SmallLalk) ellmlnando
denlclones de upos de valores y macros,
punLeros y arlLmeuca de punLeros,
necesldad de llberar memorla.
CrlenLado a ob[eLos con:
herencla slmple y pollmorsmo de daLos,
redenlcln de meLodos y vlnculacln dlnmlca.
recompllado
cheros fuenLe .java se convlerLen en cheros !"#$%&'$ .class
lnLerpreLado
cheros .class son lnLerpreLados por la mqulna vlrLual de !ava (!vM)
3
rograma en !ava
Con[unLo de clases
dlsenadas para colaborar en una Larea,
con una clase (publlca) dlsungulda que conuene un
meLodo de clase:
public static void main(String[] args)
que desencadena la e[ecucln del programa.
Las dems clases pueden esLar denldas (' *&% o
perLenecer a una blblloLeca de clases.
4
llcheros en !ava
Cada clase declarada como publlca debe de esLar en un
chero .java con su mlsmo nombre.
Cada chero .java puede conLener varlas clases pero slo
una podr ser publlca.
Cada chero .java debe precompllarse generando un
chero .class (en !"#$%&'$+) por cada clase conLenlda en
el.
Ll programa se e[ecuLa pasando el chero .class de la
clase dlsungulda al lnLerpreLe (mqulna vlrLual de !ava)
5
L[ecucln de un programa
public class HolaMundo {
public static void main(String[] args) {
System.out.println("Hola Mundo");
}
}
HolaMundo.java
HolaMundo.class
Bytecodes
javac
MacOS
Windows
Solaris
java
6
$ ls
HolaMundo.java
$ javac HolaMundo.java
$ ls
HolaMundo.java
HolaMundo.class
$ java HolaMundo
Hola Mundo
$

aqueLes
Las blblloLecas se organlzan en !"#$%&%' (package):
mecanlsmos lglcos para agrupar clases relaclonadas.
1odas las clases de un paqueLe deben esLar locallzadas en un
mlsmo subdlrecLorlo.
Los paqueLes del slsLema cuelgan de varlos subdlrecLorlos
especlcos:
.../java
.../javax
La varlable CLASSPATH conuene una llsLa con Lodos
camlnos de busqueda de los dems paqueLes.
7
LsLrucLura de las blblloLecas en !ava
Frontera del CLASSPATH
Paquetes
Paquetes del sistema
java
java.lang
java.util
java.io
8
aqueLes bslcos del slsLema
java.lang: para funclones del lengua[e
java.util: para uulldades adlclonales
java.io: para enLrada y sallda
java.text: para formaLo especlallzado
java.awt: para dlseno grco e lnLeraz de usuarlo
java.awt.event: para gesuonar evenLos
javax.swing: nuevo dlseno de Cul
java.net: para comunlcaclones
...
9
Acceso a las blblloLecas de !ava
Ll nombre de cada paqueLe debe colncldlr con el camlno que
va desde algun dlrecLorlo del CLASSPATH (o desde /java
o /javax) al subdlrecLorlo correspondlenLe al paqueLe.
A las clases lncluldas en java.lang se puede acceder
slmplemenLe por sus nombres, p.e.: System o Math.
Las clases de un paqueLe (salvo las de java.lang) slo se
pueden acceder por sus nombres desde oLra clase denLro del
mlsmo paqueLe,
para acceder a ellas desde oLro paqueLe hay que hacerlo
precedlendolas con el nombre del paqueLe.
10
L[emplo
rograma para calcular el valor medlo de un mllln de numeros
generados aleaLorlamenLe, usando las clases
Random del paqueLe java.util
System del paqueLe java.lang
public class TestAleatorio {
public static void main(String[] args) {
java.util.Random rnd = new java.util.Random();
double sum = 0.0;
for (int i = 0; i < 1000000; i++) {
sum += rnd.nextDouble();
}
System.out.println(media = + sum / 1000000.0);
}
}
11
Clases en !ava
public class Punto {
private double x, y;
public Punto() { x = y = 0; }
public Punto(double a, double b) {
x = a; y = b;
}
public double x() { return x; }
public double y() { return y; }
public void trasladar(double a, double b) {
x += a; y += b;
}
public void x(double a) { x = a; }
public void y(double b) { y = b; }
public double distancia(Punto pto) {
return Math.sqrt(Math.pow(x - pto.x, 2)
+ Math.pow(y - pto.y, 2));
}
}
12
LsLrucLura de una clase en !ava
public class Partcula extends Punto {
final static double G = 6.67384 e-11;
protected double masa;
public Partcula(float m) {
super(0, 0);
masa = m;
}
public Partcula(double a, double b, double m) {
super(a, b);
masa = m;
}
public void masa(double m) { masa = m; }
public double masa() { return masa; }
public double atraccin(Partcula part) {
return G * masa * part.masa /
Math.pow(distancia(part), 2);
}
}
Cabecera
Cte. de clase
Var. de instancia
Constructor
Mtodo de instancia
13
MeLodos y varlables de lnsLancla
Las varlables de lnsLancla (o aLrlbuLos) se acceden euqueLndolas con
el nombre o la referencla de la lnsLancla.
Cada lnsLancla uene sus proplas varlables de lnsLancla.
un punLo uene dos varlables de lnsLancla x, y mlenLras que una parucula
uene Lres (x, y, m)
Los meLodos de lnsLancla se lnvocan medlanLe mensa[es consLruldos
precedlendo el nombre del meLodo con el nombre o la referencla de la
lnsLancla.
un meLodo de lnsLancla uene acceso a las varlables de clase y a las
varlables de lnsLancla proplas (del recepLor).

public double distancia(Punto pto) {
return Math.sqr(Math.pow(x - pto.x, 2) +
Math.pow(y - pto.y, 2));
}

14
MeLodos y varlables de clase
Las varlables de clase
Son comunes a Lodos los ob[eLos de la clase.
Se declaran como static.
Se acceden/lnvocan euqueLando sus nombres con el nombre de la
clase cuando son vlslbles (y Lamblen con el nombre de alguna
lnsLancla).
Los meLodos de clase
Slo uenen acceso a las varlables de clase.
Se declaran como static.
Se acceden/lnvocan euqueLando sus nombres con el nombre de la
clase cuando son vlslbles (y Lamblen con el nombre de alguna
lnsLancla).

public double atraccin(Partcula part) {
return G * masa * part.masa /
Math.pow(distancia(part), 2);
}
15
MeLodos y varlables de clase
public class Vuelo {

static private int sigVuelo = 1;
private String localizadorVuelo;

static public int nuevoIdentificador() {
int vuelo = sigVuelo;
sigVuelo++;
return vuelo;
}

public Vuelo(String lin) {
localizadorVuelo = lin + _ + nuevoIdentificador();
}
...
}


Vuelo v1 = new Vuelo(Iberia); // Iberia_1
Vuelo v2 = new Vuelo(Lufhtansa); // Lufhtansa_2
Vuelo v3 = new Vuelo(Iberia); // Iberia_3
16
ConLrol de la vlslbllldad
LxlsLen cuaLro nlveles de vlslbllldad:
private - vlslbllldad denLro de la propla clase
protected - vlslbllldad denLro del paqueLe y de las clases herederas
public - vlslbllldad desde cualquler paqueLe
or omlsln - vlslbllldad denLro del proplo paqueLe (package)
Mismo paquete Otro paquete
Subclase Otra Subclase Otra
- private NO NO NO NO
# protected S S S NO
+ public S S S S
~ package S S NO NO
17
Los ob[eLos son slempre lnsLanclas de alguna
clases.
uuranLe la e[ecucln de un programa
Se crean ob[eLos
lnLeracLuan
Se ellmlnan los ob[eLos no necesarlos
La ellmlnacln es auLomuca
La vlda de los ob[eLos
18
Creacln de ob[eLos
Cuando un ob[eLo se crea:
Se le reserva espaclo de memorla
Se le aslgna unos valores lnlclales a sus varlables de esLado
ara crearlo se debe uullzar un consLrucLor:
new <constructor>(<lista args>)

new devuelve una referencla al ob[eLo que crea.
uede aslgnarse a una varlable
pto = new Punto(3, 4);
uede usarse en una expresln
pto.distancia(new Punto(2, 3));
19
ConsLrucLores de ob[eLos
una clase puede denlr varlos consLrucLores
Con dlsunLo numero de argumenLos o
Con argumenLos de dlsunLos upos

Sl no hay nlngun consLrucLor enLonces el
slsLema proporclona uno por defecLo"
Sl hay consLrucLores, el por defecLo" no se crea
20
varlables de ob[eLo
Las varlables se declaran de una clase (o lnLerfaz)

Punto pto;

pto
Ls una referencla a un ob[eLo, no es un ob[eLo
no puede reclblr aun mensa[es.
una varlable puede referenclar a un ob[eLo (Aslgnacln)

pto = new Punto(3, 4);

?a puede reclblr mensa[es.
LsLos dos pasos se pueden reallzar slmulLneamenLe:

Punto pto = new Punto(3, 4);

21
uso de ob[eLos
A las varlables de esLado de un ob[eLo se accede de la forma
pto.x , slempre que sea vlslble:

A las de lnsLancla denLro de un meLodo con this.x
public double distancia(Punto pto) {
return Math.sqr(Math.pow(this.x - pto.x, 2) +
Math.pow(this.y - pto.y, 2));
}
Sl no hay conlcLo de nombres, this puede suprlmlrse.
public double distancia(Punto pto) {
return Math.sqr(Math.pow(x - pto.x, 2) +
Math.pow(y - pto.y, 2));
}
Se supone que un ob[eLo debe proLeger su esLado.
,-. (%%$+& '/0$%#& ( .(+ 1(0/(!.$+ '$ $+#('& '$ 23 &!4$#& 5&0 5(0#$
'$ &#0& '$ &#0( %.(+$ 3& $+ (%&3+$4(!.$6.
22
uso de ob[eLos
lnvocacln de los meLodos
Los meLodos cuando son vlslbles, se lnvocan medlanLe
la forma:
Punto pto = new Punto(3, 4);
pto.trasladar(2, 2);
Ll compllador admlur la expresln sl el upo esLuco
del recepLor sabe responder a ese mensa[e
Ll cdlgo concreLo del meLodo lnvocado en un mensa[e
depender del upo dlnmlco del ob[eLo recepLor.
23
Aslgnacln o Copla
Aslgnacln.
ComparLe ob[eLo.
Copla
uenlr un consLrucLor de copla
Como argumenLo uene oLro ob[eLo de la mlsma clase
lnclulr un meLodo de copla en la clase
correspondlenLe.
uullzar el meLodo clone() de la clase Object
24
uso de ob[eLos (aslgnacln)
public class Segmento {
private Punto origen, extremo;
public Segmento(Punto pto1, Punto pto2) {
origen = pto1;
extremo = pto2;
}
... // Otros mtodos
public double longitud() {
return origen.distancia(extremo);
}
}
25
uso de ob[eLos (dupllcacln)
public class Segmento {
private Punto origen, extremo;
public Segmento(Punto pto1, Punto pto2) {
origen = new Punto(pto1.x(), pto1.y());
extremo = new Punto(pto2.x(), pto2.y());
}
... // Otros mtodos
public double longitud() {
return origen.distancia(extremo);
}
}
26
Solo se uullza en caso de no querer que los ob[eLos componenLes sean
acceslbles desde oLros ob[eLos.
Ln esLe caso hay que asegurarse de que nlnguno de los meLodos de acceso
van a proporclonar referenclas a esLos componenLes.
Lllmlnacln de ob[eLos
La ellmlnacln de ob[eLos
AuLomuca cuando el ob[eLo es lnalcanzable
orque se plerden Lodas las referenclas a el
Se puede provocar la perdlda de una referencla a un ob[eLo
pto = null;

Se puede sollclLar la ellmlnacln auLomuca
lnvocando el meLodo de clase gc() de la clase System.
27
1lpos y valores
Ln !ava hay upos bslcos.
Llamamos valores a los daLos de esLos upos.
Slo exlsLen los slgulenLes upos bslcos:

byte (enLero de 8 blLs) short (enLero de 16 blLs)
int (enLero de 32 blLs) long (enLero de 64 blLs)
float (declmal de 32 blLs) double (declmal de 64 blLs)
char (unlcode de 16 blLs) boolean (true, false)
no se pueden denlr ms upos bslcos.
28
1lpos y valores
Los valores, al lgual que los ob[eLos, se pueden manlpular
medlanLe varlables.

Las varlables de upos bslcos conuenen a los valores, no los
referenclan.
Los valores Lamblen se pueden manlpular dlrecLamenLe,
usando sus represenLaclones llLerales

int 56, 0123, 0xaf
long 8456l, 33456L
double 4.66, 23.7e3, 35.213d, 23.2D
float 67.345f, 34.122F, 21.34e2f
char a, $, \t, \u0061
boolean true, false

int 1_000_000 0b1001_1100 (desde Java1.7)

29
Java
30
pto
Punto pto = new Punto(1, 3);
Punto
x

y
1
3
1lpos bslcos versus clases
varlables de upos bslcos
Almacenan el valor
varlables de ob[eLos
Almacenan la referencla al ob[eLo
LsLo uene consecuenclas en la manlpulacln
de referenclas y valores.
Java
31
pto
Punto pto = new Punto(1, 3);
Punto
x

y
1
3
1lpos bslcos y clases
Punto
x

y
2
3
pt1
Punto pt1 = new Punto(1, 3);
Punto pt2 = new Punto(2, 5);
Segmento sg = new Segmento(pt1, pt2);

Segmento
origen

destino
Punto
x

y
1
3
pt2
sg
Converslones de upos y clases
Se producen converslones de upo o de clase de forma )*!+,-)&"
en clerLos conLexLos.
Slempre a .!/' *0' "*!+)/' slgulendo la ordenacln:
byte short int long float double
char
o a -+"'%' "'-%12%1&%' en la llnea de la herencla.
Se permlLen converslones %3!+,-)&"' en senudo conLrarlo
medlanLe la consLruccln:
(<tipo/clase>) <expresin>
Slo se comprueban duranLe la e[ecucln.
32
Converslones lmpllclLas: conLexLos
La conversln lmpllclLa se produce en los slgulenLes
conLexLos:
"#$%&'($)&*# (el upo de la expresln se promoclona al upo de la
varlable de desuno)
+&,)('($)&*# -* ./0)-)# (los upos de los parmeLros
acLuales se promoclonan a los upos de los parmeLros formales)
1,'23'($4& -* *567*#$)&*# '7$0./8('# (los upos de los
operandos se promoclonan al del operando con el upo ms general y,
como mlnlmo se promoclonan a int)
9)&('0*&'($4& -* ('-*&'# (los valores de los argumenLos se
convlerLen en cadenas)
33
ConsLanLes
una varlable se puede declarar como consLanLe
precedlendo su declaracln con la euqueLa final:

final int NUM_BARCOS = 10;
La lnlclallzacln de una varlable nal se puede hacer en
cualquler momenLo posLerlor a su declaracln.
Cualquler lnLenLo de camblar el valor de una varlable
nal despues de su lnlclallzacln produce un error en
uempo de compllacln.
34
ldenucadores
un /'$378%('&0 (nombre) es una secuencla arblLrarla de caracLeres unlcode:
leLras, dlglLos, subrayado o slmbolos de monedas. no debe comenzar por dlglLo
nl colncldlr con alguna palabra reservada.
int nmero;
Los ldenucadores dan nombre a: varlables, meLodos, clases e lnLerfaces.
or convenlo:
nombres de varlables y meLodos en mlnusculas. Sl son compuesLos, las palabras no
se separan y comlenzan con mayuscula.
nombres de clase lgual, pero comenzando con mayuscula.
nombres de consLanLes Lodo en mayusculas. Sl son compuesLos, las palabras se
separan con subrayados.
long valorMximo;
class PilaNat ...
final int CTE_GRAVITACIN
35
mblLo de una varlable
un ldenucador debe ser unlco denLro de su mblLo.
Ll 0*4)&/ de una varlable es la zona de cdlgo donde
se puede usar su ldenucador sln cuallcar.
Ll mblLo deLermlna cundo se crea y cundo se
desLruye espaclo de memorla para la varlable.
Las varlables, segun su mblLo, se claslcan en las
slgulenLes caLegorlas:
varlable de clase o de lnsLancla
varlable local
armeLro de meLodo
armeLro de gesLor de excepclones
36
}
class MlClase [ ...
varlables de clase
mblLos
publlc vold meLodo(...) [
}
armeLros y
varlables de lnsLancla
[...
}
varlables locales
caLch(...) [
}
armeLros
caLch
sLauc
37
lnlclallzacln de varlables
Las varlables de clase se lnlclallzan auLomucamenLe
al cargar la clase.
Las varlables de lnsLancla se lnlclallzan
auLomucamenLe cada vez que se crea una lnsLancla.
Las varlables locales no se lnlclallzan de forma
auLomuca y el compllador produce un error sl no se
hace manualmenLe.
valores de lnlclallzacln auLomuca:
false \u0000 0 +0.0F +0.0D null
38
Lxpreslones
una $950$+/:3 es una comblnacln de
llLerales,
varlables,
operadores y
mensa[es,
acorde con la slnLaxls del lengua[e, que +$
$1(.;( a un valor slmple o
a una referencla a un ob[eLo y
'$12$.1$ $. 0$+2.#('& obLenldo.
39
Cperadores (l)
un &5$0('&0 es una funcln de uno, dos o Lres
argumenLos.
LxlsLen operadores
arlLmeucos (+_, -_, _++, _--, ++_, --_)
(_+_, _-_, _*_, _/_, _%_)
de relacln/comparacln ( >, >=, <, <=, ==, != )
lglcos ( &&, ||, !, &, |, ^ )
de aslgnacln (=, +=, -=, *=, /=, %=, &=, |=, ^=)
para la manlpulacln de blLs
CLros operadores ( _?_:_ )
40
Cperadores (ll)
Con un operador y sus argumenLos se consLruyen
expreslones slmples.
3 * 5 x += 7.3 a <= 45
Las expreslones slmples se pueden comblnar dando
lugar a expreslones compuesLas.
3 * 5 + x += 7.3 y *= x += 7.3
Ll orden de evaluacln de las expreslones compuesLas
depende de:
La precedencla y
La asoclauvldad
de los operadores que aparezcan
41
recedencla de operadores
:7*(*-*&($' (en senudo decreclenLe)
var++ var-- &
++var --var ! |
new (tipo)exp &&
* / % ||
+ - = += -= *= ...
< > <= >=
== !=
Ll orden de las operaclones en una expresln
slempre se puede modlcar medlanLe el uso de
parenLesls

42
Asoclauvldad de operadores
"#)($'8,$-'-
1odos los operadores blnarlos (excepLo la
aslgnacln) a lgualdad de precedencla, asoclan por
la lzqulerda.
La aslgnacln asocla por la derecha
L[emplos de expreslones:
3 + 4 / 2 3 * (x = 5)
x = y = 3 x = ++y / 2
x > 3 && y x = y++ / 2

43
lnsLrucclones/senLenclas
LxlsLen Lres clases de lnsLrucclones o
senLenclas:
SenLenclas de expresln - Se obuenen Lermlnando
en ';' alguna de las expreslones slgulenLes:
aslgnaclones
lncremenLos/decremenLos ++/--
mensa[es
creaclones de ob[eLo
SenLenclas de declaracln de varlables
SenLenclas de conLrol
44
SenLenclas de declaracln
Las senLenclas de declaracln de varlables
uenen la forma: <upo> <n. varlable>
int x;
Las declaraclones de varlables del mlsmo
upo/clase pueden agruparse:
int x, y, z;
Las senLenclas de declaracln pueden
agruparse con las de aslgnacln a las mlsmas
varlables:
int x = 5, y = 12, z = 213;
45
SenLenclas de conLrol
Las senLenclas de conLrol del u[o de
e[ecucln se agrupan en:
senLenclas de repeucln
senLenclas de seleccln
senLenclas para el conLrol de excepclones
senLenclas de salLo/ramlcacln
46
SenLenclas de repeucln
while (<exp. booleana>)
<sentencia>

do <sentencia>
while (<exp. booleana>);

for (<exp1>; <exp. bool>; <exp2>
<sentencia>
47
SenLenclas de repeucln
L[emplos:
for (int i = 0; i < 20; ++i) {
...
}
for (int i = array1.length; --i >= 0){
...
}
for ( ; ; ) {
...
}

LxlsLe una slnLaxls de for especlal para arrays y colecclones.
48
SenLenclas de seleccln (l)
if (<exp. bool>) <sentencia>

if (<exp. bool>) <sentencia1>
else <sentencia2>

if (<exp. bool1>) <sentencia1>
else if (<exp. bool2>) <sentencia2>
...
else <sentenciaN>

<exp bool> ? <exp1> : <exp2>

L[emplo:

System.out.println(El carcter + car + es +
(Character.isUpperCase(car) ? mayscula : minscula));
49
SenLenclas de seleccln (ll)
switch (<exp>) {
case <exp ent1>: <sentencia1>; break;
...
default: <sentenciaN>; break;
}
exp puede se cualquler numerable o SLrlng (desde !ava 1.7)

L[emplo:

int mes;
...
switch (mes) {
case 1: System.out.println(Enero); break;
case 2: System.out.println(Febrero); break;
...
case 12: System.out.println(Diciembre); break;
}
50
SenLenclas de seleccln (lll)
int ao, mes, numDas;
...
switch (mes) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: numDas = 31; break;
case 4:
case 6:
case 9:
case 11: numDas = 30; break;
case 2: if ... else ...
}

51
8loques
Crupo de cero o ms senLenclas, encerradas enLre
llaves, dando lugar a una senLencla compuesLa.
{ <sentencia1>
...
<sentenciaN>
}
un bloque se puede usar en cualquler parLe donde
se neceslLe una senLencla slmple.
52
ConLrol de excepclones (l)
Mecanlsmo de ayuda para la comunlcacln y
el mane[o de errores
Cuando se produce un error en un meLodo:
1. Se genera un ob[eLo de la clase Exception (o
heredera) con lnformacln sobre el error,
2. Se lnLerrumpe el u[o normal de e[ecucln, y
3. Ll enLorno de e[ecucln LraLa de enconLrar un
LraLamlenLo para dlcho ob[eLo
1. denLro del proplo meLodo o
2. en uno anLerlor en la plla de acuvaclones.
53
ConLrol de excepclones (ll)
LxlsLen Lres senLenclas relaclonadas con el conLrol
de excepclones:
try
dellmlLa un bloque de lnsLrucclones donde se puede
produclr una excepcln,
catch
ldenuca un bloque de cdlgo asoclado a un bloque try
donde se LraLa un upo parucular de excepcln,
finally
ldenuca un bloque de cdlgo que se e[ecuLar despues de un
bloque try con lndependencla de que se produzcan o no
excepclones.
54
ConLrol de excepclones (lll)
Ll aspecLo normal de un segmenLo de cdlgo con conLrol de
excepclones serla el slgulenLe:
try {
<sentencia/s>
} catch(<tipoexcepcin> <identif>) {
<sentencia/s>
}
...
} catch(<tipoexcepcin> <identif>) {
<sentencia/s>
} finally {
<sentencia/s>
}
55
8loque
vlgllado
Mane[ador
Mane[ador
Slempre se
e[ecuLa
Cadenas de caracLeres. Clase SLrlng
Secuencla de caracLeres unlcode
LnLre comlllas dobles:
Ejemplo de cadena de caracteres
La clase String dlspone de consLrucLores y
meLodos para crear y manlpular cadenas de
caracLeres:
String cadena = hola;
cadena = adis;
String saludo = new String(hola y adis);
56
- Cb[eLos que represenLan esLrucLuras de daLos de longlLud [a con
componenLes de un mlsmo upo o clase.
- Con una slnLaxls parucular:
! ueclaracln
int [] listaEnteros;
Punto [] listaPuntos;
! lnlclallzacln
listaEnteros = new int[10];
listaPuntos = new Punto[23];
char[] vocales = {a, e, i, o, u};
Punto p = new Punto(1, 1);
Punto[] ap = {new Punto(2, 2), p, null};
- La longlLud se guarda en la consLanLe 2*&%0<.
componentes
array
nombre
componentes
tamao
array literal
57
Arrays en !ava (l)

Los arrays slempre comlenzan por la poslcln 0

for (int i = 0; i < listaEnteros.length; i++){
listaEnteros[i] = i;
}
for (int i = 0; i < listaPuntos.length; i++){
listaPuntos[i] = new Punto(i, i);
}

String[] cadenas = {CAD1, CAD2, CAD3};
for (int i = 0; i < cadenas.length; i++) {
System.out.println(cadenas[i].toLowerCase());
}
58
Arrays en !ava (ll)
Array de arrays (l)
Las componenLes de un array pueden ser arrays.
Al crear un array muludlmenslonal con el operador
new solo hace falLa [ar el Lamano de la prlmera
dlmensln.

int[][] matriz = new int[4][];
for (int i = 0; i < matriz.length; i++) {
matriz[i] = new int[i + 5];
for (int j = 0; j < matriz[i].length; j++) {
matriz[i][j] = i + j;
}
}
59
Array de arrays (ll)
String[][] familias = {
{Picapiedra,Pedro,Wilma,Pebbles,Dino},
{Mrmol,Pablo,Betty,Bam Bam},
{Simpson,Homer,Marge,Burt,Lisa,Maggie}
};

for (int i = 0; i < familias.length; i++) {
System.out.print(familias[i][0] + : );
for (int j = 1; j < familias[i].length; j++) {
System.out.print(familias[i][j] + );
}
System.out.println();
}
60
Copla de arrays (l)
ara la copla eclenLe de componenLes de un
array a oLro !ava uene el meLodo
arraycopy en la clase System.

public static void arraycopy(
Object arrayOrigen,
int primndiceOrigen,
Object arrayDestino,
int primndiceDestino,
int nmeroDeCompCopia)
61
Copla de arrays (ll)
char[] arrayOrigen =
{d,e,s,c,a,f,e,i,n,a,d,o};
char[] arrayDestino = new char[7];

System.arraycopy(arrayOrigen, 3, arrayDestino, 0, 7);
System.out.println(new String(arrayDestino));
62
8ecorrldos en arrays
char[] arrayOrigen =
{d,e,s,c,a,f,e,i,n,a,d,o};

for (int i = 0; i < arrayOrigen.length; i++){
System.out.println(arrayOrigen[i]);
}

- Ls poslble uullzar una slnLaxls alLernauva

for( char c : arrayOrigen) {
System.out.println(c);
}
63
MosLrar un array
Ll slgulenLe segmenLo de cdlgo
int[] ar = {1, 3, 5, 7, 9};
System.out.println(java.util.Arrays.toString(ar));

mosLrar en la sallda esLndar
[1, 3, 5, 7, 9]

- La clase "77'=# esL en >','?382 y se esLudlar ms
adelanLe. 1lene muchas ms funclonalldades como
algorlLmos de busqueda, ordenacln, eLc.
64
uaLos enumerados: enum
enum Semana {Lun, Mar, Mie, Jue, Vie, Sab, Dom};

class Ej {
public static void main(String[] args) {
Semana s = Semana.Lun;
Semana t = Semana.valueOf(Mie);

for(Semana se : Semana.values()) {
System.out.print(se + );
}
}
}


Lun Mar Mie Jue Vie Sab Dom
65
Clases anldadas
Se denen denLro del cuerpo de oLra clase.
Aunque se pueden dlsungulr dlversos upos de clases
anldadas (lnLernas, locales, annlmas), dependlendo
del mblLo en el que se declaren, solo conslderaremos
las denomlnadas:
(2'#*# $&0*7&'# *#0@8('#
una clase lnLerna esLuca es la que se dene como un
aLrlbuLo ms de la clase, y en la que se uullza el
callcador static.
ara acceder a ellas debe cuallcarse con el nombre
de la clase exLerna (sl es vlslble).

66
Clases lnLernas esLucas
un e[emplo de clase lnLerna esLuca son los daLos enumerados.




public class Urna {

static public enum ColorBola {Blanca, Negra};

private int numBlancas, numNegras;

public Urna(int nB, int nN) {
numBlancas = nB;
numNegras = nN;
}

public ColorBola sacaBola() {
ColorBola bolaSacada = null;
if (...) {
bolaSacada = ColorBola.Blanca;
numBlancas--;
} else {
bolaSacada = ColorBola.Negra;
numNegras--;
}
return bolaSacada;
}
...
}

...

Urna.ColorBola cb = Urna.ColorBola.Negra;

...

67
Subclases/Perencla
Ln !ava se pueden denlr +2!%.(+$+ o clases que *$0$'(3
esLado y comporLamlenLo de oLra clase (la +25$0%.(+$) a la
que ampllan, en la forma:
class MiClase extends Superclase {
...
}
Ln !ava slo se permlLe *$0$3%/( +/<5.$, por lo que pueden
esLablecerse [erarqulas de clases.
1odas las [erarqulas conuyen en la clase Object de
java.lang que recoge los comporLamlenLos bslcos que
debe presenLar cualquler clase.
68
Perencla y consLrucLores
Los consLrucLores &) se heredan.
Cuando se dene un consLrucLor se debe proceder de alguna de las Lres formas
slgulenLes:
lnvocar a un consLrucLor de la mlsma clase (con dlsunLos argumenLos) medlanLe Lhls:
or e[emplo:
public Punto() {
this(0, 0);
}

La llamada a Lhls debe esLar en la prlmera llnea
lnvocar algun consLrucLor de la superclase medlanLe super:
or e[emplo:
public Partcula(double a, double b, double m) {
super(a, b);
masa = m;
}

La llamada a super debe esLar en la prlmera llnea.
ue no ser asl, se lnvoca por defecLo al consLrucLor sln argumenLos de la superclase:
or e[emplo:
public Partcula() {
// Se invoca el constructor por defecto Punto()
masa = 0;
}
69
Perencla, varlables y meLodos
MeLodos de lnsLancla:
un meLodo de lnsLancla de una clase puede redenlrse en una
subclase.
Salvo sl el meLodo esL declarado como final (o la clase).
La resolucln de los meLodos de lnsLancla se reallza por vlnculacln
dlnmlca.
una redenlcln puede ampllar la vlslbllldad de un meLodo.
Ll meLodo redenldo queda oculLo en la subclase por el nuevo meLodo.
Sl se desea acceder al redenldo, se debe uullzar la slnLaxls
super.=3&<!0$ '$. <>#&'&?(=(0@2<$3#&+?)
La resolucln de una llamada a super se hace por vlnculacln dlnmlca
comenzando desde la clase en la que aparece super.
MeLodos de clase y varlables de lnsLancla o de clase:
Se resuelven por vlnculacln esLuca.
70
public class Uno {
public int test() { return 1; }
public int resultado1() {
return this.test();
}
}

public class Dos extends Uno {
public int test() { return 2; }
}

public class Tres extends Dos {
public int resultado2() { return this.resultado1(); }
public int resultado3() { return super.test(); }
}

public class Cuatro extends Tres {
public int test() { return 4; }
}

public class Prueba {
public static void main(String[] args) {
Tres obj3 = new Tres();
Cuatro obj4 = new Cuatro();
System.out.println("obj3.test() = " + obj3.test());
System.out.println("obj3.resultado2() = " + obj3.resultado2());
System.out.println("obj3.resultado3() = " + obj3.resultado3());
System.out.println("obj4.resultado1() = " + obj4.resultado1());
System.out.println("obj4.resultado2() = " + obj4.resultado2());
System.out.println("obj4.resultado3() = " + obj4.resultado3());
}
}
obj3.test() = 2
obj3.resultado2() =
obj3.resultado3() =
obj4.resultado1() =
obj4.resultado2() =
obj4.resultado3() =
2
2
4
4
2
SALIDA:
71
public class Uno {
public int test() { return 1; }
public int resultado1() {
return this.test();
}
}

public class Dos extends Uno {
public int test() { return 2; }
}

public class Tres extends Dos {
public int resultado2() { return this.resultado1(); }
public int resultado3() { return super.test(); }
public int test() { return 3; }
}

class Cuatro extends Tres {
public int test() { return 4; }
}

public class Prueba {
public static void main(String[] args) {
Tres obj3 = new Tres();
Cuatro obj4 = new Cuatro();
System.out.println("obj3.test() = " + obj3.test());
System.out.println("obj3.resultado2() = " + obj3.resultado2());
System.out.println("obj3.resultado3() = " + obj3.resultado3());
System.out.println("obj4.resultado1() = " + obj4.resultado1());
System.out.println("obj4.resultado2() = " + obj4.resultado2());
System.out.println("obj4.resultado3() = " + obj4.resultado3());
}
}
obj3.test() = 3
obj3.resultado2() =
obj3.resultado3() =
obj4.resultado1() =
obj4.resultado2() =
obj4.resultado3() =
3
2
4
4
2
SALIDA:
72
public class Uno {
public int test() { return 1; }
public int resultado1() {
return this.test();
}
}

public class Dos extends Uno {
public int test() { return 2; }
}

public class Tres extends Dos {
public int resultado2() { return this.resultado1(); }
public int resultado3() { return super.test(); }
public int test() { return 3; }
}

public class Cuatro extends Tres {
public int test() { return 4; }
}

public class Prueba {
public static void main(String [] args) {
Uno obj3 = new Tres();
Tres obj4 = new Cuatro();
System.out.println("obj3.test() = " + obj3.test());
System.out.println("obj3.resultado2() = " + obj3.resultado2());
System.out.println("obj3.resultado3() = " + obj3.resultado3());
System.out.println("obj4.resultado1() = " + obj4.resultado1());
System.out.println("obj4.resultado2() = " + obj4.resultado2());
System.out.println("obj4.resultado3() = " + obj4.resultado3());
}
}
obj3.test() = 3
obj3.resultado2() =
obj3.resultado3() =
obj4.resultado1() =
obj4.resultado2() =
obj4.resultado3() =
4
4
2
SALIDA:
obj3.resultado2() =
obj3.resultado3() =
73
rohlblendo subclases
or razones de segurldad o de dlseno, se puede prohlblr la
denlcln de subclases para una clase euqueLndola con
final.
8ecordad que una subclase puede susuLulr a su superclase donde esLa
sea necesarla y Lener comporLamlenLos muy dlsunLos
Ll compllador rechazar cualquler lnLenLo de denlr una
subclase para una clase euqueLada con final.
1amblen se pueden euqueLar con final:
meLodos, para evlLar su redenlcln en alguna poslble subclase, y
varlables, para manLener consLanLes sus valores o referenclas.
74
romovlendo subclases: Clases absLracLas
Se puede denlr una clase como resulLado de una absLraccln
sobre oLras clases recoglendo un esLado y un comporLamlenLo
bslcos, aunque no Lenga senudo modelar ob[eLos proplos de la
absLraccln.
Se euqueLan como abstract y pueden Lener meLodos sln
denlcln, Lamblen euqueLados como abstract.
Se uullzan para formar [erarqulas.
Se pueden uullzar como upos, pero no se pueden crear lnsLanclas
suyas.
ueben Lener subclases que no sean absLracLas para generar
ob[eLos.
75
= new Polgono();
public abstract class Polgono {
protected Punto[] vrtices;

public void trasladar(double a, double b) {
for (int i = 0; i < vrtices.length; i++) {
vrtices[i].trasladar(a, b);
}
}

abstract public double rea();
};

Polgono pol
Java
76
77
public abstract class Polgono {
protected Punto[] vrt;

public Polgono(Punto[] vs) {
vrt = vs;
}
public void trasladar(double a, double b) {
for (Punto pto : vrt) pto.trasladar(a,b);
}
public double permetro() {
Punto ant = vrt[vrt.length-1];
double res = 0;
for (Punto pto : vrt) {
res + = pto.distancia(ant);
ant = pto;
}
return res;
}

abstract public double rea(); // No sabemos calcularla
}
public class Cuadrado extends Polgono {

public Cuadrado() {}
public double rea() {
return lado() * lado();
}
public double lado() {
return vrt[0].distancia(vrt[1]);
}
public String toString() {}
}
public class Rectngulo extends Polgono {

public Rectngulo() {}
public double rea() {
return base() * altura();
}
public double base() {
return vrt[0].distancia(vrt[1]);
}
public double altura() {
return vrt[1].distancia(vrt[2]);
}

public String toString() {}
}
78
public abstract class SecuenciaEnteros {
protected numElementos = 0;

abstract public void insertar(int pos, int elem);
abstract public void eliminar(int pos);
abstract public int mximo();
abstract public boolean pertenece(int elem);
public boolean esVaca() { return numElementos == 0; }
public int tamao() { return numElementos; }
}
public class SecuenciaEntEsttica
extends SecuenciaEnteros {

int[] secuencia;

public SecuenciaEntEsttica(int tam) {
secuencia = new int[tam];

}

public void insertar(int p, int e) {}
public void eliminar(int p) {}
public int mximo() {}
public boolean pertenece(int e) {}
public String toString() {}
}
public class SecuenciaEntDinmica
extends SecuenciaEnteros {

static protected class Nodo {
int dato;
Nodo siguiente;

}

private Nodo primero;

public SecuenciaEntDinmica() {}

public void insertar(int p, int e) {}
public void eliminar(int p) {}
public int mximo() {}
public boolean pertenece(int e) {}
public String toString() {}
public void aadir(SecuenciaEnteros sec) {}
}
lnLerfaces
uene un proLocolo de comporLamlenLo, es declr
un conLraLo que las clases debern respeLar.
Las clases pueden lmplemenLar la lnLerfaz respeLando
el conLraLo.
Se uullzarn cuando se demande el conLraLo.
una lnLerfaz slo puede ser $9#$3'/'( por oLra
lnLerfaz.
una lnLerfaz puede heredar de varlas lnLerfaces.
una clase puede /<5.$<$3#(0 varlas lnLerfaces.
79
uenlcln de lnLerfaces
Ln una lnLerfaz slo se permlLen consLanLes y
meLodos absLracLos.


public interface miInterfaz
extends interfaz1, interfaz2 {
String CAD1 = SUN;
String CAD2 = PC;
void valorCambiado(String producto, int val);
...
}
public static final
public abstract
package, en caso de omisin
80
lmplemenLacln de lnLerfaces
Cuando una clase lmplemenLa una lnLerfaz,
se adhlere al conLraLo denldo en la lnLerfaz y en sus
superlnLerfaces,
*$0$'( Lodas las consLanLes denldas en la [erarqula,
A'*$0/0+$ (. %&3#0(#& B2/$0$ '$%/0 B2$ '$!$
/<5.$<$3#(0 Lodos los meLodos
(salvo que sea una clase que se qulera manLener absLracLa en
cuyo caso, los meLodos no lmplemenLados aparecern como
abstract).

public class MiClase
extends Superclase1
implements Interfaz1, Interfaz2,... {
...
}
81
82
public interface SecuenciaEnteros {
void insertar(int pos, int elem);
void eliminar(int pos);
int mximo();
boolean pertenece(int elem);
boolean esVaca();
int tamao();
}
public class SecuenciaEntEsttica
implements SecuenciaEnteros {

private numElementos = 0;
int[] secuencia;

public SecuenciaEntEsttica(int tam) {
secuencia = new int[tam];
numElementos = 0;

}

public void insertar(int p, int e) {}
public void eliminar(int p) {}
public int mximo() {}
public boolean pertenece(int e) {}
public boolean esVaca() {}
public int tamao() {}
public String toString() {}
}
public class SecuenciaEntDinmica
implements SecuenciaEnteros {

static protected class Nodo {
int dato;
Nodo siguiente;

}

private Nodo primero;

public SecuenciaEntDinmica() {}

public void insertar(int p, int e) {}
public void eliminar(int p) {}
public int mximo() {}
public boolean pertenece(int e) {}
public boolean esVaca() {}
public int tamao() {}
public void aadir(SecuenciaEnteros sec) {}
public String toString() {}

}
uso de lnLerfaces
Se pueden declarar varlables y parmeLros de upo una lnLerfaz.
Se requleren lnsLanclas de clases que lmplemenLen la lnLerfaz.

SecuenciaEnteros sec;
sec = new SecuenciaEntEsttica(100);
// Inserciones mltiples sobre la secuencia

if (sec.tamao() == 100) {
SecuenciaEnterosDinmica sec1;
sec1 = new SecuenciaEnterosDinmica();
sec1.aadir(sec);
sec = sec1;
}

// Nuevas inserciones
83
lnLerfaz
Cb[eLo de clase
que
lmplemenLa la
lnLerfaz
Ll meLodo anadlr uene
como argumenLo formal la
lnLerfaz

Das könnte Ihnen auch gefallen