You are on page 1of 169

Java SE Bsico

lnea de conocimiento Java - Delivery

Abril de 2012

confidencialidad
Aviso: Este documento es material confidencial y propiedad de everis. Se prohbe
el uso, reproduccin o la divulgacin del contenido de este material sin permiso
previo y por escrito de la empresa propietaria.
Derechos de Autor
2010, everis. All rights reserved

objetivos del curso

Conocer la estructura, elementos y sintaxis bsicos del lenguaje


Entender el paradigma de programacin orientada a objetos y aplicarlo con Java
Aplicar el mecanismo de excepciones para disear programas robustos que
gestionen errores
Conocer las clases String, StringBuffer y StringBuilder
Compilar y ejecutar un programa Java desde la lnea de comandos

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
5. Excepciones
6. Utilidades Java I

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
5. Excepciones
6. Utilidades Java I

introduccin a Java
breve historia
Nace en 1991, como controlador de electrodomsticos
desarrollado por Sun Microsystems.
Se llama inicialmente Oak, por iniciativa de su autor,
James Gosling.
El nombre Java proviene de la variante de caf que
tomaban los desarrolladores de Oak.
Est basado en lenguajes anteriores como C, C++ y

SmallTalk.
Su sintaxis es muy parecida a la de C++
El lema inicial de Java:

Write once, run anywhere


7

introduccin a Java
breve historia
En 1995, aprovechando el auge de Internet, se catapulta hacia el estrellato con los
applets.
Se lanza el primer kit de desarrollo JDK1.0
Netscape garantiza la compatibilidad de Java con sus navegadores.
En 1998 se mejora y ampla a la versin 1.2, llamada Java2.
En aos sucesivos el lenguaje crece y se ampla
En 2001 se lanza J2EE (Java 2 Enterprise Edition),
orientado a aplicaciones empresariales.
En 2010 Oracle compra Sun Microsystems y absorbe el negocio
Java.
La versin actual de java es la 1.7.
8

introduccin a Java
caractersticas de Java
Simple
El cdigo es auto contenido y no son necesarios ficheros de cabecera o
IDLs
Se han eliminado elementos poco tiles de C++ como macros, herencia
mltiple, operadores de acceso diferentes del punto (.) , etc.
Slo posee 53 palabras reservadas.
Robusto

Se eliminan los causantes de la mayora de errores en C++: los punteros y


su aritmtica.
Se realizan mltiples comprobaciones en tiempo de ejecucin como los
accesos fuera de rango y la corrupcin de memoria.
La gestin de excepciones es mucho ms robusta que en C++.
9

introduccin a Java
caractersticas de Java
Multiplataforma y portable
Java es interpretado. Genera archivos bytecode que se ejecutan bajo una
mquina virtual. El mismo cdigo sirve para varios entornos.
Actualmente existen intrpretes de Java bajo Windows, Linux, MacOS y
Solaris.
El tamao de los tipos bsicos es fijo e independiente del
compilador y mquina.

Abstrae utilidades dependientes de cada plataforma: GUI


(ventanas,

mens),

E/S

(gestin

de

ficheros),

protocolos TCP/IP, etc.

10

introduccin a Java
caractersticas de Java
Gestin automtica de la memoria
No es necesario destruir objetos ya que un mecanismo dentro de la mquina
virtual llamado recolector de basura se encarga de ello de forma automtica.
Seguridad de tipos
Java tiene mecanismos de seguridad para garantizar de forma correcta los
accesos a los tipos de datos para evitar accesos a memoria no
correspondiente.

Slo se admiten conversiones entre tipos compatibles.


No se pueden usar variables sin inicializar. El compilador asigna un valor
por defecto a los atributos y vigila la inicializacin de variables locales.
Al acceder a un array, se comprueba que el acceso se realiza con los
ndices que se encuentren en el rango de la misma.
11

introduccin a Java
caractersticas de Java
Orientado a objetos
Se basa en los tres pilares del paradigma de orientacin a objetos:
encapsulacin, herencia y polimorfismo.
Multitarea
Java dispone de hilos, que permiten
la ejecucin de dos fragmentos de
cdigo

de

forma

concurrente

compartiendo recursos.
Ligero
Las aplicaciones ocupan muy poco espacio de disco.
El intrprete y las bibliotecas bsicas ocupan unos 200 KB.
12

introduccin a Java
mquina virtual (JVM)
Java es un lenguaje compilado e interpretado.
Un compilador genera ficheros objeto llamado bytecode.
La mquina virtual de Java (Java Virtual Machine o JVM) es el entorno de
ejecucin que interpreta (ejecuta) los bytecode generados por el compilador.
La existencia de una JVM para cada sistema operativo es la caracterstica
que hace de Java un lenguaje multiplataforma.
Tanto el compilador como la JVM son comandos nativos de cada SO:

Para compilar ficheros fuente se usa el comando javac.


Para ejecutar ficheros bytecode se usa el comando java.

13

introduccin a Java
tipos de aplicaciones
Aplicaciones Java Pesadas
Aplicaciones convencionales de escritorio
Son autnomas

Applets
Aplicaciones Java que un navegador web descarga de un servidor
Se ejecutan en la mquina cliente con restricciones

Aplicaciones JEE
Programas gestionados por un servidor de aplicaciones y por un servidor web
conjuntamente
Se ejecutan en la mquina servidor

Aplicaciones JME
Aplicaciones para dispositivos mviles y PDA
Se ejecutan en entorno reducido con pocos recursos

14

introduccin a Java
siglas java

JEE

Java Enterprise Edition

JME

Java Micro Edition

JSE

Java Standard Edition

JDK

Java Development Kit

JRE

Java Runtime
Environment

JVM

Java Virtual Machine

15

introduccin a Java
primera aplicacin en Java
Una aplicacin en Java es un conjunto de uno o ms ficheros de cdigo fuente
con las instrucciones necesarias para que funcione como se desee.
Como primer contacto con un lenguaje nuevo, nada mejor que el programa Hola,
Mundo!, cuyo objetivo es mostrar por pantalla el mensaje Hola, Mundo!

16

introduccin a Java
primera aplicacin en Java

Usar un editor de textos (por ejemplo, Bloc de notas) para escribir el cdigo y
guardarlo como texto plano en un fichero llamado HelloWorld.java.
Para compilarlo basta con abrir una ventana de consola (MS-DOS en Windows),
colocarse en su directorio y escribir:
> javac HelloWorld.java

Tras invocarlo, se obtiene un fichero bytecode llamado HelloWorld.class


Una vez compilado, para ejecutar el programa ser necesario teclear:
> java HelloWorld

17

ndice
1. Introduccin a Java
2. Sintaxis bsica
a. Identificadores, palabras reservadas y literales
b. Tipos simples y conversiones

c. Operadores
d. Estructuras de control de flujo
e. Convenciones de notacin
3. Arrays

4. Orientacin a objetos I
5. Excepciones
6. Utilidades Java I

18

sintaxis bsica
identificadores
Un identificador es un nombre mediante el cual identificamos un elemento del
cdigo (clase, variable, mtodo, etc.)
Es una secuencia de caracteres Unicode, nmeros, smbolos de moneda y
caracteres de unin como el guin bajo
Reglas de uso:

Deben comenzar por una letra, smbolo de moneda o guin bajo


Despus del primer carcter, pueden contener cualquier combinacin de
letras, nmeros, smbolos de moneda o guiones bajos
No hay lmite en cunto a nmero de caracteres
No podemos usar palabras reservadas Java
Son case-sensitive, es decir, diferencia entre minsculas y maysculas
19

sintaxis bsica
identificadores
Ejemplos de identificadores vlidos:
_a
$b
_______2_a
_E
2c
identificador_muy_largo_permitido_en_Java_SE_6
Ejemplos de identificadores no vlidos:

:a
b#
-a
7g
20

sintaxis bsica
palabras reservadas
La versin Java SE 6 dispone de 50 palabras reservadas:

Nota: aunque no son palabras reservadas, los literales true, false y null no los
podemos usar como identificadores vlidos
21

sintaxis bsica
literales
Tipo

Descripcin

Ejemplos

Representan enteros. Pueden preceder de los


smbolos + o para indicar signo. Por defecto se
evalan como int. Si se quiere que sea long hay
que aadir el sufijo l o L al final del literal.

Decimal

56, +5, -6

Hexadecimal

0x3F29A9

Decimal

Decimales

Representar nmeros con decimales. El separador es


un punto (.). Por defecto se evalan como double.
Si se quiere que sea float hay que aadir el sufijo f
o F al final del literal.

Carcter

e,\n, 5

Caracteres

Cualquier carcter imprimible. Van cerrados entre


comillas simples. Algunos caracteres deben ser
usados mediante secuencias de escape.

Unicode

\u00F6

Booleanos

Representan los valores de cierto y falso.

Cadenas de
caracteres

Secuencia de caracteres. Van cerrados entre comillas


dobles. Si la cadena tiene comillas dobles, stas se
han de escapar.

"Esto es una cadena de


caracteres", "\"Hola\"!"

Nulos

Valor especial que se usa como valor de las variables


objeto no inicializadas.

null

Enteros

Octal

Cientfico

0567, -0436
2.4, -4.0, .9

6.02e28

true, false

22

ndice
1. Introduccin a Java
2. Sintaxis bsica
a. Identificadores, palabras reservadas y literales
b. Tipos simples y conversiones

c. Operadores
d. Estructuras de control de flujo
e. Convenciones de notacin
3. Arrays

4. Orientacin a objetos I
5. Excepciones
6. Utilidades Java I

23

sintaxis bsica
tipos simples o primitivos

Java define ocho tipos de datos primitivos. No se los considera objetos:

Nmeros enteros:
byte, short, int, long

Nmeros reales (con decimales)


float, double

Caracteres
char

Booleanos (lgicos)
boolean

El tipo String no es un tipo simple, pero


a veces se lo considera como tal
24

sintaxis bsica
tipos simples o primitivos
Rango de valores de los tipos primitivos:
Tipo

Tamao en bytes

Rango

byte

1 (8 bits)

-126 a +127

short

2 (16 bits)

-32.768 a +32.767

int

4 (32 bits)

-2.147.483.648 a + 2.147.483.647

long

8 (64 bits)

- 9.223.372.036.854.775.808 a
+9.223.372.036.854.775.807

float

4 (32 bits)

3,40282347e+38

double

8 (64 bits)

1,7976e+308

char

2 (16 bits)

Rango de caracteres Unicode

boolean

1 (8 bits)

Cierto (true) o falso (false)

25

sintaxis bsica
tipos simples o primitivos
Ejemplos vlidos:
byte numero = 125;

byte numero = -12;

int numero = 35500;

int numero = 0445;

long numero = 9876L;

short numero = 0xFF5;

char caracter = a;

float numero = 45.66F;

boolean resultado = true;

double numero = 5;

Ejemplos no vlidos:
byte numero = 128;

char carcter = hola;

long numero = 987.6F;

short numero = 32768;

char caracter = "a";

float numero = 98.76D;

boolean resultado = 1;

double numero = null;


26

sintaxis bsica
conversiones de tipos
Una conversin o casting es el proceso de transformar un valor de un tipo de
datos en otro tipo. Existen dos variantes de conversin:
Conversin implcita. El casting se realiza de forma automtica. Se da al
convertir un tipo de datos en uno ms amplio
byte short int long float double
char int long float double
Conversin explcita. El programador debe indicar explcitamente el tipo de

datos de destino. Se da al convertir un tipo de datos en uno de menor


capacidad. Al ejecutar se trunca el resultado, puede haber prdida de
informacin.
double float long int char short byte
27

sintaxis bsica
conversiones de tipos

Cuando se realiza una operacin numrica, el operando ms pequeo se


convierte al mayor siguiendo las siguientes reglas:
Si un operando es double, el otro se convierte a double y la expresin se
evala a double.
Si un operando es float, el otro se convierte a float y la expresin se
evala a float.

Si un operando es long, el otro se convierte a long y la expresin se evala


a long.
El resto de casos, ambos se convierten a int y la expresin se evala a int

28

sintaxis bsica
conversiones de tipos
byte b = 1;

int i = 3;

float f = 5.0f;

short s = 2;

long l = 4L;

double d = 6.0;

Son correctas las siguientes expresiones?


i = b;

f = 7.0;

i = i + i;

b = i;

d = 4.0f;

i = (short)d;

b = (byte)i;

f = 56;

s = b + b;

l = s;

f = (float)8.4;

s = (short)(s + b);

l = (long)s;

i = 56L;

f = d;

b = b + s;

i = (int)4L;

b = (byte) d;

b = (byte)(b + s);

i = i + d;

i = a;

d = i + f;

i = (double)i+d;

b = (byte)b + s;
29

sintaxis bsica
variables
Una variable se puede ver como un almacn de objetos de un determinado tipo al

cual se le asocia un identificador para referirse a l.


Para declarar una variable basta con indicar su tipo seguido de un identificador
<tipoDatos> <identificador>
int x; char letra; String mensaje; Object obj;
Asimismo podemos inicializar una variable asignndole un valor.
int x = 45;
String mensaje = "Hola";

Object obj = new Object();

30

sintaxis bsica
variables
En funcin de donde se localice una variable y su modificador de acceso, puede

ser de cuatro tipos:


De clase. Se hallan dentro de la definicin de una clase pero fuera de
mtodos y bloques de cdigo. Se marcan con el modificador static.
Pertenecen a la clase no a sus objetos o referencias. Normalmente se
marcan con el modificador de acceso public.
De instancia. Al igual que las variables de clase, se definen en el cuerpo de
la clase y fuera de mtodos y bloques de cdigo. Pertenecen al objeto o

referencia que instancia la clase. Normalmente se marcan con el modificador


de acceso private. Valores por defecto para variables de clase e instancia:
Enteros

Caracteres

\0

Lgicos

false

Decimales

0.0

Strings

null

Objetos

null
31

sintaxis bsica
variables
Variable local. Se definen dentro de un mtodo o dentro un bloque de cdigo.
Se destruyen al finalizar el mtodo o bloque al que pertenecen. Las variables
locales deben inicializarse antes de ser usadas.
Parmetro. Actan como variables locales dentro del mtodo que las define. En
Java los parmetros se reciben siempre por valor, es decir, el mtodo recibe un
copia del valor de la variable transferida como argumento en la llamada al

mtodo.

En el caso de variables de tipos primitivos, el valor recibido se corresponde con


el valor de la variable transferida, sin embargo, cuando se transfieren variables
de tipo objeto o referencias, el valor recibido se corresponde con el valor donde
se encuentra almacenado el objeto en memoria.
32

sintaxis bsica
constantes
Una constante es una variable cuyo valor nunca vara y en consecuencia el

compilador lo conoce de antemano y optimiza.


Las constantes se declaran al igual que las variables pero aadiendo el
modificador final en su declaracin y normalmente asignaremos un valor en
su declaracin:
final double PI = 3.141596;
No es necesaria la inicializacin de una constante al
declararla.
Si se trata de un atributo, se debe inicializar en un
constructor.
Si se trata de una variable local, se puede inicializar

ms adelante dentro del mtodo.


33

sintaxis bsica
constantes
Para definir constantes de clase usaremos los modificadores de no acceso
static y final y normalmente declararemos la constante con el modificador de
acceso public
public static final double PI = 3.141596;
Para definir constantes en una interfaz podemos usar cualquiera de las siguientes

expresiones:
public
public
public
public
double

double PI = 3.141596;
final double PI = 3.141596;
static double PI = 3.141696;
static final double PI = 3.141596;
PI = 3.141596;

Implcitamente las constantes definidas en una interface siempre son:


public static final
34

ndice
1. Introduccin a Java
2. Sintaxis bsica
a. Identificadores, palabras reservadas y literales
b. Tipos simples y conversiones

c. Operadores
d. Estructuras de control de flujo
e. Convenciones de notacin
3. Arrays

4. Orientacin a objetos I
5. Excepciones
6. Utilidades Java I

35

sintaxis bsica
operadores
Un operador es un smbolo formado por uno o ms caracteres que permite realizar
una determinada operacin entre uno o ms datos y produce un resultado.

Operadores aritmticos

Unarios: negativo (-) y positivo (+)


Binarios: suma (+), resta (-), producto (*), divisin (/) y mdulo (%)

Operadores relacionales
Igualdad (==), desigualdad (!=), mayor que (>), menor que (<), mayor o igual
que (>=) y menor o igual que (<=).

Operadores lgicos
Unarios: not (!)
Binarios: and (&&) y or (||). Son perezosos (no evalan la condicin cuando
se deduce el resultado de un operando)
Binarios: and (&) y or (|). Siempre se evalan todas las expresiones
36

sintaxis bsica
operadores
Operadores con cadenas
Se usa (+) para concatenar (unir) cadenas. Se pueden concatenar cadenas
con caracteres. Ejemplos:
"Hola" + " Mundo" y "Hola Mund" + o devuelven "Hola Mundo"
123 + 5 + " Hola mundo" devuelve "128 Hola Mundo"

"Hola Mundo " + 123 + 5 devuelve "Hola Mundo 1235"


"Hola Mundo " + (123 + 5) devuelve "Hola Mundo 128"
Operadores de acceso a objetos
Para acceder a los miembros de un objeto se usa el operador punto (.) entre
el nombre del objeto y el nombre del miembro.
"Carlos".toUpperCase() devuelve "CARLOS"
37

sintaxis bsica
operadores
Operadores de manipulacin de bits

And (&), or (|), not (~), xor (^), desplazamiento hacia la izquierda N
posiciones con signo (<<nmero) e dem hacia la derecha (>>nmero)
(>>>nmero desplaza a la derecha sin signo).

Operadores de asignacin
El operador bsico es (=) que, a parte de asignar, devuelve el valor
asignado. La asignacin es asociativa por la derecha.
Operadores compuestos: realizan una operacin y asignan el resultado.

Existen para la suma (+=), resta (-=), producto (*=), divisin (/=), mdulo
(%=), las operaciones bit a bit de and (&=), or (|=), xor (^=) y los
desplazamientos de bits (<<=, >>= y >>>=)
38

sintaxis bsica
operadores
Operadores de asignacin (cont.)

Operadores incrementales: realizan un incremento (++) o decremento (--)


de una unidad en una variable. Si el operador se coloca antes del nombre de
la variable devuelve el valor de la variable despus de incrementarla; si se
coloca despus de la variable, primero devuelve el valor y luego incrementa la
variable. Ejemplos

a = 56;
//asign. bsica
b = 78 + a;//asign. bsica
c += 23;
//asign. compuesta. Equivale a c
i++;
//Incremento. Equivale a i = i +
d = i++;
//Asigna e incrementa. Si i vale
d = ++i;
//Incrementa y asigna. Si i vale

= c + 23
1
3 al inicio, d vale 3.
3 al inicio, d vale 4
39

sintaxis bsica
operadores

Qu valor tendrn las


variables a y b ?

int a = 0, b = 10;
a = ++b; // a = ?, b = ?

a = b++; // a = ?, b = ?
a = ++a; // a = ?, b = ?

40

sintaxis bsica
operadores
Operador condicional

Es el nico de Java con tres operandos, cuya sintaxis es:

<condicin> ? <expresin1> : <expresin2>


Se evala <condicin>. Si es cierta se devuelve el resultado de evaluar
<expresin1> y si es falsa, <expresin2>
Ejemplo: max = (a>b)?a:b; pregunta si a es mayor que b y devuelve a en
caso afirmativo y b en caso contrario.
No confundirlo con una sentencia ifelse ya que el operador condicional

siempre devuelve un valor, pero ifelse no (aunque se puede usar de


forma similar).
Es posible anidar ms de un operador condicional, por ejemplo:
max_tres = (a > b) ? (a > c) ? a:c:(b > c) ? b:c;
41

sintaxis bsica
operadores

Operador instanceof

Es un operador de comparacin

Solo podemos usarlo con variables de referencia

Lo usamos para chequear si un objeto es de un tipo particular (por tipo nos

referimos a clase o interface). En otras palabras, si el objeto referido por la


variable de la parte izquierda del operador pasa el test IS-A (ES-UN) para la
clase o interface de la parte derecha del operador
<variable> instanceof <TipoReferencia>
Ejemplo:
public void metodo(Persona param) {
if( param instanceof Alumno) {
System.out.println("param es un Alumno");
}}
42

ndice
1. Introduccin a Java
2. Sintaxis bsica
a. Identificadores, palabras reservadas y literales
b. Tipos simples y conversiones

c. Operadores
d. Estructuras de control de flujo
e. Convenciones de notacin
3. Arrays

4. Orientacin a objetos I
5. Excepciones
6. Utilidades Java I

43

sintaxis bsica
instrucciones de control de flujo
Sentencia condicional if

La expresin de condicin siempre ha de ser una expresin booleana


if(<condicin>){
<instrucciones>
}else {
<instrucciones>
}

if(<condicin1>){
<instrucciones>
} else if(<condicin2>) {
<instrucciones>
}

Ejemplos:

//N condiciones else if

if(a > b){ // Expresin booleana


System.out.Println("A gana");
} else {
System.out.Println("B gana");
}

else if(<condicinN>){
<instrucciones>
} else {
<instrucciones>
}

if (1) { // Error expresin no booleana


44

sintaxis bsica
instrucciones de control de flujo
Sentencia condicional switch case
La expresin switch debe evaluar a char, byte, short, int o
enum.Las constantes case deben evaluar al mismo tipo que la expresin
switch y adems deben ser literales o constantes en tiempo de
compilacin (es decir, variables definidas con final e inicializadas en la
misma lnea).
No pueden haber dos case iguales en el mismo bloque switch.

Si una constante case evala true se ejecutar el cdigo


secuencialmente hasta encontrar la palabra reservada break o el final del
bloque switch.
La constante default (opcional) se ejecutar cuando no haya ninguna
constante case que evale true. Puede ir en cualquier posicin dentro
del bloque switch.

45

sintaxis bsica
instrucciones de control de flujo
switch(<expresin>){
case <constante1>:
<instrucciones>
break;
case <constante2>:
<instrucciones>
break;
//N valores
case <constanteN>:
<instrucciones>
break;
default:
<instrucciones>
}

Ejemplo usando literales:


switch(estado){
case 0: // literal 0
System.out.println("triste");
break;
case 1: // literal 1
System.out.println("serio");
break;
case 2: // literal 2
System.out.println("feliz");
break;
default:
System.out.println("No estoy");
}

46

sintaxis bsica
instrucciones de control de flujo
Ejemplo usando constantes:
int estado = getEstado();
final int TRISTE = 0;
final int FELIZ = 1;
final int SERIO = 2;
switch(estado){
case TRISTE:
System.out.println("triste");break;
case FELIZ:
System.out.println("feliz");break;
case SERIO:
System.out.println("serio");break;
default:
System.out.println("No estoy");
}
47

sintaxis bsica
instrucciones de control de flujo
Ejemplo usando enums:
enum ESTADOS {TRISTE, FELIZ, SERIO};
ESTADOS estado = getEstado();
switch(estado){
case TRISTE:
System.out.println("triste");break;
case FELIZ:
System.out.println("feliz");break;
case SERIO:
System.out.println("serio");break;
default:
System.out.println("No estoy");
}

48

sintaxis bsica
instrucciones de control de flujo
Ejemplo usando variables:
int
int
int
int

estado = getEstado();
triste = 0;
feliz= 1;
serio = 2;

switch(estado){
case triste: // No compila
System.out.println("triste");break;
case feliz: // No compila
System.out.println("feliz");break;
case serio: // No compila
System.out.println("serio");break;
default:
System.out.println("No estoy");
}
49

sintaxis bsica
instrucciones de control de flujo
Ejemplo agrupando varias expresiones case:
int numero = getNumero();
switch(numero){
case 2:
case 4:
case 6:
case 8:
case 10:
System.out.println("Numero par");
break;
default:
System.out.println("Nmero impar");
}

50

sintaxis bsica
instrucciones de control de flujo
Sentencias iterativas while y do while
La expresin de condicin debe evaluar un resultado booleano. El cuerpo
del bucle while slo se ejecuta si la condicin evala a true. El cuerpo
de un bucle dowhile se ejecuta como mnimo una vez.

while(<condicin>){
<instrucciones>
}

do{
<instrucciones>
while(<condicin>);

Ejemplo:
int a = 10;

Ejemplo:
char c = \0;

while(a > 0){


System.out.println(a);
a--;
}

do{
c = (char)System.in.read();
}while(c != q);
51

sintaxis bsica
instrucciones de control de flujo
Sentencias iterativas while y do while
Ejemplo (while):
int a = 4, b = 5;

Cul es la salida
de ambos bucles?

while(++a > b){


System.out.println(a);
}
System.out.println(a + " " + b);

Ejemplo (do - while):


int a = 4, b = 5;
do{
System.out.println(a);
while(++a > b);
System.out.println(a + " " + b);
52

sintaxis bsica
instrucciones de control de flujo
Sentencia iterativa for bsica
Consta de tres partes (opcionales) separadas por punto y coma:
Declaracin e inicializacin de variables (una o ms de una y del mismo
tipo)
Expresin booleana (condicin)
Expresin de iteracin
for(<declaracin>;
<condicin>;<instruccin>){
<instrucciones>
}
Para forzar la salida de un bucle podemos usar break o
return dentro del cuerpo del bucle
53

sintaxis bsica
instrucciones de control de flujo

Ejemplo 1: (todas las partes)

Ejemplo 2: (sin la parte iteracin)

for(int i = 0 ; i<5 ; i++){


System.out.print(i);
}

for(int i = 0 ; i<5 ;){


System.out.print(i++);
}

Ejemplo 3: (sin la parte declaracin)


int i = 0;
for(; i<5 ; i++){
System.out.print(i);
}

Ejemplo 4: (sin la parte condicin)


for(int i = 0 ;; i++){
if (i >= 5) break;
System.out.print(i);
}

Para todos los ejemplos la salida es: 01234


54

sintaxis bsica
instrucciones de control de flujo
Sentencia iterativa for enriquecida
Se utiliza para iterar sobre todos los elementos de un array o coleccin. Consta de
dos partes separadas por el smbolo de dos puntos (:)
Declaracin, tiene que ser de un tipo compatible con los elementos del
array o coleccin. La variable estar disponible en el cuerpo del bucle y su
valor representar al elemento actual del array o coleccin.

Expresin, debe ser el array o coleccin a iterar. Puede ser una variable o
una expresin que devuelva un array o una coleccin.
for(<tipo> <variable> :
<array o coleccin>){
<instrucciones>
}

Ejemplo:
int[] numeros = {4,7,9,1,5,0};
for(int numero : numeros){
System.out.println(numero);
}
55

sintaxis bsica
instrucciones de control de flujo

Palabras reservadas break y continue


Normalmente las usamos dentro de un bucle con alguna

expresin booleana que dependiendo de su resultado nos


permita salir de la iteracin actual o del bucle completo.
break, para el bucle, haciendo que el flujo se site
fuera del bucle (sale del bucle). Tambin la podemos
usar en sentencias switchcase
continue, para la actual iteracin, haciendo que el
flujo vaya al inicio del bucle (siguiente iteracin).

56

sintaxis bsica
instrucciones de control de flujo
Ejemplo (break):

Ejemplo (continue):

int[] numeros = {4,7,9,1,5,0};

int[] numeros = {4,7,9,1,5,0};


int i = 0;

for(int numero : numeros){


if(numero==9){
break;
}
System.out.println(numero);
}
System.out.println("fin");

Salida ?

while( i < numeros.length ){


if(numeros[i++]==9){
continue;
}
System.out.println(numeros[i-1]);
}
System.out.println("fin");

Salida ?

57

sintaxis bsica
instrucciones de control de flujo
Sentencias etiquetadas Normalmente las usamos cuando iteramos en bucles
anidados y queremos salir o saltar a la siguiente iteracin de alguno de los bucles
anidados usando break y/o continue. Para definir una etiqueta debemos seguir
las siguientes reglas:
El nombre de la etiqueta debe seguir las mismas reglas que los
identificadores

La etiqueta va seguida del smbolo de dos puntos (:) y se escribe justo en la


lnea anterior a la definicin del bucle que deseamos etiquetar
Usaremos break y/o continue seguido del nombre de la etiqueta para salir
del bucle etiquetado o para saltar a la siguiente iteracin del bucle etiquetado

58

sintaxis bsica
instrucciones de control de flujo
Ejemplo (break):

Ejemplo (continue):

exterior: // etiqueta
for(int i=0;i<2;i++){
for(int j=0;j<5;j++){
if(j>2){
break exterior;
}
System.out.println("hola.");
}
}
System.out.println("fin");

exterior: // etiqueta
for(int i=0;i<2;i++){
for(int j=0;j<5;j++){
if(j>2){
continue exterior;
}
System.out.println("hola.");
}
}
System.out.println("fin");

Salida ?

Salida ?

59

ndice
1. Introduccin a Java
2. Sintaxis bsica
a. Identificadores, palabras reservadas y literales
b. Tipos simples y conversiones

c. Operadores
d. Estructuras de control de flujo
e. Convenciones de notacin
3. Arrays

4. Orientacin a objetos I
5. Excepciones
6. Utilidades Java I

60

sintaxis bsica
convenciones SUN
Clases e interfaces: La primera letra debera ser mayscula y en caso de
palabras compuestas la primera letra de cada palabra en mayscula,
normalmente

deberan

ser

nombres

para

clases:

Persona,

Almacen,

CuentaCorriente y adjetivos para interfaces: Runnable, Serializable,

Comparable
Mtodos: La primera letra debera ser minscula y normalmente debera usarse la
pareja verbo-nombre: getTotal, calcularSaldo, setNombreCliente
Variables: Como en los mtodos, debera empezar con una letra minscula:

saldoActual, margenSuperior, textoCabecera


Constantes: Deberan nombrarse usando maysculas con guiones bajos para
separar palabras: MINIMA_ALTURA, PI, MAXIMO_NIVEL
61

sintaxis bsica
JavaBeans

Son clases Java que tienen propiedades.


Una propiedad es una variable de instancia marcada con el
modificador de acceso private. La nica forma de

acceder a estas variables desde otras clases es a travs de


mtodos de su clase. Los mtodos que cambian el valor de
estas variables los llamamos setters y los mtodos que
devuelven el valor de estas variables los llamamos getters.
El estndar JavaBeans lo usan los IDES y Frameworks
ms habituales como Eclipse, Spring, Hibernate y
especificaciones Java como JPA, EJB
62

sintaxis bsica
JavaBeans
Reglas para nombres de propiedad en JavaBeans.

Si la propiedad no es booleana, el prefijo del mtodo getter debe ser get.


Si la propiedad es booleana, el prefijo del mtodo getter puede ser get o is.
Los mtodos setters siempre deben llevar el prefijo set.
Para definir el nombre completo del mtodo getter o setter, la primera letra
de la propiedad debe ser mayscula y aade el correspondiente prefijo get,
is o set.
Los mtodos setters deben ser public, void como tipo de retorno y un

parmetro del mismo tipo que la propiedad.


Los mtodos getters deben ser public, no deben definir parmetros y el
tipo de retorno debe coincidir con el tipo de la propiedad.

63

sintaxis bsica
JavaBeans
public class Persona {
private int edad;
private String nombre;}
Propiedades JavaBeans vlidas:
public void setEdad(int edad)
public int getEdad()
public void setNombre(String nombre)
public String getNombre()
Propiedades JavaBeans no vlidas:
public void Setnombre(String nombre) //debe ser setNombre
public boolean setEdad(int edad) //debe ser void

public void getNombre(int codigoPersona) //define parmetros


void setNombre(String nombre) //debe ser public
64

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
5. Excepciones
6. Utilidades Java I

65

arrays
concepto y declaracin

Los Arrays son objetos que almacenan mltiples datos del mismo tipo declarado.
Los Arrays pueden almacenar tanto referencias a objetos como tipos primitivos.

Declaracin de Arrays:
<tipoDatos>[] <nombre Array>;
Array que almacena enteros
int[] numeros;
Array que almacena objetos de tipo Alumno

Alumno[] alumnos;
Array de dos dimensiones de enteros
int[][] numeros;
Array tridimensional de enteros
int[][][] numeros;
66

arrays
construccin
Sintaxis para instanciar un nuevo array:
new <tipoDatos>[<expresin>], donde <expresin> se evala a int
En el momento de la construccin debemos definir el tamao del array y no es
posible redimensionar un array una vez ha sido construido.

Todos los elementos toman el valor por defecto del tipo declarado en el array.
Ejemplo 1: declaracin y construccin de un Array de enteros. Los cinco
elementos toman el valor 0, valor por defecto de int
int[] numeros = new int[5];
Ejemplo 2: declaracin y construccin de un Array de Integer. Los cinco
elementos toman el valor null, valor por defecto de una referencia a Integer
Integer[] numeros = new Integer[5];
67

arrays
construccin
Un array multidimensional es un array de arrays. Por ejemplo, un array de dos
dimensiones de tipo int es realmente un objeto de tipo array de int (int[])
donde cada elemento almacena otro array de int. El siguiente cdigo declara y
construye un array de int de dos dimensiones:
int[][] numeros = new int [5][];
Al declarar arrays multidimensionales es necesario especificar el tamao de todas
las dimensiones excepto de la ltima, que es opcional.

Ejemplo, declaracin y posteriormente construccin de un Array de int:


int[][] numeros;
numeros = new int[5][];
Ejemplo, declaracin y construccin en una lnea de un Array de Integer de
longitud fija en ambas dimensiones
Integer[][] numeros = new Integer[5][5];
68

arrays
arrays multidimensionales
int[][] A = new int[3][4]
Si se crea un array A, es posible
que uno piense que es una matriz
de 3 filas y 4 columnas

Pero en realidad, A es una


referencia a un array de 3 que
a su vez son arrays de enteros
de tamao 4
69

arrays
inicializacin
Inicializar un Array significa aadir elementos dentro de l.
Los elementos pueden contener valores primitivos (2, false, a) o
referencias a objetos del tipo o subtipo declarado en el array (polimorfismo).
Formas de inicializar array:
En lneas separadas
Alumno[] alumnos = new Alumno[2];
alumnos[0] = new Alumno();

alumnos[1] = new Alumno();


En la misma lnea (ambas son correctas)
int[] numeros = new int[]{1,2,3,4};
int[] numeros = {1,2,3,4};

70

arrays
acceso a elementos
Se usa [<posicinElemento>] detrs del identificador del Array para acceder

al elemento contenido en esa posicin.


Cuidado! En Java, los Arrays se indizan desde 0, es decir, el primer elemento es
el 0 y el ltimo el N-1
vec[0] devuelve el primer elemento vec[9], el dcimo elemento y vec[i], el
i-simo.
Hay que ir con precaucin al acceder a los elemento de un Array. Si se especifica
una posicin superior al nmero de elementos del Array se lanza una excepcin

del tipo IndexOutOfBoundsException.


Para saber el tamao de una Array, basta con consultar el atributo length
int size = miArray.length;
71

arrays
asignacin de arrays
Podemos asignar variables de tipo array a cualquier referencia de array del mismo
tipo. Por ejemplo si tenemos declarada una variable de tipo Array de int (int[]),
podemos reasignarla a cualquier Array de int de cualquier tamao pero no

podemos reasignarla a un Array de un tipo que no sea int


Ejemplo vlido:
int []numeros = {1,2,3,4,5};
int []copia = numeros;

Ejemplo no vlido:
char []numeros = {1,2,3,4,5}; // Es correcto
int []copia = numeros; // Tipos incompatibles

72

arrays
asignacin de arrays

La asignacin de arrays entre objetos y referencias es ms flexible, ya que


podemos asignar una referencia de array de un tipo con una instancia de un

subtipo.
Ejemplo vlido:
Coche[] nuevos;
Mercedes[] mercedes = new Mercedes[4];
nuevos = mercedes; //Correcto, Mercedes es subtipo de Coche
Coche[] ocasion = new Coche[4];
nuevos = ocasion; // Correcto, son del mismo tipo
Moto[] nuevas = new Moto[4];
nuevos = nuevas; // Incorrecto, Moto no es subtipo de Coche
73

arrays
ejemplos
int[] miArray = {1,2,3};
int[] miArray = new int[3];

Qu sentencias
son correctas?

int[] miArray = new int[3]{1,2,3};

int[] miArray = new int[2];


miArray[1] = 5;
int[][] miArray = new int[3][]{{1},{2,3},{4}};

int[] miArray[] = new int[][];


int[][] miArray = new int[3][];
int[][] miArray = new int[][]{{1},{2,3},{4}};
int[][] miArray = {1,2,3};
74

arrays
ejemplos
int[] miArray;

Qu sentencias
son correctas?

miArray = {1,2,3};
int[] miArray = new int[];
int[] miArray = new int[]{1,2,3};

int elementos = 4;
int miArray = new int[elementos];
int[] miArray = new int[2];
miArray[2] = 5;
int[][] miArray = {{1},{2,3},{4}};
int elementos = -4;
int miArray = new int[elementos];

int[][] miArray = new int[3][];


75

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
a. Conceptos y principios bsicos
b. Clases, atributos y mtodos
c. Modificadores

d. Constructores
e. Interfaces
5. Excepciones
6. Utilidades Java I
76

orientacin a objetos I
conceptos. Pilares OO

77

orientacin a objetos
conceptos. Abstraccin
En informtica, la abstraccin es el proceso mediante el cual los
datos y programas se definen con una representacin similar a su
significado (semntica), mientras que esconden los detalles de
implementacin.
La abstraccin trata de reducir y ocultar (pero no eliminar) los
detalles para que el programador puede concentrarse en unos
pocos conceptos a la vez.
Ayuda a modelar el mundo real tomando las cosas que son
realmente importantes. Por ejemplo, qu caractersticas

semejantes tienen todos los coches? Una marca, un modelo, un


nmero de bastidor, etc. Y en cuanto a su comportamiento, todos
aceleran, frenan, arrancan
78

orientacin a objetos. I
conceptos. Encapsulacin
Se entiende por encapsulacin al mecanismo

que permite determinar qu elementos dentro


de una clase pueden utilizarse desde otro
lugar y cules no, es decir, su visibilidad.
La encapsulacin permite esconder todos los
detalles relativos a la implementacin interna y
slo dejar visibles aqullos que se pueden
.

usar con seguridad

Se evitan cometer errores por manipular indebidamente partes de cdigo que no


se deberan tocar.

79

orientacin a objetos I
conceptos. Herencia

La herencia, es un mecanismo que permite definir nuevas clases a partir de


clases ya definidas de forma que la nueva clase (llamada clase hija) adquiera
todos los mtodos y atributos visibles de cuya clase parte (clase padre).
A parte de heredar todos los
elementos del padre, la clase hija
puede definir nuevos atributos y
mtodos.
En Java slo existe la herencia
simple, es decir, una clase no
puede heredar de ms de una

clase
80

orientacin a objetos I
conceptos. Herencia
En Java, para indicar que una clase hereda de otra se debe hacer en la
declaracin de la propia clase aadiendo la palabra extends:

class Alumno extends Persona{


//Atributos y mtodos
}
Todos los atributos y mtodos se heredan, pero slo son visibles aquellos que son
pblicos o protegidos.
Todas las clases heredan implcitamente de la clase Object.

81

orientacin a objetos I
conceptos. Herencia
N Ruedas
N Pasajeros
Marca

Tipo de motor
N puertas
CV

N marchas
Con luz?

Piloto
Escudera

Cilindrada

Una clase puede heredar de otra si podemos


establecer una relacin de tipo es-un:
Coche es un vehculo
Vehculo no es un Frmula 1 (puede serlo, pero
no tiene por qu).
82

orientacin a objetos I
conceptos. Herencia
public class Vehiculo{
protected int numRuedas;
protected String marca;
public void arrancar(){
System.out.println("Arrancando vehculo de marca" + marca);
}
}
public class Coche extends Vehiculo {
private String tipoMotor;

public Coche(String marca, String tipoMotor){


this.marca = marca; //Se hereda el atributo marca
numRuedas = 4: //Se hereda el atributo numRuedas
arrancar(); //El mtodo arrancar() tambin se hereda y no es
//necesario volverlo a reescribir.
}
}
83

orientacin a objetos I
conceptos. Polimorfismo

El polimorfismo es la capacidad de definir


clases diferentes que tienen mtodos o atributos
denominados de forma idntica, pero que se
comportan de manera distinta.
Existen dos tipos de polimorfismo:
Esttico.

compilacin.

Se

Es

resuelve

el

en

tiempo

mecanismo

de

de

la

sobrecarga de mtodos.
Dinmico. Se resuelve el tiempo de ejecucin. Es el polimorfismo en s
mismo. Es el mecanismo de la sobrescritura de mtodos

84

orientacin a objetos I
conceptos. Relaciones
Asociacin
Conexin entre dos clases que representa una
relacin semntica
Puede ser en una direccin o ambas
La multiplicidad es el nmero de instancias que
participan en una asociacin
Ejemplos:
Un Coche pertenece a una Persona
Una Persona tiene varios Zapatos

Agregacin
Forma especializada de relacin donde un todo se
relaciona con sus partes
El todo se compone de partes y las partes no tienen
sentido sin el todo
Ejemplos:
Una Escuela tiene varias Aulas
Un Aula es de una (y slo una) Escuela
85

orientacin a objetos
conceptos. Principios SOLID

Single Responsibility

Open-Closed

Liskov substitution

Interface Segregation

Dependency Inyection
86

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
a. Conceptos y principios bsicos
b. Clases, atributos y mtodos
c. Modificadores

d. Constructores
e. Interfaces
5. Excepciones
6. Utilidades Java I
87

orientacin a objetos I
clases. Definiciones
Clase
Plantilla que describe una tipologa de objetos. Define el estado y el
comportamiento de los objetos de ese tipo.

Objeto
Ocurrencia concreta de una clase. Recibe tambin el nombre de instancia

Estado
Conjunto de valores de los atributos (propiedades) que definen nicamente a
un objeto

Comportamiento
Conjunto de operaciones que crean la lgica necesaria para manipular el
estado de un objeto
88

orientacin a objetos I
clases. Sintaxis
class <nombreClase> {
<atributo/mtodo 1>
<atributo/mtodo 2>
<>
<atributo/mtodo N>
}
Ejemplo:
class MiClase {
int a;
double b;
public void f(int i){
a = i;
}
//ms atributos y mtodos
}
89

orientacin a objetos I
clases. Reglas de ficheros
Slo puede haber una clase pblica por fichero
fuente
Los comentarios pueden aparecer en cualquier
lugar del fichero fuente
Si hay una clase pblica en un fichero, el nombre
del fichero debe coincidir con el nombre de la clase
pblica y debe tener la extensin java
Si una clase es parte de un paquete, la sentencia
package debe aparecer en la primera lnea del

cdigo del fichero fuente (excepto que se trate de


un comentario)
90

orientacin a objetos I
clases. Reglas de ficheros
Si hay sentencias import, deben aparecer entre la sentencia package (si existe)
y la declaracin de la clase
Las sentencias import y package se aplican a todas las clases contenidas en el
fichero fuente
Un fichero fuente puede tener ms de
una clase no pblica

Los nombres de los ficheros fuente sin


clases

pblicas

no

tienen

porqu

coincidir con el nombre de las clases

91

orientacin a objetos I
atributos
Un atributo es un dato comn a todos los objetos de una determinada clase. Se
deben definir dentro del cuerpo de la clase y tienen la siguiente sintaxis:
<tipoAtributo> <identificadorAtributo>
<tipoAtributo> es el tipo de datos del atributo. Puede ser un tipo simple o un

objeto de otra clase cualquiera.


<identificadorAtributo> es un identificador vlido.
Ejemplo:
class Persona {
String nombre;
int edad;
String nif;
}

92

orientacin a objetos I
atributos
Para acceder a un atributo se utiliza la siguiente sintaxis:
<identificadorObjeto>.<identificadorAtributo>
Por ejemplo, para acceder al atributo edad de un objeto Persona llamado p y
cambiar su valor por 20 sera:
p.edad = 20;
Si estamos trabajando en el contexto de una clase el acceso a sus atributos es
directo, es decir, slo se usa <identificadorAtributo>

En realidad <identificadorObjeto> no tiene por qu ser necesariamente el


identificador de un objeto. Una expresin que devuelva un referencia no nula de
un objeto tambin es vlida.
Si accedemos a un atributo de un objeto nulo, se lanza una excepcin de tipo
NullPointerException.
93

orientacin a objetos I
atributos

Se puede inicializar un atributo en el momento de su declaracin a travs de una


asignacin:
int valor = 9;
Si no se da un valor, el compilador asigna automticamente un valor por defecto al
atributo. Esto es debido a que Java no permite dejar atributos sin inicializar por
motivos de seguridad.

Valores por defecto:


Enteros

Caracteres

\0

Decimales

0.0

Strings

null

Lgicos

false

Objetos

null

94

orientacin a objetos I
mtodos
Un mtodo es un conjunto de instrucciones encapsuladas a las que se asocia un
nombre. Se deben definir dentro de la clase y tienen la siguiente sintaxis:
<tipoDevuelto> <identificadorMtodo> ([<parmetros>]) {
<instrucciones>

}
Dentro de un mtodo es posible acceder con total libertad a los atributos de la
clase donde est definido el mtodo.
Los mtodos pueden devolver un objeto, un dato de tipo simple o un array
como resultado de las instrucciones ejecutadas.
El tipo de dato a devolver ha de ser el mismo que el indicado en
<tipoDevuelto>. Si no se ha de devolver nada, se indica void, pero si se

devuelve algo es obligatorio incluir la sentencia return al finalizar el mtodo.


95

orientacin a objetos I
mtodos
Opcionalmente pueden recibir un listado de objetos, <parmetros>, a los que se
podr acceder durante la ejecucin de las instrucciones. Al declarar un parmetro
se ha de indicar el tipo y un nombre identificador.
Los parmetros se consideran variables locales de un mtodo
Los parmetros pueden ser de tipos simples, clases y arrays
Ejemplo. Bsqueda lineal en un array de int:
boolean buscar (int vector[], int valor){
for(int i=0; i < vector.length; i++){
if(vector[i] == valor){
return true; //Abandona el bucle y el mtodo
} }
return false; //Pueden existir mltiples return por mtodo
}
96

orientacin a objetos I
mtodos. Paso de parmetros
El mecanismo de paso de parmetros en Java es simple:
Los parmetros siempre se pasan por valor
Si el parmetro es un tipo simple o primitivo se pasa la copia del valor. Si

se modifica el valor dentro del mtodo, el valor original no se ve afectado


cuando el mtodo termina.
Si el parmetro es un objeto se pasa una copia del valor de la referencia, es
decir, la direccin de memoria donde se ubica el objeto desde donde
podemos recuperar su estado. De modo que podemos modificar el estado del
objeto transferido al mtodo pero no podemos modificar el valor de la
referencia, es decir, la direccin en memoria.

97

orientacin a objetos I
mtodos. Retornos covariantes
Si un mtodo devuelve un tipo primitivo, podemos devolver cualquier valor o
variable que pueda ser implcitamente convertida al tipo de retorno declarado
public int getCaracter(){
return c;

}
Si un mtodo devuelve una referencia, podemos devolver cualquier tipo de objeto
que pueda ser implcitamente convertido al tipo declarado
public Animal getAnimal() {
return new Gato(); // Asumiendo que Gato extends Animal
}

98

orientacin a objetos I
mtodos con nmero indefinido de parmetros

Java permite mtodos que puedan tomar un nmero indeterminado de


parmetros, pero para ello es necesario cumplir ciertos requisitos:
Ha de ser el ltimo de la lista de parmetros del mtodo.
Se le debe aadir puntos suspensivos () despus de definir su tipo.
Al llamar al mtodo, los tipos de los parmetros han de ser del mismo tipo
que el definido. Si se desea un comportamiento genrico, basta con declarar

el parmetro de tipo Object (polimorfismo).

Dentro del mtodo, este parmetro se comporta como un array del tipo
especificado.

99

orientacin a objetos I
mtodos con nmero indefinido de parmetros

public void f(char c, int... ps){


ps[3] = 8; //ps es un array int[]!
}
f(a);
//Ok! Se pueden pasar 0 parm. indefinidos
f(b,1,4,5);
//Ok!
f(c,3,"Hola");
//No! "Hola" es String y se espera int
f(d, new int[]{1,9,6}); //Ok!
Los mtodos con parmetros indefinidos tienen la prioridad ms baja cuando
existe sobrecarga de mtodos.
public void g(int x, int y){//}
public void g(int... ps){//}
g(2,3);
//el primer mtodo tiene prioridad sobre el
//segundo

100

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
a. Conceptos y principios bsicos
b. Clases, atributos y mtodos
c. Modificadores

d. Constructores
e. Interfaces
5. Excepciones
6. Utilidades Java I
101

orientacin a objetos I
modificadores de acceso
Un modificador es una palabra reservada que se coloca delante de la
declaracin de un elemento al que se desea aadir un comportamiento.
Los modificadores de acceso definen la visibilidad de los atributos, mtodos y

clases, y en consecuencia la encapsulacin.


Existen cuatro modificadores de acceso:
public: se puede acceder al elemento desde cualquier parte.
private: el elemento slo es accesible desde el cdigo de la clase a la cual
pertenece.
protected: el elemento se puede acceder desde el cdigo de la clase a la
cual pertenece, desde todas sus subclases y desde el mismo package.

Ausencia de modificador (package): el elemento se puede acceder desde


cualquier clase perteneciente al mismo paquete. Es el valor por defecto.
102

orientacin a objetos I
modificadores de acceso
Si una clase A tiene acceso a otra clase B
significa que podemos hacer tres cosas:
La clase A puede crear instancias de la
clase B

La clase A puede extender la clase B


Acceder a ciertos mtodos y variables
de la clase B dependiendo de los

modificadores de acceso de los mtodos y atributos.


Para acceder a miembros de clase existen dos modos:
A travs del operador de acceso (.)
A travs de herencia. No es necesario utilizar el operador de acceso (.)
103

orientacin a objetos I
modificadores de acceso

private

package

protected

public

Misma clase

Subclase del mismo


package

Clase del mismo


package

Subclase de otro
package

Clase de otro
package

Contexto

(slo herencia)

104

orientacin a objetos I
modificadores de acceso
Modificador abstract
En una clase, indica que sta es abstracta, es decir, no se podr instanciar
ningn objeto puesto que se espera que las subclases implementen de forma

especfica un comportamiento.
En un mtodo, indica que ste es abstracto y se fuerza a que todas las
subclases lo sobrescriban. Los mtodos abstractos carecen de cuerpo.
Este modificador se ver en el curso Java SE Intermedio.
Modificador final
En un atributo. Indica que el valor del atributo es constante, de slo lectura.
En un mtodo. Indica que el mtodo no puede ser sobrescrito y por lo tanto
no se puede aplicar polimorfismo
En una clase. Indica que la clase no puede tener subclases.
105

orientacin a objetos I
modificadores de acceso

static

synchronized

native

Indica que el miembro


pertenece a la clase y no a la
instancia (se estudiar en el
curso Java SE Intermedio).

Indica que un mtodo slo


puede ser accedido por un
Thread a la vez. (se estudiar
en el curso Java SE
Avanzado).

Indica que un mtodo se


implementa con cdigo
proveniente de otro lenguaje de
programacin. Carece de
cuerpo.

strictfp

volatile

transient

La clase o mtodo fuerza el


estndar IEEE 754 sobre
operaciones con punto flotante.

Indica que un Thread que


accede a la variable deber
conciliar su copia privada con
la copia de la variable en
memoria (se estudiar en el
cursoJava SE Avanzado).

Indica que un atributo de


instancia no se puede serializar
(se estudiar en el mdulo
Java SE Avanzado).

106

orientacin a objetos I
modificadores de acceso
Modificador

Clase

Mtodo

Atributo

public

protected

private

abstract

final

static

(slo internas)

synchronized

native

strictfp

volatile

transient

107

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
a. Conceptos y principios bsicos
b. Clases, atributos y mtodos
c. Modificadores de acceso

d. Constructores
e. Interfaces
5. Excepciones
6. Utilidades Java I
108

orientacin a objetos I
constructores
Un constructor de una clase es un mtodo especial que contiene las

instrucciones a ejecutar cada vez que se cree un nuevo objeto de ese tipo.
Se usan para tareas como inicializacin de atributos o se requieren operaciones
ms complejas como aperturas de ficheros, acceso a redes, etc.
Siempre se ejecutan despus de haberse inicializado todos los atributos (de
forma explcita o implcita a travs de valores por defecto).
Tienen un gran diferencia respecto el resto de
mtodos: no se heredan.

Los constructores no devuelven el objeto en s


mismo, sino una referencia a l.

109

orientacin a objetos I
constructores
Los constructores tienen una sintaxis muy parecida a los mtodos, salvo que el
nombre del constructor ha de coincidir con el de la clase y nunca tienen valor
de retorno (ni void):
<nombreTipo> ([<parmetros>]) {
<instrucciones>
}
Ejemplo:
Persona(String nombre){
System.out.println(nombre);
}
Al constructor se invoca en el momento de creacin del objeto usando la directiva
new:
Persona p = new Persona("David");
110

orientacin a objetos I
constructores
Todas las clases deben tener constructor.
En caso que el programador no defina uno, el compilador crea uno por
defecto con la siguiente signatura:
public <nombreClase>(){super();}
Si el programador define un constructor, el compilador ignora aadir el
constructor por defecto, por lo que se recomienda aadirlo manualmente
en este caso.

Los constructores pueden usar cualquier modificar de acceso: public,


protected y private.
En este ltimo caso, no se permite crear instancias con new ni herencia
fuera de la propia clase. Normalmente se usa con el patrn de diseo
singleton o con factoras.
111

orientacin a objetos I
constructores
Cuando se instancia una clase, se ejecuta una secuencia en
cascada de constructores que comienza por el constructor de
Object, pasando por el de todas las superclases hasta llegar

Cuntos
constructores
y en qu orden
se invocarn?

al de la clase instanciada.
public class Animal {
public Persona() {
System.out.println("Constructor Animal");
} }
public class Perro extends Animal{
public Perro(){
System.out.print("Guau!");
}
public static void main(String[] args){
Perro perro = new Perro();
} }
112

orientacin a objetos I
constructores
Se pueden definir varios constructores para una clase siempre y cuando difieran
en nmero de parmetros y/o en tipos, es decir, se permite la sobrecarga.
Tambin se pueden realizar llamadas desde un constructor a otros constructores
de la misma clase usando la partcula this() como primera instruccin (usar
esta instruccin en otro orden genera un error de compilacin):
No podemos invocar constructores desde otros mtodos que no sean otros
constructores.
public class A {
A (){
this(0.0,0.0); //llamamos al segundo constructor
}
A (int altura, double peso){}
}
113

orientacin a objetos I
constructores
Tambin podemos llamar a cualquier constructor definido en la superclase a
travs de la palabra reservada super().
public class Persona {
private String nombre;
public Persona(String n) {
nombre = n;
} }
public class Empleado extends Persona {
private int numEmpl;
public Empleado(int num, String nom){
super(nom);
numEmpl = num;
} }

super() ha de ser la primera instruccin del constructor.


No podemos usar super() y this() en el mismo constructor
114

orientacin a objetos I
uso de this

Dentro de cualquier mtodo de un objeto siempre es posible hacer referencia al


propio objeto usando la referencia this.
Su uso principal es el de resolver ambigedades cuando un parmetro u otro
elemento tiene el mismo nombre que un atributo (sobre todo en constructores).
class C {
int a;
//Constructor de C. Atributo y parmetro se llaman igual.
C(int a){
a = a;
//No! Ambigedad entre atributo y parmetro
this.a = a;
//Ok!
}
}

115

orientacin a objetos I
ejemplo
//Definimos una clase que modele vectores de dos dimensiones
public class Vector2D{
//Definimos los atributos: dos coordenadas (x,y)
private double x;
private double y;
//Definimos un constructor de 2 parmetros
public Vector2D(double x, double y){
//Usamos this para deshacer ambigedades
this.x = x;
this.y = y;
}
//Definimos otro constructor sin parmetros
public Vector2D(){
//Llamamos al otro constructor con this
this(0.0,0.0);
}
116

orientacin a objetos I
ejemplo
//Definimos un mtodo que calcula la suma de dos vectores.
//El mtodo suma el objeto actual (this) con el objeto
//pasado como parmetro
public Vector2D suma(Vector2D vec){
double xAux = x + vec.x;
double yAux = y + vec.y;
Vector2D vecSuma = new Vector2D(xAux, yAux);
return vecSuma;
}
//Definimos un mtodo que calcula el producto escalar
//de dos vectores: this y el parmetro
public double prodEscalar(Vector2D vec){
return x * vec.x + y * vec.y;
}
}

117

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
a. Conceptos y principios bsicos
b. Clases, atributos y mtodos
c. Modificadores de acceso

d. Constructores
e. Interfaces
5. Excepciones
6. Utilidades Java I
118

orientacin a objetos I
concepto de interfaz

Una interfaz (o interface) es la definicin de un conjunto de mtodos u otros


miembros para los que no se da una implementacin.

Las interfaces se usan para definir un protocolo de comportamiento comn


que puede ser implementado por cualquier clase sin relacin directa con
otras clases.

Se usan para separar el contrato de una operacin de su implementacin

Una interfaz equivale a una clase abstracta cuyos mtodos son todos
abstractos y deben ser implementados en sus subclases.

La diferencia entre definir una interfaz y una clase abstracta con mtodos
abstractos radica en que las interfaces permiten herencia mltiple.

119

orientacin a objetos I
definicin de interfaz

Su sintaxis es casi similar a la de una clase:


public interface <nombre> extends <interfaces base> {
<atributos o mtodos>
}

Todos los mtodos son implcitamente public y abstract, as que no es


necesario el uso de estos modificadores.
Al ser abstractos, los mtodos carecen de cuerpo.

No se permite el uso de static, final, strictfp o native.


No se pueden definir constructores de interfaz.
Todas las variables definidas en una interface son implcitamente public,
static y final, es decir, solo podemos declarar constantes.
120

orientacin a objetos III


enumeraciones

public enum Color{


int ALTURA = 4;
void botar ();
}

public interface Botable {


public static final int ALTURA = 4;
public abstract void botar ();
}

Lo que declaramos

Lo que interpreta
el compilador
121

orientacin a objetos I
implementacin de interfaz

Cuando una clase define el cuerpo los mtodos de una interfaz decimos que la
clase implementa la interfaz.

En Java se usa la palabra reservada implements

Siempre se coloca despus de la palabra extends, si lleva.

Es obligatorio declarar que los mtodos son pblicos

Una clase que implementa una interfaz siempre ha de definir el cuerpo de


todos los mtodos de la interfaz (a no ser que el mtodo se declare como

abstracto).
public class Pelota implements Botable {
public void botar(){ //Mtodo de la interfaz Botable
System.out.println("Bota mi pelota hasta " + ALTURA);
} }
122

orientacin a objetos I
herencia de interfaces

Una interfaz puede extender de mltiples interfaces a travs de extends.

Se heredan todos los mtodos y constantes definidos previamente y se


pueden aadir nuevos mtodos de interfaz

public interface Rebotable extends Botable {


//Heredamos el mtodo bota() y definimos uno nuevo rebota()
public void rebota();
}

Una interfaz no puede extender de una clase o implementar otras interfaces.

public interface Rebotable extends Pelota { //} //Error!!


public interface Rebotable implements Botable {//} //Error!!

123

orientacin a objetos I
herencia de interfaces

Una clase puede implementar varias interfaces, lo que se denomina herencia


mltiple.

public class Pelota implements Botable, Comparable<Pelota> {


public void botar(){}
public int compareTo(Pelota otra){ //
} }

No podemos instanciar objetos de tipo interfaz pero s podemos tener referencias

cuyo contenido sea una instancia de una clase implementadora de la interfaz


Botable bota = new Pelota();

124

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
5. Excepciones
a. Concepto y clasificacin
b. Captura y tratamiento de excepciones

c. Lanzamiento y propagacin de excepciones


d. Excepciones personalizadas
6. Utilidades Java I

125

excepciones
concepto

Una excepcin es un suceso anmalo que ocurre durante la ejecucin de un


programa e interrumpe el flujo normal de instrucciones.

Las posibles causas del lanzamiento de una excepcin incluyen desde fallos de
hardware (desbordamiento, acceso a disco, etc.) hasta errores de programacin
(acceso fuera de rangos de un array, fallo de conexiones a bases de datos, etc.),
siendo estos ltimos las principales.

La gestin de excepciones es el mecanismo que

se usa y se recomienda en Java para el control de


errores.

126

excepciones
ventajas
El mecanismo clsico de gestin de errores consiste en que cada fragmento de
cdigo susceptible de error genere un cdigo que debe tratar despus el
programador a travs de sentencias if else.
Las excepciones ofrecen usa serie de ventajas respecto al mecanismo anterior.
Claridad. El control de excepciones separa el cdigo normal del cdigo de
control de errores en dos partes bien diferenciadas para separar ambas

lgicas y hacer el programa menos lioso.


Ms informacin. Las excepciones permiten especificar mensajes para
indicar las causas del error y hacer ms trazable el error.
Tratamiento asegurado. Se garantiza que en caso de error, la excepcin
ser tratada y de no serlo, se abortar la ejecucin del programa.
127

excepciones
clasificacin
Existen tres grandes grupos de excepciones que heredan de Throwable:
Errores (extends Error). Representan errores graves de sistema, por

ejemplo, cuando no hay suficiente memoria en la JVM, normalmente son


errores irrecuperables.
Excepciones

unchecked

(extends

RuntimeException).

Son

excepciones que la JVM lanza de forma automtica como por ejemplo

acceder a una referencia nula o a una posicin de un array superior a su


tamao. No es necesario su tratamiento ya que pueden evitarse.
Excepciones checked (extends Exception). Son la inmensa mayora de
excepciones. Las aplicaciones y/o APIS las lanzan. El programador tiene que
gestionar su tratamiento.

128

excepciones
clasificacin

Throwable

Error
OutOfMemoryError
StackOverflowError
AWTError

Exception
Excepciones
checked

Excepciones unchecked
(RuntimeException)

IOException
SQLException
ClassNotFoundException
Excepciones Personalizadas

ArithmeticException
NullPointerException
OutOfBoundsException
ClassCastException
129

excepciones
excepciones y errores comunes
IndexOutOfBoundsException y
ArrayIndexOutOfBoundsException
El ndice de acceso a un lugar se encuentra fuera de rango.
La segunda es subclase de la primera. Indica que el ndice por el
cual se ha accedido es negativo o mayor que el tamao del array
ClassCastException
Se produce al realizar un casting entre objetos incompatibles. La
mquina virtual lanza de manera automtica esta excepcin.
IllegalArgumentException
Indica que el parmetro pasado a una funcin no es vlido. Se trata
de una excepcin de propsito general para validacin de datos.
130

excepciones
excepciones y errores comunes
IllegalStateException

Indica que se ha accedido al objeto en una circunstancia no vlida.


Se trata de una excepcin de propsito general para filtrar accesos
a objetos
NullPointerException
Se ha accedido a un mtodo o atributo de una referencia nula. La
mquina virtual lanza de manera automtica esta excepcin.
NumberFormatException
Subclase de IllegalArgumentException. Se lanza al convertir
un string en un valor numrico y dicho string no tiene el formato
correcto.
131

excepciones
excepciones y errores comunes

AssertionError
El resultado de evaluar una asercin es falso.
ExceptionInInitializerError
Error cuando se produce una excepcin en el inicializador (constructor) esttico de
una clase. La clase no se carga en la memoria de la JVM.
StackOverflowError
Se produce cuando la pila de llamadas se desborda debido a exceso de recursividad.
ClassNotFoundException y NoClassDefFoundError
La primera se produce cuando no se encuentra una clase dentro del Classpath de la
aplicacin
El segundo se produce cuando no se puede cargar ni leer la definicin de la clase.

132

excepciones
mtodos de Throwable
printStackTrace(). Escribe en la salida de error estndar (System.err) la
traza de la pila.
La primera lnea contiene la salida del mtodo toString() del objeto Throwable
que lo llama.
El resto de informacin es la pila de llamadas. Cada lnea de la pila contiene el
nombre del mtodo y la lnea donde se hizo la llamada, empezando por el

ltimo mtodo de la pila y terminando por el primero:


Caused by: java.lang.NullPointerException
at MyClase.miMetodo (MiClase.java: 42)
at MyClase.miOtroMetodo(MiClase.java: 58)
at MyClase.main (MiClase.java: 25)
getCause(). Devuelve el objeto Throwable que caus la excepcin o null en
caso de no existir o ser desconocida.
getMessage(). Devuelve un String con el detalle de la excepcin.
133

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
5. Excepciones
a. Concepto y clasificacin
b. Captura y tratamiento de excepciones

c. Lanzamiento y propagacin de excepciones


d. Excepciones personalizadas
6. Utilidades Java I

134

excepciones
captura y tratamiento de excepciones
Bloque try. Incluye las instrucciones normales de cdigo susceptibles a lanzar
una o varias excepciones. Si se lanza una excepcin se interrumpe el flujo
normal de ejecucin y se salta al bloque catch correspondiente.
Bloque catch. (opcional) Incluye las instrucciones que tratarn la excepcin
generada. Un bloque catch dispone siempre de una referencia a la excepcin
generada para obtener informacin sobre sobre su causa, su trazabilidad, etc.

Bloque finally. (opcional) Incluye instrucciones que se ejecutarn siempre, se


haya producido o no una excepcin. Se usa principalmente para liberar recursos.
Cuando usamos un bloque try estamos obligados a definir como mnimo un
bloque catch o un bloque finally

135

excepciones
captura y tratamiento de excepciones
public Double dividir(double divisor, double dividendo){
try{
//Instruccin susceptible a lanzar excepciones
return divisor / dividendo;
}
catch (ArithmeticException ex) {
// Volcado de pila
ex.printStackTrace();
// Informacin de la excepcin
System.out.println(ex.getMessage());
}
finally{
System.out.println("Liberando recursos")
}

// Si llega aqu hubo error


return null;
}

Lnea verde: hace clculo, ejecuta finally y


devuelve resultado. (sin error)
Lnea roja: hace clculo, ejecuta catch y
finally y devuelve null (con error)
136

excepciones
tratamiento de mltiples excepciones
Java ofrece la posibilidad de capturar mltiples excepciones en un nico bloque
try.
Para ello basta con definir varios bloques catch, uno por cada excepcin que se
desee gestionar.
Los bloques catch se ejecutan en secuencia, de forma que es importante definir
su orden, sobre todo cuando existe una jerarqua de excepciones ya que por

polimorfismo una excepcin padre captura excepciones hijas.


En una jerarqua de excepciones se debe capturar primero las excepciones ms
concretas y dejar en ltimo lugar las ms genricas (RuntimeException,
Exception y Throwable)
No puede haber ms de un bloque catch que capture la misma excepcin o un
subtipo de una excepcin ya declarada
137

excepciones
tratamiento de mltiples excepciones
Ejemplo incorrecto:
public static void main(String[] args){
try {
refValida.metodoLanzaMiException();
}catch(Throwable e){
}catch(Exception e){
}catch(ArithmeticException e){
}catch(MiException e){}
}
class MiException extends ArithmeticException {}
El primer bloque catch captura Throwable, el resto de bloques catch son
subtipos de sta y no los podemos declarar en este orden. Primero debemos
declarar las excepciones ms concretas o especializadas y por ltimo las ms
genricas
138

excepciones
tratamiento de mltiples excepciones
Ejemplo correcto, aunque no tiene sentido. Con el primer catch es suficiente
porque es la nica excepcin que puede lanzar el mtodo
public static void main(String[] args){
try {
refValida.metodoLanzaMiException();

}catch(MiException e){
}catch(ArithmeticException e){
}catch(Exception e){
}catch(Throwable e){}
}
class MiException extends ArithmeticException {}
139

excepciones
tratamiento de excepciones
Otro ejemplo correcto: usamos bloques try/catch/finally
public static void main(String[] args){
ReferenciaRecursoCritico refRecursoCritico;
try {
refRecursoCritico = ClaseEstatica.getInstance();
// ms cdigo aqu puede haber varios return
}catch(MiException ex){
ex.printStackTrace();
}finally{
ClaseEstatica.free();
refRecursoCritico = null;
}}
class MiException extends Exception { }

140

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
5. Excepciones
a. Concepto y clasificacin
b. Captura y tratamiento de excepciones

c. Lanzamiento y propagacin de excepciones


d. Excepciones personalizadas
6. Utilidades Java I

141

excepciones
propagacin de excepciones
Si una excepcin no se gestiona dentro de un mtodo decimos que se propaga
hacia niveles superiores.
Se delega la responsabilidad de gestin al mtodo que llam al mtodo actual,
y as sucesivamente hasta alcanzar el primer mtodo de la pila de llamadas.
Si la excepcin no se gestiona, se termina el hilo de ejecucin de la actual pila
de llamadas. Si el hilo en ejecucin es el principal, el programa aborta su
ejecucin.
Si sabemos que las instrucciones de un mtodo son susceptibles de lanzar
excepciones pero no queremos gestionarlas se debe explicitar en la definicin del
mtodo cules son las excepciones que puede lanzar a travs de la clusula
throws.

142

excepciones
propagacin de excepciones
Ejemplo
//abreStream declara una excepcin de tipo IOException
public void abreStream(String fich) throws IOException{
//Esta instruccin lanza una excepcin,
//pero no se captura con trycatch, sino que se propaga

FileInputStream str = new FileInputStream(fich);


}
Se obliga a los mtodos llamantes a gestionar
o declarar las excepciones que lanza el mtodo
con throws.

Por su propia naturaleza, no es necesario


explicitar las excepciones unchecked
143

excepciones
lanzamiento de excepciones

A parte de capturar o gestionar excepciones, Java nos da la oportunidad de lanzar


excepciones dentro de un mtodos.

Para lanzar una excepcin se usa throw seguido de una expresin que devuelva
una referencia a una excepcin.

Lanzar excepciones resulta conveniente cuando se desea propagar una excepcin


para que en otra regin de cdigo (o clase) sea capturada, siempre y cuando no
sea una RuntimeException.
public double raizCuadrada(double num) throws MyException {
//Declara excepcin subtipo de Exception
if(num < 0.0){
throw new MyException("Argumento negativo");
}
return Math.sqrt(num);
}

144

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
5. Excepciones
a. Concepto y clasificacin
b. Captura y tratamiento de excepciones

c. Lanzamiento y propagacin de excepciones


d. Excepciones personalizadas
6. Utilidades Java I

145

excepciones
excepciones definidas por el usuario

La API de Java SE incluye una coleccin extensa de excepciones que resuelven


la mayora de situaciones o errores en programacin.

No obstante hay veces en que se desea definir excepciones personalizadas

para tratar nuevas casusticas de situaciones particulares.

Java permite la creacin de estas excepciones heredando de la clase base de


excepciones checked java.lang.Exception.

Se recomienda que el nombre de clase de la excepcin indique la causa de su


lanzamiento y que termine con el sufijo Exception para su rpida identificacin.

Se deberan declarar dos constructores: el constructor por defecto (sin


argumentos) y otro con un parmetro String que detalle el mensaje de error.

146

excepciones
excepciones definidas por el usuario
public class SaldoNegativoException extends Exception{
public SaldoNegativoException(){ } //Sin argumentos
public SaldoNegativoException(String mensajeError){ //Sobrecargado
super(mensajeError);
}
}

public class CuentaBancaria {


private double saldo;
public CuentaBancaria(double sld){ saldo = sld; }
// Mtodo que declara (throws) la excepcin personalizada
public void sacarDinero(double cantidad)throws SaldoNegativoException{
if(cantidad > saldo) {
//Lanza (throw) la excepcin declarada
throw new SaldoNegativoException("Fondos insuficientes");
}
saldo -= cantidad;
}
}
147

excepciones
excepciones definidas por el usuario
public class CuentaBancariaMain{
public static void main(String args){
try{
CuentaBancaria cb = new CuentaBancaria(1000.0);
// Instruccin que no genera error
cb.sacarDinero(500.0);
// Instruccin que genera una excepcin
cb.sacarDinero(501.0);
} catch (SaldoNegativoException ex){
// Mostramos el mensaje de error
System.out.println(ex.getMessage());
// Volcamos la pila en System.err
ex.printStackTrace();
}
}
}
148

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
5. Excepciones
6. Utilidades Java I
a. Las clases String, StringBuffer y StringBuilder

b. Sentencias package e import


c. La lnea de comandos

149

utilidades Java I
la clase String

La clase java.lang.String representa cadenas de caracteres.


Aunque se las trate a veces como tal, no son tipos simples.
Admiten literales cerrados entre comillas dobles ("");

String mensaje = "Hola";


Al tratarse de objetos se inicializan a null si no se les da un valor (nunca se
inicializan por defecto a "").
Son inmutables, es decir, que no se puede modificar su contenido una vez
asignado.
Cada carcter en un string es una carcter Unicode de 16-bits.
Java permite concatenar String a travs del operador +
String mensaje = "Hola " + "y adis";
150

utilidades Java I
la clase String
Aunque los objetos String son inmutables, sus variables de referencia no:
String s = new String("Hola");
s = s.concat(" Mundo"); // concat aade un literal al final
Ahora tenemos dos objetos String en la JVM: "Hola" (inmutable) y "Hola

Mundo" (nuevo), y una referencia s con el valor "Hola Mundo".


public class Test{
public static void main(String args){

qu salida
produce?

String x = new String("Hola");


x.concat(" mundo");
System.out.println(" x = " + x);
}

}
151

utilidades Java I
la clase String
Mtodo

Descripcin

charAt(index)

Devuelve el carcter situado en la posicin index.

concat(str)

Concatena str con el String actual.

contains(cadena)

Indica si el String actual contiene a cadena.

compareTo(cadena)

Compara dos cadenas. Mtodo de la interfaz Comparable<String>.

equals(cad)
equalsIgnoreCase(cad)

El primero indica si la cadena actual es igual a cad. El segundo hace lo


mismo pero no hace distincin entre maysculas y minsculas.

indexOf(char c)
lastIndexOf(char c)

El primer mtodo devuelve la primera posicin donde haya el carcter c.


El segundo realiza lo mismo pero busca la ltima posicin.

length()

Devuelve el tamao en caracteres del String.

matches(regex)

Indica si el String cumple con la expresin regular definida en regex.

replace(charO, charD)
replace(regex, strNew)

El primer sustituye todas las ocurrencias de charO por charD. El


segundo sustituye todas aquellas regiones de la cadena que cumplan
con regex y las sustituye por el String srtNew.
152

utilidades Java I
la clase String
Mtodo

Descripcin

split(regex)

Divide el String usando como separador la expresin regular regex.


Devuelve un array de String.

startsWith(prefix)
endsWith(suffix)

Indica si la cadena empieza o termina dado un prefijo o sufijo como


parmetro.

substring(ini,dest)

Devuelve la subcadena entre ini y dest contenida en el string actual.

toLowerCase()
toUpperCase()

El primero sustituye todas las letras maysculas por minsculas. El


segundo sustituye todas las letras minsculas por maysculas.

toCharArray()

Devuelve un array de char que representa al string actual.

trim()

Elimina los espacios en blanco del inicio y final del String.

valueOf(tipoSimple)

Mtodo esttico. Devuelve el valor de tipoSimple transformado en


String. Admite como parmetro cualquier tipo simple.

format(cad, args)

Mtodo esttico. Devuelve una nueva cadena cuyo origen en cad


formateada segn los parmetros especificados en args[]

153

utilidades Java I
las clases StringBuffer y StringBuilder
Las clases StringBuilder y/o StringBuffer se usan cuando tenemos que hacer
muchas modificaciones en cadenas de caracteres.
Dado que los objetos String son inmutables, si tenemos que hacer
muchas modificaciones con ellos, estaremos llenando la memoria.
Los objetos StringBuilder y StringBuffer pueden modificarse una y otra
vez sin que afecte a la memoria de la JVM

Un uso comn es en el uso de grandes ficheros I/O y flujos de entrada


cambiantes, donde grandes bloques de datos se tratan como unidades y son
procesados y tratados reusando la misma memoria para manejar los siguientes
bloques de datos

154

utilidades Java I
las clases StringBuffer y StringBuilder
Mtodo

Descripcin

append(valor)

Aade valor al final de la secuencia. Puede ser un tipo simple, un String o un


Object.

delete(ini,fin)
deleteCharAt(pos)

El primero borra toda la secuencia entre ini y fin. El segundo borra el


carcter situado en la posicin pos.

insert(pos,val)

Aade en la posicin pos, el valor val. val puede ser un tipo simple, un
string o un Object.

setCharAt(pos,car)

Sustituye el carcter de la posicin pos por car.

toString()

Devuelve la representacin como String del StringBuffer

La clase StringBuilder se aadi en la versin 5 de Java SE,


Tiene los mismos mtodos que la clase StringBuffer, con la diferencia de
que StringBuilder no tiene sus mtodos sincronizados.
Por este motivo, StringBuilder es ms rpida que StringBuffer
155

utilidades Java I
las clases StringBuffer y StringBuilder
Definamos el mismo ejemplo de concatenacin de cadenas de caracteres que vimos
con la clase String. Sustituimos el mtodo concat de la clase String por el mtodo
append de la clase StringBuilder:
public class Test{
public static void main(String args){
StringBuilder sb = new StringBuilder("Hola");
sb.append(" mundo");
System.out.println("sb = " + sb);
}
}
Qu salida producir
este programa?

156

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
5. Excepciones
6. Utilidades Java I
a. Las clases String, StringBuffer y StringBuilder

b. Sentencias package e import


c. La lnea de comandos

157

utilidades Java I
sentencia package
Java organiza las clases dentro de paquetes (packages). Cuando definimos una
clase podemos indicar el nombre del paquete al que pertenece en la primera lnea
de cdigo.
El nombre completo de una clase es el nombre del paquete junto con el nombre
de la clase, por ejemplo: La clase Empleado dentro del paquete
com.everis.people la definimos as:
package com.everis.people; // paquete al que corresponde
public class Empleado { } // definicin de la clase
Para el ejemplo anterior fsicamente se crea la siguiente estructura de directorios
/com/everis/people/Empleado.java
Para crear una referencia de Empleado desde cualquier otra clase fuera del
paquete com.everis.people tenemos que usar la siguiente sintaxis:
com.everis.people.Empleado emp = new com.everis.people.Empleado();
158

utilidades Java I
sentencia import
Para evitar escribir el nombre completo de una clase cada vez que la
referenciamos y adems evitar ambigedades, Java proporciona la sentencia
import.
Se escriben antes de la definicin de la clase y despus de la sentencia
package, si existe.
Existen dos modos de importancin:
Podemos importar una sola clase:
import com.everis.people.Empleado;
O bien podemos importar todas las clases de un paquete:
import com.everis.people.*;

Para ambos casos, Empleado emp = new Empleado(); sera correcto.


159

utilidades Java I
sentencia import
La sentencia import no importa subpaquetes. Si un paquete tiene subpaquetes
tenemos que usar ms de una sentencia import, una por paquete:
import com.everis.people.Empleado;
import com.everis.people.staff.Programador;
Otro mecanismo que incorpora Java desde la versin 5 son las sentencias de
importacin estticas import static
Son tiles cuando queremos usar miembros estticos de una clase con mucha
frecuencia sin tener que referenciar el nombre de la clase cada vez que
accedemos al miembro.

160

utilidades Java I
sentencia import
Sin usar import static:
public class TestStatic {
public static void main(String[] args) {
System.out.println(
Integer.toHexString(42));
}
}
Usando import static:
import static java.lang.System.out; // 1
import static java.lang.Integer.*; // 2
public class TestStatic {
public static void main(String[] args) {
out.println(toHexString(42));
}
}

1. El mtodo esttico
out de la clase
System
2. Todos los mtodos
estticos de la clase
Integer
161

ndice
1. Introduccin a Java
2. Sintaxis bsica
3. Arrays

4. Orientacin a objetos I
5. Excepciones
6. Utilidades Java I
a. Las clases String, StringBuffer y StringBuilder

b. Sentencias package e import


c. La lnea de comandos

162

utilidades Java I
la lnea de comandos

Ficheros de
cdigo fuente
(.java)

Compilador Java
(javac)

Ficheros bytecode
(.class)

Lenguaje
mquina

JVM (java)
163

utilidades Java I
la lnea de comandos. javac
Usamos el comando javac desde la lnea de comandos para compilar un
programa escrito en Java
Sintaxis de uso: javac [opciones] [ficheros fuente]
Opcin

Descripcin

-help

Muestra ayuda sobre el comando

-classpath

Indica la ruta donde se encuentran los ficheros de clases

-g

Genera informacin de depuracin

-verbose

Muestra informacin del proceso de compilacin

-nowarn

No muestra avisos (warnings)

-d

Indica la ruta donde situar los archivos compilados .class

-source

Establece la compatibilidad de los fuentes con la versin de Java indicada

-target

Genera clases para la versin de la JVM indicada

-version

Muestra la versin del comando javac


164

utilidades Java I
la lnea de comandos. javac
javac Persona.java # Compila la clase Persona
javac d classes src/Persona.java # Compila la clase Persona y sita
el archivo Persona.class en la carpeta classes
javac classpath com\everis g Persona.java Alumno.java #
Compila las clases Persona y Alumno, genera informacin de depuracin e
indica la carpeta donde encontrar clases

javac source 1.4 src/*.java # Compila todos los archivos java de la


carpeta src con compatibilidad con la versin 1.4 de Java SE
javac source 5 src/*.java # Compila todos los archivos java de la
carpeta src con compatibilidad con la versin 5 de Java SE
javac source 5 target 5 Persona.java # Compila la clase Persona
para la versin 5 de Java SE
165

utilidades Java I
la lnea de comandos. java
Usamos el comando java desde la lnea de comandos para ejecutar una clase

Java
Ejecutar una clase: java [opciones] fichero de clase
[argumentos]
Ejecutar un jar: java [opciones] jar fichero jar [argumentos]
Opcin

Descripcin

-help

Muestra ayuda sobre el comando

-classpath

Indica la ruta donde se encuentran los ficheros de clases

-D

Define una propiedad del sistema de tipo <nombre>=<valor>

-verbose

Muestra informacin del proceso de compilacin

-ea

Activa las aserciones

-da

Desactiva las aserciones

-version

Muestra la versin del comando Java (versin de la JVM)


166

utilidades Java I
la lnea de comandos. java
java Persona # Ejecuta la clase Persona
javac Dcolor=rojo Persona.java # Ejecuta la clase Persona y aade la
propiedad color con el valor rojo a las propiedades del sistema
System.getProperties();
java Persona Carlos # Ejecuta la clase Persona y pasa Carlos como argumento

java Persona Carlos Prez Garca # Ejecuta la clase Persona y pasa los
argumentos Carlos, Prez y Garca
java Persona "Carlos Prez Garca" # Ejecuta la clase Persona y pasa el
argumento Carlos Prez Garca
java classpath project\classes com.everis.Persona # Ejecuta la
clase com.everis.Persona e indica el classpath donde encontrarla
167

utilidades Java I
la lnea de comandos. El mtodo main
Si necesitamos crear una clase ejecutable desde la lnea de comandos, sta
deber definir el mtodo public static void main(String[] args)
Podemos encontrar el mtodo escrito de varias maneras:
static public void main(String[] args)
public static void main(String... x)

static public void main(String argumentos[])


Para el correcto funcionamiento tiene que ser static, public, no devolver
nada (void), llamarse main y recibir un argumento de tipo array de String
No es obligatorio declarar la clase public, pero se recomienda.
En el curso Java SE Intermedio se tratar con ms profundidad el classpath y
los archivos jar.
168

utilidades Java I
la lnea de comandos. El mtodo main
class PruebaMain {
public static void main(String[] args) {
for(String s: args) {
System.out.print(s + " ");
}
System.out.println(System.getProperty("coche"));
}
}

+
C:\>javac PruebaMain.java
C:\>java Dcoche=Ferrari PruebaMain Jesus pilota un
C:\>_

=
C:\>Jesus pilota un Ferrari
C:\>_
169

everis.com

170

You might also like