LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA...

82
Home Page Title Page Page 1 of 82 Go Back Full Screen Close Quit LICENCIATURA EN MATEM ´ ATICAS INTRODUCCI ´ ON A LA PROGRAMACI ´ ON CON JAVA 2001/2002 Pedro Mateo

Transcript of LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA...

Page 1: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 1 of 82

Go Back

Full Screen

Close

Quit

LICENCIATURA EN MATEMATICAS

INTRODUCCION A LA PROGRAMACIONCON JAVA

2001/2002

Pedro Mateo

Page 2: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 2 of 82

Go Back

Full Screen

Close

Quit

¿JAVA?

• ¿Que es JAVA?

• Como trabaja JAVA

• Caracterısticas de JAVA

– Seguridad

– Estandares abiertos y el nucleo API

– Dinamico y distribuido

– Orientado a objetos

– Multihilo

– Gestion de Memoria y recoleccion de basura

• Kit de Desarrollo JDK de SUN

• Introduccion a la Programacion Orientada a Objetos

• Palabras reservadas, tipos de datos, modificadores y expre-siones

• Declaracion de clases, reglas de ambito. Sobrecarga de fun-ciones. Constructores y destructores. Modificadores de alma-cenamiento, perdurabilidad y accesibilidad. this y super.

Page 3: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 3 of 82

Go Back

Full Screen

Close

Quit

• Paquetes: package e import.

• Interfaces: interfaz, implements.

• La clase String

• La clase Math

• Tratamiento de excepciones: try, catch, throw,throws

• Entrada y salida

• Multiples subprocesos, Threads: Presentacion, Creacion,Operaciones, Sincronizacion.

Page 4: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 4 of 82

Go Back

Full Screen

Close

Quit

¿Que es JAVA?

Java es un lenguaje de programacion que hace sencilla la con-struccion de aplicaciones distribuidas.Java, inicialmente oak, fue desarrollado por James Gosling deSun Microsystems y presentado en sociedad en 1995. Presentauna sintaxis similar a la de C + +, pero evita alguna de lascuestiones peligrosas como la aritmetica de punteros. La gestionde memoria la realiza automaticamente el lenguaje.

Como trabaja JAVA

Java utiliza un compilador para generar codigo ejecutable. Adiferencia de los compiladores habituales que generan el codigopara un procesador en particular, JAVA genera un codigo bi-nario independiente de la plataforma. Para ejecutar dichoscodigos se utiliza una Maquina Virtual Java, esto es, un pro-grama/procesador de este codigo binario. Es esta maquina vir-tual la que dependera de la plataforma, pero el codigo binario escomun y compatible para todas ellas, el bytecode (codigo bina-rio) podra ejecutarse directamente en la maquina virtual de unPC, una maquina SUN, ALPHA, PPC, etc.

Page 5: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 5 of 82

Go Back

Full Screen

Close

Quit

Los ejecutables de Java se denominan ficheros de clases debidoa que contienen clases. Dichas clases se obtienen directamentedel programa, del disco o de la red.El kit de desarrollo JDK contiene una maquina virtual para ejecu-tar bytecodes y dispone a su vez de una maquina virtual especialque es un visor de applets ejecutables java que se incluyen en losficheros HTML. Asimismo la mayorıa de navegadores contienenuna maquina virtual Java para ejecutar dichos applets.

Caracterısticas de JAVA

Seguridad

Java tiene tres elementos para garantizar la seguridad de susaplicaciones, por un lado, cuando se cargan las clases hay unacomprobacion del codigo para comprobar que tiene una estruc-tura correcta y que su ejecucion no corrompera la memoria alejetuarse, por ejemplo, escribiendo en zonas de memoria no per-mitidas.

Page 6: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 6 of 82

Go Back

Full Screen

Close

Quit

En segundo lugar la maquina virtual guarda en lugares diferenteslas clases de procedencias diferentes, de forma que no puedaninterferirse unas con otras, evitanto, por ejemplo, que clases car-gadas de la red traten de hacerse pasar por clases del sistema.Por ultimo Gestor de Seguridad de la MV Java determina queactividades y bajo que condiciones puede ejecutar la MV los pro-gramas, por ejemplo, en las MV implementadas en apliacionescomo Netscape y IE el Gestor de Seguridad no permite a lasaplicaciones el acceso a archivos de disco.

Estandares abiertos y el nucleo API

Un elemento importante de Java es que una misma aplicacionpuede ser ejecutada directamente en diferentes plataformas, PC,Macintosh, SUN, Alpha, etc. Las diferencias entre las distin-tas arquitecturas son manejadas directamente por la MV. Otraelemento importante adicional al anterior es que existe un API(interfaz de prgramacion de la aplicacion) comun para todas lasplataformas, es decir, existe un conjunto de librerias de funcionescomunes para todas las plataformas.

Page 7: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 7 of 82

Go Back

Full Screen

Close

Quit

Dichas librerias contienen funciones basicas como entrada/salida,manejo de errores, tratamiento de texto, conexiones de red,manejo grafico, etc. Por tanto las aplicaciones son sl portablestanto a nivel de ejecutables como a nivel de codigo fuente.

Dinamico y distribuido

El cargador de clases de la MV obtiene las distintas clases tantodel disco local, como de posibles distintos puntos de la red,ademas solo obtiene las clases que va a necesitar. Esto permitedisponer de aplicaciones distribuidas, distintas partes de codigose mantienen en diferentes localizaciones, evitando la duplicidadde codigo y/o el control de la ejecucion de software y/o la nosobrecarga innecesaria de maquinas.

Orientado a Objetos

Java admite el paradigma de programacion orientada a objetosde una forma natural. Un lenguaje se clasifica como orientado aobjetos si reune las caracterıticas siguientes:

Page 8: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 8 of 82

Go Back

Full Screen

Close

Quit

• Abstraccion

• Encapsulacion

• Herencia

• Polimorfismo

Un objeto es una encapsulacion abstracta de informacion, juntocon los metodos o procedimientos para manipularla.

Multihilo

Una aplicacion multihilo es una apliacion que tiene varios sub-programas ejecutantdose de forma independiente y simultanea.Estos subprogramas pueden comunicarse transmitiendose infor-macion. A efectos del usuario final dichos subprogramas se com-portan como un unico programa. Esta caracterıstica nos per-mite temporizar procesos, aplicaciones multiusuario, multipro-ceso, etc.

Page 9: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 9 of 82

Go Back

Full Screen

Close

Quit

Gestion de Memoria y recoleccion de basura

En C y C++ uno de las mayores fuentes de error y de problemases el manejo y control temporal de memoria, siendo responsabil-idad del programador el control adecuado de esta. En Java esteproblema queda relegado al lenguaje, para ello implementa unrecolector de basura. Este es un proceso que se encarga deliberar de forma automatica toda la memoria temporal que noaparece referenciada por ninguna parte del programa.

Kit de Desarrollo JDK de SUN

Aunque muchos programadores utlizan otros entornos de desar-rollo el Kit de Desarrollo de Java, JDK, aun se considera comola implementacion de referencia. Por tanto, si funciona bajo elJDK con gran probabilidad funcionara en otras implementaciones(como por ejemplo la MV de algunos navegadores).El JDK consta de las librerias de clases estandar y un conjuntode utilidades:

Page 10: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 10 of 82

Go Back

Full Screen

Close

Quit

• javac: compilador de Java

• java: interprete de Java, para ejecutar los bytecodes.

• appletviewer: interprete de Java para aplicaciones incluidasen ficheros HTML.

• javadoc: aplicacion para crear documentacion HTML a partirde codigo Java.

• jdb: depurador de Java.

Hola mundo (Un primer ejemplo)

class Hola {public static void main(String argumentos[]){

System.out.println("Hola mundo");}//Fmain

}

En Java, practicamente todo son clases. En un fichero apare-ceran definidas una o mas clases. Para que un programa (no ap-plets) pueda ejecutarse debera contener un metodo (funcion) lla-mado main con la declaracion anterior public static void.

Page 11: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 11 of 82

Go Back

Full Screen

Close

Quit

Para crear el programa anterior bastara con escribir las lıneasanteriores con un editor de texto cualquiera, guardar el ficherocon el nombre de la clase que contiene a la funcion main seguidode la extension java, es decir Hola.java (hay que respetarmayusculas y minusculas).

Para compilar el programa basta con escribir javac Hola.javay si no existe ningun error se generara un fichero llamadoHola.class que contendra el codigo binario que puede ser in-terpretado por la MV Java.

Para ejecutarlo basta con poner java Hola.

Para que el compilador y la maquina virtual encuentre los ele-mentos necesarios hay que definir dos variables de entorno:

set CLASSPATH = C:\JAVA\LIB; .set PATH = "\%PATH%;C:\JAVA\BIN"

Del ejemplo anterior hay que destacar que el metodo main siem-pre se declara de la misma forma, no devuelve ningun valor(void) y tiene como argumentos un objeto de tipo String.

Page 12: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 12 of 82

Go Back

Full Screen

Close

Quit

La funcion printl es la encargada de sacar por el dispositivo desalida estandar la informacion que se le pasa como argumento.

Introduccion a la Programacion Orientada a Objetos

Para realizar una primera aproximacion a un objeto podemospensar en las estructuras y registros utilizados en algunos lengua-jes de programacion. Con dichos elementos se construyen vari-ables que bajo un nombre comun recogen informacion muy het-erogenea. Para ilustrar esta introduccion consideramos unasituacion hipotetica en la que debemos construir un gestor defondos de una biblioteca, necesitarıamos inicialmente los elemen-tos siguientes.

struct ficha_bibliografica{char titulo[200];char autores[150];char editorial[100];int anno_publicacion;char ISBN[12];

}

Page 13: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 13 of 82

Go Back

Full Screen

Close

Quit

La estructura anterior se crea a partir de datos basicos de C, cadauno de los elementos que la conforman se denominan miem-bros de la estructura. La estructura en si no almacena infor-macion, solo proporciona el guion para la creacion de variablesde tipo ficha bibliografica. Para definir una variable detipo ficha bibliografica escribirıamos algo como:

struct ficha bibliografica libro;

A partir de ahı para acceder a los datos utilizamos el operador’.’, el nombre de la variable seguida de un punto y el nombredel miembro. Por ejemplo, libro.anno publicacion=2000;.Y si queremos definir funciones que manejen dicha informacionseran funciones comunes de ’C’, como por ejemplo:

void introduce_fondo(structficha_bibliografica *fondo){

printf("Introduce titulo: ");scanf("%s "fondo->titulo);if(...){ /* Se chequea la entrada*/...

}//Ffunc

Page 14: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 14 of 82

Go Back

Full Screen

Close

Quit

La rutina de introduccion anterior debera controlar que los datosintroducidos sean correctos.Ahora podrıa resultarnos de interes poder almacenar algo mas deinformacion dependiendo del tipo de publicacion, por ejemplo, sise trata de un artıculo de una revista, ademas del tıtulo delartıculo y de sus autores habrıa que almacenar el nombre de larevista, sus editores, y las paginas que ocupa dentro de esta. Eneste caso definirıamos algo como:

truct ficha_bibliografica_articulo{char nombre_revista[100];char editores[200];int p_ini,p_fin;/*ahora las anteriores */char titulo[200];char autores[150];char editorial[100];int anno_publicacion;char ISBN[12];

}

Page 15: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 15 of 82

Go Back

Full Screen

Close

Quit

Ahora si queremos realizar una introduccion de datos para lanueva estructura deberemos reescribir la funcion de introduccion,ya que la que tenemos no opera sobre este nuevo tipo de datos.

void introduce_fondo_articulo(structficha_bibliografica_articulo *fondo){

printf("Introduce nombre_revista: ");scanf("%s "fondo->nombre_revista);if(...){ ...

}//Ffunc

Observese que este planteamiento puede generar graves incon-venientes. Por ejemplo, si finalmente se han definido diez odoce estructuras correspondientes a diferentes tipos de fondos yqueremos anadir un nuevo campo numerico que corresponde alnumero de copias de dicho fondo disponibles, deberemos repasaruna por una las diez o doce definiciones de las estructuras paraanadir el campo, despues repasar las diez o doce funciones deintroduccion y anadir el codigo para la introduccion de dichocampo, etc. Lo que supone un gran costo de mantenimiento desoftware.

Page 16: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 16 of 82

Go Back

Full Screen

Close

Quit

Otro problema asociado (tal y como se ha desarrollado el ejem-plo), es el hecho de estar repitiendo una gran cantidad de codigo,generando aplicaciones mas pesadas de lo necesario.Por ultimo otro problema adicional es el hecho de no poder con-trolar el acceso a los elementos de las estructuras, no hay manerade evitar que alguien introduzca un codigo como:

fondo.anno publicacion=2100;fondo.p ini=-100;

Generando informacion erronea y posibles fuentes de errores pos-teriores al procesar la informacion.En la programacion orientada a objetos los datos y las funcionesque los manejan se encapsula en una entidad denominada clase,mediante la palabra reservada class. El ejemplo anterior podrıatomar la forma siguiente:

Page 17: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 17 of 82

Go Back

Full Screen

Close

Quit

class ficha_bibliografica{private char titulo[200];private char autores[150];private char editorial[100];private int anno_publicacion;private char ISBN[12];void introduce_fondo(){

System.out.println("Introduce titulo: ");...

}//Ffun introduce_fondo}

Con la clase anterior los datos referentes a un fondo bibliograficoası como las funciones que manejan los datos estan juntas.Ahora la funcion introduce fondo ahora es una funcion miem-bro o un metodo de la clase, que se utilizarıa mediante la sin-taxis fondo.introduce fondo(). De forma similar a como semanejan los elementos de una estructura en ’C’.

La palabra reservada private delante de la declaracion de lasvariables hacen que los usuarios de esta clase (estructura mejo-rada) no puedan manejar directamente las variables de esta, y

Page 18: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 18 of 82

Go Back

Full Screen

Close

Quit

tengan que recurrir a una serie de funciones definidas en la claseque son las encargadas de asignar valores a las distintas variables,pudiendo de esta forma controlar que no se introduzcan valoresno validos (seguridad). Consideramos ahora, al igual que en eldesarrollo anterior, la existencia de artıculos de revistas, para ellodefinimos la clase:

class ficha_bibliografica_articuloextends ficha_bibliografica{

char nombre_revista[100];char editores[200];int p_ini,p_fin;

}

La clase ficha bibliografica articulo es una subclase deficha bibliografica y hereda todos sus miembros, tanto losdatos como los metodos. En particular podemos definir

ficha bibliografica articulo articulo;

y utilizar la funcion miembro introduce fondo:

articulo.introduce fondo();

Page 19: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 19 of 82

Go Back

Full Screen

Close

Quit

Resulta obvio que un planteamiento de este tipo simplifica no-tablemente el manteniemiento del codigo, para anadir la variableque contabiliza el numero de ejemplares bastarıa con ponerla enla clase base o superclase y automaticamente serıa herededadapor la subclase.Supongamos ahora que en la clase base hemos definido unafuncion que muestra la informacion de un fondo bibliografico,esta podrıa ser algo como:

class ficha_bibliografica{private char titulo[200];...private char ISBN[12];void introduce_fondo(){

...}//Ffunc introduce...

void muestra_informacion(){System.out.println("Titulo: "+titulo);...System.out.println("ISBN: "+ISBN);

}//Ffunc muestra_...}// Fclase

Page 20: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 20 of 82

Go Back

Full Screen

Close

Quit

Este metodo sera heredado por la clase ficha bibliogra-fica articulo y podrıa utilizase directamente por parte deun objeto de esta clase sin mas que poner articulo.mues-tra informacion(). Sin embargo, su funcionamiento no serıasatisfactorio ya que no muestra todos los datos que contiene lasubclase, en particular no muestra el nombre de la revista, loseditores ni las paginas. Para solucionar el problema podemosredefinir la funcion dentro de la clase derivada:

class ficha_bibliografica_articuloextends ficha_bibliografica{

...

...void muestra_informacion(){

super.muestra_informacion();System.out.println("Nombre revista: "

+nombre_revista);...System.out.println("Paginas: "+

p_ini+"-"+p_fin);}//Ffunc muestra_...

}

Page 21: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 21 of 82

Go Back

Full Screen

Close

Quit

Observese la palabra reservada super, esta se uti-liza para referirse a la clase padre de ficha biblio-grafica articulo e indicar que se utilice la funcionmuestra informacion de la clase padre. Con lo queuna llamada a la funcion muestra informacion de fi-cha bibliografica articulo ejecuta en primer lugar lamuestra informacion de ficha bibliografica y despuescompleta imprimiendo el nombre de la revista, sus editores y laspaginas que ocupa el artıculo.

Java permitira la definicion de un tipo especial de clases que sedenominan clases abstractas y que se definen por medio de lapalabra reservada abstract en lugar de la palabra class. Estasclases tendran la peculiaridad de no ser instanciables, es decir,que no pueden crearse variables de ese tipo. Basicamente se uti-lizaran para definir clases derivadas que contengan los elementosindicados en la clase abstracta padre.

Otro elemento importante de cara a la PPO es el hecho de per-mitir la sobrecarga de funciones, la existencia en una clase devarias funciones con el mismo nombre y que se diferencia por elnumero y/o tipo de sus argumentos.

Page 22: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 22 of 82

Go Back

Full Screen

Close

Quit

Ademas de las funciones miembro definidas por el disenador dela clase hay dos funciones miembro que siempre estan asociadasa una clase. Su constructor y su destructor. Si no se definen ex-plicitamente se utilizaran el constructor y destructor de defecto.Las primeras tienen el mismo nombre que la clase y las segundasse denominan siempre finalize.

Palabras reservadas, tipos de datos,modificadores y expresiones

Las palabras reservadas en Java son:

abstract double int strictfp booleanelse interface super break extendslong switch byte final nativesynchronized case finally new thiscatch float package throw charfor private throws class gotoprotected transient const if publictry continue implements return voiddefault import short volatile doinstanceof static while

A estas hay que anadir, null, true y false.

Page 23: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 23 of 82

Go Back

Full Screen

Close

Quit

Tipos de datosSe pueden encontrar tres tipos de datos en Java:

a) Tipos de datos primitivos (integrados en el lenguaje).

b) Clases del sistema que se definen en la API de Java.

c) Clases de usuario.

Los datos primitivos no se corresponden con clases y por tantono disponen de funciones miembro.El API de Java contiene un paquete, java.lang, que almacenaclases equivalentes a los datos primitivos ademas de gran canti-dad de clases diferentes asiduamente utilizadas.La tabla siguiente contiene informacion de los tipos de datosprimitivos:

byte 8-bit comp. a 2 Entero de un Byteshort 16-bit comp. a 2 Entero cortoint 32-bit comp. a 2 Enterolong 64-bit comp. a 2 Entero largofloat 32-bit IEEE 754 Coma flotante de precision simpledouble 64-bit IEEE 754 Coma flotante de precision doblechar 16-bit Caracter Un solo caracterboolean true o false Verdadero o falso

Page 24: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 24 of 82

Go Back

Full Screen

Close

Quit

Sentencias y ComentariosAl igual que C++, los comentarios en java pueden ser de unalinea. Por medio de \\ se toma como comentario todo lo quequeda a su derecha en la linea y, tambien se toma como co-mentario cualquier texto encerrado entre /* y */. Hay unoscomentarios con significado especial que son los que comienzanpor medio de /** y finalizan normalmente con */. Estos indicanque deben incorporarse en la documentacion de la aplicacion quese genera. (Consultar documentacion sobre javadoc).Las sentencias en Java finalizan por medio de ; y los bloques decodigo se definen y delimitan por medio de { y }.Los ficheros de codigo fuente de Java solo pueden tener trestipos de sentencias que se situan fuera de cualquier bloque decodigo. Estas son las sentencias package, import y class.Las dos primeras son opcionales y en el caso de aparecer deberespetarse el orden en el que se han mostrado. La sentenciapackage da nombre al paquete al que perteneceran las clasesque se definan en este fichero. La sentencia import sirve pararefererirse de una forma mas corta a un determinado conjuntode clases y finalmente por medio de la palabra class se definennuestras clases.

Page 25: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 25 of 82

Go Back

Full Screen

Close

Quit

package prueba.miprueba;import java.awt.Panel;class miPanel extends Panel{......

Las dos primeras lıneas del codigo anterior indican:

- Si alguien utilizara nuestra clase deberıa referirse a ella comoprueba.miprueba.miPanel.

- Como hemos utilizado la sentencia import podemos utilizarla clase Panel (...extends Panel...) sin necesidad dehacer referencia al nombre completo de la clase.

Identificadores y literales

Los identificadores en Java deben comenzar por un caracter al-fabetico y pueden contener posteriormente cualquier cantidadde caracteres y dıgitos. Los caracteres alfabeticos son caracteresunicode.

Page 26: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 26 of 82

Go Back

Full Screen

Close

Quit

La tabla siguiente recoge los distintos literales asociados a lostipos de datos

byte,short,int Dıgitos decimales que no empiecen por 00x seguido de dıgitos hexadecimales0 seguido de dıgitos octales

long Igual que los anteriores peroseguido del caracter L

float Dıgitos con punto decimal y/oexponente seguidos del caracter F

double Como float pero sin el sufijo Fboolean true o falsechar Cualquier caracter ASCI/UNICODE

entre comillas simplesString∗ Secuencia de caracteres o secuencias

de escape ente comillas∗Los datos de tipo String no son primitivos, corresponden a laclase del mismo nombre.

Creacion de objetos/variables

La creacion (instanciacion) de objetos se realiza por medio deuna llamada a la funcion constructor de la clase. Dicha funcion

Page 27: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 27 of 82

Go Back

Full Screen

Close

Quit

puede tener o no argumentos. Si el creador de la clase no hadefinido un constructor el sistema define un constructor por de-fecto que no tiene argumentos, en el momento que el disenadorcrea un constructor el sistema elimina el constructor por defecto.

ficha_bibliografica ficha;ficha=new ficha_bibliografica();

La primera instruccion creando una referencia a un objeto de laclase ficha bibliografica y hasta que no se llama al con-structor ficha bibliografica() no se crea el objeto. Ini-cialmente tras la declaracion todos los objetos contienen unareferencia a null indicando que no han sido instanciados). Unaclase no puede ser instanciada si es abstracta o contiene miem-bros estaticos.

La declaracion de variables de tipos basicos en su forma massencilla es igual que en C, C++, por ejemplo:

int i=2,j,k=3; float a;

Las declaraciones/definiciones pueden situarse en cualquier partedel programa.

Page 28: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 28 of 82

Go Back

Full Screen

Close

Quit

Operadores

AritmeticosOperador Uso Descripcion+ op1 + op2 Suma op1 y op2- op1 - op2 Resta op2 de op1* op1 * op2 Multiplica op1 y op2/ op1 / op2 Divide op1 por op2% op1 % op2 Resto de dividir op1 por op2- -op cambio de signo++ op++ Incrementa op en 1;

evalua el valor antes de incrementar++ ++op Incrementa op en 1;

evalua el valor despues de incrementar- - op- - Disminuye op en 1;

evalua el valor antes de disminuir- - - -op Disminuye op en 1;

evalua el valor despues de disminuir

Logicos

Operador Uso Descripcion> op1 > op2 op1 es mayor que op2>= op1 >= op2 op1 es mayor o igual que op2

Page 29: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 29 of 82

Go Back

Full Screen

Close

Quit

Operador Uso Descripcion (cont.)< op1 < op2 op1 es menor que op2<= op1 <= op2 op1 es menor o igual que op2== op1 == op2 op1 y op2 son iguales!= op1 != op2 op1 y op2 son distintos

RelacionalesOperador Uso Devuelven true cuando& op1 & op2 op1 y op2 son verdaderos&& op1 && op2 op1 y op2 son verdaderos| op1 | op2 uno de los dos es verdadero|| op1 || op2 uno de los dos es verdadero! !op op es falso

La diferencia entre & y && es que el primero comprueba siemprelas dos condiciones op1 y op2, mientras que && si encuentraque op1 es falsa entonces ya no comprueba op2 puesto que elresultado de la expresion siempre sera falso. El comportamientode || es similar, si op1 es cierto ya no se comprueba op2 ya queel resultado de la evaluacion siempre sera cierto.

Page 30: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 30 of 82

Go Back

Full Screen

Close

Quit

Operadores de bits

Op. Uso Descripcion>> op1 >> op2 desplaza a la dcha op2 bits de op1<< op1 << op2 desplaza a la izda op2 bits de op1>>> op1 >>> op2 desp. a dcha op2 bits de op1(sin signo)& op1 & op2 bitwise and| op1 | op2 bitwise orˆ op1ˆop2 bitwise xor˜ ˜ op bitwise complemento

Las variables numericas en Java siempre son con signo, los oper-adores de desplazamiento habituales >> y << actuan moviendolos bits del entero correspondiente pero respetando el signo. Paradesplazar todos los bits ignorando el hecho de que uno de elloscorresponde al signo se utiliza el operador >>>.

Otros operadores

El operador de conversion o casting se utiliza para convertir untipo de dato en otro, su sintaxis es analoga a la de C y C++.

(tipo_nuevo)variable_de_otro_tipo;

Page 31: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 31 of 82

Go Back

Full Screen

Close

Quit

Operadores de asignacion

Operador Uso Descripcion+ = op1 + = op2 op1 = op1 + op2− = op1 − = op2 op1 = op1 - op2∗ = op1 ∗ = op2 op1 = op1 * op2/ = op1 / = op2 op1 = op1 / op2% = op1 % = op2 op1 = op1 % op2& = op1 & = op2 op1 = op1 & op2| = op1 | = op2 op1 = op1 | op2ˆ= op1ˆ= op2 op1 = op1ˆop2<<= op1 <<= op2 op1 = op1 << op2>>= op1 >>= op2 op1 = op1 >> op2>>>= op1 >>>= op2 op1 = op1 >>> op2

Precedencia de operadores

operadores sufijo [] . (parentesis)operadores unarios ++expr - -expr +expr -expr ˜!creacion o tipo new (type)exprmultiplicadores * / %suma/resta + -desplazamiento << >> >>>

Page 32: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 32 of 82

Go Back

Full Screen

Close

Quit

relacionales < > <= >= instanceofigualdad == !=bitwise AND &bitwise exclusive OR ˆbitwise inclusive OR |AND logico &&OR logico ||condicional ? :asignacion = + = − = ∗ = / = % =

ˆ= & = | = <<= >>= >>>=

Page 33: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 33 of 82

Go Back

Full Screen

Close

Quit

Declaracion de clases, reglas de ambito,modificadores de almacenamiento, perdurabilidad

y accesibilidad. this y super

Declaracion de clases

La declaracion completa de una clase es:[modificadores]

class Nombre_de_Clase[extends Nombre_de_Superclase]

[implements lista_de_Interfaces]{

declaracion_de_variables_miembro;declaracion_de_funciones_miembro;inicializador_de_clase;

. . .}

Si en la declaracion se omite la clausula extends se toma pordefecto que extiende a la clase object superclase de la quederivan todas las clases.

Si en la declaracion se indica que la clase implementa,implements, algun interfaz entonces deberan implementarse to-dos los miembros de dicho interfaz.

Page 34: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 34 of 82

Go Back

Full Screen

Close

Quit

Las variables miembro se declaran en la forma siguiente[modificadores] identificador_tipo_de_dato

identificador;

Los modificadores especifican la visibilidad, accesibilidad yexistencia de la variable, el identificador tipo de dato co-rresponde a un tipo de dato primitivo o uno definido por elusuario

Las funciones miembro admiten una formulacion general comomodificadores tipo_resultado

identificador(lista_de_argumentos){... cuerpo de la funcion...

}

Los modificadores especifican la visibilidad, accesibilidad yexistencia de la funcion, tipo resultado es el tipo devueltopor la funcion y puede ser cualquier tipo base o tipos definidospor el usuario incluido el tipo void que se utiliza para indicarque la funcion no devuelve nada.lista de argumentos es una lista de declaraciones de varia-bles separadas por comas.

Page 35: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 35 of 82

Go Back

Full Screen

Close

Quit

El inicializador de clase es un codigo que la maquina vir-tual ejecuta unicamente al cargar la clase, su estructura es:static{... codigo del proceso de inicilizacion...}

Reglas de ambito

Un ambito es un bloque de codigo encerrado entre { y }. Laexistencia de las variables es unicamente conocida dentro delambito en la que se definen (y dentro de ambitos contenidos eneste ambito si los hay si los hay). En particular las variables deuna funcion son conocidas unicamente dentro de dicha funcion(puesto que la definicion/implementacion de la funcion se realizaen el ambito que sigue al nombre de dicha funcion).

En el ejemplo de la transparencia siguiente la variable i es ac-cesible desde dentro de las dos funciones (ya que se encuentrandentro del ambito en donde se definio). k solo es accesible desdefuncion1() y su intento de utilizacion funcion2() generaraun error. Finalmente, las dos variables j son diferentes e inde-pendientes, cada una se conoce unicamente en su funcion.

Page 36: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 36 of 82

Go Back

Full Screen

Close

Quit

class MiClase{

int i;int funcion1(){

int j;int k;i=6;...

}int funcion2(){

int j;k=3; //Error al compilari=7;...

}...

}

Page 37: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 37 of 82

Go Back

Full Screen

Close

Quit

Sobrecarga de funciones

Java soporta la sobrecarga de funciones, esto es, distintas fun-ciones que comparten el mismo nombre, basta para ello con tenerdistintos argumentos de llamada.

Page 38: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 38 of 82

Go Back

Full Screen

Close

Quit

Constructores y destructores

Un constructor es un metodo de una clase que sirve para ini-cializar un objeto.

Es una funcion que se ejecuta siempre al crear un objeto. Losconstructores de una clase tienen siempre el nombre de la clasey que no tiene ningun valor devuelto (ni siquiera void).

Si el usuario no declara un constructor el sistema siempre creaun constructor por defecto sin argumentos. En el momento enel que el usuario define un constructor el constructor del sistemase elimina y es sustituido por el, o los , constructores definidos.

Al tratarse de un metodo mas el constructor puede sobrecargarsetal y como se mostro en el apartado anterior y dependiendo comose le invoque se considerara uno u otro constructor.

Para inicializar un objeto basta con llamar a su constructor des-pues de la palabra reservada new y asignarlo a una referenciadeclarada previamente.

Page 39: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 39 of 82

Go Back

Full Screen

Close

Quit

Un destructor es un metodo de clase que sirve para realizar ciertasoperaciones necesarias al dejar de existir un objeto, por ejemplo,cerrar conexiones de una comunicacion, cerrar ficheros, etc.

Java dispone de un elemento denominado recolector de basura(garbage collector) que se encarga de liberar memoria asignada aobjetos que ya no se utilizan, aun ası en ocasiones sera necesariodisponer de una funcion que realice operaciones adicionales a lamera liberacion de memoria. Para este fin se crea un metodo,denominado finalize, con las siguientes caracterısticas:

protected void finalize() throws throwable

El significado de la ultima parte de la declaracion se estudiaramas adelante, de momento basta con saber que dicha funciondebe tener ese prototipo.

Page 40: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 40 of 82

Go Back

Full Screen

Close

Quit

Modificadores

Un modificador es una palabra reservada que sirve para indicarcuando existe o cuando y por quien es accesible una clase, funciono variable.

Modificador abstract

El modificador abstract sobre una clase indica que esta nopuede materializarse (no pueden crearse objetos a partir de ella).Una clase abstracta es una clase que se utiliza para crear sub-clases.

Un metodo declarado abstract no se implementa en la clasesino en alguna clase derivada. Si una clase contiene metodosabstract obligatoriamente debe declararse abstract.

Si no se indica nada una clase es visible en todas las clasesdeclaradas en el mismo paquete, si no se indica ningun paquetees visible en el paquete por defecto, el paquete al que pertenecentodas las clases que no declaran un paquete.

Page 41: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 41 of 82

Go Back

Full Screen

Close

Quit

Modificador final

El modificador final se utiliza para hacer referencia a elemen-tos constantes. Al definir una variable local o miembro con elmodificador final dicha variable no puede alterar su valor (ypor tanto debe inicializarse en la definicion). Cuando se utilizael modificador final sobre una funcion miembro dicha funcionno puede redefinirse en subclases de su clase y, si se utiliza sobreuna clase dicha clase no puede derivarse para crear subclases.

Modificadores public,protected, private

Por defecto una clase y sus miembros solo son conocidas por lasotras clases que se encuentran dentro de un mismo paquete.

El modificador public sobre una clase provoca que la clasepueda ser utilizada por objetos que esten fuera del paquete ac-tual, bien directamente o por herencia. Para acceder desde dis-tintos paquetes basta con importar la clase.

Sobre un miembro de una clase (funcion o variable), indica quedicho miembro es accesible desde cualquier sitio.

Page 42: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 42 of 82

Go Back

Full Screen

Close

Quit

Los siguientes dos modificadores solo son utilizables sobre miem-bros.El modificador protected es el siguiente en orden creciente derestriccion. Los miembros con este modificador son accesiblesdesde la propia clase a la que pertenecen y desde las clases ysubclases del mismo paquete. Si se declaran subclases en otrospaquetes seran accesibles unicamente desde el interior de lassubclases.

Este nivel de acceso se utiliza cuando es apropiado para unasubclase de la clase tener acceso a los miembros, pero no asıpara las clases no relacionadas con ellas (ni por herencia ni porpertenencia al mismo paquete).

El modificador private es el de nivel de acceso mas restringido.Un miembro privado es accesible solo para la clase en la que estadefinido. Se utiliza este acceso para declarar miembros que solodeben ser utilizados por la clase.

Page 43: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 43 of 82

Go Back

Full Screen

Close

Quit

Modificador static

Normalmente cuando se crea un objeto de un cierta clase esterecibe una copia propia de todas las variables miembro de la clase.Sin embargo, es posible hacer que alguna variable miembro seacomun a todos los objetos definidos de la clase. Dichas vari-ables se denominan estaticas y se declaran mediante el modifi-cador static. Al igual que variables miembro se pueden declararmetodos estaticos, esto evita que el metodo pueda acceder a lasvariables de instancia no estaticas, es decir, los metodos estaticossolo pueden actuar sobre variables estaticas. Cuando se accedea una variable o miembro estatico puede hacerse por medio dela clase o por medio del objeto de la clase. Este modificador noactua sobre las clases.

Modificador synchronized

Este modificador actua unicamente sobre funciones miem-bro y evita que una funcion miembro pueda ser utilizada si-multaneamente por varios objetos. Por defecto los metodossynchronized son no estaticos si se quiere pueden declararseestaticos.

Page 44: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 44 of 82

Go Back

Full Screen

Close

Quit

Modificador native

Este modificador se utiliza para declarar funciones implemen-tadas externamente en otros lenguajes como C y C++. Dichasfunciones carecen de codigo en el programa Java. Este modifi-cador actua al igual que el anterior unicamente sobre funcionesmiembro.

Modificador volatile

Este modificador actua unicamente sobre variables e indica a lamaquina virtual que el valor de dicha variable puede modificarseindependientemente del proceso en curso, es decir, puede sermodificado por otros subprogramas.

Modificador transient

El modificador transient actualmente no tiene efecto, se usaraen el futuro para implementar la persistencia de objetos (un modomediante el cual los objetos persisten despues de que el programahaya terminado).

Page 45: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 45 of 82

Go Back

Full Screen

Close

Quit

La siguiente tabla le muestra los niveles de acceso permitidos porcada modificador de los comentados anteriormente

Especificador clase subclase paquete mundoprivate Xprotected X X* Xpublic X X X Xpackage X X

La primera columna indica si la propia clase tiene acceso al miem-bro definido por el especificador de acceso. La segunda columnaindica si las subclases de la clase (sin importar dentro de quepaquete se encuentren estas) tienen acceso a los miembros. Latercera columna indica si las clases del mismo paquete que laclase (sin importar su parentesco) tienen acceso a los miembros.La cuarta columna indica si todas las clases tienen acceso a losmiembros.

Page 46: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 46 of 82

Go Back

Full Screen

Close

Quit

this y super

En ocasiones las variables locales de una funcion miembro deun objeto pueden tener el mismo nombre que algunas variablesmiembro del objeto, o las variables miembro de una clase puedentener el mismo nombre que algunas de las variables miembro desu clase padre. Por medio de la palabra reservada this tene-mos una referencia al objeto que ha llamado a un determinadometodo, y nos permite de esta forma referirnos a las variablesmiembro del objeto. Por otro lado con super podemos accedera los miembros definidos en la clase padre.

Cuando se trabaja sobre los constructores el significado de estaspalabras reservadas es diferente. Dentro de un constructor la lla-mada a this realiza a una llamada del constructor de la clase sinargumentos o al constructor existente cuyos argumentos encajencon los suministrados con this. La palabra reservada supercuando se llama dentro del constructor de una subclase lo quehace es llamar al constructor correspondiente de la clase padre.

Page 47: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 47 of 82

Go Back

Full Screen

Close

Quit

Paquetes: package e import

Un paquete (package) es una coleccion de clases e interfacesrelacionadas. Mediante la orden package situada al principiodel fichero se especifica el paquete al que pertenecen las clases einterfaces que se va a construir en dicho fichero. Su sintaxis es:

package nombre_paquete;

La sentencia import se utiliza para especificar los paquetes enlos que se encuentran las clases a las que se referira el resto delprograma. La existencia de los paquetes junto con los distintostipos de acceso permiten disenar distintas polıticas de seguridad.

import nombre_paquete(s); // admite comodines *

Gracias a la existencia de los paquetes dos clases pueden tenerel mismo nombre, siempre y cuando se encuentren en paquetesdiferentes. Para su utilizacion bastara con anteponer el nombredel paquete seguido de un punto antes del nombre de la clase.

Los paquetes pueden anidarse formando una jerarquia y parareferirse a un clase dentro de un paquete que esta incluido enotros basta con anteponer al nombre de la clase la trayectoria depaquetes hasta el paquete final separados por puntos.

Page 48: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 48 of 82

Go Back

Full Screen

Close

Quit

Se puede acceder a todas las clases e interfaces del paquete desdeclases e interfaces de dicho paquete y se puede acceder a todoslos miembros de las clases siempre y cuando no se hayan definidocomo private.

Cada paquete debe corresponder con un directorio del mismonombre en el sistema de ficheros. Los paquetes anidados se re-flejan en la jerarquıa del sistema de ficheros por medio de directo-rios contenidos en otros directorios. Para indicarle a la maquinavirtual a partir de donde buscar los directorios que contienen lasclases se define una variable de entorno llamada CLASSPATHa la que se le asigna como valor el o los directorios raiz de loscuales cuelgan los directorios de clases.

Si una clase de un paquete se declara como publica debe ir solaen un fichero con el mismo nombre.

Interfaces: interface, implements

Un interfaz se puede definir como una clase con todos susmetodos abstractos y sus variables constantes. Por defecto to-dos sus metodos son public y abstract y todas sus variablesson final, public y static.

Page 49: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 49 of 82

Go Back

Full Screen

Close

Quit

Cuando una clase declara una lista de interfaces hereda de estossus constantes y debe definir todos los metodos declarados enellos.

La declaracion de un interfaz se realiza:[public] interface nombre_interfaz

[extends lista_super_interfaces]{... Cuerpo del interfaz}

El modificador public hace que el interfaz sea accesible porcualquier clase en cualquier paquete, sino solo sera accesible porlas clases definidas en el mismo paquete que el interfaz.

Un interfaz puede derivarse de varios interfaces, no unicamentede uno tal y como ocurre con la derivacion de clases.

Para que una clase implemente (utilice) uno o mas interfaces seutiliza la palabra reservada implements, tal y como se mostroen la declaracion de clases. Al igual que en el caso de derivacionde interfaces, una clase puede implementar varios interfaces dis-tintos. La lista de interfaces se separa con comas.

Page 50: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 50 of 82

Go Back

Full Screen

Close

Quit

La clase String

Para manipular y almacenar cadenas de caracteres que no puedenmodificarse ni en contenido ni en longitud Java proporciona laclase String.

Cualquier cadena de caracteres encerrada entre comillas se con-vierte automaticamente en un objeto de tipo String.

Para declarar y definir un objeto de tipo String utilizaremos:

String variable_string;variable_string="Contenido de la variable";

o bien directamenteString variable_string="Contenido de ...";

o bien por medio del constructor de la claseString variable_string;variable_string= new String("Contenido de ...");

Page 51: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 51 of 82

Go Back

Full Screen

Close

Quit

Aunque la clase String almacene cadenas constantes pueden rea-lizarse construcciones como

String var_string=" Adios ";var_string= "Hola y " + var_string;

En la que en realidad no se modifica var string sino que se creaun nuevo objeto String y se asigna a la variable var string.Este nuevo objeto contiene el contenido anterior concatenadocon la cadena ”Hola y ”.

El operador + esta sobrecargado y puede concatenarse cualquierobjeto con un String, para ello se utiliza el metodotoString() que tienen todos los objetos (lo heredan de la clasebase Object)

Los constructores de la clase String son:

public String()public String(byte bytes[])public String(byte bytes[],int pos, int tam)public String(char cadena[])public String(char cadena[],int pos, int tam)public String(String cadena)public String(StringBuffer buffer)

Page 52: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 52 of 82

Go Back

Full Screen

Close

Quit

Algunos metodos importantes de la clase String son:

public char charA(int pos)public int compareTO(String str)public String concat(String str)public static String copyValueOf(char cad[],

int pos, int tam)public static String copyValueOf(char cad[])public boolean endsWith(String sufijo)public boolean startsWith(String prefijo)public boolean equals(Object objeto)public boolean equalsIgnoreCase(String str)public int indexOf(char ch)public int indexOf(char ch,int desde)public int indexOf(String Substr)public int indexOf(String Substr,int desde)public int lastIndexOf(char ch)public int lastIndexOf(char ch,int desde)public int lastIndexOf(String Substr)public int lastIndexOf(String Substr,int desde)public int length()public String replace(char viejo, char nuevo)

Page 53: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 53 of 82

Go Back

Full Screen

Close

Quit

public String substring(int desde)public String substring(int desde,int hasta)public char[] toCharArray()public String toLowerCase()public String toUpperCase()public String trim()public static String valueOf(Object obj)public static String valueOf(char datos[])public static String valueOf(boolean b)public static String valueOf(char c)public static String valueOf(int i)public static String valueOf(long l)public static String valueOf(float f)public static String valueOf(double d)

Otra clase importante es la clase StringBuffer, es similar ala anterior pero permite la modificacion y redimensionamiento.Sus constructores son

public StringBuffer()public StringBuffer(int long)public StringBuffer(String str)

Page 54: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 54 of 82

Go Back

Full Screen

Close

Quit

Y algunos de sus metodospublic synchronized StringBuffer

append(Object obj)public synchronized StringBuffer

append(String str)public synchronized StringBuffer

append(char str[])public synchronized StringBuffer

append(char str[],int desde, int tam)public synchronized StringBuffer

append(char ch)public StringBuffer append(boolean b)public StringBuffer append(int i)public StringBuffer append(long l)public StringBuffer append(float f)public StringBuffer append(double d)public int capacity()public synchronized char charAt(int pos)public synchronized void

ensureCapacity(int cap_minima)public synchronized StringBuffer

insert(int pos,Object obj)

Page 55: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 55 of 82

Go Back

Full Screen

Close

Quit

public synchronized StringBufferinsert(int pos, String str)

public synchronized StringBufferinsert(int pos, char str[])

public StringBuffer insert(int pos,boolean b)public synchronized StringBuffer

insert(int pos, char c)public StringBuffer insert(int pos, int i)public StringBuffer insert(int pos, long l)public StringBuffer insert(int pos, float f)public StringBuffer insert(int pos, double d)public int length()public synchronized StringBuffer reverse()public synchronized void

setLength(int nueva_long)

Page 56: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 56 of 82

Go Back

Full Screen

Close

Quit

La clase Math

La clase Math es una clase con todos sus miembros estaticos porlo que no es necesario instanciar un objeto para su utilizacion.Los metodos mas importantes:

public static final double Epublic static final double PIpublic static double abs(double d)public static double acos(double d)public static double asin(double d)public static double atan(double d)public static double atan2(double d)public static double ceil(double d)public static double floor(double d)public static double round(double d)public static double rint(double d)public static double

IEEEremainder(double d1,double d2)public static double cos(double d)public static double sin(double d)public static double tan(double)

Page 57: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 57 of 82

Go Back

Full Screen

Close

Quit

public static double exp(double d)public static double log(double d)public static double max(double d1, double d2)public static double min(double d1, double d2)public static double random()public static double power(double d1,double d2)public static double sqrt(double d)public static double toDegrees(double d)public static double toRadians(double)

Page 58: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 58 of 82

Go Back

Full Screen

Close

Quit

Tratamiento de excepciones: try, catch, throw, throws

Una excepcion es una situacion anomala que interrumpe el flujode un programa, por ejemplo, un archivo que se va a abrir y noexiste, el acceso a posiciones de un vector mas alla de sus lımites,una division por cero, etc.

Dichas excepciones pueden originarse de dos formas, bien porque el programa hace algo ilegal (situacion habitual) o bien porque el programa genera de una forma explıcita el tratamiento deuna situacion de error. Muchas de las situaciones de excepcionprevisibles estan contempladas directamente por la maquina java,pero aun ası, desde nuestro programa podemos utilizar dichassituaciones ya definidas, modificar dichas situaciones definiendonuevos tratamientos y, generar nuevas excepciones.

Para que un metodo pueda lanzar una excepcion hay que indi-carlo en su declaracion y despues lanzarla cuando se produzca elerror considerado. Para indicar las excepciones que puede lanzarun metodo se utiliza la palabra reservada throws y para lanzarla excepcion es necesario crear un objeto de tipo Exception o dealguna de sus subclases y utilizar la palabra reservada throw.

La sintaxis de la indicacion del lanzamiento de excepciones porparte de un metodo es:

Page 59: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 59 of 82

Go Back

Full Screen

Close

Quit

declaracion_de_metodo() throws lista_excepciones{... cuerpo del metodo

}

Y en el cuerpo del metodo, si la excepcion la ha definido elusuario, debe aparecer en el punto en el que se detecta lasituacion anomala la palabra reservada throw seguida de unobjeto de la clase Throwable o de alguna de sus subclases(Exception, error, etc.)

Para definir y manejar excepciones creadas por el programadorse utilizan los manejadores de excepciones que se definen pormedio de tres bloques de sentencias encabezadas por las palabrasreservadas try, catch y finally.

Lo primero que hay que hacer para que un metodo sea capaz detratar una excepcion generada por la maquina virtual Java o porel propio programa mediante una instruccion throw es encerrarlas instrucciones susceptibles de generarla en un bloque try.

A continuacion del bloque try deben aparecer uno o mas blo-ques encabezados por sentencias catch que capturan posiblesexcepciones e indican como manejarlas.

Page 60: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 60 of 82

Go Back

Full Screen

Close

Quit

Finalmente puede aparecer, no es obligatorio, un bloque en-cabezado por la sentencia finally, las instrucciones contenidasen dicho bloque se ejecutaran se produzca o no una excepcionen el bloque try.La sintaxis del tratamiento de excepciones queda:

try{... bloque de instrucciones...}catch(TipodeExcepcion variable){... bloque de instrucciones...}catch(TipodeExcepcion variable){... bloque de instrucciones...}...catch(TipodeExcepcion variable){... bloque de instrucciones...}finally{... bloque de instrucciones...}

Page 61: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 61 of 82

Go Back

Full Screen

Close

Quit

Observese que en cada setencia catch aparece la declaracion deun tipo de excepcion que es la que indica que excepcion debemanejar dicho bloque.

Cuando se lanza una excepcion,la maquina virtual recorre la pilade llamadas de metodos en busca de alguno que sea capaz detratar la clase de excepcion lanzada. Para ello, comienza exa-minando el metodo donde se ha producido la excepcion. Si estemetodo no es capaz de tratarla, examina el metodo desde el quese realizo la llamada al metodo donde se produjo la excepciony ası sucesivamente hasta llegar al ultimo de ellos. En caso deque ninguno de los metodos de la pila sea capaz de tratar laexcepcion, la maquina virtual Java muestra un mensaje de errory el programa termina.

Throwable

→ Error→ . . .

→ Exception

{→ RuntimeException→ . . .→ IOException

RuntimeException contiene AritmeticException, Null-PointerException,..., IndexOutBoundException. YIOException contiene EOFException, ..., FileNot-FoundException

Page 62: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 62 of 82

Go Back

Full Screen

Close

Quit

Entrada y salida

Java proporciona numerosas clases para entrada y salida, noscentraremos en las dedicadas a entrada y salida sobre ficheros.

Clase File

La clase File proporciona metodos para manejo de archivos,basicamente permite dar nombre a los ficheros, consulta de atri-butos y manipulacion de directorios independientemente del sis-tema. No proporciona metodos para lectura y escritura.

public static final String Separatorpublic static final char separatorCharpublic static final String pathSeparatorpublic File(String Path)

throws NullPointerExceptionpublic File(String Path, String Name)public File(File dir, String name)public String getName()public String getPath()public String getAbsolutePath()public String getParent()public boolean exists()public boolean canWrite()

Page 63: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 63 of 82

Go Back

Full Screen

Close

Quit

public boolean canRead()public boolean isFile()public boolean isDirectory()public long lastModified()public long length()public boolean mkdir()public boolean renameTo(File dest)public boolean mkdirs()public String[] list()public String[] list(FilenameFilter filter)public boolean delete()public int hashCode()public boolean equals(Object obj)public String toString()

Clase RandomAccessfile

Esta clase de entrada/salida es similar a las funciones habitualesde C, sus metodos son los siguientes:

public RandomAccessFile(File file, Stringmode) throws IOException

public RandomAccessFile(String name, Stringmode)throws IOException

Page 64: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 64 of 82

Go Back

Full Screen

Close

Quit

public void close() throws IOExceptionpublic final FileDescriptor getFD()

throws IOExceptionpublic long getFilePointer()

throws IOExceptionpublic long length() throws IOExceptionpublic int read() throws IOExceptionpublic int read(byte b[]) throws IOExceptionpublic int read(byte b[], int off,

int len) throws IOExceptionpublic final boolean readBoolean()

throws IOExceptionpublic final byte readByte() throws IOExceptionpublic final char readChar() throws IOExceptionpublic final double readDouble()

throws IOExceptionpublic final float readFloat() throws IOExceptionpublic final void readFully(byte b[])

throws IOExceptionpublic final void readFully(byte b[],

int off, int len) throws IOException

Page 65: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 65 of 82

Go Back

Full Screen

Close

Quit

public final int readInt() throws IOExceptionpublic final String readLine()

throws IOExceptionpublic final long readLong() throws IOExceptionpublic final short readShort()

throws IOExceptionpublic final int readUnsignedByte()

throws IOExceptionpublic final int readUnsignedShort()

throws IOExceptionpublic final String readUTF()

throws IOExceptionpublic void seek(long pos) throws IOExceptionpublic int skipBytes(int n) throws IOExceptionpublic void write(byte b[]) throws IOExceptionpublic void write(byte b[], int off,

int len) throws IOExceptionpublic void write(int b) throws IOExceptionpublic final void writeBoolean(boolean v)

throws IOExceptionpublic final void writeByte(int v)

throws IOException

Page 66: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 66 of 82

Go Back

Full Screen

Close

Quit

public final void writeBytes(String s)throws IOException

public final void writeChar(int v)throws IOException

public final void writeChars(String s)throws IOException

public final void writeDouble(double v)throws IOException

public final void writeFloat(float v)throws IOException

public final void writeInt(int v)throws IOException

public final void writeLong(long v)throws IOException

public final void writeShort(int v)throws IOException

public final void writeUTF(String str)throws IOException

Page 67: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 67 of 82

Go Back

Full Screen

Close

Quit

Por ultimo una ultima forma de acceder a ficheros (y a una grancantidad de dispositivos) es por medio de canales, por mediode flujos de datos que se asocian a distintos dispositivos de en-trada/salida (teclado, pantalla, ficheros, impresoras, etc.). To-das las clases derivan de las clases abstractas InputStream yOutputStream.

Metodos de InputStreampublic InputStream()public int available()public void close()public void mark(int readlimit)public boolean markSupported()public abstract int read()public int read(byte b[])public int read(byte b[],int pos,int tam)public void reset()public long skip(long n)

Todos los metodos excepto mark() y markSupported puedengenerar excepciones de la clase IOException.

Page 68: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 68 of 82

Go Back

Full Screen

Close

Quit

Metodos de PrintStream(Tiene en cuentalas caracteristicas de la maquina)

public PrintStream(OutputStream out)public PrintStream(OutputStream out,

boolean autoFlush)public boolean checkError()public void close()public void flush()public void print(boolean b)public void print(char c)public void print(char s[])public void print(int i)public void print(long l)public void print(float f)public void print(double d)public void print(String s)public void print(Object obj)public void println()public void println(boolean b)public void println(char c)public void println(char c[])public void println(int i)

Page 69: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 69 of 82

Go Back

Full Screen

Close

Quit

public void println(long l)public void println(float f)public void println(double d)public void println(String s)public void println(Object obj)protected void setError()public void write(int b)public void write(byte b[], int pos, int tam)

Esta clase no genera excepciones, para ver si se han producidoerrores hay que llamar a �checkError().

La clase System

La clase System contiene tres atributos estaticos, out,in y err que son, respectivamente, objetos de lascalses PrintStream, InputStream y PrintStream(PrintStream deriva de FilterOutputStream que deriva di-rectamente de OutputStream) Dicha clase se ha utilizado enlos ejemplos para escritura en pantalla y lectura de teclado.Veamos un ejemplo de lectura de datos:

Page 70: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 70 of 82

Go Back

Full Screen

Close

Quit

import java.io.*;class System2{

public static void main(String args[]){byte b[]=new byte[255];System.out.print("-> ");try{

System.in.read(b,0,255);}catch(Exception e){

System.err.println(e);}System.out.println("La linea escrita es:

"+new String(b));}}

Mas sobre entrada y salida por teclado y pantalla

Existen clases equivalentes a las anteriores que en lugar de traba-jar con canales que transportan bytes (manipulados adecuada-mente segun la maquina) trabajan directamente con caracteresunicode 2 bytes). Estas son las clases abstractas Reader

Page 71: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 71 of 82

Go Back

Full Screen

Close

Quit

Writer, equivalentes a InputStream y OutputStream, res-pectivamente, y sus clases derivadas. En particular para lec-tura se utilizara la clase BufferedReader y para escrituraPrintWriter. Los metodos de estas son similares a los metodosde sus homologas.

Senalamos unicamente sus constructores y algun metodo adi-cional.

BufferedReaderpublic BufferedReader(Reader in)public BufferedReader(Reader in, int tamao)public String Readline() throws IOException

PrinterWriterpublic PrintWriter(OutputStrem out)public PrintWriter(OutputStrem out,

boolean autoFlush)public PrintWriter(Writer out)public PrintWriter(Writer out,

boolean autoFlush)

Reescribimos el programa anterior utilizando estas clases:

Page 72: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 72 of 82

Go Back

Full Screen

Close

Quit

import java.io.*;class ReaderWriter{

public static void main(String args[]){String Linea=null;BufferedReader in=new BufferedReader(

new InputStreamReader(System.in));PrintWriter out=new PrintWriter(

System.out,true);System.out.print("-> ");try{

Linea=in.readLine();}catch(Exception e){

System.err.println(e);}out.println(Linea);

}}

Clases FileInputStream y FileOutputStream

Estas clases implementan las capacidades de InputStream yOutputStream para lectura y escritura sobre ficheros.

Page 73: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 73 of 82

Go Back

Full Screen

Close

Quit

Sus constructores son:FileInputStream

FileInputStream(String nombre)FileInputStream(File fichero)FileInputStream(FileDescriptor fd)

FileOutputStreamFileOutputStream(String nombre)FileOutputStream(File fichero)FileOutputStream(FileDescriptor fd)FileOutputStream(FileDescriptor fd,

boolean add)

El siguiente ejemplo abre un fichero y lo muestra en pantalla enminusculas:import java.io.*;

class miexcepcion extends Exception {void s(){System.out.println("Falta el

nombre del fichero");}

}

Page 74: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 74 of 82

Go Back

Full Screen

Close

Quit

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

FileInputStream f; int c=0;try{

if(args.length==0) throw new miexcepcion();f=new FileInputStream(args[0]);c=f.read();while(c!=-1){if((c>64) && (c<91)) c+=32;System.out.print((char)c);c=f.read();

}f.close();

}catch(IOException e){

System.err.println("Error en apertura olectura de "+args[0]);

}catch(miexcepcion em){

em.s();}

}}

Page 75: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 75 of 82

Go Back

Full Screen

Close

Quit

Clases FileReader y FileWriter

Al igual que en el caso de canales de entrada/salida estandar paraficheros existen las clases FileReader y FileWriter que ma-nipulan canales de caracteres. Estos heredan los metodos de sussuperclases InputStreamReader y OutputStreamReader.

ConstructoresFileReader

FileReader(String nombre)FileReader(File fichero)FileReader(FileDescriptor fd)

FileWriterFileWriter(String nombre)FileWriter(File fichero)FileWriter(FileDescriptor fd)FileWriter(FileDescriptor fd, boolean add)

Y los metodos estrictamente de lectura y escritura sonFileReader

public int read()public int read(char b[])public int read(char b[], int pos, int tam)

Page 76: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 76 of 82

Go Back

Full Screen

Close

Quit

FileWriterpublic void write(int b)public void write(char b[])public void write(char b[], int pos, int tam)public void write(String s)public void write(String s, int pos, int tam)

Finalizamos con un ejemplo en el que se lee de teclado y se es-cribe en un fichero lo introducido hasta que se detecta el caracterde final de fichero C.

Page 77: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 77 of 82

Go Back

Full Screen

Close

Quit

import java.io.*;class FReaderWriter{

public static void main(String args[]) {FileWriter fout;BufferedReader tec;PrintWriter filtro;String linea;try{fout=new FileWriter("ficheroOUT.txt");tec=new BufferedReader(new

InputStreamReader(System.in));filtro = new PrintWriter(fout);while((linea=tec.readLine())!=null){

filtro.println(linea);}fout.close();

}catch(IOException e){

System.out.println("Error en apertura olectura");

}}

}

Page 78: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 78 of 82

Go Back

Full Screen

Close

Quit

Multiples subprocesos: Threads

Presentacion

Un thread es un subproceso que se ejecuta dentro de un proceso(programa) padre. Un programa puede contener varios subpro-cesos que se ejecutan en paralelo.

Un ejemploclass mithread extends Thread{

public void run(){int i;for(i=0;i<=20;i++)

System.out.println("Mi thread");}

}class un_thread{

public static void main(String[] arg){int i;mithread t = new mithread();t.start();for (i=1;i<=20;i++)

System.out.println("Main");}

}

Page 79: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 79 of 82

Go Back

Full Screen

Close

Quit

Creacion

La construccion de subprocesos, threads, puede realizarse de dosformas, por medio de de la declaracion de una subclase de laclase Thread o declarando una clase que implemente el interfaceRunnable. Nos centraremos en el primer metodo ya que resultamas sencillo.La subclase definida debe definir (en realidad, redefinir) unmetodo publico que no devuelve nada (void) llamado run, enel que se incorporan las acciones a realizar. Para lanzar el sub-proceso se llama al metodo start de la clase padre el cual seencargara de llamar a nuestra funcion run.Cuando se instancia un Thread ( o una clase derivada suya)este se inicializa sin asignarsele recursos, en esta situacion soloadmite las llamadas del metodo start() y stop().La llamada al metodo start asigna los recursos necesarios paraejecutar el subproceso y llama al metodo run(), y el subprocesopasa a estar en estado ejecutable.Un Thread puede pasar de estado ejecutable a no ejecutablepor la invocacion de los metodos sleep(), suspend(), wait(),o porque el Thread este bloqueado por una operacion de en-trada/salida.

Page 80: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 80 of 82

Go Back

Full Screen

Close

Quit

Un Thread puede pasar al estado muerto por dos motivos, quefinalice normalmente el metodo run() o por que se llame almetodo stop(), desde cualquiera de sus estados.Finalmente un Thread pasa del estado no ejecutable a eje-cutable en los siguientes casos. Si estaba dormido (por una lla-mada previa a la funcion sleep() pasara a ejecutable tras trans-currir el tiempo indicado en la llamada a sleep(). Si estabasuspendido por una llamada previa a suspend() pasara a eje-cutable por medio de una llamada a la funcion resume(). Siel proceso estaba esperando,por una llamada previa a la funcionwait() pasara a ejecutable por medio de una llamada a la funcionnotify() o notifyall(). Y si esta bloqueado por una operacion deentrada salida, pasara a ejecutable cuando finalice dicho bloqueo.

Page 81: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 81 of 82

Go Back

Full Screen

Close

Quit

Operaciones

En este apartado mostramos diversos metodos de la claseThread

• public static Thread currentThread() devuelve el threadque se esta ejecutando en ese momento.

• public final boolean isAlive() devuelve false si el threadesta en estado nuevo o muerto y true en cualquier otro caso.

• public static void sleep(long milisegundos) throws In-terruptedException

public static void sleep(long milisegundos,int nanose-gundos) throws InterruptedException

Hacen que el thread pase de estado ejecutable a estadodormido y permanezca en dicho estado durante los milisegun-dos o, milisegundos mas nanosegundos indicados. Tras dichotiempo el thread pasa nuevamente a estado ejecutable. Siel thread recibe el metodo interrupt() se lanza la excepcionInterruptedException.

Page 82: LICENCIATURA EN MATEMATICAS´ INTRODUCCION A LA …metodosestadisticos.unizar.es/asignaturas/10234/mateo/java.pdf · Por ul´ timo Gestor de Seguridad de la MV Java determina que

Home Page

Title Page

JJ II

J I

Page 82 of 82

Go Back

Full Screen

Close

Quit

• public final void suspend() pasa un thread de estado eje-cutable a suspendido. Para reanudar el thread hay que llamaral metodo resume().

• public final void wait() throws InterruptedException

public final void wait(long milisegundos) throws Inter-ruptedException

public final void wait(long milisegundos,int nanosegun-dos) throws InterruptedException

Este metodo pasa el thread al estado esperando y permaneceen dicho estado durante el tiempo indicado por los argumen-tos, segundo y tercer caso, o hasta que recibe el metodonotify() (notifyall())

• public static void yield() Transfiere el control al siguientethread en el scheduler, con la misma prioridad que el actual,que se encuentre en estado ejecutable.

• public final void join() Hace que el thread que se estaejecutando, incluido el main, pase al estado esperando hastaque muera el thread que invoco a la funcion join().