You are on page 1of 260

Introducci on al lenguaje de programaci on Java

Conceptos b asicos

Carlos Varela Paz (cvarela@dc..udc.es)

1 [1 - 1]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Parte I Fundamentos del lenguaje

2 [2 - 2]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Indice

Introducci on Historia Herramientas Empaquetador JAR

3 [3 - 4]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Este curso
Que es Java? Herramientas b asicas Sint axis b asica Manejo de objetos Threads Mecanismos de E/S Clases de u tilidad m as usadas ...

4 [3 - 4]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Breve historia
Creado por Sun. Objetivo de dise no: creaci on de un lenguaje independiente de la plataforma y del sistema operativo, para el desarrollo de electr onica de consumo. El proyecto original (Green) comenz o apoy andose en C++: problemas de portabilidad. Desarroll o su propio lenguaje y en agosto de 1991 naci o un nuevo lenguaje orientado a objetos (Oak). A mitad de 1993 se lanz o Mosaic el primer navegador para la Web, y comenz o a crecer el inter es por Internet (y en particular por la World Wide Web). Redise no del lenguaje para desarrollar aplicaciones para Internet.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

5 [5 - 6]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Breve historia
Enero del 1995 Oak se convirti o en Java. En 1996 Sun lanza el entorno JDK 1.0. Desde entonces se han lanzado diferentes versiones, aunque la primera comercial se denomin o JDK 1.1 y se lanz o a principios de 1997. En diciembre de 1998 Sun lanz o la plataforma Java 2 (que se ha conocido como JDK 1.2 durante su fase de pruebas beta). Esta versi on de Java ya present o la madurez de la plataforma Java. Sun renombr o Java 1.2 como Java 2. La u ltima versi on lanzada por Sun es Java(TM) 2 Platform Standard Edition 5.0 o J2SE(TM) 5.0.

6 [5 - 6]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Int erprete
Un interprete Java es un software que contiene una m aquina virtual Java y que ejecuta aplicaciones Java: Realiza todas las actividades del sistema de ejecuci on de Java. Carga los archivos de clase y traduce el bytecode compilado. El int erprete Java de Sun es java, la sintaxis es:
java [opciones] nombre clase [argumentos]

Aplicaciones independientes En una aplicaci on independiente, una clase contiene el metodo main(), que contiene sentencias para ejecutar al inicio. Para que la aplicaci on se ejecute, se ejecuta el int erprete indicando esa clase como argumento.
7 [7 - 11] Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Int erprete
Aplicaciones independientes

Especicar el nombre completo de la clase, sin la extensi on .class. El int erprete busca la clase en la ruta de clases, que es una lista de directorios d onde se guardan los paquetes de las clases. La ruta de clase normalmente est a denida en la variable de entorno CLASSPATH, pero puede ser redenida con la opci on -classpath o -cp Tras cargar la clase especicada en la l nea de comando, el int erprete ejecuta el m etodo main() de la clase. A partir de aqu la aplicaci on puede iniciar threads adicionales, hacer referencia a otras clases, crear su interfaz de usuario u otras estructuras.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

8 [7 - 11]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Compilador
El compilador de Sun es javac. javac convierte el c odigo fuente Java en una clase compilada que contiene el bytecode de la m aquina virtual Java. Los archivos fuente tienen la extensi on .java, los archivos de clase resultantes tienen la extensi on .class. Se permite una u nica clase p ublica por archivo y el nombre del archivo debe ser el mismo que el de la clase. Un u nico arquivo puede contener m ultiples clases siempre y cuando s olo una de ellas sea p ublica.

9 [7 - 11]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Compilador
Ejemplo

En un chero HolaMundo.java escribimos el c odigo siguiente: p u b l i c c l a s s HolaMundo { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { System . o u t . p r i n t l n ( Hola mundo ! ) ; } } ejecutamos: javac HolaMundo.java java HolaMundo

10 [7 - 11]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Compilador
Si queremos que al compilar las clases se generen en un directorio distinto del actual usamos la opci on -d del compilador: javac -d clases HolaMundo.java java -cp clases HolaMundo Se pueden especicar m ultiples archivos .java en un u nico comando javac. El compilador crea un archivo de clase por cada archivo fuente. No es necesario listar los archivos fuente de todas las clases utilizadas, estas se buscan usando la ruta de clases.

11 [7 - 11]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Empaquetador JAR

Los cheros .jar son el medio est andar y portatil de empaquetar todas las partes de una aplicaci on Java. En un JAR podemos poner todo lo que queramos: clases Java, datos, imagenes, sonidos . . . El sistema de ejecuci on sabe manejar este tipo de cheros y por eso podemos incluirlos en nuestro classpath. Los elementos almacenados se comprimen con ZLIB

12 [12 - 18]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Empaquetador JAR
Con la utilidad jar podemos crear o leer cheros JAR. La sintaxis imita a la de la utilidad tar de Unix: Para crear un JAR que contenga ciertos paths jar -cvf ficheroJar path [path] [...] Para listar el contenido de un JAR, mostrando s olo ciertos paths jar -tvf ficheroJar [path] [...] Para extraer el contenido de un JAR, o solo ciertos paths jar -xfv ficheroJar [path] [...]

13 [12 - 18]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Empaquetador JAR
Ejemplo

Vamos a empaquetar nuestra clase HolaMundo.java:


jar -cfv holamundo.jar clases

manifest agregado agregando: clases/(entrada = 0) (salida= 0)(almacenado 0%) agregando: clases/HolaMundo.class(entrada = 423) (salida= 288)(desinflado 31%)

14 [12 - 18]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Empaquetador JAR
Ejemplo

Desempaquetamos el JAR:
jar -xfv holamundo.jar creado: META-INF/ extra do: META-INF/MANIFEST.MF creado: clases/ extra do: clases/HolaMundo.class

15 [12 - 18]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Empaquetador JAR
Ejemplo

Podemos ver el contenido:


jar -tfv holamundo.jar 0 68 0 423 Fri Fri Thu Wed Dec Dec Nov Nov 03 03 11 10 08:37:10 08:37:12 09:33:22 13:17:16 CET CET CET CET 2004 2004 2004 2004 META-INF/ META-INF/MANIFEST.MF clases/ clases/HolaMundo.class

16 [12 - 18]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Empaquetador JAR
Maniesto

jar crea un directorio META-INF con un chero MANIFEST.MF. Este chero contiene informaci on acerca de los cheros almacenados Contiene pares clave:valor Por defecto:
Manifest-Version: 1.0 Created-By: 1.4.2 (Sun Microsystems Inc.)

Para incluir un chero de maniesto se usa la opci on m de jar

17 [12 - 18]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Historia Herramientas Empaquetador JAR

Empaquetador JAR
Maniesto: Ejemplo

Una de las claves es Main-Class que sirve para especicar la clase principal de la aplicaci on. En el directorio clases escribimos un chero manifiesto.mf
Manifest-Version: 1.0 Created-By: Carlos Main-Class: HolaMundo

Invocamos: jar -cvmf manifesto.mf holamundo.jar . Para ejecutar la aplicaci on se usar la opci on -jar de java: java -jar holamundo.jar
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

18 [12 - 18]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Indice

Sintaxis Comentarios Tipos Sentencias Expresiones Excepciones Arrays

19 [19 - 19]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Comentarios
En Java se pueden hacer comentarios de bloque y de l nea. Los primeros est an delimitados por /* y */ y los segundos por //: / C o m e n t a r i o de b l o q u e con mas de una l i n e a / // C o m e n t a r i o de una l i n e a // Otro c o m e n t a r i o de una l i n e a

20 [20 - 25]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Comentarios
Observaciones

Los comentarios de bloque no pueden anidarse. / C o m e n t a r i o de b l o q u e con mas de una l i n e a / e s t o no c o m p i l a / / Los comentarios de una l nea est an delimitados por el nal de l nea, si se pone // dentro de un comentario de l nea no tiene efecto. No entran en conicto con los comentarios de bloque. / C o m e n t a r i o de b l o q u e con mas de una l i n e a // e s t o c o m p i l a /
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

21 [20 - 25]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Comentarios Javadoc

Si un comentario de bloque empieza por /** se indica un comentario de documentaci on. Estos est an dise nados para ser extra dos por generadores autom aticos de documentaci on como el programa javadoc. En estos comentarios se usan m arcas especiales para a nadir informaci on: cada espacio en una l nea hasta un * es ignorado y las l neas que empiezen por un @ se interpretan como etiquetas especiales para el generador de documentaci on.

22 [20 - 25]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Comentarios Javadoc
Ejemplo
/ E s t a una c l a s e h o l a mundo . E s t a c l a s e e s c r i b e h o l a mundo en l a s a l i d a e s t a n d a r @see H o l a P l a n e t a @ a u t h o r C a r l o s V a r e l a Paz @ v e r s i o n 1 . 0 0 , 3 Dec 2004 / p u b l i c c l a s s HolaMundo { / Metodo p r i n c i p a l de H o l a mundo @param a r g s Argumentos p a s a d o s a l i n t e r p r e t e @ r e t u r n nada / p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { System . o u t . p r i n t l n ( H o l a mundo ! ) ; } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

23 [20 - 25]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Comentarios Javadoc
javadoc crea la documentaci on en formato HTML. El compilador tambien busca estos comentarios en el c odigo, en concreto est a interesado en la etiqueta @deprecated que indica que un m etodo esta obsoleto y deber a evitarse en nuevos programas. El compilador genera un mensaje de aviso si se usa un m etodo obsoleto. Los comentarios de documento pueden aparecer encima de las deniciones de clases, m etodos y variables, pero no todas las etiquetas pueden ser aplicadas a todos los casos. Por ejemplo, las variables pueden tener s olo la etiqueta @see.

24 [20 - 25]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Comentarios Javadoc
Etiquetas

Etiqueta @see @auhor @version @param @return @exception @deprecated

Descripci on Nombre de clase asociada Nombre del autor Cadena con la versi on Nombre y descripci on del par ametro Descripci on del valor de retorno Nombre y descripci on de la excepci on Declara un elemento como obsoleto

Se aplica a Clase, m etodo o variable Clase Clase M etodo M etodo M etodo Clase, m etodo o variable

25 [20 - 25]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos

Los tipos de datos en Java se dividen en dos categor as: Los tipos primitivos representan valores sencillos que tienen una funcionalidad incorporada en el lenguaje. Son elementos ya denidos como constantes, literales y n umeros. Los tipos referencia (o tipos de clases) incluyen objetos y arrays. Se denominan tipos de referencia por que se pasan por referencia tal y como veremos.

26 [26 - 40]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos primitivos
Los elementos fundamentales en Java son n umeros, caracteres y valores booleanos. A diferencia de otros lenguajes orientados a objetos, estos no son objetos. Para aquellas situaciones en las que es deseable tratar en valor primitivo como un objeto, Java proporciona clases envolventes1 . Una de las ventajas de tratar con valores primitivos es que el compilador est a m as preparado para optimizar su uso. Otra car acter stica est a relacionada con la portabilidad de Java, los tipos primitivos est an denidos con precisi on. p.e: un int tiene un tama no de 32 bits en cualquier plataforma
En Java 1.5 el compilador hace autom aticamente la conversi on seg un el uso que le vaya a dar (ej: se puede hacer 5+Integer(5))
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java 1

27 [26 - 40]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos primitivos
Tipos de datos

Tipo boolean char byte short int long oat double

Denici on true o false Car acter Unicode de 16 bits Entero de complemento 2 con signo de 8 bits Entero de complemento 2 con signo de 16 bits Entero de complemento 2 con signo de 32 bits Entero de complemento 2 con signo de 64 bits Valor en coma otante 754 IEEE de 32 bits Valor en coma otante 754 IEEE de 64 bits

28 [26 - 40]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos primitivos
Declaraci on e inicializaci on de variables

Las variables se declar an dentro de clases o m etodos del siguiente modo: in t unEntero ; double d1 , d2 ; boolean t e r m i n a d o ; Las variables se pueden inicializar en el momento de la declaraci on: i n t u n E n t e r o =4; double d1 =4.6 , d2 =2 5+7; boolean t e r m i n a d o=t r u e ;

29 [26 - 40]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos primitivos
Declaraci on e inicializaci on de variables

Las variables de clase que no se inicialicen cogen valores por defecto. Los valores num ericos tienen por defecto cero, los car acteres el car acter nulo (\0) y los booleanos false. En cambio, las variables locales a los m etodos, deben inicializarse expl citamente antes de ser usadas. Los tipo primitivos, al utilizarse, se pasan por valor, es decir, cuando se asigna un valor primitivo o se pasa como argumento de un m etodo, este se copia.

30 [26 - 40]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos primitivos
Literales enteros

Los literales enteros pueden especicarse en octales, decimales o hexadecimales (base 8, 10 o 16). Decimales: n umeros que comienzan por 1-9 i n t i =1234; Octales: comienzan por un cero i n t i =01230; // i = 644 en d e c i m a l Hexadecimales: se representas comenz andolos por 0x, siguiendo con los d gitos y car acteres de a-f o A-F, que representan los valores decimales de 10-15: i n t i =0xFFFFFF ; // i = 65535 en d e c i m a l
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

31 [26 - 40]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos primitivos
Literales enteros

Los literales enteros son del tipo int salvo que lleven una L como sujo que indique que es un long: long i =13L ; long i =13; // e q u i v a l e n t e : 13 s e c o n v i e r t e // de un t i p o i n t Cuando se usa un tipo num erico en una expresi on donde aparece un tipo con rango superior, el tipo inicial se puede convertir al tipo mayor (como en el ejemplo anterior). Algunas operaciones num ericas y de comparaci on tambien crean estas conversiones.

32 [26 - 40]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos primitivos
Literales enteros

Un tipo num erico no puede ser asignado a un tipo inferior sin una conversi on expl cita (cast): int i = 13; byte b = i ; // e r r o r de c o m p i l a c i o n , // s e n e c e s i t a // una c o n v e r s i o n e x p l i c i t a byte b = ( byte ) i ; // OK Las conversiones de coma otante a enteros siempre necesitan conversi on debido a la potencial perdida de precisi on.

33 [26 - 40]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos primitivos
Literales en coma otante

Los valores en coma otante pueden especicarse en notaci on decimal o cient ca. Los literales en coma otante son del tipo double salvo que lleven una f o F como sujifo que indiquen que son de tipo float: double d double e float f float g = = = = 8.31; 3 . 0 0 e +8; 8.31F ; 3 . 0 0 e+8F ;

34 [26 - 40]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos primitivos
Literales car acter

El valor de un caracter literal puede denirse bien mediante un car acter que est e encerado entre comillas sencillas o como una sentencia de escape ASCII o Unicode: char a = a ; char n u e v a L i n e a = \ n ; char s m i l e y = \ u263a ;

35 [26 - 40]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos referencia
En Java, al crear una clase se dene un nuevo tipo en el lenguaje. Por ejemplo, si se crea un clase llamada Prueba, tambien se crea de forma impl cita un nuevo tipo llamado Prueba. Un elemento del tipo Prueba, en general, puede ser asignado a una variable del tipo Prueba o pasarse como argumento a un m etodo que acepte un valor Prueba. Los tipos referencia se pasan por referencia. Lo que contiene una variable de tipo referencia es una referencia a un objeto de su tipo. Cuando se asigna o se pasa una referencia a un m etodo, esta se pasa por valor. Se puede pensar en una referencia como un tipo de puntero al que se quita la refencia autom aticamente siempre que se cita.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

36 [26 - 40]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos referencia
Ejemplo

Cosa miCosa = new Cosa ( ) ; Cosa o t r a C o s a = miCosa ; miCosa es una variable de tipo Cosa a la que le asignamos en objeto Cosa que acabamos de crear. Luego asignamos esa referencia a la variable otraCosa. Ahora tenemos dos referencias apuntado al mismo objeto. Los cambios que se hagan en una de ellas se ver an reejados en la otra.

37 [26 - 40]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos referencia
Los tipos referencia siempre apuntan a objetos y los objetos siempre se denen por clases. Sin embargo, existen dos excepciones: los arrays y las interfaces. Los arrays tienen un lugar especial en el sistema de tipos. Son tipos de objetos especiales que se crean autom aticamente para contener otro tipo de objetos, conocidos como tipo base. Al declarar una referencia de tipo array se crea el nuevo tipo de clase. Las interfaces denen un conjunto de m etodos y un tipo correspondiente. Cualquier objeto que implemente todos los m etodos de la interfaz puede ser tratado como un objeto de ese tipo. Los argumentos pueden ser declarados del tipo interfaz.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

38 [26 - 40]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos referencia
Notas acerca de los strings

Los strings en Java son objetos y por lo tanto un tipo referencia. Los objetos String sin embargo, tienen una ayuda especial del compilador Java que hace que parezcan m as bien como del tipo primitivo. En el c odigo fuente, a los valores de las cadenas literales el compilador los convierte en objetos String. Pueden usarse directamente, pasarse como argumentos a m etodos o asignarse a variables de tipo String

39 [26 - 40]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Tipos referencia
Notas acerca de los strings: Ejemplo

System . o u t . p r i n t l n ( Hola mundo ! ) ; S t r i n g s = Hola ; S t r i n g t = C a r l o s d i j o : \ Hola \ ; El s mbolo + tiene m as de una funci on (est a sobrecargado) para proporcionar la concatenaci on de strings y la suma de n umeros. Junto con +=, son los u nicos operadores sobrecargados en Java. S t r i n g t = En un l u g a r de l a +Mancha ; S t r i n g t 2 = t + de cuyo nombre . . . ; Java crea un u nico objeto String a partir de la concatenaci on de strings y las ofrece como el resultado de la expresi on.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

40 [26 - 40]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Sentencias

Las sentencias aparecen dentro de m etodos y clases. Describen todas las actividades de un programa. Las declaraciones de variables y asignaciones, como las de la secci on anterior, son sentencias que constituyen la estructura b asica del lenguaje, como las condiciones y los bucles. Las sentencias y expresiones aparecen dentro de bloques de c odigo.

41 [41 - 51]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Sentencias
Bloques de c odigo

Un bloque de c odigo es, desde el punto de vista de la sintaxis, una serie se sentencias dentro de unas llaves. Las sentencias dentro de un bloque de c odigo pueden contener declaraciones de variables: { i n t tam = 5 ; setNombre ( KK ) ; ... }

42 [41 - 51]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Sentencias
Bloques de c odigo: M etodos

Los m etodos, son en cierto sentido bloques de c odigo que toman par ametros y que pueden llamarse por su nombre: setNombre ( S t r i n g nombre ) { i n t tam =5; setNombre ( nombre ) ; } El ambito de las declaraciones de variables se encuentra limitado al bloque se c odigo que la encierra: { int i = 5; } i = 6 ; // E r r o r de c o m p i l a c i o n
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

43 [41 - 51]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Sentencias
Bloques de c odigo: Condicionales

El uso m as com un es denir un grupo de sentencias para su uso en una sentencia condicional o iterativa. Un condici on se dene como:
i f ( condicion ) { sentencia1 ; sentencia2 ; ... } else { sentencia3 ; sentencia4 ; .... }

condicion es una expresi on booleana.


Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

44 [41 - 51]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Sentencias
Bloques de c odigo: Condicionales

Para generar blucles condicionales se usan las sentencias do y while:


while ( c o n d i c i o n ) { sentencia ; sentencia ; ... }; do { sentencia ; sentencia ; ... } while ( c o n d i c i o n ) ;
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

45 [41 - 51]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Sentencias
Bloques de c odigo: For

Se pueden crear blucles for de la forma: for ( i n i c i a l i z a c i o n ; condicion ; incremento ) sentencia ; La expresi on que inicializa una variable puede declarar una nueva variable que ser a restringida al ambito del bucle for: f o r ( i n t i = 0 ; i < 1 0 0 ; i ++) { System . o u t . p r i n t l n ( i ) ; int j = i ; ... }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

46 [41 - 51]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Sentencias
Bloques de c odigo: for

Se pueden usar m ultiples expresiones separadaspor coma en secciones de inicializaci on y de incremento de un bucle for. Por ejemplo: f o r ( i n t i =0, j =10; i < j ; i ++, j ) { ... }

47 [41 - 51]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Sentencias
Bloques de c odigo: switch

La sentencia switch recibe un tipo entero y hace una selecci on entre varias opciones case:
switch ( e x p r e s i o n e n t e r a ) { case e x p r e s i o n e n t e r a : sentencia ; [ case e x p r e s i o n e n t e r a : sentencia ; ... default : sentencia ; ] }

default se usa para recoger las condiciones que no se cumplen.


Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

48 [41 - 51]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Sentencias
Bloques de c odigo: switch

Normalmente se usa la sentencia break para nalizar una ramicaci on de switch:


switch ( v a l o r ){ case 1 : ... break ; case 2 : ... break ; }

Las sentencias break y continue se utilizan para realizar saltos incondicionales fuera de un bucle o de una sentencia condicional.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

49 [41 - 51]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Sentencias
Bloques de c odigo: etiquetas

Las sentencias encerradas como bloques de c odigo e iteradores pueden ser etiquetados con una sentencia de identicaci on:
uno : while ( condicion ) { ... dos : while ( condicion ) { ... // r om pe r o c o n t i n u a r } // d e s p u e s de d o s } // d e s p u e s de uno

50 [41 - 51]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Sentencias
Bloques de c odigo: ejemplo

En este ejemplo, un break o un continue sin argumentos en la posici on indicada hubiera hecho que el proceso continuase en el punto despu es de dos (break) o volviera a comprobar la condici on (continue). Un break dos har a lo mismoque un break normal, pero un break uno ir a al punto despues de uno. An alogamente, continue dos habr a hecho lo mismo que continue, pero continue uno har a volver a la prueba del bucle uno.

51 [41 - 51]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Expresiones
Las expresiones describen valores. Una expresi on se evalua para obtener un resultado que va a ser usado como parte de otra expresi on o en una sentencia. Al evaluar una expresi on se obtiene un resultado o valor. El valor de una expresi on puede ser de tipo num erico, como en una operacion aritm etica, de tipo referencia, como en la ubicaci on de un objeto o un tipo especial void, que es el tipo que se declara a un m etodo que no devuelve ningun valor. El tipo de una expresi on se conoce en tiempo de compilaci on.

52 [52 - 63]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Operadores
Precedente 1 1 1 1 1 2 3 3 4 4 4 5 5 Operador ++, +, ~ ! (type) , /, % +, + << >> >>> >, <=, >, >= instanceof Tipo Aritm etico Aritm etico Integral Boolean Cualquiera Aritm etico Aritm etico Cadena Integral Integral Integral Aritm etico Objeto Descripci on Incrementa y decrementa. M as y menos unarios. Complemento bitwise. Complemento l ogico. Cast. Multiplicaci on, divisi on, resto de la divisi on. Adici on y sustracci on. Concatenaci on de cadenas. Cambia a la izquierda. Cambio por la derecha con la extensi on del signo. Cambio por la derecha sin extensi on. Comparaci on num erica. Comparaci on del tipo.

53 [52 - 63]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Operadores
Precedente 6 6 7 7 8 8 9 9 10 11 12 13 13 Operador ==, != ==, != & & ^ ^ | | && || ?: =
=, / =, %=, + =, =, <<=, >>=, >>>=, &=, ^=, | = Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

Tipo Primitivo Objeto Integral Boolean Integral Boolean Integral Boolean Boolean Boolean NA Cualquiera Cualquiera

Descripci on Igualdad y desigualdad de valor. Igualdad y desigualdad de referencia. AND bitwise. AND booleano. XOR bitwise. XOR booleano. OR bitwise. OR booleano. AND condicional. OR condicional. Operador ternario condicional. Asignaci on. Asignaci on con operaci on.

54 [52 - 63]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Operadores: observaciones
Java no permite la manipulaci on directa del puntero, por lo que no soporta operadores de referencia y dereferencia (que tiene, por ejemplo, C). Tambien a nade operadores como la concatenaci on de cadenas. La asignacion se puede usar como una valor por parte de otra expresi on: j = ( i = 5); La expresi on null puede asignarse a cualquier tipo de referencia. Tiene el signicado de sin referencia. Una referencia null no puede utilizarse para hacer referencia a algo y su intento genera un NullPointerException durante la ejecuci on.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

55 [52 - 63]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Operadores: operador punto


El operador punto (.) tiene varios signicados. Puede recuperar el valor de un contenido (de alg un objeto) o de una variable static (de una clase). Tambi en puede especicar un m etodo para que sea invocado en un objeto o clase. El uso de punto (.) para acceder a una variable en un objeto es una expresi on que da como resultado el valor de la variable a la que se accede. Esta puede ser un tipo num erico o un tipo referencia: int i ; String s ; i = miObjeto . l e n g t h ; s = m i O b j e t o . nombre ;
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

56 [52 - 63]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Operadores: operador punto


Una expresi on del tipo referencia puede usarse en evaluaciones posteriores, seleccionando variables o llamando a m etodos dentro de ella: i n t l e n = m i O b j e t o . nombre . l e n g t h ( ) ; int i n i c i a l i z a c i o n = m i O b j e t o . nombre . s u b s t r i n g ( 5 , 1 0 ) . l e n g t h ( ) ; Aqu hemos consultado la longitud de la variable nombre invocando el m etodo length() del objeto String. El segundo caso, se solicita una subcadena de la cadena nombre y preguntamos su longitud.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

57 [52 - 63]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Operadores: operador punto

Una llamada a un m etodo es esencialmente una llamada a una funci on: una expresi on que da como resultado un valor. El tipo de valor es el tipo que devuelve el m etodo. System . o u t . p r i n t l n ( Hola mundo ! ) ; i n t long = miCadena . l e n g t h ( ) ; La elecci on de que m etodo se ejecuta es m as complicada de lo que parece porque Java permite la sobrecarga y la anulaci on de un m etodo (como veremos m as adelante).

58 [52 - 63]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Operadores: operador punto


Al igual que el resultado de cualquier expresi on, el resultado de una invocaci on puede utilizarse en evaluaciones posteriores, como ya vimos. Puede crear valiables intermedias para hacer m as claro el c odigo. Por ejemplo: int i n i c i a l i z a c i o n = m i O b j e t o . nombre . s u b s t r i n g ( 5 , 1 0 ) . l e n g t h ( ) ; es equivalente a: S t r i n g temp1 = m i O b j e t o . nombre ; S t r i n g temp2 = temp1 . s u b s t r i n g ( 5 , 1 0 ) ; i n t i n i c i a l i z a c i o n = temp2 . l e n g t h ( ) ;
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

59 [52 - 63]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Operadores: new
El operador new se usa para crear objetos: O b j e c t o = new O b j e c t ( ) ; El argumento para new es el constructor de la clase. El constructor es un m etodo que siempre tiene el mismo nombre que la clase y especica cuales son los par ametros necesarios para construir la clase. El valor de la expresi on new es una referencia del tipo de objeto creado. Los objetos siempre tienen uno m as constructores. Ya veremos m as adelante la creaci on de un objeto con detalle. Podemos crear un objeto e invocar un m etodo con el directamente: i n t h o r a s = new Date ( ) . g e t H o u r s ( ) ;
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

60 [52 - 63]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Operadores: instanceof
Para determinar el tipo de un objeto en tiempo de ejecuci on se usa el operador instanceof. Este operador comprueba si un objeto es de un tipo concreto y devuelve un boolean que indica si el objeto es de una clase especicada: Boolean b ; S t r i n g s t r = cosa ; b = ( s t r i n s t a n c e o f S t r i n g ) ; // t r u e b = ( s t r i n s t a n c e o f O b j e c t ) ; // t r u e b = ( s t r i n s t a n c e o f Date ) ; // f a l s e instanceof tambien informa correctamente si el objeto es del tipo del array o de la interfaz especicada: i f ( c o s a i n s t a n c e o f byte [ ] ) ...
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

61 [52 - 63]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Operadores: instanceof

El valor null no se considera un caso de ningun objeto, por ejemplo: String s = null ; i f ( s instanceof String ) // nunca s e e v a l u a nunca ser a cierto.

62 [52 - 63]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Operadores: operador condicional


Este operador es equivalente a la sentencia if, su sintaxis es de la forma: condici on?expresi on:expresi on por ejemplo: a == b ? X . f u n c i o n 1 ( ) : X . f u n c i o n 2 ( ) ; es equivalente a: i f ( a == b ) X. funcion1 ( ) ; else X. funcion2 ( ) ;
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

63 [52 - 63]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Las raices de Java se encuentrar en sistemas embebidos. En estos tipos de aplicaciones, es especialmente importante que los errores software sean tratados de forma consistente. Java ofrece una soluci on elegante al manejo de errores con el tratamiento de las excepciones. Una excepci on inicia una condici on que no es habitual o una condici on de error. El control del programa se transere incodicionalmente a una secci on de c odigo donde se recoge y se trata. No tenemos que tener valores de retorno especiales para los m etodos para indicar que hay un error, los errores los trata un mecanismo distinto.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

64 [64 - 80]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
El control puede pasar una gran distancia entre una rutina muy anidada y ser tratada en una ubicaci on u nica cuando as se quiere; un error puede tratarse inmediatamente en su fuente. Java tiene un modo de indicar las excepciones que se pueden lanzar. Esto signica que el compilador puede estar seguro de que las tratamos. De este modo, la informaci on sobre los errores que puede dar un m etodo promueve al mismo nivel de importancia que sus argumentos y tipos que devuelve.

65 [64 - 80]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Clases de excepciones y errores

Las excepciones en Java se representan por medio de instancias de la clase java.lang.Exception y sus subclases. Ejemplos: java.io.IOException para problemas normales de E/S (como, por ejemplo, FileNotFoundException) y problemas de red (como, por ejemplo, SocketException). El API de Java tambien dene subclases de java.lang.Error para errores que son irrecuperables. Estas subclases son menos comunes que las de Exception. No hay que preocuparse por estos errores, normalmente indican errores graves en los enlaces o en la m aquina virtual y suele hacer que el int erprete Java nalice y muestre un mensaje de error.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

66 [64 - 80]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Tratamiento de excepciones

Las sentencias de protecci on try/catch envuelven un trozo de c odigo y recogen los tipos de excepciones designados que se dan dentro de el:
try { readFromFile ( f i c h e r o ) ; ... } catch ( E x c e p t i o n e ) { // Manejar e l e r r o r System . o u t . p r i n t l n ( E x c e p c i o n : +e ) ; }

67 [64 - 80]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Tratamiento de excepciones

Las excepciones que se dan dentro del cuerpo de la parte try de la sentencia se dirigen a la cl ausula catch para un posible tratamiento. La sentencia catch act ua como un m etodo, especica un argumento del tipo de excepci on que quiere tratar, y si es invocado recibe el objeto Exception como un argumento. En el ejemplo anterior, recibimos el objeto en la variable e y se imprime junto con un mensaje.

68 [64 - 80]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Tratamiento de excepciones

Una sentencia try puede tener m ultiples cl ausulas catch que especican distintos tipos (subclases) de Exception:
try { readFromFile ( f i c h e r o ) ; ... } catch ( F i l e N o t F o u n d E x c e p t i o n e ) { // A r c h i v o no e n c o n t r a d o ... } catch ( I O E x c e p t i o n e ) { // E r r o r de E/S ... } catch ( E x c e p t i o n e ) { // C u a l q u i e r o t r o e r r o r ... } Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

69 [64 - 80]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Tratamiento de excepciones

Las cl ausulas catch se eval uan en orden y se toma la primera que puede coincidir (es asignable). Como mucho se ejecuta una cl ausula catch, lo que signica que las excepciones deber an listarse desde la m as a la menos espec ca. En el ejemplo anterior la tercera cl ausula catch act ua como la cl ausula default en una sentencia switch y maneja todas las excepciones no capturadas por los dos catch anteriores.

70 [64 - 80]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Tratamiento de excepciones

En Java se dividen las excepciones en dos categor as excepciones comprobadas y excepciones sin comprobar. La mayor a de las excepciones son comprobadas, lo que signica que cualquier m etodo que lanza una excepci on, bien porque la genera el mismo o bien porque la ignor o, debe declarar que puede lanzar este tipo de excepci on en una cl ausula throws al declarar el m etodo.: void r e a d F i l e ( S t r i n g s ) throws I O E x c e p t i o n , InterruptedException { ... }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

71 [64 - 80]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Tratamiento de excepciones

La cl ausula throws le dice al compilador que excepciones puede lanzar el m etodo y los m etodos que llamen a este deben protegerse con bloque try/catch o declarando la excepci on con una cl ausula throws. Las excepciones que son subclases de java.lang.RuntimeException o de la clase java.lang.Error son excepciones que no se comprueban, es decir, no es un error en tiempo de compilaci on no declararlas en una cl ausula throws o no encerrarlas en un bloque try/catch.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

72 [64 - 80]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Lanzar excepciones

Podemos lanzar nuestras propias excepciones mediante la sentencia throw, por ejemplo: throw new E x c e p t i o n ( ) ; o throw new E x c e p t i o n ( Hubo un e r r o r ) ; Con la segunda forma del constructor podemos recoger el mensaje usando el m etodo getMessage(). Por convenio todos los tipos de Exception tienen un constructor que recibe un String. Podemos tener nuestra propia de jerarqu a de excepciones para tratar los errores espec cos de nuestra aplicaci on.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

73 [64 - 80]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Propagaci on de excepciones

Que pasa si no recogemos una excepci on? Si no hay hay sentencias dentro del try/catch, la excepci on es lanzada desde el m etodo en la que apareci o hasta quien la llam o. Si este punto en el m etodo que llamo est a dentro de una cl ausula try, el control pasa a la correspondiente cl ausula catch. Si no, la excepci on sigue propag andose hasta la pila de la llamada. De este modo la excepci on sube como una burbuja hasta que es recogida o hasta que sale en la parte superior del programa, terminando con un mensaje de error de tiempo de ejecuci on.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

74 [64 - 80]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Propagaci on de excepciones: Ejemplo

Veamos un ejemplo de propagaci on de excepciones:


p u b l i c c l a s s Pr ue ba { p u b l i c s t a t i c v o i d main ( S t r i n g try { metodo1 ( ) ; } catch ( Exception e ) { e . printStackTrace ( ) ; } } [ ] args ) {

s t a t i c v o i d metodo1 ( ) t h r o w s E x c e p t i o n { metodo2 ( ) ; } s t a t i c v o i d metodo2 ( ) t h r o w s E x c e p t i o n { throw new E x c e p t i o n ( E r r o o o o o o o o o o o o o o o o o o o r ! ! ! ! ! ! ) ; } }


Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

75 [64 - 80]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Propagaci on de excepciones

Como una excepci on puede subir una distancia considerable antes de que sea recogida y tratada; puede que necesitemos un medio para determinar exactamente d onde se lanz o. Todas las excepciones pueden volcar una pila de seguimiento (trace stack) que lista su m etodo de origen y todas las llamadas a los m etodos anidados, usando en m etodo printStackTrace(): try { // Tarea } catch ( E x c e p t i o n e ) { e . p r i n t S t a c k T r a c e ( System . e r r ) ; }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

76 [64 - 80]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Acerca del try

La sentencia try impone una condici on en las sentencias que guarda. Si se produce una excepci on en su interior las sentencias restantes deber an ser abandonadas. Esto tiene consecuencias importantes para la inicializaci on de variables locales. Si el compilador no puede determinar si una variable va a ser inicializada dentro de un bloque try/catch, no nos dejar a utilizar la variable:

77 [64 - 80]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
Acerca del try

v o i d metodo ( ) { int cosa ; try { cosa = cogerResultados ( ) ; ... } catch ( E x c e p t i o n e ) { ... } i n t v a r = c o s a ; // E r r o r de c o m p i l a c i o n }


Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

78 [64 - 80]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
La cl ausula nally

Hay veces que queremos asegurarnos de que ciertas sentencias se ejecuten, por ejemplo, para liberar recursos, cerrar cheros . . . que se utilizaron en una sentencia try. Para eso se usa la cl ausula finally, esta sentencia asegura que lo que vaya dentro de ella se ejecutar a independientemente de que se lanze una excepci on o no. Las cl ausulas finally se ejecutan igualmente aunque se ejecute un return, break o continue.

79 [64 - 80]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Excepciones
La cl ausula nally

try { // C o s a s } catch ( Excepcion1 e ) { ... } catch ( Exception2 e ) { ... } finally { // L i m p i a r }

try { // H a c e r c o s a s ... return ; } finally { System . o u t . p r i n t l n ( me e j e c u t o i g u a l ) ; }

80 [64 - 80]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays

Un array es un tipo de objeto especial que puede contener una colecci on ordenada de elementos. El tipo de los elementos del array se denomina tipo base del array. El n umero de elementos que contiene es un atributo jo llamado length. Java soporta arrays de todos los tipos primitivos y referencias.

81 [81 - 97]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Para crear un array un array de una longitud espec ca y acceder a sus elementos utilizamos el operador ndice []. Los objetos array se diferencian del resto de los objetos Java en tres cosas: Java crea de forma impl cita una clase especial de arrays para nosotros, siempre que declaremos una variable del tipo array. Java nos permite utilizar el operador especial [] para acceder a los elementos de un array, por lo que los arrays tienen el aspecto que se espera. Java proporciona una forma especial del operador new que nos permite crear una instacia de un array y especicar su longitud con la notaci on []
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

82 [81 - 97]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Tipos de arrays

Una variable del tipo array se representa con un tipo base seguido por corchetes vac os [], aunque tambien es v alido poner los corchetes antes del nombre del array. Por ejemplo, estas dos declaraciones son equivalentes: int [ ] arrayEnteros ; int arrayEnteros [ ] ; En estas declaraciones no dimos el tama no del array, s olo estamos declarando la variable de tipo array. El tama no lo daremos al crear el array. Podemos crear un array de objetos con la misma sintaxis: String [ ] strings ; Cosa c o s a s [ ] ;
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

83 [81 - 97]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Creaci on e inicializaci on de arrays

El operador new se usa para crear una instancia de un array. Tras el operador new se especicar a el tipo base del array o su longitud con una expresi on entera encerrada entre corchetes: a r r a y E n t e r o s = new i n t [ 2 0 ] ; s t r i n g s = new S t r i n g [ numero + 2 ] ; Se puede crear e inicializar un array a la vez: double [ ] numeros = new double [ 1 2 ] ;

84 [81 - 97]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Creaci on e inicializaci on de arrays

Los indices comienzan en cero. Tras la creaci on los valores del array se inicializan a valores por defecto que dependen del tipo de los elementos: i n t [ ] numeros = i n t [ 1 0 ] ; numeros [ 0 ] = 4 ; numeros [ 1 ] = 7 ; // numeros [ 2 ] == 0

85 [81 - 97]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Creaci on e inicializaci on de arrays

Los elementos de un array de objetos son referencias a los objetos. Su valor por defecto es null hasta que asignemos instancias de objetos: S t r i n g nombres [ ] = new S t r i n g [ 4 ] ; nombres [ 0 ] = new S t r i n g ( ) ; nombres [ 1 ] = C a r l o s ; nombres [ 2 ] = c u a l q u i e r O b j e t o . g e t S t r i n g ( ) ; // nombres [ 3 ] == n u l l

86 [81 - 97]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Creaci on e inicializaci on de arrays

En Java se puede crear un array e inicializar sus elementos usando la construcci on {}: i n t [ ] p r i m o s = { 1 , 2 , 3 , 5 , 5+2 } ; As se crea un objeto de tipo y longitud adecuada de forma impl cita y los valores de la lista de expresiones separadas por coma se asignan a sus elementos.

87 [81 - 97]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Creaci on e inicializaci on de arrays

Podemos usar la sintaxis {} con una array de objetos. En ese caso cada una de las expresiones se debe evaluar a un objeto: String verbos = { c o r r e r , s a l t a r , p a l a b r a . t o S t r i n g ( ) } ; O b j e c t [ ] o b j e t o s = { new Button ( OK ) , una p a l a b r a , n u l l } ; Es equivalente: Button [ ] t r e s B o t o n e s = new Button [ 3 ] ; Button [ ] t r e s B o t o n e s = { n u l l , n u l l , n u l l } ;

88 [81 - 97]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Uso de arrays

El tama no de un array se encuentra en la variable p ublica length: char [ ] a l f a b e t o = new char [ 2 6 ] ; i n t a l f L o n g = a l f a b e t o . l e n g t h ; // a l f L o n g == 2 6 ; S t r i n g numeros [ ] = { uno , d o s , t r e s } ; i n t num = numeros . l e n g t h ; //num == 3 length es el u nico campo accesible del array. Es una variable, no un m etodo.

89 [81 - 97]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Uso de arrays

Para acceder a los elementos de un array se usa el operador [] con una expresi on que evalue a un entero. El uso de este operador puede lanzar la excepci on ArrayIndexOutOfBoundsException si se intenta acceder a una posici on m as all a de la longitud del array. Este es un tipo de RuntimeException por lo tanto puede ser ignorado si se quiere:
S t r i n g c a d e n a s [ ] = new S t r i n g [ 4 ] ; try { c a d e n a s [ 0 ] = kk ; c a d e n a s [ 4 ] = c o s a ; // E r r o r } catch ( ArrayIndexOutOfBoundsException ex ) { System . o u t . p r i n t l n ( E r r o r : +e x . g e t M e s s a g e ( ) ) ; }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

90 [81 - 97]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Uso de arrays

Una tarea com un es la de copiar un rango de elementos de dos arrays. Para eso en Java se proporcciona el m etodo arraycopy() de la clase utilidad System: System . a r r a y c o p y ( o r i g e n , i n i c i o O r i g e n , destino , inicioDestino , longitud ); El ejemplo siguiente duplicar a el tama no del array nombres: S t r i n g [ ] tmp = new S t r i n g [ 2 nombres . l e n g t h ] ; System . a r r a y c o p y ( nombres , 0 , tmp , 0 , nombres . l e n g t h ) ; nombres = tmp ;
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

91 [81 - 97]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Arrays an onimos

Java permite la creaci on de arrays an onimos. Por ejemplo: s u m a E n t e r o s ( new i n t [ ] { 1 , 2 , 3 } ) ; La sintaxis se parece a la inicializaci on de variables, pero como no estamos declarando una variable tenemos que usar expl citamente el operador new para crear el objeto de tipo array.

92 [81 - 97]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Arrays multidimensionales

Java soporta arrays multidimensionales con el formato de arrays de objetos del tipo array. Se usan m ultiples corchetes, uno para cada dimensi on. Tambien se usa esta sintaxis para acceder a los elementos de las distintas dimensiones. Por ejemplo: PiezaAjedrez [ ] [ ] tablero ; t a b l e r o = new P i e z a A j e d r e z [ 8 ] [ 8 ] ; t a b l e r o [ 0 ] [ 0 ] = new P i e z a A j e d r e z ( T o r r e ) ; t a b l e r o [ 1 ] [ 0 ] = new P i e z a A j e d r e z ( A l f i l ) ; Se pueden crear arrays con m as de dos dimensiones, por ejemplo: C o l o r [ ] [ ] [ ] cuboRGB = new C o l o r [ 2 5 6 ] [ 2 5 6 ] [ 2 5 6 ] ;
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

93 [81 - 97]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Arrays multidimensionales

Se puede especicar el ndice inicial de un array multidimensional para obtener un objeto de tipo array con menos dimensiones.
PiezaAjedrez [ ] f i l a I n i c i a l = { new P i e z a A j e d r e z ( T o r r e ) , new P i e z a A j e d r e z ( C a b a l l o ) , new P i e z a A j e d r e z ( A l f i l ) , new P i e z a A j e d r e z ( Rey ) , new P i e z a A j e d r e z ( R e i n a ) , new P i e z a A j e d r e z ( A l f i l ) , new P i e z a A j e d r e z ( C a b a l l o ) , new P i e z a A j e d r e z ( T o r r e ) }; tablero [0] = f i l a I n i c i a l ;

La variable tablero pertenece al tipo PiezaAjedrez[][]. La expresi on tablero[0] es v alida y se reere al primer elemento de tablero que es de tipo PiezaAjedrez[].
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

94 [81 - 97]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Arrays multidimensionales

No es necesario especicar los tama nos de todas las dimensiones de un array multidimensional con una u nica operaci on new. La sintaxis del operador permite dejar los tama nos de algunas dimensiones sin especicar. Hay que especicar por lo menos la menor dimensi on (la dimension m as signicativa del array). Las dimensiones restantes se podr an asignar m as adelante los valores del tipo array apropiados.

95 [81 - 97]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Arrays multidimensionales: Ejemplo

Creamos un tablero de ajedrez de valores booleanos: boolean [ ] [ ] t a b l e r o ; t a b l e r o = new boolean [ 8 ] [ ] ; Se dejan vac os los ocho objetos de tipo boolean[] del nivel siguiente. As , por ejemplo, tablero[0] es null hasta que se le asigne un array: t a b l e r o [ 0 ] = new boolean [ 8 ] ; ... t a b l e r o [ 7 ] = new boolean [ 8 ] ; El c odigo de los dos ejemplos anteriores es equivalente a: boolean [ ] [ ] t a b l e r o = new boolean [ 8 ] [ 8 ] ;
Introducci on al lenguaje de programaci on Java

96 [81 - 97]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on Sintaxis Objetos en java Relaciones entre clases

Comentarios Tipos Sentencias Expresiones Excepciones Arrays

Arrays
Arrays multidimensionales

Hay que observar que como la longitud no forma parte del tipo, las dimensiones no tienen porque tener todas la misma longitud. Es decir, los arrays multidimensionales no tienen porque ser rectangulares, por ejemplo:
t a b l e r o [ 2 ] = new boolean [ 3 ] ; t a b l e r o [ 3 ] = new boolean [ 1 0 ] ;

Por ejemplo, podemos crear un array triangular;


i n t [ ] [ ] t r i a n g u l o = new i n t [ 5 ] [ ] ; f o r ( i n t i =0; i < t r i a n g u l o . l e n g t h ; i ++) { t r i a n g u l o [ i ] = new i n t [ i + 1 ] ; f o r ( i n t j =0; j < i +1; j ++) { t r i a n g u l o [ i ] [ j ] = i+j ; } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

97 [81 - 97]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Indice

Objetos en java Clases Creaci on de objetos Destrucci on de objetos

98 [98 - 99]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos

Los objetos son los actores principales del paradigma orientado a objetos Un objeto procede de una clase que es una especicaci on de los campos y los m etodos que el objeto puede ejecutar. Cada objeto presenta al exterior una vista concisa y consistente en funci on de la clase a la que pertenece y no proporciona detalles del interior de la misma.

99 [98 - 99]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Clases

En el mundo real existen muchos objetos de la misma clase. Por ejemplo, hay muchos coches en el mundo. Usando la terminolog a orientada a objetos, se dice que un objeto coche es una instancia de una clase de objetos conocida como coche. Los coches tienen todos un estado com un (velocidad, numero de puertas, modelo. . . ) y un comportamiento (acelerar, frenar girar . . . ). Sin embargo, cada estado de un coche es independiente y puede ser diferente de otros coches.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

100 [100 - 112]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Clases

Podemos ver una clase como una plantilla o modelo que se utiliza para crear objetos concretos. Consta de variables denominadas campos junto con m etodos que operan sobre esos campos. Encapsula los componentes pasivos (campos) y componentes activos (m etodos) en una u nica entidad. Una vez se declara una clase, se debe instanciar, es decir, crear un objeto de ella, antes de que se pueda utilizar. Cuando se crea una instancia de una clase, se crea un objeto de ese tipo y el sistema asigna memoria para las variables declaradas por la clase. A continuaci on se puede invocar a los m etodos del objeto.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

101 [100 - 112]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Clases

En java una clase se declara utilizando la palabra clave class. Los m etodos y variables aparecen dentro de los corchetes de declaraci on de la clase, por ejemplo: c l a s s MiClase { int var1 ; Object var2 ; ... v o i d metodo1 ( f l o a t n ) { . . . } S t r i n g metodo2 ( ) { . . . } ... }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

102 [100 - 112]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Clases

Ahora podemos crear un objeto de la clase MiClase: MiClase c ; c = new M i C l a s e ( ) ; Una vez tenemos el objeto podemos acceder a sus variables y m etodos: c . var1 = 8; c . metodo1 ( 5 . 7 ) ; S t r i n g s = c . metodo2 ( ) ;

103 [100 - 112]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Variables

Una clase puede denir dos tipos de variables: variables de contenido y variables static. Cada objeto tiene su propio juego de variables de contenido y los valores que tienen esas variables pueden ser diferentes en cada objeto de esa clase. En cambio las variables static viven en la clase y son compartidas por todas las instancias.

104 [100 - 112]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Variables: Ejemplo

c l a s s MiClase { ... static float var3 = 4 . 0 ; ... } Ahora todos los objetos de la clase MiClase tendr an como valor para var3 4.0 y si el valor se modica desde uno de ellos queda modicado para todos. Como los miembros static existen en la misma clase tambiem podemos acceder a ellos empleando directamente la clase: MiClase . var3 = 8;
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

105 [100 - 112]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Variables

Las variables static se pueden declarar final para que no puedan ser modicadas, de este modo pueden ser utilizadas a modo de constantes. c l a s s Cons { s t a t i c f i n a l f l o a t PI = 3 . 1 4 ; s t a t i c f i n a l f l o a t G= 9 . 8 0 ; ... }

106 [100 - 112]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
M etodos

Al igual que las variables, los m etodos pueden ser m etodos de contenido o m etodos static. Los m etodos static pertenecen a la clase al igual que las variables static, estos s olo pueden acceder a variables static de la clase, porque no est an asociados a ninguna instancia concreta de la clase:
c l a s s MyClase { s t a t i c i n t var1 = 4; f l o a t var2 ; s t a t i c v o i d metodo1 ( ) { System . o u t . p r i n t l n ( v a r 1 = +v a r 1 ) ; System . o u t . p r i n t l n ( v a r 2 = +v a r 2 ) ; // E r r o r de // c o m p i l a c i o n }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

} 107 [100 - 112]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
M etodos

Las variables declaradas dentro de los m etodos son locales al m etodo, es decir, no se pueden referenciar desde fuera del m etodo en el que est an declaradas. Las variables locales se inicializan cuando se llama el m etodo y se destruyen cuando el m etodo termina. Los objetos creados dentro del m etodo pueden ser destruidos o no cuando el m etodo naliza, pueden no ser destruidos si todav a quedan referencias al objeto creado (por ejemplo, si se pasa como par ametro a otro m etodo). El objeto ser a destruido por el recolector de basura cuando no queden m as referencias a el.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

108 [100 - 112]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
M etodos: Ocultaci on de variables

Si una variable local y una de contenido tienen el mismo nombre, la variable local oculta el nombre de la variable de contenido dentro del ambito de m etodo:
c l a s s Pajaro { i n t xPos , yPos ; i n t xNext , yNe xt ; ... double flyToNext () { i n t xPos=x N e s t ; i n t yPos=yN e xt ; r e t u r n ( f l y ( xPos , yPos ) ; } }

En este ejemplo (un poco forzado) las variables xPos e yPos son ocultadas en el m etodo flyToNext().
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

109 [100 - 112]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
M etodos: Ocultaci on de variables

Si se quiere hacer referencia a variables de contenido ocultas se puede usar la referecia this. Esta referencia es una referencia al objeto actual. Por ejemplo:
class Pajaro { i n t xPos , yPos ; double f l y ( i n t xPos , i n t yPos ) { double d i s t = Math . s q r t ( xPos xPos+yPos yPos ) ; t h i s . xPos=xPos ; t h i s . yPos=yPos ; return d i s t ; } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

110 [100 - 112]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Sobrecarga de m etodos

La sobrecarga es la capacidad de denir m ultiples m etodos con el mismo nombre en una clase. Al invocar el m etodo el compilador selecciona el correcto dependiendo de los argumentos que se le hayan pasado al m etodo. Por ejemplo:
c l a s s Habla { s t a t i c String habla ( Perro p) { r e t u r n guau ; } s t a t i c S t r i n g h a b l a ( Gato g ) { r e t u r n miau ; } s t a t i c String habla ( Pajaro p) { return pio pio ; } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

111 [100 - 112]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Sobrecarga de m etodos

Ahora podemos llamar al m etodo habla con distintos tipos de objetos:


Habla . h a b l a ( new P e r r o ( ) ) ; // d e v u e l v e guau Habla . h a b l a ( new Gato ( ) ) ; // d e v u e l v e miau Habla . h a b l a ( new P a j a r o ( ) ) ; // d e v u e l v e p i o p i o

A un no vimos la herencia de clases, pero anticiparemos que si un tipo encajaen m as de un m etodo, se ejecutar a el que reciba el tipo m as espec co.

112 [100 - 112]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Creaci on de objetos

Para crear un objeto se usa el operador new junto con un constructor. Los constructores son m etodos especiales que tienen el mismo nombre que la clase y no devuelven ningun valor. Al igual que los otros m etodos pueden recibir par ametros y ser sobrecargados, pero no se heredan (la herencia la veremos m as adelante).

113 [113 - 120]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Creaci on de objetos: Ejemplo

c l a s s Persona { i n t edad ; Persona () { edad = 1 8 ; } P e r s o n a ( i n t edad ) { t h i s . edad = edad ; } }


Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

114 [113 - 120]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Creaci on de objetos

Si no se declara ning un constructor Java crea un constructor por defecto sin argumentos. Un constructor puede invocar a otro constructor sobrecargado usando la referencia this() con los argumentos necesarios para llamar al constructor deseado. Si hace una llamada a this() debe ser la primera del constructor que la realiza.

115 [113 - 120]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Creaci on e objetos: Ejemplo
c l a s s Persona { String calle ; i n t edad ; Persona () { t h i s ( , 1 8 ) ; } Persona ( S t r i n g c , i n t e ) { calle = c; edad = e ; } Persona ( i n t e ) { S t r i n g c = mi c a l l e ; // E r r o r de this (c , e ); // c o m p i l a c i o n } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

116 [113 - 120]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Creaci on de objetos

Ni siquiera se puede acceder a las variables de contenido antes de llamar a this() aunque sean final: c l a s s Persona { f i n a l i n t edad = 1 8 ; ... Persona ( S t r i n g c ) { t h i s ( c , edad ) ; // E r r o r } }

117 [113 - 120]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Creaci on de objetos

Si queremos hacer esto podemos declarar la variable como static puesto que las secciones static se inicializan cuando se carga la clase por primera vez (antes de que se ejecute el constructor) c l a s s Persona { s t a t i c f i n a l i n t EDAD = 1 8 ; ... Persona ( S t r i n g c ) { t h i s ( c , EDAD ) ; // S i n e r r o r } }

118 [113 - 120]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Creaci on de objetos

Se pueden declarar bloques de c odigo en la clase que no pertenecen a ningun m etodo, estas secciones se indican entre llaves y se evaluan al mismo tiempo que la evaluaci on de las variables de contenido (despues de la ejecuci on de constructor). Se pueden usar, por ejemplo, para inicializar valores en variables:
c l a s s Cosa { H a s h t a b l e numeros = new H a s h t a b l e ( ) ; { numeros . p u t ( new I n t e g e r ( 1 ) , Uno ) ; numeros . p u t ( new I n t e g e r ( 2 ) , Dos ) ; ... } ... }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

119 [113 - 120]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Creaci on de objetos

Estos bloques de c odigo pueden ser clarados como static, en ese caso s olo se puede hacer referencia a variables static: c l a s s Cosa { s t a t i c H a s h t a b l e numeros = new H a s h t a b l e ( ) ; static { numeros . p u t ( new I n t e g e r ( 1 ) , Uno ) ; numeros . p u t ( new I n t e g e r ( 2 ) , Dos ) ; ... } ... }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

120 [113 - 120]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Destrucci on de objetos

Java se encarga de la destrucci on de objetos, no tenemos que preocuparnos por ella.Para ello usa una t ecnica conocida como recolecci on de basura. Lo que hace es observar las referencias que tiene un objeto, cuando un objeto ya no tiene referencias a el en la m aquina virtual, Java destruye el objeto y libera la memoria que este ocupaba. Podemos forzar la recolecci on de basura invocando el m etodo System.gc()

121 [121 - 122]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Clases Creaci on de objetos Destrucci on de objetos

Objetos
Destrucci on de objetos

Antes de que la recolecci on de basura borre un objeto, se llama a su m etodo finalize() para que pueda realizar acciones para liberar recursos como por ejemplo cierre de cheros o cerrar conexiones de red. Es interesante observar que la nalizaci on se produce antes que la recolecci on: los objetos ejecutan su m etodo finalize() y luego son liberados, si un objeto crea una referencia a si mismo en el m etodo finalize() no ser a recogido.

122 [121 - 122]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Indice

Relaciones entre clases Herencia Interfaces Paquetes Visibilidad Clases internas

123 [123 - 123]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia

En Java las clases pueden formar jerarqu as. Una clase se puede declarar como subclase de otra usando la palabra clave extends. Una subclase hereda todas las variables y m etodos de su superclase y las usa como si hubieran sido declaradas dentro de la propia subclase:

124 [124 - 144]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
c l a s s Perro extends Animal { int raza ; // h e r e d a p e s o void ladra () { . . . } // h e r e d a come }

c l a s s Animal { i n t peso ; ... v o i d come ( ) { . . . } ... }

Ahora podemos crear una instancia de Perro e invocar los m etodos denidos en su superclase Animal:
P e r r o p = new P e r r o ( ) ; p. ladra (); p . come ( ) ;

125 [124 - 144]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
S olo se permite heredar de una u nica clase, esto es herencia u nica. No se heredan los miembros de la superclase que hayan sido declarados como private. Una subclase siempre tiene el mismo conjunto de miembros visibles que su ascendente, por eso las subclases pueden usarse en todos los sitios donde se puede usar la superclase:
P e r r o p = new P e r r o ( ) ; Animal a = p ;

Por medio del mecanismo de la herencia se pueden anular variables y m etodos de la superclase, el comportamiento es distinto si se trata de variables o de m etodos.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

126 [124 - 144]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Anulaci on de variables

Si redenimos una variable en una subclase, cuando nos reramos a ella trataremos con la variable redenida. Depende del contexto en el que nos reramos, es decir, se har a uso de la variable redenida en la subclase y en las subclases de la subclase.

127 [124 - 144]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Anulaci on de variables
public c l a s s Anulacion { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { B b = new B ( ) ; b . imprimeVarA ( ) ; // v a r = 2 b . imprimeVarB ( ) ; // v a r = 4 }} class A { int var = 2; p u b l i c v o i d imprimeVarA ( ) { System . o u t . p r i n t l n ( metodo A v a r=+v a r ) ; }} c l a s s B extends A { int var = 4; p u b l i c v o i d imprimeVarB ( ) { System . o u t . p r i n t l n ( metodo B v a r=+v a r ) ; }}
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

128 [124 - 144]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Anulaci on de variables

El resultado de este programa es: $ java Anulacion metodo A var=2 metodo B var=4 Al anular variables, se les puede cambiar el tipo.

129 [124 - 144]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Anulaci on de m etodos

Se pueden anular m etodos de la superclase declarando un m etodo con igual rma, es decir con el mismo n umero de argumentos y tipos y en el mismo orden. Adem as deber a declarar una clausula throws con la mismas excepciones que puede lanzar el m etodo que se anula o con subclases de las mismas. Cuando se anula un m etodo la nueva versi on es invocada siempre en cualquier contexto, lo veremos mejor con un ejemplo:

130 [124 - 144]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Anulaci on de m etodos
class A { int var = 2; p u b l i c v o i d imprimeVarA ( ) { System . o u t . p r i n t l n ( metodo A v a r=+v a r ) ; } } c l a s s B extends A { int var = 4; p u b l i c v o i d imprimeVarA ( ) { System . o u t . p r i n t l n ( metodo A v a r=+v a r ) ; } p u b l i c v o i d imprimeVarB ( ) { System . o u t . p r i n t l n ( metodo B v a r=+v a r ) ; } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

131 [124 - 144]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Anulaci on de m etodos

public class Anulacion { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { B b = new B ( ) ; b . imprimeVarA ( ) ; // v a r = 4 b . imprimeVarB ( ) ; // v a r = 4 A a = b; a . imprimeVarA ( ) ; // v a r = 4 ; A a2 = new A ( ) ; a2 . imprimeVarA ( ) ; // v a r = 2 } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

132 [124 - 144]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Anulaci on de m etodos

En ese ejemplo adem as vemos el acceso a una variable anulada. Al crear un objeto de la clase B, esta redene la variable var y el m etodo imprimeVarA(). Cuando se llama al m etodo anulado, como el contexto en el que se ejecuta es en el de al clase B accede a la versi on de var que tiene la clase B. Esto es as aunque estemos trabajando desde la clase A (superclase de B). En cambio, si creamos una instancia de A se accede a la versi on de var que tiene esa clase.

133 [124 - 144]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Anulaci on de m etodos

Podemos evitar la anulaci on de un m etodo declar andolo como final, el intento de anulaci on de un m etodo final da lugar a un error de compilaci on. Si queremos hacer referencia a m etodo anulado de la superclase podemos usar la referencia especial super. Al hacer esto se accede a la implementaci on que usa la superclase no el de la subclase. Podemos usar esto para extender el comportamiento de un m etodo. Tambien se puede usar super para acceder a variables.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

134 [124 - 144]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Anulaci on de m etodos
class A { int var = 2; p u b l i c void imprimeVar ( ) { System . o u t . p r i n t l n ( v a r=+v a r ) ; } } c l a s s B extends A { int var = 4; p u b l i c void imprimeVar ( ) { System . o u t . p r i n t l n ( v a r=+v a r ) ; super . imprimeVar ( ) ; } }

135 [124 - 144]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Casting

Con un cast se le dice al compilador que cambie el tipo de la referencia a un objeto. Los cast no cambian el tipo del objeto, s olo cambian la noci on que tiene el compilador del objeto apuntado por una referencia. Animal a n i m a l = . . . Perro perro = . . . animal = perro ; perro = ( Perro ) animal ; p e r r o = a n i m a l ; // E r r o r , t i p o i n c o m p a t i b l e
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

136 [124 - 144]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Casting

En el ejemplo, asignamos una variable de tipo Perro a una de tipo Animal esto es legal, como vimos anteriormente, porque Perro es una subclase de Animal. Para asignar la referencia en animal a perro tenemos que realizar el cast apropiado. Esto se llama hacer un downcast. Cuando hacemos un downcast hay que estar seguros de que lo hacemos a la clase correcta, si el objeto no pertenece a la clase a la que tratamos de hacer el downcast se lanza la excepci on ClassCastException. Siempre que asignamos una referencia a una clase a una referencia a una de sus superclases se est a produciendo un cast de forma autom atica y no es necesario especicarlo.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

137 [124 - 144]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Contructores de superclase

Con la sentencia super() se puede invocar al constructor de una superclase. Java ya introduce autom aticamente una llamada al constructor sin argumentos de la superclase si no le decimos nada, pero si queremos que se ejecute un constructor con argumentos hay que especicar cual. La llamada a super(), al igual que con this(), debe ser la primera en el constructor:

138 [124 - 144]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Contructores de superclase
c l a s s Animal { ... A n i m a l ( S t r i n g nombre ) { // I n i c i a l i z a c i o n de v a l o r e s ... } } c l a s s Perro extends Animal { ... P e r r o ( S t r i n g nombre , S t r i n g dueno ) { s u p e r ( nombre ) ; // mas v a l o r e s ... } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

139 [124 - 144]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Constructores de superclase

Es el ejemplo se usa super() para aprovechar la implementaci on del constructor de la superclase. Adem as en este ejemplo concreto es obligado hacerlo porque la superclase no tiene un constructor sin argumentos. El contructor sin argumentos es el que llama autom aticamente Java, y el compilador habria protestado si no hacemos la llamada correcta a super().

140 [124 - 144]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Constructores de superclase: Reglas

Las regla que se aplica para inicializar las variables de contenido y hacer las llamadas a los constructores depende de la primera sentencia del constructor:
1

Si es una sentencia ordinaria, Java inserta una llamada impl cita a super(), inicializa las variables de contenido de clase actual y luego continua con la ejecuci on de las sentencias del constructor actual. Si es una llamada a un constructor de una superclase por medio de super(), se invoca al constructor de la superclase. Al volver de esta llamada, inicializa las variables de contenido de clase actual y luego continua con la ejecuci on de las sentencias del constructor actual.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

141 [124 - 144]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Constructores de superclase: Reglas

Si es una llamada a un constructor sobrecargado por medio de this(), se invoca al constructor seleccionado. Al volver de esta llamada, continua con la ejecuci on de las sentencias del constructor actual.

En la u ltima regla, la llamada al constructor de la superclase se produjo con el constructor sobrecargado, bien impl cita o expl citamente, con cual la inicializaci on de variables ya se ha producido.

142 [124 - 144]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
M etodos y clases abstract

Un m etodo Java se puede declarar con el modicador abstract indicando que es un protoripo. Este tipo de m etodos no tienen cuerpo y solo se declara la cabecera seguida de punto y coma. Una clase que contenga un m etodo abstract debe ser declarada como abstract y no puede ser instanciada. Para ello hay que crear una subclase que anule los m etodos abstract proporcion andoles una implementaci on. Si una subclase no anula todos los m etodos abstract debe ser declarada como abstract tambi en.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

143 [124 - 144]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Herencia
Metodos y clases abstract

a b s t r a c t c l a s s Animal { ... abstract void s a l t a ( ) ; }

c l a s s P e r r o extends Animal ... void s a l t a ( ) { . . . } }

La clase abstracta Animal declara un m etodo abstracto salta(), que cada animal debe implementar. Ahora no podemos crear animales si no son una subclase de Animal: Animal a = new Animal ( ) ; // E r r o r Animal a = new P e r r o ( ) ; // OK

144 [124 - 144]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Interfaces
Las interfaces son parecidas a clases abstractas con todos los m etodos abstractos, solo que declarar interfaces tiene sus ventajas como veremos a continuaci on. Una interfaz dene un conjunto de m etodos que deben ser implementadas por una clase. Los tipos de interfaz act uan como tipos de clase, se pueden declarar variables del tipo de una interfaz, los m etodos pueden devolver tipos interfaz. . . Las interfaces son una declaraci on de m eritos, realmente son como un contrato que la clase se compromete a cumplir. Una clase puede decir que implementa tantas interfaces como quiera. De esta manera se pueden resolver algunos casos en los que necesita la herencia m ultiple.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

145 [145 - 150]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Interfaces
Ejemplo

public interface Adiestrable { public void s a l t a ( ) ; p u b l i c v o i d ven ( ) ; public void c o g e l o ( ) ; } p u b l i c c l a s s P e r r o extends Animal implements A d i e s t r a b l e { ... public void s a l t a ( ) { . . . } p u b l i c v o i d ven ( ) { . . . } public void c o g e l o ( ) { . . . } } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

146 [145 - 150]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Interfaces
Ejemplo

La clase Perro es una subclase de Animal y el mismo tiempo implementa la interfaz Adiestrable. Ahora podemos declarar variables de tipo Adiestrable y asignarlas a cualquier instancia de un objeto Adiestrable: A d i e s t r a b l e a = new P e r r o ( ) ; a . cogelo ( ) ;

147 [145 - 150]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Interfaces
Una declaraci on de una interfaz puede contener variables static final para ser usadas como constantes. Adem as se permite la declaraci on de interfaces vac as, es decir, que no contienen la especicaci on de ning un m etodo o variable. En este caso se usan como marcadores. Finalmente, las interfaces pueden formar jerarqu as igual que las clases usando el mecanismo de la herencia. Una clase que implemente una interfaz que extienda a otra interfaz debe implementar todos los m etodos de la interfaz y de todos sus ancestros.

148 [145 - 150]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Interfaces
Ejemplo de jerarqu a

public interface InterfazA { p u b l i c v o i d metodoA ( ) ; } public interface InterfazB { p u b l i c v o i d metodoB ( ) ; } p u b l i c i n t e r f a c e I n t e r f a z C extends I n t e r f a z A { p u b l i c v o i d metodoC ( ) ; } p u b l i c c l a s s Cosa implements I n t e r f a z B , I n t e r f a z C { p u b l i c v o i d metodoA ( ) { } p u b l i c v o i d metodoB ( ) { } p u b l i c v o i d metodoC ( ) { } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

149 [145 - 150]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Interfaces
Ejemplo de jerarqu a

La clase Cosa implementa las interfaces InterfazB e InterfazC. Esta u ltima hereda de la interfaz InterfazA. La clase debe implementar los m etodos que especican todas las interfaces del ejemplo.

150 [145 - 150]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Paquetes
Un paquete es un nombre para un grupo de clases e interfaces relacionadas, adem as crean un nivel de alcance para sus clases y las variables y m etodos que est an dentro de ellas. Para declarar que una clase pertenece a un paquete concreto se utiliza la sentencia package, esta sentencia debe ser la primera en el chero y no puede aparecer m as de una: package a n i m a l e s ; c l a s s Animal { ... }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

151 [151 - 153]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Paquetes
En el ejemplo declaramos la clase Animal como perteneciente al paquete animales. Ahora para referirse a ella desde otra clase que no pertenece al paquete hay usar la notaci on nombre paquete.nombre clase. Los nombres de paquete est an formados por nombres separados por puntos. Esto no implica una jerarqu a dentro de los paquetes, es decir, las clases del paquete animales.mamiferos.perros no pertenecen al paquete animales.mamiferos

152 [151 - 153]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Paquetes
Si no queremos estar anteponiendo el nombre del paquete al de la clase todo el tiempo podemos utilizar la sentencia import que indica al compilador cual es el paquete al que pertenece la clase:
i m p o r t a n i m a l e s . A ni ma l ; c l a s s Zoo { .... void blabla () { A n i m a l a = new A n i m a l ( ) ; .. } }

Se pueden importar todas las clases de un paquete usando * al nal del nombre del paquete:
import animales . ;
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

153 [151 - 153]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Visibilidad
Visibilidad de clases

Por defecto una clase s olo es accesible para otras clases dentro de su propio paquete. Para que sea visible en cualquier parte hay que declararla como public:
package a n i m a l e s ; p u b l i c c l a s s A n i ma l { . . . }

S olo puede exitir un clase p ublica por chero y el nombre de la clase p ublica debe ser igual al nombre del chero. Al hacer publicas s olo algunas clases de un paquete proporcionamos a los usuarios del paquete una interfaz bien denida para su uso, ocultando partes internas del mismo.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

154 [154 - 157]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Visibilidad
Visibilidad de variables y m etodos

Las variables y m etodos de una clase, por defecto, son accesibles desde la propia clase y desde el resto de clases del mismo paquete. Este es el nivel por defecto de visibilidad. El modicador private hace que los miembros declarados como tal sean visibles u nicamente desde la propia clase. Los miembros declarados como public pueden verse desde cualquier clase en cualquier paquete, siempre que la clase pueda verse. El modicador protected proporciona permisos parciales para subclases. Los miembros protected, adem as de la visibilidad por defecto, son visibles para las subclases de la clase, aunque est en denidas fuera del paquete de la clase.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

155 [154 - 157]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Visibilidad
Visibilidad de variables y m etodos

Modicador private (ninguno) protected public

Visibilidad Ninguna Clases en el paquete Clases en el paquete y en las subclases dentro o fuera del paquete Todas las clases

Cuadro: Modicadores de visibilidad

Debemos tener en cuenta que cuando se anulan m etodos en una subclase, el m etodo de anulaci on debe ser al memos tan visible como el m etodo anulado. Por ejemplo, podemos anular un m etodo private con un m etodo public, pero no al rev es.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

156 [154 - 157]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Visibilidad
Visibilidad de interfaces

Las interfaces se comportan como clases dentro de los paquetes. Pueden ser declaradas como public para hacerlas visibles fuera del paquete. Bajo la visibilidad por defecto s olo son visibles dentro del paquete. S olo puede haber una interfaz p ublica por chero.

157 [154 - 157]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas

En Java se puede declarar una clase dentro de cualquier juego de llaves y su visibilidad se limita de igual modo que una variable o un m etodo. Por ejemplo: c l a s s Animal { class Cerebro { ... } }

158 [158 - 171]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas
La clase Cerebro es una clase interna de Animal. Ahora a nadimos un m etodo a la clase Animal:
p u b l i c c l a s s Animal { S t r i n g nombre ; c l a s s Cerebro { public void piensa () { . . . } } public void realizaComportamiento () { . . . C e r e b r o c = new C e r e b r o ( ) ; c . piensa (); ... } }

Tanto la clase Cerebro como realizaComportamiento() est an dentro del ambito de Animal. Por lo tanto en cualquier parte dentro de Animal podemos hacer referencia a Cerebro y a realizaComportamiento() por nombre.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

159 [158 - 171]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas

Dentro del cuerpo de Cerebro tenemos acceso directo al resto de m etodos y variables de clase Animal. Desde el interior del m etodo realizaComportamiento() se podr a trabajar con la clase Cerebro y crear instancias de Cerebro. El c odigo dentro de la clase Cerebro puede invocar al m etodo realizaComportamiento() de Animal.

160 [158 - 171]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas

Un uso particular importante para las clases internas es la de crear clases adaptadoras. Una clase adaptador es una clase de ayuda que relaciona una clase con otra de una forma espec ca. Por ejemplo, si tenemos un objeto ListaEmpleados: public class ListaEmpleados { p r i v a t e Empleado [ ] e m p l e a d o s = . . . ; ... }

161 [158 - 171]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas
Nos gustar a que esta clase nos proporcionara sus elementos por medio de un iterador, que es una interfaz sencilla para listar objetos. La interfaz java.util.Iterator tiene varios m etodos como: public interface I t e r a t o r { p u b l i c boolean h a s N e x t ( ) ; public Object next ( ) ; p u b l i c v o i d remove ( ) ; } Esto nos permite ver los elementos preguntando por el siguiente y preguntando si queda alguno m as.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

162 [158 - 171]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas
Para crear un iterador podemos usar una clase interna:
public c l a s s ListaEmpleados { p r i v a t e Empleado [ ] e m p l e a d o s = . . . ; ... c l a s s I t e r a d o r implements j a v a . u t i l . I t e r a t o r { i n t elemento = 0; p u b l i c boolean hasNext ( ) { r e t u r n e l e m e n t o <e m p l a d o s . l e n g t h ; } p u b li c Object next () { i f ( hasNext ( ) ) { r e t u r n e m p l e a d o s [ e l e m e n t o ++]; } else { throw new R u n t i m e E x c e p t i o n ( No hay mas e l e m e n t o s ) ; } } p u b l i c v o i d remove ( ) { throw new U n s u p p o r t e d O p e r a t i o n E x c e p t i o n ( ) ; } } ... } Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

163 [158 - 171]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas
Al estar dentro de la clase ListaEmpleados, la clase Iterador tiene acceso a la lista de miembros privada, por lo que puede acceder directamente al array empleados. Podemos introducir un m etodo para obtener el iterador: public class ListaEmpleados { ... I t e r a t o r getIterator () { r e t u r n new I t e r a d o r ( ) ; } ... }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

164 [158 - 171]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas
Clases internas dentro de m etodos

Las clases internas tambien pueden declararse dentro de m etodos: c l a s s Animal { void realizaComportamiento ( ) { class Cerebro { ... } } } En este caso, el cuerpo de Cerebro puede ver todo lo que se encuentra en el ambito del m etodo incluidos los miembros de Animal.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

165 [158 - 171]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas
Clases internas dentro de m etodos

Esto tiene limitaciones: Los m etodos tienen una vida limitada, cuando terminan sus variables locales desaparecen, pero una instancia de Cerebro vivir a mientras queden referencias ella. Por ello Java debe estar seguro de que cualquier variable local utilizada por las instancias de Cerebro dentro de la invocaci on del m etodo debe estar viva. Todas las instancias de Cerebro creadas dentro de una invocaci on al m etodo deben ver las mismas variables locales. Para poder hacer esto el compilador ha de ser capaz de crear copias de las variables locales. Por lo tanto las variables locales de m etodos a las que se ha hecho referencia por la clase interna deben ser final.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

166 [158 - 171]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas
Ocultaci on de variables

Las clases internas pueden ocultar variables de las clases que las contienen. Para acceder a las variables ocultas se puede usar la referencia this. Lo que pasa es que la clase interna tiene ahora m as de una referencia this (la suya y la clase que la contiene). Se puede especicar la referencia a la que se reere anteponiendo el nombre de la clase.

167 [158 - 171]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas
Ocultaci on de variables: Ejemplo

class Cerebro { Animal miAnimal = Animal . t h i s ; } Tambien podemos hacer referencia a las variables de la clase del mismo modo: c l a s s Animal { int s i z e = 10; class Cerebro { int size = 2; i n t a n i m a l S i z e = Animal . t h i s . s i z e ; } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

168 [158 - 171]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas
Clases internas an onimas

Las clases internas an onimas son una extensi on del operador new. Tras el operador new se especica el nombre de una clase o de una interfaz seguido del cuerpo de una clase. El cuerpo se convierte en una clase interna. Por ejemplo, en el ejemplo de la lista de empleados podemos suprimir la declaraci on de la clase Iterador haciendo:

169 [158 - 171]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas
Clases internas an onimas: Ejemplo
public c l a s s ListaEmpleados { p r i v a t e Empleado [ ] e m p l e a d o s ; ... I t e r a t o r getIterator () { r e t u r n new j a v a . u t i l . I t e r a t o r ( ) { i n t elemento = 0; p u b l i c boolean hasNext ( ) { r e t u r n e l e m e n t o <e m p l a d o s . l e n g t h ; } p u b l i c Object next () { i f ( hasNext ( ) ) { r e t u r n e m p l e a d o s [ e l e m e n t o ++]; } else { throw new R u n t i m e E x c e p t i o n ( No hay mas e l e m e n t o s ) ; } } p u b l i c v o i d remove ( ) { throw new U n s u p p o r t e d O p e r a t i o n E x c e p t i o n ( ) ; } } } Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

} 170 [158 - 171]

Introducci on Sintaxis Objetos en java Relaciones entre clases

Herencia Interfaces Paquetes Visibilidad Clases internas

Clases internas
Clases internas an onimas: Ejemplo

Tambien podemos usarlo para anular m etodos o variables:


p u b l i c c l a s s Prueba { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { A n i m a l a1 = new A n i m a l ( ) ; h a z H a b l a r ( a1 ) ; A n i m a l a2 = new A n i m a l ( ) { public void habla () { System . o u t . p r i n t l n ( o t r a c o s a ) ; } }; h a z H a b l a r ( a2 ) ; } s t a t i c v o i d hazHablar ( Animal a ) { a . habla ( ) ; } } c l a s s Animal { public void habla () { System . o u t . p r i n t l n ( h o l a ! ) ; } } Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

171 [158 - 171]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Parte II Usos del lenguaje

172 [172 - 172]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Indice

Threads Introducci on Sincronizaci on

173 [173 - 173]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Conceptualmente un thread es un ujo de control dentro de un programa. Un thread es parecido a un proceso, excepto por el hecho de que m ultiples threads dentro de la misma aplicaci on comparten muchas cosas, como por ejemplo, ejecutarse en el mismo espacio de direcciones. Compartir el mismo espacio de direcciones signica que los threads comparten las variables de contenido pero no las variables locales. Los m ultiples threads de una aplicaci on deben sincronizarse. No puede haber varios threads intentando acceder a las mismas variables sin nig un tipo de coordinaci on.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

174 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Composici on Al usar threads siempre hay dos actores principales: Uno representa al thread El otro contiene el m etodo que el thread va a ejecutar. A veces, es posible combinarlos, pero esto no cambia la relaci on. Un thread nace cuando creamos una instancia de la clase java.lang.Thread. El objeto Thread representa un thread real del int erprete Java y sirve como gestor que controla y sincroniza su ejecuci on. Con el podemos comenzar el thread, detenerlo o cancelarlo de forma temporal.
175 [174 - 191] Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
El contructor de la clase Thread recibe informaci on sobre d onde debe comenzar la ejecuci on del thread. Para indicar qu e debe ejecutar el thread existe la interfaz java.lang.Runnable. Esta interfaz dene el m etodo run() que es el que invocar a el thread al ser iniciado: public i n t e r f a c e Runnable { public void run ( ) ; } Cada thread comienza su vida con la ejecuci on del m etodo run() en el objeto Runnable (el objeto destino) que se pas o al thread.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

176 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on

Un Thread reci en creado permanece inactivo hasta que llamanos al m etodo start(). Entoces el thread despierta y ejecuta el m etodo run() de su objeto destino. S olo se puede llamar a start() una vez en la vida de un Thread. El thread se sigue ejecutando hasta que que vuelve el m etodo run() del objeto destino.

177 [174 - 191]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Ejemplo

c l a s s A n i m ac i o n implements R u n n a b l e { ... public void run ( ) { while ( true ) { // d i b u j a ... } } }

Esta clase podr a ser la encargada de dibujar una animaci on en una interfaz. Para usarlo:
A n i m a c i o n anim = new A n i m a c i o n ( ) ; Thread t = new Thread ( anim ) ; t . start ();
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

178 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Ejemplo

Si no se quiere que esta responsabilidad la lleve a cabo un objeto externo, puede ser realizado desde la propia clase que implementa la interfaz Runnable: c l a s s A n i m a c i on implements R u n n a b l e { Thread t h r e a d ; ... public void i n i c i a A n i m a c i o n ( ) { t h r e a d = new Thread ( t h i s ) ; thread . s t a r t ( ) ; } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

179 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Ejemplo
public cla ss Corredor { p r i v a t e S t r i n g nombre ; p u b l i c C o r r e d o r ( S t r i n g nombre ) { t h i s . nombre = nombre ; } public void corre ( int n) { f o r ( i n t i =0; i <n ; i ++) { System . o u t . p r i n t l n ( +nombre+ : +i ) ; // S i m u l a una o p e r a c i o n c o s t o s a de d u r a c i o n // v a r i a b l e try { i n t t = ( i n t ) ( Math . random ( ) 1 0 0 ) ; Thread . s l e e p ( t ) ; } c a t c h ( E x c e p t i o n e ) {} } System . o u t . p r i n t l n ( +nombre+ : T e r m i n e e e e ! ! ! ) ; } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

180 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Ejemplo
public class Carrera { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { Corredor corredor1 , corredor2 ; c o r r e d o r 1 = new C o r r e d o r ( A ) ; c o r r e d o r 2 = new C o r r e d o r ( B ) ; corredor1 . corre (10); corredor2 . corre (10); } }

Que sucede? Primero se ejecuta uno y desp ues el otro. Vamos a a nadir concurrencia para que sea una carrera de verdad.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

181 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Ejemplo: A nadiendo concurrencia
c l a s s Corredor2 implements Runnable { ... p u b l i c void run ( ) { corre (10); } } public class Carrera2 { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { Thread c o r r e d o r 1 , c o r r e d o r 2 ; c o r r e d o r 1 = new Thread ( new C o r r e d o r 2 ( A ) ) ; c o r r e d o r 2 = new Thread ( new C o r r e d o r 2 ( B ) ) ; corredor1 . start (); corredor2 . start (); } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

182 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Recordamos

La interfaz Runnable permite crear un objeto arbitrario de destino de un thread. Este es el uso general m as importante de la clase Thread. En la mayor a de los casos en los que se tiene que usar threads se crear a una clase que implemente la interfaz Runnable.

183 [174 - 191]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Otro modo

Hay una segunda forma de crear threads, podemos hacer una subclase de Thread, por ejemplo:
c l a s s A n i m ac i o n extends Thread { ... public void run ( ) { while ( true ) { // d i b u j a ... } } }

La clase Thread, si se usa el constructor por defecto ejecuta su propio m etodo run() cuando llamamos a start().
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

184 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Otro modo

Para usar la nueva clase Animacion y llamamos a su m etodo start(): Anim a c i o n a n i m a c i o n = new A n i m a c i on ( ) ; animacion . s t a r t ( ) ;

185 [174 - 191]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Control de un Thread

Los threads se inician con el m etodo start(). Otros m etodos de contenido nos permiten ejecutar de forma expl cita la ejecuci on de un Thread: El m etodo sleep() hace que el thread actual espere el tiempo establecido, sin consumir mucho tiempo de la CPU. El m etodo interrupt() despierta a un thread que est a durmiendo o que se encuentra bloqueado en una operaci on de E/S. Los m etodos wait() y join() coordinan la ejecuci on de dos o m as threads.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

186 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Control de un Thread

A menudo necesitamos decirle a un thread que permanezca inactivo durante un tiempo. Para ello llamamos al m etodo sleep() o invocar a Thread.sleep(). En cualquiera de los dos m etodos, la llamada har a que el thread actualmente en ejecuci on se retrase el n umero especicado de milisegundos:
try { Thread . s l e e p ( 1 0 0 ) ; } catch ( I n t e r r u p t e d E x c e p t i o n e ) { // Se d e s p e r t o p r e m a t u r a m e n t e }

sleep() lanza la excepci on InterruptedException si es interrumpido por otro thread usando interrupt().
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

187 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Control de un Thread

Si se tienen que coordinar las actividades de dos threads de manera que uno tiene que esperar a un termine para poder continuar se puede usar el m etodo join(). join() hace que hace que quien llame se bloquee hasta que el thread objetivo muere. Esta es una forma muy simple de sincronizaci on, m as adelante veremos otros mecanismos.

188 [174 - 191]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Control de un Thread

public class Carrera { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { Thread c o r r e d o r 1 , c o r r e d o r 2 ; c o r r e d o r 1 = new Thread ( new C o r r e d o r ( A ) ) ; c o r r e d o r 2 = new Thread ( new C o r r e d o r ( B ) ) ; corredor1 . start (); try { corredor1 . join (); } catch ( E x c e p t i o n e ) {} corredor2 . start (); } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

189 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Vida de un Thread

Hay que tener cuidado con como terminan los threads: Un thread puede vivir incluso despu es de que la parte de la aplicaci on que la hab a creado haya terminado. El interprete Java se sigue ejecutando hasta que todos los threads se hayan terminado. Pueden quedar threads huerfanos que se continuen ejecutando una vez que la aplicaci on se nalice. Podemos marcar ciertos threads para que sean eliminados cuando s olo queden ellos, esto se hace con el m etodo setDaemon(). Cuando los threads demonio son los u nicos que quedan en la m aquina virtual, estos son eliminados.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

190 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Introducci on
Control de un Thread

public class Carrera { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { Thread c o r r e d o r 1 , c o r r e d o r 2 ; c o r r e d o r 1 = new Thread ( new C o r r e d o r ( A ) ) ; c o r r e d o r 2 = new Thread ( new C o r r e d o r ( B ) ) ; c o r r e d o r 1 . setDaemon ( t r u e ) ; c o r r e d o r 2 . setDaemon ( t r u e ) ; corredor1 . start (); corredor2 . start (); } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

191 [174 - 191]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
Cada thread tiene una vida propia. Los thread pueden repartirse en en tiempo, lo que signica que pueden ejecutarse en un momento dado y anularse seg un indique el sistema operativo. Java proporciona estructuras sencillas para la sincronizaci on de las actividades de los threads. La sincronizaci on se basa en el concepto de monitores que son b asicamente cerrojos. Para acceder a un recurso compartido un thread tiene que obtener el cerrojo.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

192 [192 - 204]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
Acceso en serie a m etodos

La necesidad m as normal de sincronizaci on es serializar el acceso a un objeto o una variable. Cada objeto tiene un cierre asociado. Para marcar lugares donde un thread tiene que adquirir el cierre antes de continuar se usa la palabra clave synchronized

193 [192 - 204]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
Acceso en serie a m etodos: Ejemplo

Imaginemos que tenemos un sintetizador de voz. No nos interesa que m ultiples threads traten de hacerlo funcionar a la vez:
public class SintetizadorVoz { public void d i ( S t r i n g f r a s e ) { char p [ ] = f r a s e . t o C h a r A r r a y ( ) ; f o r ( i n t i =0; i <p . l e n g t h ; i ++) { System . o u t . p r i n t ( p [ i ] ) ; try { Thread . s l e e p ( 1 0 0 ) ; } catch ( E x c e p t i o n e ) {} } System . o u t . p r i n t l n ( ) ; } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

194 [192 - 204]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
Acceso en serie a m etodos: Ejemplo
public class Sincronizacion { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { S i n t e t i z a d o r V o z s = new S i n t e t i z a d o r V o z ( ) ; di ( s , hola a todos ) ; d i ( s , HOLA A TODOS ) ; } s t a t i c void di ( f i n a l SintetizadorVoz s , final String frase ) { ( new Thread ( new R u n n a b l e ( ) { p u b l i c void run ( ) { s . di ( frase ); } })). start (); } }

La salida es la siguiente: hHoOlLaA aA tToOdDoOsS


Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

195 [192 - 204]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
Acceso en serie a m etodos: Ejemplo

Esto no es lo que queremos. Marcamos el m etodo como synchronized: class SintetizadorVoz { ... synchronized public void d i ( S t r i n g f r a s e ) { ... } } La salida es la siguiente: hola a todos HOLA A TODOS
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

196 [192 - 204]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
Acceso en serie a m etodos: Ejemplo

Que pasa si ponemos esto en la clase principal? S i n t e t i z a d o r V o z s = new S i n t e t i z a d o r V o z ( ) ; S i n t e t i z a d o r V o z s 2 = new S i n t e t i z a d o r V o z ( ) ; di ( s , hola a todos ) ; d i ( s2 , HOLA A TODOS ) ;

197 [192 - 204]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
Acceso en serie a m etodos: Ejemplo

Vuelven a mezclarse El motivo es que el cierre est a en el objeto Se soluciona haciendo el m etodo di(String frase) est atico con lo que el cierre pasa a la clase

198 [192 - 204]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
Si se pone m as de un m etodo synchronized, s olo se ejecuta uno de ellos a la vez. Esto es debido a que todos tienen el mismo cierre. Con esto mantenemos la consistencia en los resultados Ejemplo: int a , b ; s y n c h r o n i z e d i n t sum ( ) { r e t u r n a+b ; } synchronized void s e t ( i n t a , i n t b ) { this . a = a ; this . b = b ; }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

199 [192 - 204]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
Bloques de c odigo

La palabra clave synchronized se puede usar para serializar el acceso a bloques de c odigo arbitrarios. Se usa la forma:
synchronized ( miObjeto ) { ... }

El objeto pasado es el que contiene el cierre que hay que obtener para acceder al bloque Segun esto, hacer:
s y n c h r o n i z e d v o i d metodo ( ) { . . . }

es equivalente a:
v o i d metodo ( ) { s y n c h r o n i z e d ( t h i s ) { . . . } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

200 [192 - 204]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
M etodos wait() y notify()

Con wait() y notify(), un thread puede abandonar su contenido en un cerrojo en un punto arbitrario y esperar hasta que otro thread se lo devuelva para continuar. Toda actividad coordinada todav a sucede dentro de los bloques sincronizados y s olo se ejecuta un thread a la vez. Al ejecutar wait() desde un bloque sincronizado, un thread libera su cerrojo y se va a dormir. Cuando otro thread ejecute notify() sobre el mismo cerrojo, el primero se despertar a e intentar a adquirir el nuevo cierre.

201 [192 - 204]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
M etodos wait() y notify(): Ejemplo
p u b l i c c l a s s C o n s u m i d o r e x t e n d s Thread { Productor productor ; S t r i n g nombre ; Consumidor ( S t r i n g n , Pr o duc t o r p ) { nombre = n ; productor = p ; } p u b l i c void run ( ) { try { while ( true ) { S t r i n g mensaje = productor . getMensaje ( ) ; System . o u t . p r i n t l n ( nombre+ o b t i e n e m e n s a j e : +m e n s a j e ) ; sleep (2000); } } catch ( I n t e r r u p t e d E x c e p t i o n e ) { } } }

202 [192 - 204]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
M etodos wait() y notify(): Ejemplo

import j a v a . u t i l . Vector ; p u b l i c c l a s s P r o d u c t o r e x t e n d s Thread { s t a t i c f i n a l i n t LONG COLA = 5 ; p r i v a t e V e c t o r m e n s a j e s = new V e c t o r ( ) ; p u b l i c void run ( ) { try { while ( true ) { generaMensaje ( ) ; sleep (1000); } } c a t c h ( I n t e r r u p t e d E x c e p t i o n e ) {} } p r i v a t e synchronized void generaMensaje ( ) throws I n t e r r u p t e d E x c e p t i o n { w h i l e ( m e n s a j e s . s i z e ( ) == LONG COLA) wait ( ) ; m e n s a j e s . a d d E l e m e n t ( new j a v a . u t i l . Date ( ) . t o S t r i n g ( ) ) ; notifyAll (); } p u b l i c synchronized S t r i n g getMensaje ( ) throws I n t e r r u p t e d E x c e p t i o n { notify (); w h i l e ( m e n s a j e s . s i z e ( ) == 0 ) w a i t ( ) ; S t r i n g mensaje = ( S t r i n g ) mensajes . f i r s t E l e m e n t ( ) ; mensajes . removeElement ( mensaje ) ; retur n mensaje ; } } 203 [192 - 204] Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Introducci on Sincronizaci on

Sincronizaci on
M etodos wait() y notify(): Ejemplo

En la clase principal:
P r o d u c t o r p = new P r o d u c t o r ( ) ; p. start (); new C o n s u m i d o r ( Uno : , p ) . s t a r t ( ) ; new C o n s u m i d o r ( Dos : , p ) . s t a r t ( ) ;

204 [192 - 204]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Indice

Entrada/Salida E/S Est andar Ficheros

205 [205 - 206]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
La E/S de Java est a basada en secuencias Una secuencia representa una corriente de datos o un canal de comunicaciones con un lector a un lado y un escritor al otro. Las secuencias son caminos unidireccionales. Si se quieren comunicaciones bidireccionales hay que usar dos secuencias, una para cada sentido. Las clases abstractas InputStream y OutputStream denen las secuencias de bytes. Las clases abstractas Reader y Writer denen las secuencias de caracteres (Unicode).
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

206 [205 - 206]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Primer ejemplo

El ejemplo m as basico es la entrada y la salida est andar Son accesibles desde la clase System accediendo a los campos in y out System.in implementa stdin como una instancia de la clase InputStream. Con System.in, se accede a los m etodos read() y skip(). El m etodo read() permite leer un byte de la entrada. skip( long n ), salta n bytes de la entrada. System.out implementa stdout como una instancia de la clase PrintStream. Se pueden utilizar los m etodos print() y println() con cualquier tipo b asico Java como argumento.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

207 [207 - 208]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Primer ejemplo
import j a v a . i o . ; p u b l i c c l a s s Ejemplo { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) throws IOException { int c ; int contador = 0; w h i l e ( ( c = System . i n . r e a d ( ) ) != 1 ) { c o n t a d o r ++; System . o u t . p r i n t ( ( c h a r ) c ) ; } System . o u t . p r i n t l n ( ) ; // L i n e a en b l a n c o System . e r r . p r i n t l n ( C o n t a d o s + c o n t a d o r + b y t e s . ) ; } }
208 [207 - 208] Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Ficheros

El acceso b asico se hace a trav es de la clase File. Para crear un objeto File nuevo, se puede utilizar cualquiera de los tres constructores siguientes: F i l e miFichero ; m i F i c h e r o = new F i l e ( / e t c / kk ) ; m i F i c h e r o = new F i l e ( / e t c , kk ) ; F i l e m i D i r e c t o r i o = new F i l e ( / e t c ) ; m i F i c h e r o = new F i l e ( m i D i r e c t o r i o , kk ) ;

209 [209 - 218]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Ficheros: Ejemplo
import j a v a . i o . ; class InfoFichero { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) t h r o w s I O E x c e p t i o n { i f ( args . length > 0 ) { f o r ( i n t i =0; i < a r g s . l e n g t h ; i++ ) { F i l e f = new F i l e ( a r g s [ i ] ) ; System . o u t . p r i n t l n ( Nombre : +f . getName ( ) ) ; System . o u t . p r i n t l n ( Camino : +f . g e t P a t h ( ) ) ; i f ( f . e x i s t s () ) { System . o u t . p r i n t ( F i c h e r o e x i s t e n t e ) ; System . o u t . p r i n t ( ( f . canRead ( ) ? , s e pue de L e e r : ) ) ; System . o u t . p r i n t ( ( f . c a n W r i t e ( ) ? , se puese E s c r i b i r : ) ) ; System . o u t . p r i n t l n ( . ) ; System . o u t . p r i n t l n ( La l o n g i t u d d e l f i c h e r o s o n + f . l e n g t h ()+ b y t e s ) ; } else System . o u t . p r i n t l n ( E l f i c h e r o no e x i s t e . ) ; } } else System . o u t . p r i n t l n ( Debe i n d i c a r un f i c h e r o . ) ; } } Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

210 [209 - 218]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Ficheros: Lectura

Para leer de un chero usamos una subclase de InputStream: FileInputStream Para abrir un FileInputStream sobre un chero, se le da al constructor un String o un objeto File:
F i l e I n p u t S t r e a m mi F i c h e r o S t ; m i F i c h e r o S t = new F i l e I n p u t S t r e a m ( / e t c / kk ) ;

Tambi en se puede utilizar:


F i l e miFichero FileInputStream miFicheroSt ; m i F i c h e r o = new F i l e ( / e t c / kk ) ; m i F i c h e r o S t = new F i l e I n p u t S t r e a m ( m i F i c h e r o ) ;

211 [209 - 218]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Ficheros: Lectura
import j a v a . i o . ; public class VerFichero { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { i f ( args . length > 0 ) { try { int c ; F i l e I n p u t S t r e a m f i s = new F i l e I n p u t S t r e a m ( a r g s [ 0 ] ) ; w h i l e ( ( c= f i s . r e a d ())!= 1) { System . o u t . p r i n t ( ( c h a r ) c ) ; } } catch ( FileNotFoundException e ) { System . o u t . p r i n t l n ( E l f i c h e r o no e x i s t e . ) ; return ; } catch ( IOException e ) { System . o u t . p r i n t l n ( E r r o r de E/S . ) ; } } else System . o u t . p r i n t l n ( Debe i n d i c a r un f i c h e r o . ) ; } } Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

212 [209 - 218]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Ficheros: Escritura

Para escribir un chero usamos una subclase de OutputStream: FileOutputStream Para abrir un FileOutputStream sobre un chero, se le da al constructor un String o un objeto File:
FileOutputStream miFicheroSt ; m i F i c h e r o S t = new F i l e O u t p u t S t r e a m ( / e t c / kk ) ;

Tambi en se puede utilizar:


F i l e miFichero FileOutputStream miFicheroSt ; m i F i c h e r o = new F i l e ( / e t c / kk ) ; m i F i c h e r o S t = new F i l e O u t p u t S t r e a m ( m i F i c h e r o ) ;

213 [209 - 218]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Ficheros: Escritura
import j a v a . i o . ; public class Salida { s t a t i c FileOutputStream fos ; public s t a t i c f i n a l int longLinea = 81; p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) t h r o w s I O E x c e p t i o n { b y t e d a t o s [ ] = new b y t e [ l o n g L i n e a ] ; f o s = new F i l e O u t p u t S t r e a m ( d a t o s . d a t ) ; while ( true ) { System . e r r . p r i n t ( T e c l e a a l g o : ) ; leeLinea ( datos ) ; f o r ( i n t i =0; d a t o s [ i ] != 0 ; i++ ) fos . write ( datos [ i ] ) ; f o s . w r i t e ( \n ) ; } } p r i v a t e s t a t i c void l e e L i n e a ( byte l i n e a [ ] ) throws IOException { int b = 0 , i = 0; w h i l e ( ( i < ( l o n g L i n e a 1) ) && ( ( b = System . i n . r e a d ( ) ) != \ n ) ) l i n e a [ i ++] = ( b y t e ) b ; l i n e a [ i ] = ( byte ) 0 ; } } Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

214 [209 - 218]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Ficheros

Al usar un FileInputStream estamos leyendo bytes, en el c odigo anterior podemos utilizar en su lugar un FileReader, que al hededar de Reader trabaja directamente con caracteres. Idem para FileOutputStream y Writer Para muchas de las subclases de InputStream y OutputStream est an denidas las subclases equivalentes de Reader y Writer. Existen una serie de adaptadores que se pueden utilizar para ayudarnos a leer o escribir los datos formateandolos (en lugar de tener que leer y escribir bytes o caracteres) A continuaci on veremos ejemplos de estos adaptadores
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

215 [209 - 218]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Ficheros

InputStreamReader/OutputStreamReader Convierten un InputStream/OutputStream en un Reader/Writer.


BufferedInputStream/BufferedOutputStream/BufferedReader/BufferedWriter

A naden memoria de almacenamiento temporal. DataInputStream/DataOutputStream Permiten leer modelos simples de datos como tipos primitivos y String PrintWriter/PrintStream Simplican la impresi on de texto
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

216 [209 - 218]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Ficheros: Ejemplo

import j a v a . i o . ; public class Salida2 { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) t h r o w s I O E x c e p t i o n { P r i n t W r i t e r pw = new P r i n t W r i t e r ( new F i l e W r i t e r ( d a t o s . d a t ) ) ; BufferedReader br = new B u f f e r e d R e a d e r ( ( new I n p u t S t r e a m R e a d e r ( System . i n ) ) ) ; while ( true ) { System . e r r . p r i n t ( T e c l e a a l g o : ) ; pw . p r i n t l n ( b r . r e a d L i n e ( ) ) ; } } }

217 [209 - 218]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

E/S Est andar Ficheros

Entrada/Salida
Ficheros: Ejemplo

Usamos un PrintWriter que nos permite usar el m etodo println Convertimos el InputStream en un Reader y lo adaptamos con un BufferedReader para usar readLine Adem as vemos como podemos usar un FileWriter en lugar de un FileOutputStream

218 [209 - 218]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Indice

Interfaces Gr acas de usuario Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

219 [219 - 220]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Las interfaces Swing deben tener al menos un contendor top-level. Un contenedor top-level proporciona el soporte para pintar y manejar eventos. Hay 3 contenedores top-level comunes: JFrame, JDialog y JApplet. Cada JFrame implementa una ventana principal y cada JDialog implementa una ventana secundaria. Los JApplet implementan applets.

220 [219 - 220]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Hola mundo
import j a va x . swing . ; p u b l i c c l a s s HolaMundoSwing { p r i v a t e s t a t i c v o i d createAndShowGUI ( ) { JFrame . s e t D e f a u l t L o o k A n d F e e l D e c o r a t e d ( t r u e ) ; JFrame f r a m e = new JFrame ( Ventana h o l a mundo ) ; f r a m e . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE ) ; J L a b e l l a b e l = new J L a b e l ( H o l a mundo ! ) ; f r a m e . g e t C o n t e n t P a n e ( ) . add ( l a b e l ) ; f r a m e . pa ck ( ) ; frame . s e t V i s i b l e ( true ) ; } p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { j a v a x . s w i n g . S w i n g U t i l i t i e s . i n v o k e L a t e r ( new R u n n a b l e ( ) { p u b l i c void run ( ) { createAndShowGUI ( ) ; } }); } 221 [221 - } 224] Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Hola mundo

JFrame . s e t D e f a u l t L o o k A n d F e e l D e c o r a t e d ( t r u e ) ; JFrame f r a m e = new JFrame ( Ventana h o l a mundo ) ; ... f r a m e . pack ( ) ; frame . s e t V i s i b l e ( true ) ;

Con la primera linea decimos que use las decoraciones de java en lugar de las decoraciones del gestor de ventanas. Al JFrame le damos el t tulo de la ventana. pack() compacta la ventana de modo que quepan todos sus elementos. setVisible(true) hace que se muestre la ventana.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

222 [221 - 224]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Hola mundo
J L a b e l l a b e l = new J L a b e l ( H o l a mundo ! ) ; f r a m e . g e t C o n t e n t P a n e ( ) . add ( l a b e l ) ;

Los componentes Swing, excepto los contenedores top-level, son descendientes de JComponent. En este ejemplo usamos JLabel. Para a nadir la etiqueta a la ventana, se a nade al content pane En Java5 bastar a con hacer: frame.add(label);
f r a m e . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE ) ;

Con esta instrucci on se hace que la ventana se cierre al darle al bot on de cerrar la ventana.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

223 [221 - 224]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Hola mundo
javax . swing . S w i n g U t i l i t i e s . i n v o k e L a t e r ( new R u n n a b l e ( ) { p u b l i c void run ( ) { / c r e a r y m o s t r a r l a GUI / } });

El control de eventos y dibujado de la interfaz suceden todos en un thread especial: el thread de manejo de eventos. As un evento no naliza antes de que otro empieze, ni el dibujado es interrumpido para gesti onar un evento. La clase SwingUtilities controla la ejecuci on dentro del thread de eventos de swing. Con invokeLater ejecutamos algo dentro del thread de eventos.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

224 [221 - 224]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Mini-aplicaci on

En este ejemplo veremos: Look and Feel Establecer botones y etiquetas A nadir componentes a contenedores Poner bordes a componentes Manejar eventos

225 [225 - 232]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Mini-aplicaci on

Con UIManager.setLookAndFeel(LOOKANDFEEL); establecemos la apariencia de la aplicaci on. El par ametro es el nombre del Look and Feel Hay unos cuantos predenidos:
com.sun.java.swing.plaf.gtk.GTKLookAndFeel javax.swing.plaf.metal.MetalLookAndFeel com.sun.java.swing.plaf.windows.WindowsLookAndFeel com.sun.java.swing.plaf.motif.MotifLookAndFeel

Ademas: UIManager.getCrossPlatformLookAndFeelClassName(): Devuelve un look and feel multiplataforma. UIManager.getSystemLookAndFeelClassName(): Look and feel de la plataforma actual
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

226 [225 - 232]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Mini-aplicaci on

Para crear un bot on usamos la clase JButton. Podemos asignarle teclas abreviadas. J B u t t o n b u t t o n = new J B u t t o n ( Soy un b o t o n ! ) ; b u t t o n . setMnemonic ( KeyEvent . VK I ) ; Para a nadirle comportamiento usamos un ActionListener: button . addActionListener ( this ) ; ... public void actionPerformed ( ActionEvent e ) { ... }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

227 [225 - 232]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Mini-aplicaci on

En general, para detectar cuando un usuario hace click en un bot on: El programa debe tener un objeto que implemente la interfaz ActionListener Se debe registrar este objeto como action listener del bot on usando addActionListener Cuando el usuario hace click el bot on lanza un evento de acci on y llama al m etodo actionPerformed

228 [225 - 232]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Mini-aplicaci on

Los componentes Swing pueden generar distintos tipos de eventos:


Lanzador del evento Click en bot on, Enter en campo de texto, o se escoge item de un men u. Cierre de la ventana (ventana principal) Pulsaci on de un bot on mientras el cursor est a sobre un componente Se mueve el rat on sobre un componente El componente se hace visible El componente consigue el foco Cambia la selecci on en una tabla Cambia la propiedad de un componente Tipo ActionListener WindowListener MouseListener MouseMotionListener ComponentListener FocusListener ListSelectionListener PropertyChangeListener

229 [225 - 232]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Mini-aplicaci on

Para crear la etiqueta: f i n a l JLabel label = new J L a b e l ( l a b e l P r e f i x + 0 Para cambiar el texto de la etiqueta: l a b e l . setText ( l a b e l P r e f i x + numClicks ) ; );

230 [225 - 232]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Mini-aplicaci on

Usamos un contenedor para agrupar los componentes antes de a nadirlos al JFrame: JPanel panel = new J P a n e l ( new G r i d L a y o u t ( 2 , 1 ) ) ; p a n e l . add ( b u t t o n ) ; p a n e l . add ( l a b e l ) ; panel . setBorder ( BorderFactory . createEmptyBorder ( . . . ) ) ; La primera linea crea un layout con dos las y una columna. Luego a nadirmos los componentes y nalmente a nadimos un borde.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

231 [225 - 232]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Mini-aplicaci on

Para a nadir el borde, usamos pane . s e t B o r d e r ( BorderFactory . createEmptyBorder ( 30 , 30 , 10 , 30) ) ; Crea un borde al panel de manera que separa los componentes a nadidos del borde exterior.

232 [225 - 232]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Conversor Celsius-Fahrenheit

Para introducir el valor usamos un JTextField: JTextField tempCelsius = null ; ... t e m p C e l s i u s = new J T e x t F i e l d ( 2 ) ; Para recoger el valor: tempCelsius . getText ( ) ;

233 [233 - 233]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Layouts

Nos ineteresa manejar los layouts de los JPanel y los content pane. Se puede establecer un layout en sus constructores o usando el m etodo setLayout: J P a n e l p a n e l = new J P a n e l ( new B o r d e r L a y o u t ( ) ) ; Container contentPane = frame . getContentPane ( ) ; c o n t e n t P a n e . s e t L a y o u t ( new F l o w L a y o u t ( ) ) ;

234 [234 - 237]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Layouts: Tipos

Hay varias elecciones a la hora de usar un layout, como siempre depende de nuestras necesidades: FlowLayout Para tener los componentes en una la con su tama no natural. Es el layout por defecto. BorderLayout Se usa si queremos que los componentes ocupen todo el espacio libre. GridLayout Componentes de mismo tama no distribuidos en las y columnas. BoxLayout Componentes en una la o columa con diferentes espacios entre ellos, distintas alineaciones o tama nos. GribBagLayout y SpringLayout Si tenemos un escenario complejo y queremos mucho control sobre como se disponen los elementos.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

235 [234 - 237]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Layouts: FlowLayout

Cuando un contenedor tienen un FlowLayout a nadimos elementos en el usando add(componente). Los elementos se distribuyen en la si variar su tama no. Es el layout por defecto.

236 [234 - 237]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Layouts: BorderLayout

Se divide el contenedor en 5 regiones:


PAGE START Parte superior del contenedor PAGE END Parte inferior del contenedor LINE START Parte izquierdadel contenedor LINE END Parte derecha del contenedor CENTER Centro del contenedor

Los elementos ocupan todo el espacio posible (se cambia su tama no para logarlo) incluso si se modica el tama no de la ventana. Para a nadir elementos se usa add(componente, BorderLayout.REGION) donde REGION es una de las regiones anteriores.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

237 [234 - 237]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Ejercicio

Crearemos un mini editor de texto. Usaremos lo aprendido de entrada/salida de cheros. Leemos un chero y escribimos su contenido en un JTextArea. Usar un BorderLayout. JTextArea Podemos usar el m etodo setText(String t) para poner todo el texto o append(String t) para ir a nadiendo poco a poco. Con getText() obtenemos todo el texto que contiene.

238 [238 - 246]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Dialogo de apertura de chero

Con JFileChooser tenemos un dialogo que pide un chero:


J F i l e C h o o s e r c h o o s e r = new J F i l e C h o o s e r ( ) ; i n t r e t u r n V a l = c h o o s e r . showOpenDialog ( f r a m e ) ; i f ( r e t u r n V a l == J F i l e C h o o s e r . APPROVE OPTION) { try { leeFichero ( chooser . g e t S e l e c t e d F i l e ( ) . getAbsolutePath ( ) ) ; } catch ( E x c e p t i o n ex ) { ex . p r i n t S t a c k T r a c e ( ) ; } } }

Como podemos con getSelectedFile() nos devuelve un objeto File que representa el chero elejido.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

239 [238 - 246]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Acciones

Podemos establecer el comportamiento de un bot on usando acciones. b u t t o n . s e t A c t i o n ( new A c t i o n A b r i r ( ) ) ; Para ello creamos una subclase de AbstractAction e implementamos el m etodo actionPerformed

240 [238 - 246]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Acciones
c l a s s ActionAbrir extends AbstractAction { public ActionAbrir () { super ( Abrir ) ; }

public void actionPerformed ( ActionEvent e ) { J F i l e C h o o s e r c h o o s e r = new J F i l e C h o o s e r ( ) ; i n t r e t u r n V a l = c h o o s e r . s ho wO pe nD i a l o g ( f r a m e ) ; i f ( r e t u r n V a l == J F i l e C h o o s e r . APPROVE OPTION) { try { leeFichero ( chooser . g e t S e l e c t e d F i l e ( ) . getAbsolutePath ( ) ) } catch ( E x c e p t i o n ex ) { ex . p r i n t S t a c k T r a c e ( ) ; } } } }
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

241 [238 - 246]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Menu

Podemos a nadir menus a las ventanas. Para ellos creamos un JMenuBar y se lo a nadimos al JFrame haciendo setJMenuBar(menu) El JMenuBar est a formado por elementos JMenu Los JMenu contienen elementos del tipo JMenuItem Los JMenuItem reciben como argumento una acci on.

242 [238 - 246]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Menu

JMenuBar menuBar = new JMenuBar ( ) ; JMenu menu = new JMenu ( F i c h e r o ) ; menu . add ( new JMenuItem ( new A c t i o n A b r i r ( ) ) ) ; menu . add ( new JMenuItem ( new A c t i o n G u a r d a r ( ) ) ) ; menuBar . add ( menu ) ; f r a m e . addJMenuBar ( menuBar ) ;

243 [238 - 246]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Popup

Adem as podemos a nadir un menu popup a nuestro editor. Usamos un JPopupMenu Son parecidos a los JMenu, contienen JMenuItem Para hacer que aparezca al pulsar el bot on derecho tenemos que registrarnos en los eventos del rat on. Usamos el m etodo addMouseListener que espera recibir un MouseListener. Podemos extender la clase MouseAdapter y anular los m etodos que nos interesan.

244 [238 - 246]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Popup

c l a s s P o p u p L i s t e n e r extends MouseAdapter { p u b l i c v o i d m o u s e P r e s s e d ( MouseEvent e ) { maybeShowPopup ( e ) ; } p u b l i c v o i d m o u s e R e l e a s e d ( MouseEvent e ) { maybeShowPopup ( e ) ; } p r i v a t e v o i d maybeShowPopup ( MouseEvent e ) { i f ( e . isPopupTrigger ()) { popup . show ( e . getComponent ( ) , e . getX ( ) , e . getY ( ) ) ; } } Varela Paz (cvarela@dc..udc.es) Carlos Introducci on al lenguaje de programaci on Java

245 [238 - 246]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Hola mundo Mini-aplicaci on Entrada de datos Layouts Ejercicio

Interfaces Gr acas de usuario


Popup

Con e.isPopupTrigger() sabemos si es el evento de mostrar el popup en la plataforma en la que se ejecuta la aplicaci on A nadimos el evento al JTextArea texto . addMouseListener ( new P o p u p L i s t e n e r ( ) ) ;

246 [238 - 246]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Indice

Interfaces Gr acas de usuario II Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

247 [247 - 247]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


Checkboxes

Un checkbox es un bot on especializado que muestra un estado de selecci on. Suele utilizarse para seleccionar opciones en una interfaz En Java se representa con la clase JCheckBox Para crear uno se hace: JCheckBox ck = new JCheckBox ( Opcion 1 ) ; La cadena de texto es el texto que aparecer a al lado de la marca de selecci on Para conocer el estado usamos isSelected() Si queremos modicarlo expl citamente usamos setSelected(boolean b)
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

248 [248 - 248]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


Botones de radio

Con checkboxes podemos hacer elegir entre varias opciones Si queremos que esas opciones sean excluyentes se suelen utilizar botones de radio Representados con la clase JRadioButton Para crear uno se hace: J R a d i o B u t t o n ck = new J R a d i o B u t t o n ( Opcion 1 ) ; La cadena de texto es el texto que aparecer a al lado de la marca de selecci on Para conocer el estado usamos isSelected() Si queremos modicarlo expl citamente usamos setSelected(boolean b)
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

249 [249 - 250]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


Botones de radio

Para lograr un comportamiento exclusivo (s olo uno de los botones est a seleccionado) se usa ButtonGroup Esta clase se encarga de que s olo un bot on se encuentre seleccionado en cada momento ButtonGroup g r u p o = new ButtonGroup ( ) ; g r u p o . add ( r b 1 ) ; g r u p o . add ( r b 2 ) ;

250 [249 - 250]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


ComboBox

Con las comboboxes podemos seleccionar un elemento de una lista. Se usa la clase JComboBox Podemos inicializar un combobox haciendo: String animales [ ] = { P e r r o , Gato , P o l l o } ; JComboBox cb = new JComboBox ( a n i m a l e s ) ; Con setSelectedIndex(int i) indicamos qu e elemento queremos que aparezca seleccionado Podemos registrar un ActionListener para saber cuando se selecciona un elemento.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

251 [251 - 251]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


Im agenes

El tratamiento de im agenes en Java es un mundo por si solo. Veremos una forma sencilla de visualizar im agenes en nuestra interfaz. Usaremos un objeto ImageIcon y se lo asociaremos a un JLabel para que dibuje la imagen. Para crear un ImageIcon hacemos: j a v a . n e t . URL imgURL = NombreDeClase . c l a s s . g e t R e s o u r c e ( p a t h ) ; I m a g e I c o n i = new I m a g e I c o n ( imgURL ) ; Ahora podemos asignar el icono al JLabel: J L a b e l l = new J L a b e l ( ) ; l . setIcon ( i );
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

252 [252 - 253]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


Im agenes

j a v a . n e t . URL imgURL = NombreDeClase . c l a s s . g e t R e s o u r c e ( p a t h ) ; El m etodo getResource hace que el cargador de clases busque en los directorios del classpath y en los .jar y devuelva una URL con la direcci on del chero.

253 [252 - 253]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


Tabs

En las interfaces gr acas es com un ver solapas que al pincharlas muestran un contenido. En Java se puede utilizar un contenedor especial para lograr ese efecto: JTabbedPane Para a nadir elementos al panel se usa el m etodo addTab que crear a una nueva solapa: JTabbedPane p = new JTabbedPane ( ) ; p . addTab ( T i t u l o , componente ) ;

254 [254 - 255]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


Tabs: Orientaci on

Podemos cambiar e lugar en el que aparecen las solapas usando el m etodo setTabPlacement(int placement), el par ametro puede valer: JTabbedPane.TOP JTabbedPane.BOTTOM; JTabbedPane.LEFT JTabbedPane.RIGHT

255 [254 - 255]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


SplitPane

Con un JSplitPane creamos un contenedor dividido en dos paneles. Para indicar los componentes que van a cada lado se usan los m etodos setRightComponent(Component c) y setLeftComponent(Component c) Ahora podemos modicar el tama no de los paneles con el rat on moviendo la barra divisora.

256 [256 - 257]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


SplitPane

Podemos cambiar la orientaci on de la barra de divisi on utilizando el m etodo setOrientation(int orientation). Los valores permitidos son:
JSplitPane.VERTICAL SPLIT JSplitPane.HORIZONTAL SPLIT

Si se usa JSplitPane.HORIZONTAL SPLIT podemos a nadir los componentes usando setTopComponent(Component comp) y setBottomComponent(Component comp)

257 [256 - 257]

Carlos Varela Paz (cvarela@dc..udc.es)

Introducci on al lenguaje de programaci on Java

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


Rendimiento

Ya comentamos que los eventos se manejan en el thread de eventos y que se tratan secuencialmente. Adem as sabemos que el dibujado tambien ocurre ah . Que sucede si hacemos una operaci on muy costosa en un evento? La interfaz queda bloqueada hasta que la operaci on termine. Puede haber distintas operaciones costosas: Cargar una imagen grande. Hacer peticiones a una base de datos remota. Realizar un c alculo complejo ...
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

258 [258 - 260]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


Rendimiento

Es este tipo de casos deberiamos: Crear un thread que realice la operaci on que tarda Al terminar actualizar la interfaz usando SwingUtilities.invokeLater(...) En los tutoriales de Sun nos proporcionan una clase SwingWorker que hace esto por nosotros. Para usarla hay que: Crear una subclase de SwingWorker. Anular el m etodo construct() poniendo el c odigo costoso Anular el m etodo finished() poniendo el c odigo de actualizaci on de la interfaz.
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

259 [258 - 260]

Threads Entrada/Salida Interfaces Gr acas de usuario Interfaces Gr acas de usuario II

Checkboxes Botones de radio ComboBox Im agenes Tabs SplitPane Rendimiento

Interfaces Gr acas de usuario II


Rendimiento

contruct() de vuelve un Object que puede ser utilizado el m` etodo getValue() getValue() espera a que el thread generado en construct() termine si no hab a terminado.
SwingWorker w o r k e r = new SwingWorker ( ) { p u b li c Object c o ns tr uc t () { // Hemos una o p e r a c i o n c o s t o s i i i i i i m a return resultado ; } // Se e j e c u t a en e l t h r e a d de e v e n t o s . public void f i n i s h e d () { Object r = getValue ( ) ; // A c t u a l i z a m o s l a i n t e r f a z u s a n d o e l v a l o r } }; worker . s t a r t ( ) ;
Carlos Varela Paz (cvarela@dc..udc.es) Introducci on al lenguaje de programaci on Java

260 [258 - 260]

You might also like