Post on 28-Jul-2015
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 ñ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 ñ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