Java

247
Java b´ asico Tipos B´ asicos Instrucciones b´ asicas Paquetes Objetos herencia Excepciones Gen´ ericos Entrada/Salida Coleccion Java Entorno de Programaci´ on Emacs/JDEE/Ant Luis Fernando Llana D´ ıaz Departamento de Sistemas Inform´ aticos y Computaci´on Universidad Complutense de Madrid 8 de abril de 2013 Luis Fernando Llana D´ ıaz Departamento de Sistemas Inform´ aticos y Computaci´onUniversidad Complutense de Madrid Java

Transcript of Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

JavaEntorno de Programacion Emacs/JDEE/Ant

Luis Fernando Llana Dıaz

Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

8 de abril de 2013

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Sintaxis inspirada en C++.

Lenguaje orientado a objetos.

Codigo compilado independiente dela maquina j-codigo.

Lenguaje de moda.

Compilador e interpretes gratuito.Libres segun la version.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Entornos de programacion

Consola+editor de textos.

Editor de texto emacs + JDEE.

Eclicpse y NetBeans, entornos libres.

JBuilder entorno propietario.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

GNU-emacs (JDEE)

Ventajas

Codigo libre.

Editor potente (coloreado,sangrado automatico,compilacion integrada).

Editor programable.

Desventajas

Dificultad para entornosgraficos.

Entorno desconocido.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

GNU-emacs (JDEE)

Ventajas

Codigo libre.

Editor potente (coloreado,sangrado automatico,compilacion integrada).

Editor programable.

Desventajas

Dificultad para entornosgraficos.

Entorno desconocido.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Programa “Hola Mundo”

1/* El primer programa

2como aparece en todos los

3libros */

45/** Esto es un comentario

6* para ser procesado con ’javadoc ’.

7* Clase " ejecutable " Hola mundo.

8*/

9public class HolaMundo {

10// Clase upblica. oSlo puede haber una en cada fichero.

11// aAdems el fichero se debe llamar ’PrimerPrograma .java ’

12/** El emtodo aesttico "main" es el

13* que comienza a ejecutarse .

14* @author Luis Fernando Llana ıDaz

15* @version 1.0

16* @since 5/ oct /98

17* @param args son los parametros introducidos en la ılnea de comandos

18*

19*/

20public static void main (String [] args){

21System.out.println("Hola");

22}

23}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Elmentos basicos

Instruccion de asignacion.

Instruccion condicional (if).

Instruccion iterativa (while, for, do-while).

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Tipos Basicos

Tipo Que contiene Rango

byte entero de 8 bits -128 a 128

short entero de 16 bits -32.768 a 32.767

int entero de 32 bits -2.147.483.648 a 2.147.483.647

long entero de 64 bits −263 a 263 − 1

float coma flotante de 32 bits 6 dıgitos significativos (10−46, 1038)

double coma flotante de 64 bits 15 dıgitos significativos (10−324, 10308)

char Caracter Unicode ’a’, ’b’, . . . ’a’, ’~n’,. . . ’0’, ’1’, . . .

boolean valores booleanos true y false

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Literales

Enteros:

Decimal: 37Hexadecimal: 0x25Octal: 045

Caracteres

’a’, ’b’, . . . ’a’, ’~n’, . . . , ’0’, ’1’, . . .Caracteres “escape”: ’\n’, ’\\’, ’\’’, ’\"’.

Reales

Float: 1.0345F, 1.04E-12f, .0345f,1.04e-13f

Double: 1.0345, 1.0345d, 5.6E-120D

Cadenas de caracteres: "hola\n".

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Declaracion de variables

Estilo C++.

Permite declaracion de variables al vuelo.

Java es sensible a mayusculas y minusculas.

Notacion:

Nombres de variables y clases largos.Las variables todas en minusculas, si una variable se componede varias palabras, la segunda y siguientes palabras empiezanpor mayuscula:

numero, numeroPalabras

Las clases empiezan por mayusculas y las demas en minusculas:

Lista, ListaEnlazada

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Declaracion de variables

1public class Variables {

2public static void main (String [] args)

3{

4int num1; // oDeclaracin aestndar

5double media =2.5; // oDeclaracin e oinicializacin

67num1 =6;

8System.out.println("num1: "+num1);

910int x, num2; // oDeclaracin al vuelo

11x=2; num2 =10;

12System.out.println("x: "+x+"\nnum2: "+num2);

1314int num3=x*num2; // oDeclaracin e oinicializacin al vuelo

15System.out.println("num3: "+num3);

1617media=num1/num2;

18// media =0

19System.out.println("media: "+media);

2021media=( double)num1/num2;

22// media =0.6

23System.out.println("media: "+media);

24}

25}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Operadores

Operadores aritmeticos

+ suma para enteros y reales.

- resta para enteros y reales.

* producto para enteros y reales.

/ division entera entre enteros y con decimales para reales.

% resto de la division entera entre enteros.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Operadores logicos

Operadores logicos

conjuncion &&, ¡ojo! no confundir con &.

disyuncion || , ¡ojo! no confundir con |.

negacion !.

Operadores relacionales

igualdad ==.

desigualdad !=.

comparacion <, <=, >, >=.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Operadores logicos

Expresion condicional

1i %2 ? 1:0

2..........

3mes ==2 && bisiesto ? 29:28

Operadores logicos no estrictos

1if (x!=0 && 1/x>3)

2..................

3while (i<=n && v[i]==0)

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Constantes

1public static final double CUALQUIERA =3.14159265;

2public static final int MAXIMO_NUMERO_ELEMENTOS =5000;

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Cadenas de caracteres

1public class PrString {

23public static void main(String args []) {

4String s1 = "Hola";

5String s2 = "Patata";

6String s3 = s1+" "+s2;

7System.out.println(s3.length ());

8for (int i = 0; i < s3.length (); i++) {

9String mensaje = "Letra "+i+":"+s3.charAt(i)+":";

10System.out.println(mensaje );

11}

1213}

14}

String es una clase especial en Java. Sus objetos son inmutables.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Instruccion condicional

1if (expresion booleana )

2instruccion

34if (expresion booleana )

5instruccion

6else

7instruccion

1if (x==0)

2System.out.println("x vale 0");

3else {

4System.out.print("x vale ");

5System.out.println(x);

6}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Instruccion condicional

1public class PruebaIf {

2public static void main(String [] args) {

3int x=0;

45if (x!=0 && 1/x=0);

6System.out.println (1/x);

7else

8System.out.print("x aest ");

9System.out.println("indefinido");

10}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Instrucciones iterativas

1while (expresion booleana )

2instruccion

1do

2instruccion

3while (expresion booleana )

1for (inicializacion ; expresion booleana ; incremento )

2instruccion

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Instrucciones iterativas

1i=0;

2while (i<n && v[i]==0) i++;

1for (int i=1; i<n; i++){

2int posMin=i;

3for (int j=i+1; j<n; j++){

4if (v[j]<v[posMin ]) posMin=j;

5}

6intercambiar(v,i,posMin );

7}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Usos “prohibidos” de bucle for

Uso de bucle for como bucle while:

1for (i=0; i<n && v[i]==0; i++);

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Instrucciones iterativas

1public class PruebaBucles {

2static void bucleWhile () {

3int i=1;

4boolean para = false;

5System.out.println("Bucle WHILE");

6while (i <=1000 && !para) {

7System.out.println("i: "+i);

8// Sale del bucle cuando se cumple la ocondicin.

9if (i==10) {

10System.out.println("Me voy ....");

11para = true;

12}

13i++;

14}

15}

1617static void bucleFor () {

18System.out.println("Bucle FOR");

19for (int i=1; i<=10; i++)

20System.out.println("i: "+i);

21}

22// eDespus del bucle la varaible ’i’ no aest definida;

2324public static void main(String [] args) {

25bucleWhile ();

26bucleFor ();

27}

28}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Distincion de casos

1switch (n %7){

2case 0:

3System.out.println("Es lunes");

4break;

5case 1:

6System.out.println("Es martes");

7break;

8...

9...

10case 6:

11System.out.println("Es domingo");

12break;

13default:

14System.out.println("Esto es imposible");

15}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Distincion de casos

1public class PruebaSwitch {

2static char prueba1(char c) {

3char letra;

45switch (c) {

6case ’a’:

7letra=’-’;

8break;

9case ’e’:

10letra=’-’;

11break;

12case ’i’:

13letra=’-’;

14break;

15case ’o’:

16letra=’-’;

17break;

18case ’u’:

19letra=’-’;

20break;

21default: letra=c;

22}

23return letra;

24}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Distincion de casos

1static void prueba2(int i) {

2switch (i){

3case 1:

4System.out.println("Caso 1: "+i);

5case 2:

6System.out.println("Caso 2:"+i);

7case 3:

8System.out.println("Caso 3:"+i);

9case 4:

10System.out.println("Caso 4:"+i);

11case 5:

12System.out.println("Caso 5:"+i);

13default:

14System.out.println("Caso por defecto");

15}

16}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Distincion de casos

1public static void main(String [] args) {

2char letra=prueba1(args [0]. charAt (0));

3System.out.println("letra:"+letra+":");

45System.out.println("llamada con 1");

6prueba2 (1);

7System.out.println("llamada con 2");

8prueba2 (2);

9System.out.println("llamada con 3");

10prueba2 (3);

11System.out.println("llamada con 4");

12prueba2 (4);

13System.out.println("llamada con 5");

14prueba2 (5);

15System.out.println("llamada con 6");

16prueba2 (6);

17}

18}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Metodos

Java no tiene procedimientos, solo hay funciones (metodos).

Existen funciones que devuelven nada (tipo void).

Todos los parametros son de entrada, pero cuidado con lospunteros o referencias.

Las funciones admiten sobrecarga.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Sobrecarga

1public class Sobrecarga {

2final static double PI =3.1415926535897932;

34static double max(double a, double b){

5double m=a;

6if (b>a) m=b;

7return m;

8}

9static double max(double a){

10double m=PI;

11if (a>PI) m=a;

12return m;

13}

14static int max(int a, int b){

15int m=a;

16if (b>a) m=b;

17return m;

18}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Sobrecarga

1public static void main(String [] args){

2double x=Double.parseDouble(args [0]);

3double y=Double.parseDouble(args [1]);

4int a=Integer.parseInt(args [2]);

5int b=Integer.parseInt(args [3]);

67System.out.print("aMximo entre "+x+" y "+y+": ");

8System.out.println(max(x,y));

910System.out.print("aMximo entre "+x+" y "+PI+": ");

11System.out.println(max(x));

1213System.out.print("aMximo entre "+a+" y "+b+": ");

14System.out.println(max(a,b));

15}

16}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Arrays

1int [] v; // definicion de arrays

2double [][] m; //odefinicin de matrices

3.................................

4int [] v = new int [10]; //odefinicin y ocreacin de array de 10 componentes

5.................................

6int [] v = {1,2,3,4,5}; //odefinicin y ocreacin de array

7.................................

8int [] m = new int [10][10];

9.................................

10int [][] m = {{1,2,3},{4,5,6},{7,8,9}};

Todos los arrays empiezan a numerarse desde 0;

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Arrays

1import java.util.Random;

2public class PrArray {

3private static final int N=10;

4private static void escribe(int [] v) {

5System.out.print("[");

6for (int i = 0; i<v.length ; i++) {

7if (i>0)

8System.out.print(",");

9System.out.print(v[i]);

10}

11System.out.println("]");

12}

13public static void main(String [] args) {

14int [] v = new int[N];

15genera(v);

16escribe(v);

17ordena(v);

18escribe(v);

19int [] u = v;

20u[0]=10000;

21escribe(u);

22}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Arrays

1private static void genera(int [] v) {

2Random r = new Random ();

3for (int i = 0; i<v.length ; i++)

4v[i] = r.nextInt () % (3*N);

5}

6private static void ordena(int [] v) {

7for (int i = 0; i < v.length ; i++) {

8int pos = i;

9for (int j = i+1; j<v.length ; j++)

10if (v[j]<v[pos])

11pos = j;

12int aux = v[i];

13v[i] = v[pos];

14v[pos]=aux;

15}

16}

17}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Paquetes

Hechos

Cualquier programa puede tener varios cientos o miles declases.

La propia API de Java tiene mas de 3000 clases.

No es difıcil escoger el nombre de una clase que yaeste cogido.

Paquete

Es una coleccion de clases con un mismo objetivo.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Paquetes

Hechos

Cualquier programa puede tener varios cientos o miles declases.

La propia API de Java tiene mas de 3000 clases.

No es difıcil escoger el nombre de una clase que yaeste cogido.

Paquete

Es una coleccion de clases con un mismo objetivo.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clase soporte.Teclado

1package soporte;

23import java.io.BufferedReader;

4import java.io.IOException;

5import java.io.InputStreamReader;

6public class Teclado {

7...

8...

9}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Esqueleto de proyecto Java

1.

2|-- build.xml

3|-- prj.el

4‘-- src

5| |-- pr1

6| | ‘-- Pr.java

7| ‘-- pr2

8| ‘-- Pr.java

9|-- lib

10‘-- classes

11|-- pr1

12| ‘-- Pr.class

13‘-- pr2

14‘-- Pr.class

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Objeto es un ejemplar de una clase.

Estado interno, no manipulable directamente.Metodos de manipulacion.

Programa coleccion de clases.

Clase definicion de objetos.Similar a RECORD de Pascal + metodos de manipulacion.

Java no es un lenguaje orientado a objetos puro, tiene tiposprimitivos.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Implementacion de fechas

Implementacion de fecha:

Representacion de una fecha ordinaria (dıa/mes/ano)moderna (desde 01/01/1601).

Dada una fecha, pasar a la siguiente, anterior, anadir/restardıas.

Comparar fechas.

¿Cuantos dıas hay entre 2 fechas?

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Uso de fechas

1import fecha.Fecha;

2public class PrFecha {

3public static void main (String [] args) {

4Fecha f1=new Fecha (30,Fecha.DICIEMBRE ,1999);

5Fecha f2=new Fecha(1,Fecha.MARZO ,2004);

6while (f1.compareTo(f2)<=0) {

7System.out.println(f1.diaSemana ()+":"+f1);

8f1.siguiente ();

9}

10}

11}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Implementacion de fechas

1package fecha;

2public class Fecha implements Comparable{

3private int dia;

4private int mes;

5private int anyo;

6public Fecha( int _dia , int _mes , int _anyo ) {

7dia = _dia; mes = _mes; anyo = _anyo;

8}

9public String toString( ) {

10return dia + "/" + mes + "/" + anyo;

11}

12public int compare(Object o)

13..........

14}

15public void anyadir(int ıdas) {

16..........

17}

18public void siguiente () {

19anyadir (1);

20}

21public void anterior () {

22anyadir (1);

23}

24public int diasHasta(Fecha otra) {

25......

26}

27}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Implementacion mas real

Establecemos una fecha inicial el dıa 0, para simplificar el01/01/1601 ¿por que?.

Representamos cada fecha como el numero de dıastranscurridos desde el dıa 0.

Necesitamos metodos de traduccion

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clase Fecha

1package fecha;

23public class Fecha implements Comparable , Cloneable{

4// Constantes para los meses

5public final static int ENERO =0;

6public final static int FEBRERO =1;

7......................................

8public final static int DICIEMBRE =11;

910// Constantes para los ıdas

11public final static int LUNES =0;

12public final static int MARTES =1;

13......................................

14public final static int DOMINGO =6;

15......................................

16......................................

17......................................

1819//ıDas transcurridos desde del 1 de enero de 1601

20private int diasDesdeInicio;

21public Fecha(int dia , int mes , int anyo) {

22compruebaFecha(dia , mes , anyo);

23diasDesdeInicio=calculaDiasDesdeInicio(dia , mes , anyo);

24}

25}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clase Fecha

1public void anyadirDias(int inc) {

2int d=diasDesdeInicio+inc;

3if (d<0) throw new FechaFueraDeRango("ıDa anteror al permitido");

4diasDesdeInicio=d;

5}

67public void siguiente () {

8anyadirDias (1);

9}

10public void anterior () {

11anyadirDias (-1);

12}

1314public boolean equals(Object obj) {

15if (! (obj instanceof Fecha)) return false;

16return diasDesdeInicio ==(( Fecha)obj). diasDesdeInicio;

17}

1819public int compareTo(Object o) {

20if (!(o instanceof Fecha))

21throw new ClassCastException("Se requiere un objeto de clase Fecha");

22return diasDesdeInicio -(( Fecha)o). diasDesdeInicio;

23}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clase Fecha

1private static int calculaDiasDesdeInicio(int elDia , int elMes , int elAnyo ){

2int dias;

34dias=calulaDiasHastaPrimeroDe(elAnyo );

5dias=dias+calculaDiasHastaPrimeroDelMes(elMes ,elAnyo );

6dias=dias+elDia -1; // el 1/1/1601 es el dia 0

7return dias;

8}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clase Fecha

1protected static int diasMes(int mes , int anyo) {

2int[] diasMes ={31, 28, 31,

330, 31, 30,

431, 31, 30,

531, 30, 31};

6int dias = diasMes[mes] + ( (mes== FEBRERO )? anyoBisiesto(anyo ):0 );

7return dias;

8}

9private static int calculaDiasHastaPrimeroDelMes(int mes , int anyo){

10int dias = 0;

11for (int i = 0; i < mes; i++) {

12dias = dias + diasMes(i,anyo);

13}

14return dias;

15}

1617private static int calulaDiasHastaPrimeroDe(int elAnyo ){

18int dias;

19int diff = elAnyo - ANYO_INICIO;

20dias = diff *365; // se anyaden 365 dias por cada ~nao

21dias = dias + diff / 4; //~naadimos 1 por cada umltiplo de 4

22dias = dias - (diff /100); //se quida 1 por cada umltimo de 100

23dias = dias + (diff /400); //se ~naade 1 por cada umltimo de 400

2425return dias;

26}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clase Fecha

1public String toString (){

2FechaTerna f = new FechaTerna(diasDesdeInicio );

3return f.toString ();

4}

5......................................

6......................................

7class FechaTerna {

8private int dia;

9private int mes;

10private int anyo;

11public FechaTerna(int _dia , int _mes , int _anyo ) {

12dia = _dia; mes = _mes; anyo = _anyo;

13}

14public String toString () {

15return dia+"/"+mes+"/"+anyo;

16}

17......................................

18}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clase Fecha

1private static final int grupo1 = 365;

2private static final int grupo4 = 4*365+1;

3private static final int grupo100 = 25*grupo4 -1;

4private static final int grupo400 = 4* grupo100 +1;

56public FechaTerna(int dias) {

7int quedan = dias;

8int grupos400 = quedan / grupo400;

9quedan = quedan % grupo400;

10int grupos100 = quedan / grupo100;

11quedan = quedan % grupo100;

12int grupos4 = quedan / grupo4;

13quedan = quedan % grupo4;

14int grupos1 = quedan / grupo1;

15quedan = quedan % grupo1;

16int anyo = Fecha.ANYO_INICIO +

17grupos1 + 4* grupos4 +

18100* grupos100 + 400* grupos400;

19int mes =0;

20while (quedan >= Fecha.diasMes(mes ,anyo)) {

21quedan = quedan -Fecha.diasMes(mes ,anyo);

22mes ++;

23}

24this.dia = quedan +1;

25this.mes = mes+1;

26this.anyo = anyo;

27}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Terminologıa

clase

Definicion de objetos. Todo objeto pertenece a una clase.

1Fecha f1=new Fecha (30,Fecha.DICIEMBRE ,1999);

2Fecha f2=new Fecha(1,Fecha.MARZO ,2004);

1package fecha;

23public class Fecha implements Comparable{

4....................................................

5....................................................

6}

78class FechaTerna {

9....................................................

10....................................................

11}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Terminologıa

constructor

Procedimiento que construye objetos

1public Fecha(int dia , int mes , int anyo) {

2compruebaFecha(dia , mes , anyo);

3diasDesdeInicio=calculaDiasDesdeInicio(dia , mes , anyo);

4}

1public FechaTerna(int _dia , int _mes , int _anyo ) {

2dia = _dia; mes = _mes; anyo = _anyo;

3}

En Java los constructores tienen el mismo nombre que la clase.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Terminologıa

atributo

Variable de un objeto

1private int diasDesdeInicio;

1private int dia;

2private int mes;

3private int anyo;

Normalmente los atributos son privados al objeto: desde fuera delobjeto no deben ser accesibles, se debe acceder a ellos a traves demetodos de acceso.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Terminologıa

metodos

1while (f1.compareTo(f2)<=0) {

2System.out.println(f1.diaSemana ()+":"+f1);

3f1.siguiente ();

4}

5.....................................

6public int compareTo(Object o) {

7if (!(o instanceof Fecha))

8throw new ClassCastException("Se requiere un objeto de clase Fecha");

9return diasDesdeInicio -(( Fecha)o). diasDesdeInicio;

10}

11..........................................

12public void anyadirDias(int inc) {

13int d=diasDesdeInicio+inc;

14if (d<0) throw new FechaFueraDeRango("ıDa anteror al permitido");

15diasDesdeInicio=d;

16}

17public void siguiente () {

18anyadirDias (1);

19}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Restriccion de permisos

Los objetos pertenecen a clases, las clases se agrupan en paquetes.Conviene restringir el acceso a los elementos del objeto

public desde cualquier clase (independientemente delpaquete).

protected desde clases que estan el mismo paquete.

private solo desde la misma clase.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Referencias

Tanto las variables de objetos como los arrays son referencias

1int n=4576;

2int [] v={45 ,36 ,56 ,25};

3Fecha f = new Fecha(3,Fecha.DICIEMBRE ,2007);

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Referencias, efecto lateral

1int [] u=v;

2u[0]=56; // v[0]=56

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Referencias, efecto lateral

1Fecha f1 = f;

2f1.siguiente ();

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Referencias, objeros como parametros

1void avanza(Fecha fecha) {

2fecha.siguiente ();

3}

45avanza(f);

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Referencias, cambiar de referencia

1f = new Fecha(31,Fecha.DICIEMBRE ,2007);

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Referencias, generacion de basura

1f1 = new Fecha(8,Fecha.OCTUBRE ,2007);

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Referencias

El contenido de las variables de objetos y arrays son referencias alos objetos y arrays.

Si dos variables hacen referencia al mismo objeto lasmodificaciones tienen efectos laterales

Los parametros de los procedimientos son por valor: Lasreferencias no pueden cambiar, pero el contenido de losobjetos sı.

Cuando un objeto no tiene referencias es considerado basura,que debe se recogida por el recolector de basura (garbagecollector). En Java existe un recolector de basura automatico.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Referencias

El contenido de las variables de objetos y arrays son referencias alos objetos y arrays.

Si dos variables hacen referencia al mismo objeto lasmodificaciones tienen efectos laterales

Los parametros de los procedimientos son por valor: Lasreferencias no pueden cambiar, pero el contenido de losobjetos sı.

Cuando un objeto no tiene referencias es considerado basura,que debe se recogida por el recolector de basura (garbagecollector). En Java existe un recolector de basura automatico.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Referencias

El contenido de las variables de objetos y arrays son referencias alos objetos y arrays.

Si dos variables hacen referencia al mismo objeto lasmodificaciones tienen efectos laterales

Los parametros de los procedimientos son por valor: Lasreferencias no pueden cambiar, pero el contenido de losobjetos sı.

Cuando un objeto no tiene referencias es considerado basura,que debe se recogida por el recolector de basura (garbagecollector). En Java existe un recolector de basura automatico.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Referencias

El contenido de las variables de objetos y arrays son referencias alos objetos y arrays.

Si dos variables hacen referencia al mismo objeto lasmodificaciones tienen efectos laterales

Los parametros de los procedimientos son por valor: Lasreferencias no pueden cambiar, pero el contenido de losobjetos sı.

Cuando un objeto no tiene referencias es considerado basura,que debe se recogida por el recolector de basura (garbagecollector). En Java existe un recolector de basura automatico.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Calificativo static

Algo estatico pertenece a la clase. Es comun a todos los objetos dela clase.

Variables comunes a todos los objetos.

Metodos que no hacen referencia a atributos dinamicos (noestaticos).

Permiten mejor aprovechamiento de los recursos.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Calificativo final

Se anade las partes que no se pueden cambiar

Variables constantes.

Metodos que no se pueden reescribir en la herencia.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Referencia null

1Fecha f1; // Referencia no definida

2Fecha f2=null; // Referencia a objeto nulo.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Igualdad de referencias

Dos referencias son iguales si y solo si apuntan al mismo objeto

1boolean b;

2int [] u = v;

3b = u==v; // b es true

4int [] w = new int [4];

5w[0]=56; w[1]=36; w[2]=56; w[3]=25;

6b = u==w; // b es false

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Igualdad de referencias

1public class Fecha {

2...........

3public Fecha clone() {

4Fecha fecha = new Fecha ();

5fecha.diasDesdeInicio = this.diasDesdeInicio;

6return fecha;

7}

8..........

9}

10............

11Fecha f = new Fecha(1,ENERO ,1956);

12Fecha f1 = f; // referencias iguales;

13Fecha f2 = f.clone (); // referencias distintas a objeros iguales.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Igualdad de referencias

1boolean b;

2b = f==f1; // b es true;

3b = f==f2; // b es false;

4b = f1==f2; // b es false;

1boolean b;

2b = f.equals(f1); // b es true;

3b = f.equals(f2); // b es true;

4b = f1.equals(f2); // b es true;

5b = f1.equals(f); // b es true;

6b = f2.equals(f1); // b es true;

7b = f2.equals(f); // b es true;

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Igualdad de referencias

1f.siguiente ();

2b = f==f1; // b es true;

3b = f==f2; // b es false;

4b = f1==f2; // b es false;

1boolean b;

2b = f.equals(f1); // b es true;

3b = f.equals(f2); // b es false;

4b = f1.equals(f2); // b es false;

5b = f1.equals(f); // b es true;

6b = f2.equals(f1); // b es false;

7b = f2.equals(f); // b es false;

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Herencia: relacion es un I

Seres materiales

Seres inertes

Coches

Renault

El coche de Flora

Seres vivos

Plantas

Flores

El geranio de juan

Animales

Insectos Peces Mamıferos

Perros

El caniche de juan

Humanos

Vendedores

Floristas

Flora

Profesores

Enrollados

Juan

Capullos

Luis

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Herencia: relacion es un II

Recorrido de la jerarquıa

Segun se recorre la jerarquıa los elementos que estan por debajoheredan caracterısticas de los elementos superiores:

Todos los objetos tienen masa y volumen.

Todos los seres vivos nacen, crecen, etc. . . .

Todos los mamıferos maman cuando son pequenos, etc. . . .

Todos los perros ladran.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Herencia: relacion es un III

Por tanto el perro de juan

tienen masa y volumen.

nace, crece, etc. . . .

mamo cuando fue pequeno, etc. . . .

ladra.

Caracterısticas heredadas

Existen caracterısticas que no cambian (peso y volumen).

Caracterıticas que se anaden.

Caracterısticas que se modifican, se refinan o cambian.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Herencia multiple

Padre Director de banco

Director de banco con hijos

Pepe

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Herencia en Java

Interfaces.

Clases abstractas.

Extension de clases.

Implementacion de interfaces.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clase Object

1public class Patata {

2.......

3.......

4.......

5}

1public class Patata extends Object {

2.......

3.......

4.......

5}

Clase Object

La clase Object es la superclase de todas las clases en Java.Dispone, entre otros, de los metodos:

boolean equals(Object obj)

String toString()

Estos metodos se deben sobreescribir en las subclases.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clase Fecha

1public boolean equals(Object obj) {

2if (! (obj instanceof Fecha)) return false;

3return diasDesdeInicio ==(( Fecha)obj). diasDesdeInicio;

4}

1public String toString (){

2FechaTerna f = new FechaTerna(diasDesdeInicio );

3return f.toString ();

4}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Extension de clases

Extension de clase

1package fecha;

2public class FechaFueraDeRango extends RuntimeException {

3public FechaFueraDeRango(String s) {

4super(s);

5}

6}

Extension de interfaz

1public class Fecha implements Comparable{

2.........

3.........

4.........

5}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clases, clases abstracas e interfaces

Clase normal: todalmente definida, puede haber objetos de esaclase.

Clase abstracta: parcialmente definida, puede tener algun atributo,metodos totalmente definidos y metodos nodefinidos.

Interfaz: solo define algun metodo, pero sin implementar.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clase Abstracta

1public abstract class Patata{

2private int atributo;

3public abstract modifica(int x);

4}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Interfaz

El interfaz Comparable del API de Java debe ser de la forma

1package java.lang;

2public interface Comparable {

3public int compareTo(Object o);

4}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Herencia multiple

1public class Patata {

2public int x;

3public void incrementa (){

4x=x+1;

5}

6}

1public class Tomate {

2public int x;

3public void incrementa (){

4x=x+10;

5}

6}

1public class Lechuga extends Patata , Tomate {

2public int y;

3}

4......

5......

6Lechuga lechuga = new Lechuga ();

7lechuga.incrementa (); // incrementa x = x+1 o x = x+10 ?

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Herencia multiple en Java

En Java existe version restringida de herencia

Se puede extender solo 1 clase.

Se puende implementar mas de 1 interfaz.

1public class Trazador extends Frame

2implements WindowListener ,ObjetoComparable {

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Objeto super

Invocacion a la superclase

1public class Estudiante{

2private String nombre;

3public Estudiante(String nombre) {

4this.nombre = nombre;

5}

6public void estudia(double tiempo ){....}

7}

1public class EstudiantePerezoso extends Estudiante{

2public EstudiantePerezoso(String nombre) {

3super(nombre );

4}

5public void trabaja(double tiempo ){

6super.estudia(tiempo /3);

7descansa(tiempo /3);

8super.estudia(tiempo /3);

9}

10}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Objeto this

1public class Fecha {

2....................

3public Fecha(int dia , int mes , int anyo) {

4compruebaFecha(dia , mes , anyo);

5diasDesdeInicio=calculaDiasDesdeInicio(dia , mes , anyo);

6}

78public Fecha () {

9this (1 ,1 ,1998);

10}

11....................

12}

1class FechaTerna {

2private int dia;

3private int mes;

4private int anyo;

5......................

6public FechaTerna(int dias) {

7this.dia = quedan +1;

8this.mes = mes+1;

9this.anyo = anyo;

10}

11........

12}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Figuras planas

1package geometria.figurasPlanas;

2public interface FiguraPlana{

3public boolean intersecaCon(FiguraPlana otra);

4public double distancia(Punto p);

5}

1package geometria.figurasPlanas;

2public abstract class Superficie implements FiguraPlana{

3public abstract boolean estaDentro(Punto P);

4public abstract double superficie ();

5}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Puntos

1public class Punto implements FiguraPlana{

2public Punto(double x, double y){

3posX=x; posY=y;

4}

5public double distancia(Punto otro){

6Vector v=new Vector(this ,otro);

7return v.modulo ();

8}

9public boolean equals(Object o){

10if (o instanceof Punto) {

11Punto otro = (Punto)o;

12return (this.posX==otro.posX) && (this.posY==otro.posY);

13}

14else return false;

15}

16public boolean intersecaCon(FiguraPlana otra){

17if (otra instanceof Punto) {

18return this.equals(otra);

19}

20else {

21return otra.intersecaCon(this);

22}

23}

24}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Metodo equals

Definido en Object, todos los objetos son subclase suya: todostienen definido el metodo equals.

1public boolean equals(Object o){

2if (o instanceof Punto) {

3Punto otro = (Punto)o;

4return (this.posX==otro.posX) && (this.posY==otro.posY);

5}

6else return false;

7}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Interfaces Comparable y Cloneable

1public class Fecha implements Comparable , Cloneable{

2................................

3public int compareTo(Object o) {

4if (!(o instanceof Fecha))

5throw new ClassCastException("Se requiere un objeto de clase fecha.Fecha."+

6"He recibido algo de clase "+o.getClass (). getName ());

7return diasDesdeInicio -(( Fecha)o). diasDesdeInicio;

8}

9public Fecha clone() {

10Fecha fecha = new Fecha ();

11fecha.diasDesdeInicio = this.diasDesdeInicio;

12return fecha;

13}

14.......................

15}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Interfaz Comparable

1package java.lang;

2public interface Comparable <T> {

3public int compareTo(T o);

4}

Se usa para:

ordenacion.

colecciones ordenadas.

1public class Fecha implements Comparable <Fecha >, Cloneable{

2.............

3.............

4public int compareTo(Fecha o) {

5return diasDesdeInicio -o.diasDesdeInicio;

6}

7}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Interfaz Comparable

Autoriza el uso del metodo clone de la clase object.

Copia los atributos, no hace un clone de los atributos.

Si se quiere hacer publico hace falta reescribirlo.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Estatico y dinamico

Estatico

Conocido en tiempo de compilacion.

Dinamico

Lo que se conoce en tiempo de ejecucion.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Tipo estatico

1public class Fecha {

2....................

3public boolean equals(Object obj) {

4..............

5..............

6}

7....................

8}

¿Que sabemos de obj?

El objeto al que hace referencia obj pertenece a un subclase deObject.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Tipo dinamico

1public class Fecha {

2....................

3public boolean equals(Object obj) {

4..............

5..............

6}

7....................

8Fecha f1 = new Fecha (31,JULIO ,2006);

9Fecha f2 = new Fecha (31,JULIO ,2005);

10boolean b = f1.equals(f2);

11........

12}

¿Que sabemos de obj?

f2 es de clase Fecha. Cuando se hace la llamada obj va a ser unareferencia a un objeto de clase Fecha.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Calificativo static

Los metodos y atributos marcados como static

son inherentes a la clase,

todos los objetos los comparten ,

se pueden invocar directamente desde la clase.

1public class Fecha {

2....................

3....................

4public final static int ENERO =0;

5.................

6}

7........

8Fecha f = new Fecha(1,Fecha.ENERO ,2005);

Si un atributo es estatico

Se comparte por todos los objetos de la clase

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Calificativo static

1public class Fecha {

2....................

3....................

4private static int calculaDiasDesdeInicio(int elDia , int elMes , int elAnyo ){

5int dias;

67dias=calulaDiasHastaPrimeroDe(elAnyo );

8dias=dias+calculaDiasHastaPrimeroDelMes(elMes ,elAnyo );

9dias=dias+elDia -1; // el 1/1/1601 es el dia 0

10return dias;

11}

1213....................

1415}

Si un metodo es estatico

Se gana en eficiencia (tiempo/memoria)

No puede hacer referencia a atributos no estaticos.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Permisos de acceso

Los metodos y atributos de una clase pueden ser

public: accesibles desde cualquier clase.

protected: accesibles desde clases que esten en el mismopaquete o desde subclases.

private solo es accesible desde la propia clase.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

¿Que es una excepcion? I

Excepcion

Es un evento que ocurre durante la ejecucion de un programa einterrumpe su ejecucion normal

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

¿Que es una excepcion? II

Cuando se produce una excepcion se puede

Capturarla y arreglar la situacion

Transmitir el error al procedimiento llamante

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Capturar/Transmitir una excepcion

1public static int leeInt () throws IOException {

2try {

3return Integer.parseInt(teclado.readLine ());

4}

5catch (NumberFormatException e) {

6System.out.println("uNmero incorrecto , admelo otra vez.");

7return leeInt ();

8}

9}

El metodo readLine puede lanzar java.io.IOException

El metodo parseInt puede lanzarjava.lang.NumberFormatException

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Instruccion try/catch/finally

1try {

2codigo3} catch (Excepcion1e1) {

4codigo15} catch (Excepcion2e2) {

6codigo27}

8..........

9} finally {

1011}

Intenta ejecutar el codigo.

Si se produce una excepcion de clase Excepcionk se ejecuta elcodigo codigok

El codigo en finally se ejecuta al final en cualquier caso.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Instruccion try/catch/finally

1public void writeList () {

2PrintWriter out = null;

3try {

4System.out.println("Entering try statement");

5out = new PrintWriter(

6new FileWriter("OutFile.txt"));

7for (int i = 0; i < SIZE; i++)

8out.println("Value at: " + i + " = "

9+ vector.elementAt(i));

10} catch (ArrayIndexOutOfBoundsException e) {

11System.err.println("Caught "

12+ "ArrayIndexOutOfBoundsException: "

13+ e.getMessage ());

14} catch (IOException e) {

15System.err.println("Caught IOException: "

16+ e.getMessage ());

17} finally {

18if (out != null) {

19System.out.println("Closing PrintWriter");

20out.close ();

2122}

23else {

24System.out.println("PrintWriter not open");

25}

26}

27}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Declarar/lanzar excepciones

Requisito captura o declarar

Si una instruccion en un metodo puede lanzar una excepcion sedebe

Capturar con instruccion catch

El metodo debe declarar (throws) que la puede lanzar.

Excepciones normales deben cumplir el requisito

Errores errores externos (fallos de hardaware). No necesitancumplir el requisito.

Excepciones Runtime errores internos que se debe a fallos, usosincorrectos de una API. No necesitan cumplir elrequisito.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Lanzar excepciones

1public void anyadirDias(int inc) {

2int d=diasDesdeInicio+inc;

3if (d<0) throw new FechaFueraDeRango("ıDa anteror al permitido");

4diasDesdeInicio=d;

5}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Escribiendo excepciones

1package fecha;

2public class FechaFueraDeRango extends RuntimeException {

3public FechaFueraDeRango(String s) {

4super(s);

5}

6}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

¿Para que?

1private static List leePuntos(String fichero)

2throws FileNotFoundException , IOException{

34BufferedReader lector = new BufferedReader(new FileReader(fichero ));

5List listaPuntos=new LinkedList ();

6String datos=lector.readLine ();

7while (datos!=null){

8Punto p=new Punto(datos);

9listaPuntos.add(p);

10datos=lector.readLine ();

11}

12return listaPuntos;

13}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Evitar conversiones de tipo

1private static void analizaListaPuntos(List c){

2Iterator itr=c.iterator ();

3int i=1;

4while(itr.hasNext ()){

5Punto p = (Punto)itr.next ();

6...........................

7}

8}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Evitar conversiones de ejecucion

1Lista lista = leePuntos(fichero );

2lista.add(new Recta(new Punto(0,0), new Punto (1 ,0)));

3analizaPuntos(lista);

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Definiendo clases genericas

1public interface List <E>{

2void add(E x);

3Iterator <E> iterator ();

4}

56public interface Iterator <E>{

7E next ();

8boolean hasNext ();

9}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Subclases

1List <Punto > ls = new ArrayList <Punto >();

2List <FiguraPlana > lo = ls; // Es admisible?

1lo.add(new Recta(A,B)); // ısera legal.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Comodines

1void muestra(Collection <Object > c) {

2for (Object e : c) {

3System.out.println(e);

4}

¿Puedo pasarle algo de tipo Lista<FiguraPlana>?

1void muestra(Collection <?> c) {

2for (Object e : c) {

3System.out.println(e);

4}

Es una coleccion de tipo desconocido, pero al menos deben serobjetos.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Comodines Acotados

1private static void muestra(List <? extends FiguraPlana > c){

2Iterator itr=c.iterator ();

3int i=1;

4while(itr.hasNext ()){

5System.out.format("Elemento %d "+itr.next(),i);

6System.out.println ();

7i++;

8}

9}

1List <FiguraPlana > listaFiguras=leeFiguras(nombreFiguras );

2List <Punto > listaPuntos=leePuntos(nombrePuntos );

3System.out.println("Puntos:");

4muestra(listaPuntos );

5System.out.println("Figuras:");

6muestra(listaFiguras );

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Metodos genericos

1void insterta(Collection <?> c, FiguraPlana [] figuras) {

2for (FiguraPlana f : figuras) {

3c.add(f); // Ilegal , no se el tipo base de figura.

4}

5}

1void insterta(Collection <? extends FiguraPlana > c, FiguraPlana [] figuras) {

2for (FiguraPlana f : figuras) {

3c.add(f); // Ilegal , no se el tipo base de figura.

4}

5}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

1private static <Fig extends FiguraPlana > void insterta(Collection <Fig > c,

2Fig [] figuras) {

3for (Fig f : figuras) {

4c.add(f);

5}

6}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

1interface Sink <T> {

2flush(T t);

3}

4public static <T> T writeAll(Collection <T> coll , Sink <T> snk) {

5T last;

6for (T t : coll) {

7last = t;

8snk.flush(last);

9}

10return last;

11}

1213.....................

1415Sink <Object > s;

16Collection <String > cs;

17String str = writeAll(cs, s); // Ilegal.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

1public static <T> T writeAll(Collection <? extends T>, Sink <T>) {

2...

3}

4...

5String str = writeAll(cs, s); // Devuelve algo de clase Object

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

1public static <T> T writeAll(Collection <T>, Sink <? super T>) {

2...

3}

4...

5String str = writeAll(cs, s); // Devuelve algo de clase Object

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Flujos de entrada/salida

Stream de entrada

Stream de entrada

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Byte Streams

1import java.io.FileInputStream;

2import java.io.FileOutputStream;

3import java.io.IOException;

45public class CopiaBytes {

6public static void main(String [] args) throws IOException {

7FileInputStream in = null;

8FileOutputStream out = null;

9try {

10in = new FileInputStream(args [0]);

11out = new FileOutputStream(args [1]);

12int c;

1314while ((c = in.read ()) != -1) {

15out.write(c);

16}

1718} finally {

19if (in != null) {

20in.close ();

21}

22if (out != null) {

23out.close ();

24}

25}

26}

27}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Llamada desde la lınea de comandos

1luis@casa :~/ docencia/Java06 -07$ java CopiaBytes quijote.txt quijote2.txt

1public static void main(String [] args) throws IOException {

2.............

3}

45args.length () 2

6args [0] "quijote.txt"

7args [1] "quijote2.txt"

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Streams caracteres

1import java.io.FileReader;

2import java.io.FileWriter;

3import java.io.IOException;

45public class CopiaCaracteres {

6public static void main(String [] args) throws IOException {

7FileReader inputStream = null;

8FileWriter outputStream = null;

910try {

11inputStream = new FileReader(args [0]);

12outputStream = new FileWriter(args [1]);

1314int c = inputStream.read ();

15while (c!= -1) {

16outputStream.write(c);

17c = inputStream.read ();

18}

19} finally {

20if (inputStream != null) {

21inputStream.close ();

22}

23if (outputStream != null) {

24outputStream.close ();

25}

26}

27}

28}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Streams Lıneas

1import java.io.FileReader;

2import java.io.FileWriter;

3import java.io.BufferedReader;

4import java.io.PrintWriter;

5import java.io.IOException;

67public class CopiaLineas {

8public static void main(String [] args) throws IOException {

9BufferedReader inputStream = null;

10PrintWriter outputStream = null;

11try {

12inputStream = new BufferedReader(new FileReader(args [0]));

13outputStream = new PrintWriter(new FileWriter(args [1]));

1415String l = inputStream.readLine ();

16while ( l!= null ) {

17outputStream.println(l);

18l = inputStream.readLine ();

19}

20} finally {

21if (inputStream != null)

22inputStream.close ();

23if (outputStream != null)

24outputStream.close ();

25}

26}

27}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Buffering

1inputStream =

2new BufferedReader(new FileReader(args [0]));

3outputStream =

4new BufferedWriter(new FileWriter(args [1]));

5.........................

6.........................

7outputStream.flush (); // vaciamos el buffer de escritura

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Leyendo cosas que no son caracteres

Metodos Integer.parseInt(java.lang.String),Double.parseDouble(java.lang.String)

Clase java.util.Scanner

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

clase Scanner

1import java.io.*;

2import java.util.Scanner;

34public class Escaner {

5public static void main(String [] args) throws IOException {

6Scanner s = null;

7try {

8s = new Scanner(new BufferedReader(new FileReader(args [0])));

910while (s.hasNext ()) {

11System.out.println(s.next ());

12}

13} finally {

14if (s != null) {

15s.close ();

16}

17}

18}

19}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

clase Scanner

1import java.io.*;

2import java.util.Scanner;

34public class SumaScan {

5public static void main(String [] args) throws IOException {

6Scanner s = null;

7try {

8s = new Scanner(new BufferedReader(new FileReader(args [0])));

9double suma =0;

10while (s.hasNext ()) {

11if (s.hasNextDouble ()) {

12suma += s.nextDouble ();

13} else {

14String d = s.next ();

15suma += Double.parseDouble(d);

16System.out.println("Error:"+d);

17}

18}

19System.out.format("Suma: %s\n",suma);

20} finally {

21if (s != null) {

22s.close ();

23}

24}

25}

26}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

clase Scanner

Fichero numeros.txt

11.994.986 ,34

22.000.000 ,00

33.000.000 ,00

43000000

510.11

1~/Java$ export CLASSPATH =./ classes/

2~/Java$ /opt/java/jdk1 .5/bin/java SumaScan numeros.txt

3Error :10.11

4Suma: 9994996.45

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Construyendo puntos

1public class Punto implements FiguraPlana{

2private double posX ,posY;

3public Punto(String s){

4Scanner scan = new Scanner(s);

5scan.useLocale(Locale.US);

6posX=scan.nextDouble ();

7posY=scan.nextDouble ();

8}

9................

10................

11}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Construyendo puntos

1public class Punto implements FiguraPlana{

2private double posX ,posY;

3public Punto (String s){

4Scanner scan = new Scanner(s);

5posX=Double.parseDouble(scan.next ());

6posY=Double.parseDouble(scan.next ());

7}

8................

9................

10}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Fichero de figuras

Fichero figuras.txt

1circulo

25 5 2

3segmento

43 4 8 4

5recta

63 5 3 6

7recta

80 1 1 1

9circulo

100 2 0.5

11recta

120 2 4 5

13paralelogramo

140 4 2 2 -2 2

15paralelogramo

160 0 2 2 -2 2

17paralelogramo

182 2 0 4 0 0

19paralelogramo

200 0 2 2 4 0

21punto

222 3

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Leyendo puntos

Fichero puntos.txt

14 5

27 3

31 1

40.5 1

51 0.5

67 4

70 2

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Leyendo

1public class PruebaGeometriaI{

2private static void leeFiguras(String fichero) {..}

34private static void leePuntos(String fichero) {..}

56public static void main(String args []) throws IOException ,FileNotFoundException{

7String nombrePuntos=args [0];

8String nombreFiguras=args [1];

9System.out.println("Puntos:");

10leePuntos(nombrePuntos );

11System.out.println("Figuras:");

12leeFiguras(nombreFiguras );

13}

14}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Leyendo puntos

1private static void leePuntos(String fichero)

2throws FileNotFoundException , IOException{

34BufferedReader lector = new BufferedReader(new FileReader(fichero ));

5String datos=lector.readLine ();

6while (datos!=null){

7Punto p=new Punto(datos);

8System.out.println(p);

9datos=lector.readLine ();

10}

11}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Leyendo figuras

1private static FiguraPlana construyeFigura(String tipoFigura , String datos ){..}

23private static void leeFiguras(String fichero)

4throws FileNotFoundException , IOException{

56BufferedReader lector = new BufferedReader(new FileReader(fichero ));

7String tipoFigura=lector.readLine ();

8int i=1;

9while (tipoFigura !=null){

10String datos=lector.readLine ();

11FiguraPlana figura=construyeFigura(tipoFigura ,datos );

12System.out.println(figura );

13tipoFigura=lector.readLine ();

14}

15}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Construyendo figuras

1private static FiguraPlana construyeFigura(String tipoFigura , String datos ){

2FiguraPlana figura;

3if (tipoFigura.equals("punto")) figura=new Punto(datos);

4else if (tipoFigura.equals("recta")) figura=new Recta(datos);

5else if (tipoFigura.equals("segmento")) figura=new Segmento(datos);

6else if (tipoFigura.equals("paralelogramo")) figura=new Paralelogramo(datos );

7else if (tipoFigura.equals("circulo")) figura=new Circulo(datos);

8else throw new RuntimeException("Figura no implementada:"+tipoFigura+":");

9return figura;

10}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Invocacion desde la lınea de comandos

Variable de entorno CLASSPATH

Debe apuntar al directorio raız donde esten los ficheros .class

1~/Java$ ls

2build.xml figuras.txt prj.el quijote3.txt src

3classes lib puntos.txt quijote4.txt

4CVS numeros.txt quijote2.txt quijote.txt

5~/Java$ echo $CLASSPATH

67~/Java$ export CLASSPATH =./ classes

8~Java$ echo $CLASSPATH

9./ classes/

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Invocacion desde la lınea de comandos

Variable de entorno JAVA HOME

Debe apuntar al directorio donde esta la instalacion de Java.

1~/Java$ ls ls -ald /opt/java/jdk1.5

2lrwxrwxrwx 1 root root 11 2006 -07 -18 07:53 /opt/java/jdk1.5 -> jdk1 .5.0 _07

3~/Java$ echo $JAVA_HOME

4/opt/java/jdk

5~/Java$ export JAVA_HOME =/opt/jdk/jdk1.5

6~/Java$ echo $JAVA_HOME

7/opt/jdk/jdk1.5

8~/Java$ $JAVA_HOME/bin/java PruebaGeometriaI puntos.txt figuras.txt

9Puntos:

10Punto: (4.0 ,5.0)

11..............

12Punto: (0.0 ,2.0)

13Figuras:ı

14Crculo:Punto: (5.0 ,5.0):2.0*

15Segmento: Punto: (3.0 ,4.0) - Punto: (8.0 ,4.0)

16Recta: 1.0*X + 0.0*Y = 3.0

17.................................ı

18Paraleppedo*Punto: (2.0 ,2.0): Punto: (0.0 ,4.0): Punto: ( -2.0 ,2.0): Punto: (0.0 ,0.0)*ı

19Paraleppedo*Punto: (0.0 ,0.0): Punto: (2.0 ,2.0): Punto: (6.0 ,2.0): Punto: (4.0 ,0.0)*

20Punto: (2.0 ,3.0)

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Jerarquıa de clases de colecciones

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Colecciones

Collection Grupo de objetos.

Set Concepto matematico. El orden no importa, no hayrepeticiones. SortedSet.

List El orden es importante, admite repeticiones.

Map Concepto de funcion matematica. SortedMap

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Jerarquıa de clases: Map

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Interfaz Collection

1public interface Collection <E> extends Iterable <E> {

2................................

3boolean add(E element );

4Iterator <E> iterator ();

5..........................

6Object [] toArray ();

7<T> T[] toArray(T[] a);

8}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Interface Iterador

1public Interface Iterator {

2public boolean hasNext ();

3public Object next ();

4void remove ();

5}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Uso de listas

1private static List leePuntos(String fichero)

2throws FileNotFoundException , IOException{

34BufferedReader lector = new BufferedReader(new FileReader(fichero ));

5List listaPuntos=new LinkedList ();

6String datos=lector.readLine ();

7while (datos!=null){

8Punto p=new Punto(datos);

9listaPuntos.add(p);

10datos=lector.readLine ();

11}

12return listaPuntos;

13}

1private static void analizaListaPuntos(List c){

2Iterator itr=c.iterator ();

3int i=1;

4while(itr.hasNext ()){

5Punto p = (Punto)itr.next ();

6...........................

7}

8}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Errores en tiempo de ejecucion

¿Que pasarıa si anadiera un objeto que no sea de clase Punto?

1Lista lista = leePuntos(fichero );

2lista.add(new Recta(new Punto(0,0), new Punto (1 ,0)));

3analizaPuntos(lista);

La lınea

1Punto p = (Punto)itr.next ();

lanzarıa un java.lang.ClassCastException.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clases genericas

1public Interface List <E> {

2......

3public Iterator <E> iterator ()

4.....

5}

1public Interface Iterator <E> {

2public boolean hasNext ();

3public E next ();

4void remove ();

5}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Uso de listas con genericos

1private static List <Punto > leePuntos(String fichero)

2throws FileNotFoundException , IOException{

34BufferedReader lector = new BufferedReader(new FileReader(fichero ));

5List <Punto > listaPuntos=new LinkedList <Punto >();

6String datos=lector.readLine ();

7while (datos!=null){

8Punto p=new Punto(datos);

9listaPuntos.add(p);

10datos=lector.readLine ();

11}

12return listaPuntos;

13}

1private static void analizaListaPuntos(List <Punto > c){

2Iterator <Punto > itr=c.iterator ();

3int i=1;

4while(itr.hasNext ()){

5Punto p = itr.next ();

6...........................

7}

8}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Errores en tiempo de compilacion

¿Que pasarıa si anadiera un objeto que no sea de clase Punto?

1Lista <Punto > lista = leePuntos(fichero );

2lista.add(new Recta(new Punto(0,0), new Punto (1 ,0)));

No compila, la lista es de puntos y puedo anadir rectas.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Interfaz Collection

1public interface Collection <E> extends Iterable <E> {

2int size ();

3boolean isEmpty ();

4boolean contains(Object element );

5boolean add(E element );

6boolean remove(Object element );

7Iterator <E> iterator ();

89boolean containsAll(Collection <?> c);

10boolean addAll(Collection <? extends E> c);

11boolean removeAll(Collection <?> c);

12boolean retainAll(Collection <?> c);

13void clear ();

1415Object [] toArray ();

16<T> T[] toArray(T[] a);

17}

Los metodos contains y remove comparan los objetos segun elmetodo equals.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Interfaz Set

No anade metodos.

No puede haber elementos repetidos.

Subclases

HashSet La mejor en eficiencia, los iteradores no garantizan elorden. Metodo hashCode en la clase Object.

TreeSet Implementacion con arboles roji-negros. Lositeradores recorren el conjunto segun el ordenestablecido por sus elementos

LinkedHashSet Otra implementacion de las tablas hash.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Metodo equals

Definido en la clase Object. Hay que sobreescribirlo si se va a usaruna clase como elemento de una coleccion.

Debe ser una relacion de orden: o1!=null, o2!=null yo3!=null

Reflexivo o1.equals(o1)Simetrico o1.equals(e2)==o2.equals(e1)Si o1.equals(o2) y o2.equals(o3) entonceso1.equals(o3)

Si o!=null entonces o.equals(null)==false.

Debe ser consistente: distintas invocaciones a lo largo de unprograma debe dar el mismo resultado si no cambian el valorde los objetos.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Metodo hashCode

Definido en la clase Object. Hay que sobreescribirlo si se va a usaruna clase como elemento de una coleccion tipo hash.

Debe ser consistente.

Si o1.equals(o2), entonces o1.hashCode()=o2.hashCode.

No debe ser necesariamente inyectiva, dos objetos distintospueden tener el mismo valor.

Deberıa distribuir uniformemente los objetos.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Metodo CompareTo

1public class Fecha implements Comparable <Fecha >, Cloneable {

2................

3public int compareTo(Fecha f) {

4....

5}

6..........

7}

Implementa relacion de orden

x .compareTo

< 0 si x < y= 0 si x = y> 0 si x > y

Debe ser implementada para tener colecciones ordenadas.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Metodo CompareTo

sgn(x.compareTo(y)) == -sgn(y.compareTo(x)).

Debe ser reflexiva antisimetrica y transitiva, para objetos nonulos

si x.compareTo(x)==0.si x.compareTo(y)<=0 y y.compareTo(x)<=0 entoncesx.compareTo(z)==0 y z.compareTo(x)==0.si x.compareTo(y)<=0 y y.compareTo(z)<=0 entoncesx.compareTo(z)<=0.

Debe ser consistente con el resto de los objetos. Six.compareTo(y)==0 entonces para todo z entoncessgn(x.compareTo(z)) == sgn(y.compareTo(z)).

es conveniente que sea consistente con equals: x.equals(y)sii x.compareTo(y)==0

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

PrColeccion

1public class PrColeccion {

2public static void lee(String nombre , Collection <String > conjunto)

3throws IOException {

4BufferedReader reader = null;

5try {

6reader = new BufferedReader(new FileReader(nombre ));

7String linea = reader.readLine ();

8while (linea!=null) {

9conjunto.add(linea);

10linea = reader.readLine ();

11}

12} finally {

13if (reader !=null) {

14reader.close ();

15}

16}

17}

18public static void muestra(Collection <String > conjunto) {

19for (String s : conjunto) {

20System.out.println(s);

21}

2223}

24}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

PrConjunto

1public class PrConjunto {

2public static void main(String [] args) throws Exception{

3String tipo = args [1];

4Set <String > conjunto = null;

5if (tipo.equals("hash")) {

6conjunto = new HashSet <String >();

7} else if (tipo.equals("tree")) {

8// Collator c = Collator. getInstance (new Locale ("es","ES "));

9// conjunto = new TreeSet <String >(c);

10conjunto = new TreeSet <String >();

11} else {

12throw new RuntimeException("Clase no implementada: "+tipo);

13}

1415PrColeccion.lee(args[0], conjunto );

16PrColeccion.muestra(conjunto );

17}

18}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Lista de nombres

Fichero nombres.txt

1Luis

2Almudena

3JavierA

4lvaro

5Isabel

6Marisa

7Natalia

8Albertoe

9Andrs

10Andres

11Andros

12Luis

13Almudena

14JavierA

15lvaro

16Isabel

17Marisa

18Natalia

19Albertoe

20Andrs

21Andres

22Andros

23Luis

24Almudena

25JavierA

26lvaro

27IsabelLuis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Ejecucion de conjuntos

1~/Java$ $JAVA_HOME/bin/java PrConjunto nombres.txt tree

2Alberto

3Almudena

4Andres

5Androse

6Andrs

7Isabel

8Javier

9Luis

10Marisa

11NataliaA

12lvaro

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Iteradores

Un iterador es un objeto que sirve para recorrer una estructura

1public interface Iterator <E> {

2boolean hasNext ();

3E next ();

4}

1for (Iterator <String > it = coleccion.iterator (); it.hasNext (); )

2String s = s.next ();

3System.out.println ();

4}

1for (String s : coleccion) {

2System.out.println(s);

3}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Listas

El orden de los objetos es importante, puede haber repeticiones deobjetos.

1public interface List <E> extends Collection <E> {

2// Acceso posicional

3E get(int index );

4E set(int index , E element ); // optional

5boolean add(E element ); // optional

6void add(int index , E element ); // optional

7E remove(int index); // optional

8boolean addAll(int index ,

9Collection <? extends E> c); // optional

1011// uBsquedas

12int indexOf(Object o);

13int lastIndexOf(Object o);

1415// Iteradores de listas

16ListIterator <E> listIterator ();

17ListIterator <E> listIterator(int index);

1819// Sublistas

20List <E> subList(int from , int to);

21}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Iteradores de listas

1public interface ListIterator <E> extends Iterator <E> {

2boolean hasNext ();

3E next ();

4boolean hasPrevious ();

5E previous ();

6int nextIndex ();

7int previousIndex ();

8void remove (); // optional

9void set(E e); // optional

10void add(E e); // optional

11}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Implementaciones de listas

ArrayList Generalmente mas eficiente.

LinkedList Eficiente cuando no se hacen accesos posicionales.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Maps

1public interface Map <K,V> {

23// Operaciones absicas

4V put(K key , V value);

5V get(Object key);

6V remove(Object key);

7boolean containsKey(Object key);

8boolean containsValue(Object value );

9int size ();

10boolean isEmpty ();

1112void putAll(Map <? extends K, ? extends V> m);

13void clear ();

1415// Vistas

16public Set <K> keySet ();

17public Collection <V> values ();

18public Set <Map.Entry <K,V>> entrySet ();

1920// Interface for entrySet elements

21public interface Entry {

22K getKey ();

23V getValue ();

24V setValue(V value);

25}

26}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

PrMap

1public class PrMap {

2private static void lee(String nombre ,

3Map <String ,Integer > map) throws IOException {

4BufferedReader reader = null;

5try {

6reader = new BufferedReader(new FileReader(nombre ));

7String linea = reader.readLine ();

8while (linea!=null) {

9Integer i = map.get(linea);

10if (i==null) {

11i = new Integer (1);

12} else {

13i = new Integer(i.intValue ()+1);

14}

15map.put(linea ,i);

16linea = reader.readLine ();

17}

18} finally {

19if (reader !=null) {

20reader.close ();

21}

22}

23}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

PrMap

12private static void muestra(Map <String ,Integer > map) {

3for (String s: map.keySet ()) {

4System.out.println(s+":"+map.get(s));

5}

6}

7public static void main(String [] args) throws Exception{

8String tipo = args [1];

9Map <String ,Integer > map = null;

10if (tipo.equals("hash")) {

11map = new HashMap <String ,Integer >();

12} else if (tipo.equals("tree")) {

13map = new TreeMap <String ,Integer >( Collator.getInstance ());

14} else {

15throw new RuntimeException("Clase no implementada: "+tipo);

16}

1718lee(args[0],map);

19muestra(map);

20}

21}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Implementaciones

HashMap Basadas en tablas hash.

TreeMap Basadas en arboles, cuando las claves se puedenordenar.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clases interesantes I

Paquete java.util

Collections Clase con metodos estaticos paramanejar colecciones.

Date Para manejar instantes en el tiempo(UTC).

GregorianCalendar Para manejar fechas.Locale Para ayudar a la localizacion de las

aplicaciones.Random Generacion de numeros aleatorios.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Clases interesantes II

Paquete java.lang

Clases envoltorio Integer, Double, etc Clases deobjetos inmutables para los tiposbasicos.

StringBuffer Cadedas de caracteres de objetos noinmutables.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Expresiones regulares I

Comprobacion de cadenas de caracteres

Un numero de factura es correcto si es de la forma 2345/07.

Las facturas no se borran, si se borra una la marcamosponiendo una R delante.

A veces interesa construir una factura a partir de unasexistentes. Si tengo los numeros 0967/06, 0124/07, 0345/07,construimos la auxiliar AUX-0967/06-0124/07-0345/07.

Hacer una funcion que compruebe si una factura es correcta

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Expresiones regulares II

Sustituciones genericas

Tenemos un fichero de texto en el que hay muchas fechas conformato mm/dd/aaaa. Las queremos cambiar al formatoaaaa/mm/dd.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Programa de prueba

1private static void prueba(String patron ,

2String s) {

3Pattern p = Pattern.compile(patron );

4Matcher m = p.matcher(s);

56System.out.format("\nPatron: %s:\ nCadena: %s:\n",patron ,s);

78boolean enc = false;

9while (m.find ()) {

10enc=true;

11System.out.format("Encontrado %s desde la oposicin %d "+

12"hasta la oposicin %d\n",

13m.group(),m.start(),m.end ());

14for (int i=0; i<=m.groupCount (); i++) {

15System.out.format("Grupo %d: %s: desde la oposicin %d "+

16"hasta la oposicin %d\n",

17i,m.group(i),m.start(i),m.end(i));

18}

19}

20if (!enc) {

21System.out.println("No encontrado");

22}

23}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Cadena de caracteres

Una cadena de caracteres casa consigo misma

1Patron:foo:

2Cadena:foofoofoo:

3Encontrado foo desde la oposicin 0 hasta la oposicin 3

4Grupo 0:foo: desde la oposicin 0 hasta la oposicin 3

5Encontrado foo desde la oposicin 3 hasta la oposicin 6

6Grupo 0:foo: desde la oposicin 3 hasta la oposicin 6

7Encontrado foo desde la oposicin 6 hasta la oposicin 9

8Grupo 0:foo: desde la oposicin 6 hasta la oposicin 9

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Caracter simple

El caracter . casa con cualquier caracter. Es un meta-caracter (nosignifican ellos mismos)

1Patron:gato.:

2Cadena:gatos:

3Encontrado gatos desde la oposicin 0 hasta la oposicin 5

4Grupo 0:gatos: desde la oposicin 0 hasta la oposicin 5

Los meta-caracteres son: ([{\^-$|]})?*+. Si queremos hacercasar un meta-caracter hay que precederlo con \·

1prueba("gato \\.","gato.");

23Patron:gato \.:

4Cadena:gato.:

5Encontrado gato. desde la oposicin 0 hasta la oposicin 5

6Grupo 0:gato.: desde la oposicin 0 hasta la oposicin 5

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Caracteres

[abc] casa con a, b y c.[a-m] casa con las letras desde la a hasta la m

[a-mA-M] casa con las letras desde la a hasta la m o desdela A hasta la M

[^abc] Casa on cualquier letra excepto con a, b y c.[a-z&&[^be] casa con las letras desde la a hasta la z excepto

con b y e

[a-z&&[^b-e]] casa con las letras desde la a hasta la z exceptodesde la b hasta la e

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Caracteres

1Patron :[aeg]:

2Cadena:abcdefghijklmnopqrstuvxyz:

3Encontrado a desde la oposicin 0 hasta la oposicin 1

4Grupo 0:a: desde la oposicin 0 hasta la oposicin 1

5Encontrado e desde la oposicin 4 hasta la oposicin 5

6Grupo 0:e: desde la oposicin 4 hasta la oposicin 5

7Encontrado g desde la oposicin 6 hasta la oposicin 7

8Grupo 0:g: desde la oposicin 6 hasta la oposicin 7

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Caracteres

1Patron :[^c-v]:

2Cadena:abcdefghijklmnopqrstuvxyz:

3Encontrado a desde la oposicin 0 hasta la oposicin 1

4Grupo 0:a: desde la oposicin 0 hasta la oposicin 1

5Encontrado b desde la oposicin 1 hasta la oposicin 2

6Grupo 0:b: desde la oposicin 1 hasta la oposicin 2

7Encontrado x desde la oposicin 22 hasta la oposicin 23

8Grupo 0:x: desde la oposicin 22 hasta la oposicin 23

9Encontrado y desde la oposicin 23 hasta la oposicin 24

10Grupo 0:y: desde la oposicin 23 hasta la oposicin 24

11Encontrado z desde la oposicin 24 hasta la oposicin 25

12Grupo 0:z: desde la oposicin 24 hasta la oposicin 25

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Caracteres

1Patron :[a-z&&[^b-u]]:

2Cadena:abcdefghijklmnopqrstuvxyz:

3Encontrado a desde la oposicin 0 hasta la oposicin 1

4Grupo 0:a: desde la oposicin 0 hasta la oposicin 1

5Encontrado v desde la oposicin 21 hasta la oposicin 22

6Grupo 0:v: desde la oposicin 21 hasta la oposicin 22

7Encontrado x desde la oposicin 22 hasta la oposicin 23

8Grupo 0:x: desde la oposicin 22 hasta la oposicin 23

9Encontrado y desde la oposicin 23 hasta la oposicin 24

10Grupo 0:y: desde la oposicin 23 hasta la oposicin 24

11Encontrado z desde la oposicin 24 hasta la oposicin 25

12Grupo 0:z: desde la oposicin 24 hasta la oposicin 25

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Caracteres predefinidos

. casa con cualquier caracter, puede o no casarcon final lınea.

\d [0-9]

\D [^0-9]

\s espacio en blanco [ \t\n\x0B\f\r]

\S [^ \t\n\x0B\f\r]

\w [a-zA-Z_0-9]

\W [^a-zA-Z_0-9]

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Caracteres predefinidos

1prueba("\\d","aaa bbb 1 df 3 f");

23Patron :\d:

4Cadena:aaa bbb 1 df 3 f:

5Encontrado 1 desde la oposicin 8 hasta la oposicin 9

6Grupo 0:1: desde la oposicin 8 hasta la oposicin 9

7Encontrado 3 desde la oposicin 13 hasta la oposicin 14

8Grupo 0:3: desde la oposicin 13 hasta la oposicin 14

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Repeticiones

Voraz No voraz PosesivoX? X?? X?+ 0 o 1 aparicionX* X*? X*+ 0, 1 o masX+ X+? X++ 1 o masX{n} X{n}? X{n}+ n aparicionesX{n,} X{n,}? X{n,}+ al menos n

X{n,m} X{n,m}? X{n,m}+ entre n y m

1Patron :.* foo:

2Cadena:xfooxxxxxxfoo:

3Encontrado xfooxxxxxxfoo desde la oposicin 0 hasta la oposicin 13

45Patron :.*? foo:

6Cadena:xfooxxxxxxfoo:

7Encontrado xfoo desde la oposicin 0 hasta la oposicin 4

8Encontrado xxxxxxfoo desde la oposicin 4 hasta la oposicin 13

910Patron :.*+ foo:

11Cadena:xfooxxxxxxfoo:

12No encontrado

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Agrupaciones

(X) Agrupacion con captura\n n-esimo de captura(?:X) Agrupacion sin capturar

1Patron :(?: foo ){3}:

2Cadena:foofoofoofoofoofoo:

3Encontrado foofoofoo desde la oposicin 0 hasta la oposicin 9

4Grupo 0: foofoofoo: desde la oposicin 0 hasta la oposicin 9

5Encontrado foofoofoo desde la oposicin 9 hasta la oposicin 18

6Grupo 0: foofoofoo: desde la oposicin 9 hasta la oposicin 18

78Patron :(foo ){3}\1:

9Cadena:foofoofoofoofoofoo:

10Encontrado foofoofoofoo desde la oposicin 0 hasta la oposicin 12

11Grupo 0: foofoofoofoo: desde la oposicin 0 hasta la oposicin 12

12Grupo 1:foo: desde la oposicin 6 hasta la oposicin 9

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Agrupaciones

1prueba("(\\d{1 ,2})/(\\d{1 ,2})/(\\d{4})","6/30/1950");

23Patron :(\d{1 ,2})/(\d{1 ,2})/(\d{4}):

4Cadena :6/30/1950:

5Encontrado 6/30/1950 desde la oposicin 0 hasta la oposicin 9

6Grupo 0:6/30/1950: desde la oposicin 0 hasta la oposicin 9

7Grupo 1:6: desde la oposicin 0 hasta la oposicin 1

8Grupo 2:30: desde la oposicin 2 hasta la oposicin 4

9Grupo 3:1950: desde la oposicin 5 hasta la oposicin 9

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Facturas

1public class PrFactura {

2public static boolean esNumeroCorrecto(String numFactura) {

3Pattern p = Pattern.compile("(AUX -(\\d{4}/\\d{2} -)*)?R?\\d{4}/\\d{2}");

4Matcher m = p.matcher(numFactura );

5return m.matches ();

6}

7public static final void main(final String [] args) {

8String num="0001/04";

9System.out.println(":"+num+":"+esNumeroCorrecto(num ));

10num="00001/04";

11System.out.println(":"+num+":"+esNumeroCorrecto(num ));

12num="00001 -04";

13System.out.println(":"+num+":"+esNumeroCorrecto(num ));

14num="0001/2004";

15System.out.println(":"+num+":"+esNumeroCorrecto(num ));

16num="0001/04";

17System.out.println(":"+num+":"+esNumeroCorrecto(num ));

18num="R0001 /04";

19System.out.println(":"+num+":"+esNumeroCorrecto(num ));

20num="AUX -0001/04 -0001/04";

21System.out.println(":"+num+":"+esNumeroCorrecto(num ));

22num="AUX -0001/04 -0001/04 -0001/04 -0001/04 -0001/04";

23System.out.println(":"+num+":"+esNumeroCorrecto(num ));

24}

25}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Fechas

1public class PrFecha {

2private static String convierteFecha(String fecha) {

3String s1 = fecha.replaceAll("(\\d{1 ,2})/(\\d{1 ,2})/(\\d{4})",

4"$3/$1/$2");

5return s1;

6}

7public static void main(String [] args) {

8String fecha = "6/30/1950";

9System.out.println(convierteFecha(fecha ));

10}

11}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

JDBC

Conexion con una fuentes de datos.

Realizar peticiones y actualizaciones.

Manejar los resultados de las consultas

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Drivers JDBC

Es necesario un driver dependiente del proveedor de la Base dedatos.

MySQL MySQL java connector

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Creando la base de datos

Fichero crea.sql

1create database valores;

2use valores;

34create table valores (

5id int unsigned auto_increment primary key ,

6nombre varchar (255),

7ibex_id varchar (100),

8url varchar (255) ,

9tipo enum("acciones","fondos")

10);

1112create table datos (

13id int unsigned auto_increment primary key ,

14empresa int unsigned ,

15fecha date ,

16valor double

17);

1819grant all on valores .* to luis identified by ’patata ’;

1~/sql$ mysql -u root < crea.sql

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Interfaz java.sql.Connection

Establece conexion con la base de datos. No tiene constructor.

Es un interfaz (esta implementado en el driver).

Constuye instrucciones SQL precompiladas (metodoprepareStatement).

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Realizando conexion con la base de datos

1package valores;

2import java.sql.Connection;

3import java.sql.DriverManager;

4import java.sql.SQLException;

56public class Conexion {

7protected static Connection getMysqlConnection(String url , String db,

8String user , String passwd)

9throws ClassNotFoundException ,

10InstantiationException ,

11SQLException ,

12IllegalAccessException {

13Class.forName("com.mysql.jdbc.Driver"). newInstance ();

14return DriverManager.getConnection("jdbc:mysql ://"+url+"/"+db+

15"?user="+user+"&password="+passwd );

16}

17protected static Connection getMysqlConnection ()

18throws ClassNotFoundException ,

19InstantiationException ,

20SQLException ,

21IllegalAccessException {

22return getMysqlConnection("localhost", "valores", "luis", "patata");

23}

24protected static String getFich(String fich) {

25java.net.URL url = ClassLoader.getSystemResource(fich);

26return url.getPath ();

27}

28}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Ficheros de datos

Fichero de valores: valores.csv

1BSCH!BSCH!acciones!http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm

2Endesa!ENDESA!acciones!http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm

3Repsol -YPF!REPSOL YPF!acciones!http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm

4Acciona!ACCIONA!acciones!http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm

5Inditex!INDITEX!acciones!http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htme

6Telfonica!TELEFONICA!acciones!http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm

7Banco Popular!BA.POPULAR!acciones!http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm

8Ebro -Puleva!EBRO PULEVA!acciones!http :// www.bolsamadrid.es/esp/mercados/acciones/igbm_3_1.htm

9Mittal -Steel!ARCELOR MIT.! acciones!http ://www.bolsamadrid.es/esp/mercados/acciones/igbm_2_1.htm

10Indra!INDRA A!acciones!http :// www.bolsamadrid.es/esp/mercados/acciones/igbm_6_1.htm

11EADS!EADS!acciones!http ://www.bolsamadrid.es/esp/mercados/acciones/igbm_2_1.htm

12Unipapel!UNIPAPEL!acciones!http :// www.bolsamadrid.es/esp/mercados/acciones/igbm_3_1.htm

13Madrid Bolsa!MADRID BOLSA!fondos!http :// www.bolsamadrid.es/esp/mercados/fondos/htmfondos /0085 alfa.htm

14Plus Madrid!PLUSMADRID!fondos!http :// www.bolsamadrid.es/esp/mercados/fondos/htmfondos /0085 alfa.htm

15FonCaixa 65! FONCAIXA 65 BOLSA INDICE ESPA &#241;A!fondos!http ://www.bolsamadrid.es/esp/mercados/fondos/htmfondos /0015 alfa100.htm

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Cargar datos

1package valores;

2import java.io.BufferedReader;

3import java.io.FileReader;

4import java.io.IOException;

5import java.sql.Connection;

6import java.sql.PreparedStatement;

7import java.sql.SQLException;

8import java.util.Scanner;

9public class LeeValores {

10private static void insertaDatos(Connection con , BufferedReader in)

11throws IOException , SQLException {

12.....................

13}

14public static void main (String [] args) throws Exception {

15Connection con = null;

16BufferedReader in = null;

17try {

18con = Conexion.getMysqlConnection ();

19in = new BufferedReader(new FileReader(Conexion.getFich("sql/valores.csv")));

20insertaDatos(con ,in);

21} finally {

22if (con!=null) con.close ();

23if (in!=null) in.close ();

24}

25}

26}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

¿Donde esta el fichero sql/valores.csv?

1.

2|-- |-- sql

3| |-- borra.sql

4| |-- crea.sql

5| |-- datos.csv

6| |-- usuarios.csv

7| ‘-- valores.csv

8|-- src

9| |-- valores

10| | |-- CVS

11| | | |-- Entries

12| | | |-- Repository

13| | | ‘-- Root

14| | |-- Conexion.java

15| | |-- ConsigueDatos.java

16| | |-- LeeDatos.java

17| | ‘-- LeeValores.java

18|-- classes

19| ‘-- valores

20| |-- Conexion.class

21| |-- ConsigueDatos.class

22| |-- LeeDatos.class

23| ‘-- LeeEmpresas.class

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Accediendo sql/valores.csv

1~/Java$ export CLASSPATH =.:./ classes

2~/Java$ $JAVA_HOME/bin/java valores.LeeValores sql/valores.csv

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Cargar datos

1private static final String sqlIns =

2"insert into valores (nombre ,ibex_id ,url ,tipo) "+

3"values ( ? , ? , ? , ?)";

4private final static int NOMBRE =1;

5private final static int IBEX_ID =2;

6private final static int URL_BOLSA =3;

7private final static int TIPO =4;

89private static void insertaDatos(Connection con , BufferedReader in)

10throws IOException , SQLException {

11String linea = in.readLine ();

12PreparedStatement pstmt = con.prepareStatement(sqlIns );

13while (linea!=null) {

14Scanner scan = new Scanner(linea);

15scan.useDelimiter("|");

16String nombre = scan.next ();

17String ibexId = scan.next ();

18String tipo = scan.next ();

19String url = scan.next ();

20pstmt.setString(NOMBRE ,nombre );

21pstmt.setString(IBEX_ID ,ibex_id );

22pstmt.setString(TIPO ,tipo);

23pstmt.setString(URL_BOLSA ,url);

24int n = pstmt.executeUpdate ();

25linea=in.readLine ();

26}

27}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Ficheros de datos

Fichero de valores: valores.csv

1Fecha!BSCH!ENDESA!REPSOL -YPF!ACCIONA!INDITEX!oTelefnica!Banco Popular!Ebro -Puleva!Mittal Steel!INDRA!AEDS!Unipapel!Madrid Bolsa!PlusMadrid!Fon Caixa 65

228/03/02!9.6!17.05!14.45!!!!!!!!!!12.35!17.33!5.49

301/04/02!9.6!17.05!14.45!!!!!!!!!!12.35!17.33!5.49

4!!!!!!!!!!!!!!!

527/08/04!8!15.25!16.98!50.15!19!11.83!!!!!!!11.81!17.03!4.64

630/08/04!7.99!15.29!17.03!50.05!19.08!11.78!!!!!!!11.89!17.1!4.66

712/12/06!14.01!35.76!27.71!137.95!39.59!16.06!13.7!18.62!31.5!18.35!!!21.08!25.22!8.15

8!!!!!!!!!!!!!!!

919/12/06!13.98!35.15!26.96!138.2!40.78!16.11!13.7!19.17!31.25!18.15!24.20!!21.51!25.57!8.35

1020/12/06!14.08!35.16!26.92!139.9!40.95!16.28!13.68!19.28!31.86!18.42!25.45!!21.4!25.47!8.37

1121/12/06!14.06!35.43!26.6!140.9!40.61!16.15!13.65!19.25!31.86!18.46!25.79!!21.2!25.29!8.33

12!!!!!!!!!!!!!!!

1327/12/06!14.16!35.72!26.5!140!41.01!16.2!13.69!19.59!31.95!19.06!26.07!21.34!21.16!25.25!8.26

1428/12/06!14.12!35.55!26.41!141.05!40.89!16.16!13.68!19.12!32.26!18.67!26.00!21.40!21.05!25.14!8.18

1529/12/06!14.14!35.83!26.2!141.1!40.81!16.12!13.73!19.2!32!18.61!26.00!21.50!21.23!25.3!8.18

1601/01/07!14.14!35.83!26.2!141.1!40.81!16.12!13.73!19.2!32!18.61!26.00!21.50!21.18!25.24!8.18

1702/01/07!14.49!35.57!26.63!143.05!40.79!16.39!13.97!19.46!32.87!18.88!26.29!21.85!21.18!25.24!8.18

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Cargar datos

1private static void insertaDatos(Connection con , BufferedReader in)

2throws IOException , SQLException , ParseException {

3int [] id_valores = valores(con);

4String linea = in.readLine ();

5linea = in.readLine ();

6String sql = "insert into datos (fecha ,valor ,precio) values ( ?, ? , ? )";

7PreparedStatement pstmt = con.prepareStatement(sql);

8while (linea!=null) {

9Scanner scan = new Scanner(linea);

10scan.useDelimiter("!");

11String strFecha=scan.next ();

12if (! strFecha.equals("")) {

13DateFormat df = new SimpleDateFormat("dd/MM/yy");

14Date fecha = df.parse(strFecha );

15System.out.println(df.format(fecha ));

16for (int i = 0; i < id_valores.length ; i++) {

17String strValor = scan.next ();

18if (! strValor.equals("")) {

19double precio = Double.parseDouble(strValor );

20pstmt.setDate(1,new java.sql.Date(fecha.getTime ()));

21pstmt.setInt(2, id_valores[i]);

22pstmt.setDouble(3,precio );

23int n = pstmt.executeUpdate ();

24}

2526}

27}

28linea = in.readLine ();

29}

30}Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Cargar datos

1private static String [] valores = {

2"BSCH","ENDESA","REPSOL YPF",

3"ACCIONA","INDITEX","TELEFONICA",

4"BA.POPULAR","EBRO PULEVA","ARCELOR MIT.",

5"INDRA A","EADS","UNIPAPEL","MADRID BOLSA",

6"PLUSMADRID","FONCAIXA 65 BOLSA INDICE ESPA &#241;A"

7};

8private static int [] valores(Connection con) throws SQLException {

9int [] ids = new int[valores.length ];

10String sql = "select id from valores where ibex_id like ?";

11PreparedStatement pstmt = con.prepareStatement(sql);

12for (int i = 0; i < ids.length; i++) {

13pstmt.setString(1,valores[i]);

14ResultSet rs = pstmt.executeQuery ();

15rs.next ();

16ids[i]=rs.getInt (1);

17}

18return ids;

19}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Realizar actualizaciones

Instrucciones: INSERT, UPDATE, DELETE

1public static void pr2(Connection con) throws SQLException {

2String sql = "update datos set precio=precio +1";

3PreparedStatement pstmt = con.prepareStatement(sql);

4int n = pstmt.executeUpdate ();

5System.out.println(n+" filas actualizadas");

6SQLWarning warning = pstmt.getWarnings ();

7if (warning !=null) {

8System.out.println("AVISOS ...");

9while (warning !=null) {

10System.out.println("Message: " + warning.getMessage ());

11warning = warning.getNextWarning ();

12}

13} else {

14System.out.println("No hay avisos");

15}

16}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Realizar Consultas

Instrucciones Select

1select id,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefonica acciones

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Realizar Consultas

Instrucciones Select

1select id,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs 1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefonica acciones

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Realizar Consultas

Instrucciones Select

1select id,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs 2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefonica acciones

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Realizar Consultas

Instrucciones Select

1select id,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs 3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefonica acciones

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Realizar Consultas

Instrucciones Select

1select id,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs 4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefonica acciones

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Realizar Consultas

Instrucciones Select

1select id,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs 5 Inditex acciones

rs

6 Telefonica acciones

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Realizar Consultas

Instrucciones Select

1select id,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs 6 Telefonica acciones

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Realizar Consultas

Instrucciones Select

1select id,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefonica acciones

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Ejemplos de consultas I

1public static void pr1(Connection con) throws SQLException {

2String sql = "select * from valores";

3PreparedStatement pstmt = con.prepareStatement(sql);

4ResultSet rs = pstmt.executeQuery ();

5while (rs.next ()) {

6int id = rs.getInt("id");

7String nombre = rs.getString("nombre");

8System.out.println(id+":"+nombre );

9}

10}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Ejemplos de consultas II

1public static void pr3(Connection con) throws SQLException {

2String sql = "select valores.nombre , datos.fecha , datos.precio "+

3" from datos left join valores on valores.id=datos.valor "+

4" where datos.fecha >=’2007-03-01’"+

5" order by valores.tipo , valores.nombre , datos.fecha";

6PreparedStatement pstmt = con.prepareStatement(sql);

7ResultSet rs = pstmt.executeQuery ();

8while (rs.next ()) {

9String nombre = rs.getString("valores.nombre");

10Date fecha = rs.getDate("datos.fecha");

11double precio = rs.getDouble("datos.precio");

12DateFormat df = new SimpleDateFormat("dd ’de’ MMMM ’de’ yyy");

13NumberFormat nf = new DecimalFormat("#,000.00’ euro’");

14System.out.println(df.format(fecha)+":"+nombre+":"+nf.format(precio ));

15}

16}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Ejemplos de consultas III

1public static int getID(String ibex_id , Connection con) throws SQLException 0000{

2String sql = "select id from valores where ibex_id like ’"+ibex_id+"’";

3PreparedStatement pstmt = con.prepareStatement(sql);

4ResultSet rs = pstmt.executeQuery ();

5if (rs.next ()) {

6return rs.getInt (1);

7} else {

8return -1;

9}

10}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Consiguiendo datos desde www.bolsamadrid.es

Conseguir el fichero HTML.

Analizar el fichero.

Anadir datos en la base de datos.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Conseguir el fichero HTML

Fichero de valores: valores.csv

1BSCH!BSCH!acciones!http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm

2Endesa!ENDESA!acciones!http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm

1private static String cargaPagina(java.net.URL url)

2throws IOException{

3InputStream in = url.openStream ();

4StringBuffer sb = new StringBuffer ();

5int c = in.read ();

6while (c!=-1) {

7sb.append ((char)c);

8c = in.read ();

9}

10String res = sb.toString ();

11return res;

12}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Analizar el fichero HTML

Fichero de valores:http://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm

1.....................

2....<IMG SRC="/images/arr -up9.gif" BORDER =0> BSCH</A></TD><TD>13,50</TD>.....

3.....................

4....<IMG SRC="/images/arr -dw9.gif" BORDER =0> ENDESA </A></TD><TD>40,29</TD>...

1private static double getValor(String ibex_id , String datos , String tipo)

2throws ParseException {

3String regExp=null;

4if (tipo.equals("acciones")) {

5regExp=ibex_id+" *</A></TD><TD >([0 -9 ,]+)</TD >";

6} else if (tipo.equals("fondos")) {

7regExp=ibex_id+" *</a></TD >.*?<TD *[^>]* >([0-9,]+)</TD>";

8} else {

9throw new RuntimeException("Tipo \’"+tipo+"\’ desconocido");

10}

11Pattern p = Pattern.compile(regExp );

12Matcher m = p.matcher(datos);

13if (m.find ()) {

14// Double. parseDouble no vale , no analiza 13 ,50

15NumberFormat nf = NumberFormat.getInstance ();

16return nf.parse(m.group (1)). doubleValue ();

17} else {

18throw new RuntimeException("Acciones \’"+ibex_id+"\’ no encontrada");

19}

20}Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Insertar los datos en la Base de datos

1private static final String sqlIns =

2"insert into datos (fecha ,valor ,precio) values( ? , ? , ?)";

3private static final int FECHA =1;

4private static final int VALOR =2;

5private static final int PRECIO =3;

67private static void insertaDatos(java.sql.Date fecha ,Connection con)

8throws SQLException , IOException , ParseException {

9HashMap <String ,String > paginas = new HashMap <String ,String >();

10String sql = "select * from valores";

11PreparedStatement pstmtValores = con.prepareStatement(sql);

12ResultSet rs = pstmtValores.executeQuery ();

13PreparedStatement pstmtIns = con.prepareStatement(sqlIns );

14while (rs.next ()) {

15insertaDatos(pstmtIns ,

16fecha ,

17rs,paginas );

18}

19}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Insertar los datos en la Base de datos

1private static void insertaDatos(PreparedStatement pstmtIns ,

2java.sql.Date fecha ,

3ResultSet rs,

4HashMap <String ,String > paginas)

5throws SQLException ,IOException , ParseException {

6String url = rs.getString("url");

7String datos = paginas.get(url);

8if (datos==null) {

9datos = cargaPagina(paginas ,url));

10paginas.put(url ,datos);

11}

12String tipo = rs.getString("tipo");

13String ibex_id = rs.getString("ibex_id");

14double valor = getValor(ibex_id ,datos ,tipo);

15int id = rs.getInt("id");

16String nombre = rs.getString("nombre");

17pstmtIns.setDate(FECHA ,fecha);

18pstmtIns.setInt(VALOR ,id);

19pstmtIns.setDouble(PRECIO ,valor);

20int n = pstmtIns.executeUpdate ();

21}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Consiguiendo datos automaticamente

1#!/ bin/sh

2# $Id: transparencias .tex ,v 1.8 2007 -05 -10 11:37:22 luis Exp $

34JAVA_HOME =/usr/lib/jvm/default -java

5CLASSPATH =/home/casa/ahorros2/classes

6$JAVA_HOME/bin/java -cp $CLASSPATH valores.ConsigueDatos $*

1$ crontab -l

23SHELL=/bin/bash

4MAILTO=luis

5# Directorios donde buscar programas

6PATH=/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/home/luis/bin

7845 23 * * 1,2,3,4,5 /home/casa/ahorros2/scripts/consigueDatos.sh > /dev/null 2>&1

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Ejemplos de programacion concurrente

En un sistema operativo, diversos programas compiten por losrecursos del sistema: memoria, dispositivos.

Bases de datos.

Aplicaciones Web.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Hebras, hilos

En un programa concurrente puede haber varios hilos decomputacion.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Sincronizacion de Objetos

Puede haber varias hebras ejecutando simultaneamentemetodos de objetos

Es necesario sincronizar los accesos al objeto.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Threads

Extendiendo la clase java.lang.Thread.

1public class PrThread extends Thread{

2public PrThread(String s) {

3super(s);

4}

5public final void run() {

6boolean sigue=true;

7for (int i=0; i<100 && sigue; i++) {

8try {

9System.out.println(getName ()+":"+i);

10sleep (20);

11} catch (InterruptedException e) {

12System.out.println(getName ()+" interrumpida");

13sigue=false;

14}

15}

16}

17public static final void main(final String [] args){

18Thread p = new PrThread("mia");

19p.start ();

20}

21}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Threads

Implementado el interfaz java.lang.Runnable.

1public class PrRunnable implements Runnable {

2public final void run() {

3Thread hebra = Thread.currentThread ();

4boolean sigue=true;

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

6try {

7System.out.println(hebra.getName ()+":"+i);

8hebra.sleep (20);

9} catch (InterruptedException e) {

10System.out.println(hebra.getName ()+" interrumpida");

11sigue=false;

12}

13}

14}

15public static final void main(final String [] args) {

16Thread p = new Thread(new PrRunnable (),"mia");

17p.start ();

18}

19}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Ciclo de vida de una hebra

Tras crear una hebra y se ejecuta el metodo start, la hebra puedeestar:

1 En ejecucion.

2 Suspendida: ha ejecutado sleep, join, wait.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Parar una hebra

Usar el metodo interrupt

1public static void ex1() throws InterruptedException{

2Thread h = new PrThread("1");

3h.start ();

4Thread.sleep (100);

5h.interrupt ();

6System.out.println(h.isInterrupted ());

7}

Metodos Deprecated: stop, suspend, resume.Una hebra para cunado esta Not Runnnable, ha ejecutado sleep,join, wait.Pueden lanzar InterruptedException, la hebra deberıa parar.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Esperamos a que una hebra acabe

Metodo: join

1public static void ex2() throws InterruptedException {

2Thread h1 = new PrThread("1");

3Thread h2 = new PrThread("2");

4Thread h3 = new PrThread("3");

5h1.start ();

6h2.start ();

7h3.start ();

8h1.join ();

9h2.join ();

10h3.join ();

11}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Esperamos a que una hebra acabe

Metodo: join

1 h1.start(): h1 se ejecuta.

2 h2.start(): h2 se ejecuta.

3 h3.start(): h3 se ejecuta.

4 h1.join(): esperamos a que h1

pare.

5 h2.join(): esperamos a que h2

pare.

6 h3.join(): esperamos a que h3

pare (no hace falta).

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Esperamos a que una hebra acabe

Metodo: join

1 h1.start(): h1 se ejecuta.

2 h2.start(): h2 se ejecuta.

3 h3.start(): h3 se ejecuta.

4 h1.join(): esperamos a que h1

pare.

5 h2.join(): esperamos a que h2

pare.

6 h3.join(): esperamos a que h3

pare (no hace falta).

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Esperamos a que una hebra acabe

Metodo: join

1 h1.start(): h1 se ejecuta.

2 h2.start(): h2 se ejecuta.

3 h3.start(): h3 se ejecuta.

4 h1.join(): esperamos a que h1

pare.

5 h2.join(): esperamos a que h2

pare.

6 h3.join(): esperamos a que h3

pare (no hace falta).

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Esperamos a que una hebra acabe

Metodo: join

1 h1.start(): h1 se ejecuta.

2 h2.start(): h2 se ejecuta.

3 h3.start(): h3 se ejecuta.

4 h1.join(): esperamos a que h1

pare.

5 h2.join(): esperamos a que h2

pare.

6 h3.join(): esperamos a que h3

pare (no hace falta).

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Esperamos a que una hebra acabe

Metodo: join

1 h1.start(): h1 se ejecuta.

2 h2.start(): h2 se ejecuta.

3 h3.start(): h3 se ejecuta.

4 h1.join(): esperamos a que h1

pare.

5 h2.join(): esperamos a que h2

pare.

6 h3.join(): esperamos a que h3

pare (no hace falta).

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Esperamos a que una hebra acabe

Metodo: join

1 h1.start(): h1 se ejecuta.

2 h2.start(): h2 se ejecuta.

3 h3.start(): h3 se ejecuta.

4 h1.join(): esperamos a que h1

pare.

5 h2.join(): esperamos a que h2

pare.

6 h3.join(): esperamos a que h3

pare (no hace falta).

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Esperamos a que una hebra acabe

Metodo: join

1 h1.start(): h1 se ejecuta.

2 h2.start(): h2 se ejecuta.

3 h3.start(): h3 se ejecuta.

4 h1.join(): esperamos a que h1

pare.

5 h2.join(): esperamos a que h2

pare.

6 h3.join(): esperamos a que h3

pare (no hace falta).

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Cerrojos de objetos

Cada objeto en Java tiene un cerrojo

1synchronized (obj) {

2/* */

3}

Solo pueda haber una hebra propietaria del cerrojo.Solo una hebra propietaria del cerrojo puede ejecutar un codigosynchronized.

El cerrojo puede abarcar a todo un metodo

1type method (...) {

2synchronized(this) {

3/* */

4}

1synchronized type method (...) {

2/* */

3}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Durmiendose/depertandose en un objeto

wait() Una hebra que tiene el cerrojo de un objeto puedeinvocar el metodo wait() del objeto.

La hebra queda suspendida hasta que alguien ladespierte.Se libera para que otra hebra pueda adquirirlo.Cuando es liberarla debe adquirir de nuevo elcerrojo para seguir la ejecucion.

wait(tiempo) Igual, pero se queda dormida un tiempo maximo.

notify() Una hebra que tiene el cerrojo de un objeto puedeinvocar el metodo notify() del objeto.

Despierta una hebra suspendida en el objeto.No libera el cerrojo del objeto.

notifyAll Igual, pero despierta a todas.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Durmiendose/depertandose en un objeto

wait() Una hebra que tiene el cerrojo de un objeto puedeinvocar el metodo wait() del objeto.

La hebra queda suspendida hasta que alguien ladespierte.Se libera para que otra hebra pueda adquirirlo.Cuando es liberarla debe adquirir de nuevo elcerrojo para seguir la ejecucion.

wait(tiempo) Igual, pero se queda dormida un tiempo maximo.

notify() Una hebra que tiene el cerrojo de un objeto puedeinvocar el metodo notify() del objeto.

Despierta una hebra suspendida en el objeto.No libera el cerrojo del objeto.

notifyAll Igual, pero despierta a todas.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Durmiendose/depertandose en un objeto

wait() Una hebra que tiene el cerrojo de un objeto puedeinvocar el metodo wait() del objeto.

La hebra queda suspendida hasta que alguien ladespierte.Se libera para que otra hebra pueda adquirirlo.Cuando es liberarla debe adquirir de nuevo elcerrojo para seguir la ejecucion.

wait(tiempo) Igual, pero se queda dormida un tiempo maximo.

notify() Una hebra que tiene el cerrojo de un objeto puedeinvocar el metodo notify() del objeto.

Despierta una hebra suspendida en el objeto.No libera el cerrojo del objeto.

notifyAll Igual, pero despierta a todas.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Durmiendose/depertandose en un objeto

wait() Una hebra que tiene el cerrojo de un objeto puedeinvocar el metodo wait() del objeto.

La hebra queda suspendida hasta que alguien ladespierte.Se libera para que otra hebra pueda adquirirlo.Cuando es liberarla debe adquirir de nuevo elcerrojo para seguir la ejecucion.

wait(tiempo) Igual, pero se queda dormida un tiempo maximo.

notify() Una hebra que tiene el cerrojo de un objeto puedeinvocar el metodo notify() del objeto.

Despierta una hebra suspendida en el objeto.No libera el cerrojo del objeto.

notifyAll Igual, pero despierta a todas.

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Regiones crıticas

El acceso a las regiones crıticas debe ser exclusivo1public void run() {

2boolean para = false;

3while (!para) {

4try {

5ciclo ();

6} catch (InterruptedException e) {

7para = true;

8}

9}

10}

11private void ciclo() throws InterruptedException {

12monitor.entrar ();

13InterruptedException salir=null;

14try {

15regCritica ();

16} catch (InterruptedException e) {

17salir=e;

18} finally {

19monitor.salir ();

20if (salir!=null) {

21throw salir;

22}

23int t = random.nextInt(tiempoDentro );

24sleep(t);

25}

26}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Monitor regiones crıticas

1public class Monitor {

2private int caben; //caben >=0

3public Monitor () {

4caben =1;

5}

6public synchronized void salir() {

7caben ++;

8notify ();

9}

1011public synchronized void entrar () throws InterruptedException{

12while (caben ==0) wait ();

13caben --;

14}

15}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Colecciones sincronizadas

En la clase java.util.Collections encontramos los siguientesmetodos estaticos:

1public static <T> Collection <T> synchronizedCollection(Collection <T> c)

1public static <T> Set <T> synchronizedSet(Set <T> s)

1public static <T> SortedSet <T> synchronizedSortedSet(SortedSet <T> s)

1public static <T> List <T> synchronizedList(List <T> list)

1public static <K,V> Map <K,V> synchronizedMap(Map <K,V> m)

1public static <K,V> SortedMap <K,V> synchronizedSortedMap(SortedMap <K,V> m)

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Lectores/Escritores I

1public void run() {

2try {

3monitor.permisoLeer ();

4lee ();

5} finally {

6monitor.finLeer ();

7}

8}

1public void run() {

2try {

3monitor.permisoEscribir ();

4escribe ();

5} finally {

6monitor.finEscribir ();

7}

8}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Lectores/Escritores II

1package simulacion.lectoresEscritores;

2public class Monitor {

3private int escrEsperando; //unm escritores esperando

4private int numLect; // unm lectores leyendo

5private int numEscr; // unm escritores escribiendo

6// escrEsperando >= numEscr , 0<=numEscr <=1 numLect >=0, nunLect >0 ---> numEscr =0

7public Monitor () {

8escrEsperando =0; numLect =0; numEscr =0;

9}

10public synchronized void permisoLeer () throws InterruptedException {

11while (numEscr >0 || escrEsperando >0) wait ();

12numLect ++;

13}

14public synchronized void finLeer () {

15numLect --;

16notifyAll ();

17}

18public synchronized void permisoEscribir () throws InterruptedException {

19escrEsperando ++;

20while (numLect >0) wait ();

21numEscr ++;

22}

23public synchronized void finEscribir () {

24escrEsperando --;

25numEscr --;

26}

27}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Lectores/Escritores III

1package simulacion.lectoresEscritores;

2import soporte.Aleatorio;

3public class GeneradorLectores extends Thread {

4private double tMedioLlegada;

5private int tLeyendo;

6private int tMaxSimulacion;

7private Aleatorio aleatorio;

8private Monitor monitor;

9public GeneradorLectores (double tllegada , int tleyendo , int tmax , int semilla , Monitor m){

10tMedioLlegada = tllegada; tLeyendo = tleyendo; tMaxSimulacion = tmax;

11aleatorio = new Aleatorio(semilla );

12monitor = m;

13}

14public void run() {

15System.out.println("Empezando la ogeneracin de lectores");

16try {

17while (true) {

18int sigCoche = aleatorio.poisson(tMedioLlegada );

19this.sleep(sigCoche *1000);

20Lector lector = new Lector(Simulador.sigUsuario (), tLeyendo , monitor );

21System.out.println("Comenzando "+lector );

22lector.start ();

23}

24} catch ( InterruptedException e ) {}

25System.out.println("oSimulacin lectores finalizada");

26}

27}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Lectores/Escritores IV

1package simulacion.lectoresEscritores;

2class Simulador {

3private static int numUsuario = -1;

4private static long horaInicio;

5public synchronized static int sigUsuario () {

6numUsuario ++;

7return numUsuario;

8}

9public Simulador(double tLlegadaLect , double tLlegadaEscr ,

10int tLeyendo , int tEscribiendo , int tMax)

11throws InterruptedException {

12Monitor monitor = new Monitor ();

13GeneradorLectores generaLectores =

14new GeneradorLectores(tLlegadaLect , tLeyendo , tMax , 1111, monitor );

15GeneradorEscritores generaEscritores =

16new GeneradorEscritores(tLlegadaEscr , tEscribiendo , tMax , 3333, monitor );

17generaLectores.start ();

18generaEscritores.start ();

19horaInicio = System.currentTimeMillis ();

20Thread.sleep(tMax *1000);

21generaLectores.interrupt ();

22generaEscritores.interrupt ();

23generaLectores.join ();

24generaEscritores.join ();

25}

26public static void main (String [] args) throws Exception {

27Simulador s = new Simulador(2, 8, 1, 2, 30);

28}

29}Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Filosofos I

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Filosofos II

1while (true) {

2piensa ();

3mesa.pideTenedores ();

4come ();

5mesa.cedeTenedores ();

6}

comiendo[i ]

{true filosofo i esta comiendofalse filosofo i NO esta comiendo

INV ≡ comiendo[i ]→ ¬comiendo[i ⊕ 1 ] ∧ ¬comiendo[i 1 ]

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Filosofos III

1public class Mesa {

2private int numFilosofos;

3private boolean [] comiendo;

4public Mesa(int n) {

5numFilosofos = n;;

6comiendo = new boolean[numFilosofos ];

7for (int i = 0; i < numFilosofos; i++) { comiendo[i] = false; }

8}

9/* permisoComer (int i) y cedePermiso (int i) */

10}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Filosofos IV

1public synchronized void permisoComer(int i) throws InterruptedException{

2while (comiendo[ant(i)] || comiendo[sig(i)]) { wait (); }

3comiendo[i]=true;

4}

56public synchronized void cedePermiso(int i) {

7comiendo[i]= false;

8notifyAll ();

9}

1011public int sig(int i) { return (i+1) % numFilosofos; }

1213public int ant(int i) { return ( i-1+ numFilosofos ) % numFilosofos; }

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Filosofos V

1public class Filosofo extends Thread {

2private Random random;

3private int tiempoComiendo , tiempoPensando;

4private Mesa mesa;

5private int id;

6public Filosofo (Random r,

7int tc, int tp,

8Mesa m,

9int i) {

10random = r;

11tiempoPensando = tp;

12tiempoComiendo = tc;

13mesa = m;

14id = i;

15}

16public void run() {

17boolean para = false;

18while (!para) {

19try {

20ciclo ();

21} catch (InterruptedException e) {

22para = true;

23}

24}

25}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Filosofos VI

1private void ciclo() throws InterruptedException {

2piensa(id,tiempoPensando );

3mesa.permisoComer(id);

4try {

5come(id ,tiempoComiendo );

6} catch (InterruptedException e) {

7mesa.cedePermiso(id);

8throw e;

9}

10mesa.cedePermiso(id);

11}

12private void espera(int tiempo) throws InterruptedException {

13int t = random.nextInt(tiempo );

14sleep(t);

15}

16private void piensa(int id, int tiempo) throws InterruptedException {

17System.out.println("El ofilsofo "+id+" empieza a pensar");

18espera(tiempo );

19System.out.println("El ofilsofo "+id+" acaba de pensar");

20}

21private void come(int id, int tiempo) throws InterruptedException {

22System.out.println("El ofilsofo "+id+" empieza a comer"+":"+mesa);

23espera(tiempo );

24System.out.println("El ofilsofo "+id+" acaba de comer"+":"+mesa);

25}

26}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java

Java basico Tipos Basicos Instrucciones basicas Paquetes Objetos herencia Excepciones Genericos Entrada/Salida Colecciones Clases interesantes JDBC Threads

Filosofos VII

1public static void main (String [] args) throws InterruptedException {

2int numFilosofos = 5;

3int tiempoPensando = 1000;

4int tiempoComiendo = 2000;

5int tiempoParada = 10000;

6Random r = new Random ();

7Mesa mesa = new Mesa(numFilosofos );

8Filosofo [] filosofo = new Filosofo[numFilosofos ];

9for (int i = 0; i < numFilosofos ; i++) {

10filosofo[i] = new Filosofo(r,tiempoComiendo , tiempoPensando ,

11mesa , i);

12filosofo[i]. start ();

13}

1415for (int i = 0; i < numFilosofos ; i++) {

16Thread.sleep(tiempoParada );

17System.out.println("Parando ofilsofo "+i+".............................");

18filosofo[i]. interrupt ();

19}

20for (int i = 0; i < numFilosofos ; i++) {

21filosofo[i].join ();

22}

23}

Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid

Java