transp are nci as java
TRANSCRIPT
-
8/17/2019 Transp Are Nci as Java
1/236
JAVA
-
8/17/2019 Transp Are Nci as Java
2/236
-
8/17/2019 Transp Are Nci as Java
3/236
3
http://www.digitaleconomist.com/Dirección con interesantes applets aplicados a la economı́a.
http://members.nbci.com/surendranath/Applets.html
Dirección con interesantes applets aplicados a la f́ısica.
http://home.planetinternet.be/ poolly/eng/eng.htmlDirección con interesantes applets aplicados a la f́ısica.
Tipos de Programas en Java
En el lenguaje Java existen dos tipos de programas:
1. Applets: Programas que se integran en las páginas Web y que se ejecutan a través de la red.
2. Aplicaciones: Son programas normales que se ejecutan directamente por el sistema operativodel usuario a través de un intérprete.
Restricciones de los applets
Por razones de seguridad, los applets tienen varias restricciones. Un applet no puede:
1. Cargar librerı́as o definir métodos nativos.
2. Leer ni escribir ficheros en el sistema anfitríon que está ejecutándolo.
3. Hacer conexiones de red, excepto al sistema anfitrión del que procede.
4. Ejecutar cualquier programa en el sistema anfitrión que está ejecutándolo.
5. Leer ciertas propiedades del sistema.
-
8/17/2019 Transp Are Nci as Java
4/236
PROGRAMACIÓNORIENTADA A OBJETOS
-
8/17/2019 Transp Are Nci as Java
5/236
5
Programación Orientada a Objetos
Java es un Lenguaje Orientado a Objetos que incorpora una gran número de clases predefinidas orga-nizadas en paquetes.
La programación en Java supone definir clases de forma jerárquica, construir objetos de dichas clasesy realizar acciones con ellos.Los objetos constituyen el concepto fundamental para entender la tecnoloǵıa que se conoce como
tecnologı́a orientada a objetos.Objetos del mundo real:
COCHECOCHE
MESAMESA
ORDENADORORDENADOR
TELEVISORTELEVISOR
Todos estos objetos del mundo real tienen:
• un estado
• un comportamiento
Programación Orientada a Objetos
Un objeto es un conjunto constituido por una o varias variables y, opcionalmente, por mé-todos.
Todo aquello que el objeto conoce (estado) se expresa por sus variables, y todo lo que puede hacer(comportamiento) se expresa por sus métodos.
-
8/17/2019 Transp Are Nci as Java
6/236
6
OBJETO
ESTADO
COMPORTAMIENTO
VARIABLES MIEMBRO
MÉTODOS
VARIABLES MIEMBRO
MÉTODO 1
MÉTODO 2
MÉTODO 3
MÉTODO 4
Ejemplo de Objeto
Consideremos un objeto del mundo real: un automóvil.Nuestro objeto contiene:
1. Variables :
(a) modelo
(b) cilindrada
(c) velocidad
(d) marcha
2. Métodos :
(a) acelera
(b) frena
(c) para
(d) cambiaMarcha
-
8/17/2019 Transp Are Nci as Java
7/236
7
Clases
En el mundo real, se encuentran muchos objetos del mismo tipo. Por ejemplo, mi automóvil formaparte del conjunto de todos los automóviles del mundo.
Clase Automovil
Utilizando la terminoloǵıa orientada a objetos, mi automóvil es un miembro o ejemplar de la clase
de objetos conocidos como automoviles .
Una clase es un prototipo que define las variables y los métodos de todos los objetos con caracterı́sticas comunes.
Cuando se crea un ejemplar de una clase, las variables declaradas por la clase son almacenadas enmemoria.
Una vez creadas, se pueden utilizar los métodos miembro de la clase para asignar valores a lasvariables.
Para definir una clase es necesario dar dos componentes: la declaraci ón y el cuerpo:
DeclaracionClase{CuerpoClase
Declaraci´ on de una clase
En la declaración de una clase debe aparecer, como mı́nimo, la palabra class y el nombre de laclase que se está definiendo.
class NombreClase{
...
-
8/17/2019 Transp Are Nci as Java
8/236
8
Los nombres de las clases, por convenio, comienzan por mayúscula.
Cuerpo de una clase
El cuerpo de una clase contiene dos secciones:
1. Declaraci´ on de sus variables .
2. Definici´ on de sus métodos .
DeclaracionClase{
declaracionVariablesMiembro
...
declaracionMetodos
}
Declaraci´ on de las variables miembro
Como mı́nimo, en la declaración de una variable miembro aparecen dos componentes:
1. El tipo de dato de la variable .
2. Su nombre .
tipo variableNombre;
Declaraci´ on de los métodos miembro
La implementación de un método consta de dos partes: la declaración y el cuerpo del mismo. En ladeclaración del método, además del nombre, va una cierta información, como:
• El valor de retorno del método (el tipo de valor que devuelve).
• El n´ umero y tipo de argumentos requeridos por dicho método.
tipo metodo(argumentos){
...
}
Si un método no devuelve ningún valor, debe declararse como void, y si devuelve un valor, debe utilizar
la sentencia return para devolverlo.
Clase Automovil
class Automovil{
String Modelo;
int Cilindrada;
float Velocidad;
int Marcha;
Automovil(String m,int c) {
super();
-
8/17/2019 Transp Are Nci as Java
9/236
9
Modelo=m;
Cilindrada=c;
Velocidad=0;
Marcha=0;
}
void Acelera(float v) {Velocidad=Velocidad+v;
}
void Frena(float v) {
Velocidad=Velocidad-v;
}
void Para() {
Marcha=0;
Velocidad=0;
}
void CambiaMarcha(int m) {Marcha=m;
}
}
Creación y Utilización de Objetos
En Java se crea un objeto sin más que crear un ejemplar de una clase.Pueden utilizarse clases definidas por el propio programador o las que se encuentran definidas en los
diferentes paquetes que incluye el entorno de desarrollo Java.
Aśı, para crear un nuevo objeto de la clase String definida en el paquete java.lang se usa el comandomúltiple:
String str = new String(‘h’,‘o’,‘l’,‘a’);
Con esta declaración se realizan tres acciones:
1. Declaraci´ on : se declara una variable de tipo String cuyo nombre es str
2. Creaci´ on del objeto: el operador new crea un nuevo objeto de tipo String
3. Iniciaci´ on : String(‘h’,‘o’,‘l’,‘a’) inicia la cadena asignándole el contenido ‘‘hola".
Constructor de una clase
• Los constructores se reconocen porque tienen el mismo nombre que la clase y no tienen tipo deretorno (o tipo void)
• Siempre existe un costructor por defecto que no recibe argumentos.
• Una clase puede tener varios constructores, pero todos ellos deben tener el mismo nombre (el dela clase), y diferente número o tipo de argumentos, para que el compilador pueda distinguirlos.
• Los constructores sólo pueden ser llamados con el operador new.
-
8/17/2019 Transp Are Nci as Java
10/236
10
Por ejemplo, para crear un objeto de la clase Automovil llamado micoche,
Automovil micoche;
micoche= new Automovil(...,...);
Para acceder a las variables de un objeto, se concatenan los nombres del objeto y de la variable conun punto. Por ejemplo, para acceder a la variable miembro modelo del objeto miCoche
miCoche.modelo
Para llamar a los métodos de un objeto, se concatena el nombre del objeto con el del métodomediante un punto, dando los argumentos del método entre paréntesis, como en:
miChoche.cambiaMarcha(2);
Si el método no requiere argumentos, se utilizan los paréntesis vaćıos.
miChoche.para();
Las llamadas a métodos también se conocen como mensajes .
Clase Punto
class Punto{
int x,y;
Punto(int x,int y){
this.x=x;
this.y=y;}
double distancia(int x,int y){
int dx=this.x-x;
int dy=this.y-y;
return Math.sqrt(dx*dx+dy*dy);
}
double distancia(Punto p){
return distancia(p.x,p.y);
}
}
class DistanciaPuntos{
public static void main(String
args[]){
Punto p1=new Punto(0,0);
Punto p2=new Punto(30,40);
System.out.println("p1=("+p1.x+","+
p1.y+")");
System.out.println("p2=("+p2.x+","+
p2.y+")");
System.out.println("Distancia de
-
8/17/2019 Transp Are Nci as Java
11/236
11
p1 a p2=",p1.distancia(p2));
System.out.println("Distancia de
p1 a (60,80)=",
p1.distancia(60,80));
}
}
Herencia
En programacíon orientada a objetos se pueden definir clases (subclases ) en términos de otras clases(superclases ).En Java, toda clase tiene una superclase. La superclase por defecto es la clase Object.
Para especificar la superclase se escribe la palabra extends y el nombre de la superclase a contin-
uación del nombre de la clase:
class SubClase extends SuperClase{...}
Toda subclase hereda el estado (en la forma de declaración de variables) y los métodos de la super-clase. Sin embargo, las subclases no están limitadas al estado y comportamiento de su superclase, yaque las subclases pueden:
• A˜ nadir nuevas variables miembro.
• A˜ nadir nuevos métodos a los heredados de la superclase.
• Dar implementaciones particulares a los métodos heredados , anulando la definición original de losmétodos, dada por la superclase, y sustituyéndola por otra.
Clase Camion
class Camion extends Automovil {
float PMA;
float PesoCarga;
Camion(String m,int c,float p) {super(m,c);
PesoCarga=p;
}
void Carga(float c) {
PesoCarga= PesoCarga+c; }
void Descarga(float c) {
PesoCarga= PesoCarga-c; }
void Para(){
-
8/17/2019 Transp Are Nci as Java
12/236
12
super.Para();
PesoCarga=0; }
}
Declaración de una Clase
En la declaración de una clase se puede:
• Declarar cuál es su superclase.
• Listar las interfases que implementa.
• Declarar si es pública, abstracta o final.
Implementar interfases
class Nombre extends SuperClase implementsIterfase1,Interfase2...{...}
Una interfase declara un conjunto de métodos y constantes, sin especificar la implementación para losmétodos. De forma que la clase que implementa dicha interfase debe implementarlos.
Clase p´ ublica
public class Nombre ...{...}
Se pueden crear objetos de esa clase desde cualquier otra clase. Por defecto sólo lo pueden hacer las
clases definidas en el mismo paquete.Clase abstracta
abstract class Nombre ...{...}
No se pueden crear objetos de esas clases. Dentro de esta clase se pueden declarar métodos abstractsin dar una implementación de los mismos. Cualquier subclase debe dar una implementación de dichosmétodos abstractos.
Clase final
final class Nombre ...{...}
No se pueden crear subclases suyas.
Por defecto una clase no es p´ ublica, ni abstracta, ni final.
Se puede especificar qué otros objetos pueden crear ejemplares de la clase:
• private: ninguna clase puede crear objetos de esta.
• protected: sólo las subclases y las clases del mismo paquete pueden crear objetos de esta clase.
• public: cualquier clase puede crear un ejemplar.
-
8/17/2019 Transp Are Nci as Java
13/236
13
• No especificado: sólo clases del mismo paquete.
Ejemplo: Clase final
final class Punto{
int x,y;
Punto(int x,int y){
this.x=x;
this.y=y;
}
double distancia(int x,int y){
int dx=this.x-x;
int dy=this.y-y;
return Math.sqrt(dx*dx+dy*dy);
}
double distancia(Punto p){
return distancia(p.x,p.y);}
}
final class Rectangulo{
Punto p1,p2;
int diagonal,ancho,alto;
Rectangulo(Punto p1,Punto p2){
this.p1=p1;
this.p2=p2;
}Rectangulo(int ancho,int alto){
Punto p1Aux=new Punto(0,0);
Punto p2Aux=new Punto(ancho,alto);
this(p1Aux,p2Aux);
}
void calcula(){
Punto p1Aux=new Punto(p1.x,0);
Punto p2Aux=new Punto(p2.x,0);
Punto p3Aux=new Punto(0,p1.y);
Punto p4Aux=new Punto(0,p2.y);diagonal=p1.distancia(p2);
ancho=p1Aux.distancia(p2Aux);
alto=p3Aux.distancia(p4Aux);
}
}
public class Principal{
public static void
main(String args[]){
Punto p1=new Punto(0,0);
Punto p2=new Punto(30,40);
-
8/17/2019 Transp Are Nci as Java
14/236
14
Rectangulo r1;
r1=new Rectangulo(p1,p2);
System.out.println("distancia de
p1 a p2= "+p1.distancia(p2));
r1.calcula();
System.out.println("diagonaldel rectangulo "+ r1.diagonal);
System.out.println("ancho
del rectangulo "+ r1.ancho);
System.out.println("alto
del rectangulo "+ r1.alto);
}
}
Ejemplo: Clase final y privada
private final class Libro{int paginas;
public Libro(int numPaginas){
paginas=numPaginas;
}
public void mensajePaginas(){
System.out.println("Numero de
paginas="+paginas);
}
}
class Diccionario extendsLibro{ //no permitido
int definiciones;
public Diccionario(int numPaginas,
int numDef){
super(numPaginas);
definiciones=numDef;
}
public void mensajeDef(){
System.out.println("Numero de
definiciones="+definiciones);System.out.println("Numero de
paginas="+paginas);
}
}
public class PrincipalLibro{
public static void
main(String args[]){
Libro lib1;
lib1=new Libro(50);//no permitido
Diccionario dicc1;
dicc1=new Diccionario(60,1000);
-
8/17/2019 Transp Are Nci as Java
15/236
15
lib1.mensajePaginas();
dicc1.mensajeDef();
}
}
Acceso a los Miembros de una ClaseLas clases pueden proteger sus métodos y variables miembro del acceso por otros objetos.Por ejemplo: Diseñamos una clase que busca información en una base de datos que contiene infor-
mación secreta. Cierta información, la disponible a través de los métodos y variables públicos de nuestraclase, puede ser utilizada por cualquier otro objeto. Otro tipo de información puede estar disponiblesolamente para uso personal de la clase. Las variables y métodos involucrados deberı́an estar protegidos.
Los niveles de acceso a las variables y métodos de una clase son:
public, protected, private
Acceso privado
Un miembro con este tipo de acceso es accesible s´ olo en la clase en la cual est´ a definido.
Ejemplo:
class AClase{
private int privVar;
private void privMetodo(){
privVar=5;//permitido
System.out.println("La variableprivVar toma el valor="+privVar);
}
public void pubMetodo(){
privVar=15;//permitido
privMetodo();//permitido
}
}
class BClase{
void accMetodo(){
AClase a=new AClase();a.privVar=10;//no permitido
a.privMetodo();//no permitido
a.pubMetodo();//permitido
}
}
Acceso protegido
En este nivel de acceso se permite a la propia clase, a sus subclases y a todas las clases que
estén en el mismo paquete, acceder a los miembros.
-
8/17/2019 Transp Are Nci as Java
16/236
16
Ejemplo:
package Ejemplo;
class AClase {
protected int protVar;
protected void protMetodo(){protVar=1; //permitido
}
}
class BClase{
void accMetodo(){
AClase ap=new AClase();
ap.protVar=2; //permitido
ap.protMetodo(); //permitido
System.out.println("var1="+
ap.protVar); }}------------
import Ejemplo.*;
package EjemploPrueba;
class CClase extends AClase{
void metodo3(AClase a,
CClase d){
a.protVar=2; //no permitido
d.protVar=2; //permitido
a.metodo1(); //no permitido
d.metodo1(); //permitido
}
}
Acceso público
Cualquier clase en cualquier paquete tiene acceso a las variables y métodos p´ ublicos de una clase.
Ejemplo:
package Ejemplo;
class AClase {
public int protVar;
public void protMetodo(){
protVar=1; //permitido
}}
package EjemploPrueba;
class BClase{
void accMetodo(){
AClase ap=new AClase();
ap.protVar=2; //permitido
-
8/17/2019 Transp Are Nci as Java
17/236
17
ap.protMetodo(); //permitido
System.out.println("var1="+
ap.protVar);
}
}
Acceso no especificado
Las clases definidas en el mismo paquete tiene acceso a las variables y métodos de una clase cuyo acceso es no especificado.
Variables y métodos: final
El valor de una variable es constante si ésta se declara final, un método no puede ser redefinido si se declara final.
Miembros de Clase y de InstanciaAl declarar una variable miembro aśı:
class A{float var;}
tenemos una variable de instancia . Cada vez que se crea una instancia de una clase, el sistema creauna copia de cada una de las variables de instancia de la clase. Se puede acceder a ellas s ólo desde unobjeto de la clase.
Las variables de clase se declaran ası́:
class A {static float var;}
Todos los ejemplares de la clase comparte la misma copia de las variables de clase. Se puede acceder aellas a través de un ejemplar o a través de la propia clase.
Retomando el ejemplo de los coches, si todos los coches tuvieran la misma cilindrada, definiremosuna variable de clase que contenga dicho valor. Todos los ejemplares comparten esta variable. Si unode ellos lo modifica, también cambia para los demás objetos de la clase.
También tenemos métodos de instancia y métodos de clase. Los métodos de instancia tienen accesoa las variables de instancia y de clase. Sólo se puede acceder a ellos desde un objeto.
Los métodos de clase sólo pueden operar con variables de clase. No pueden acceder a las variablesde instancia declaradas dentro de la clase. Hay que crear un nuevo objeto para acceder a ellas. Pueden
invocarse en la clase. No es necesario un ejemplar para llamarlos.
Ejemplo:
class Entero{
int x;
public int x(){
return x;
}
public void cambiarX(int nuevoX){
x=nuevoX;
}
-
8/17/2019 Transp Are Nci as Java
18/236
18
}
class Principal{
public static void main(String
args[]){
Entero x1=new Entero();
Entero x2=new Entero();x1.cambiarX(1);
x2.x=2;
System.out.println("x1.x="+x1.x());
System.out.println("x2.x="+x2.x());
}}
Salida : x1.x=1, x2.x=2Ejemplo:
class Entero{
static int x;public int x(){
return x;// permitido
}
public void cambiarX(int nuevoX){
x=nuevoX;
}
}
class Principal{
public static void main(String
args[]){Entero x1=new Entero();
Entero x2=new Entero();
x1.cambiarX(1);
x2.x=2;
System.out.println("x1.x="+x1.x());
System.out.println("x2.x="+x2.x());
}
}
Salida : x1.x=2, x2.x=2
Ejemplo:
class Entero{
int x;
static public int x(){
return x;//no permitido
}
public void cambiarX(int nuevoX){
x=nuevoX;
}
}
class Principal{
-
8/17/2019 Transp Are Nci as Java
19/236
19
public static void main(String
args[]){
Entero x1=new Entero();
Entero x2=new Entero();
x1.cambiarX(1);
x2.x=2;System.out.println("x1.x="+x1.x());
System.out.println("x2.x="+x2.x());
}}
Salida : Error!!Ejemplo:
class Entero{
static int x;
static public int x(){
return x;//permitido}
public void cambiarX(int nuevoX){
x=nuevoX;
}
}
class Principal{
public static void main(String
args[]){
Entero x1=new Entero();
Entero x2=new Entero();x1.cambiarX(1);
x2.x=2;
System.out.println("x1.x="+x1.x());
System.out.println("x2.x="+x2.x());
}}
Salida : x1.x=2, x2.x=2Ejemplo:
class Entero{
static int x;static public int x(){
return x;
}
static public void
cambiarX(int nuevoX){
x=nuevoX;
}
}
class Principal1{
public static void main(String
args[]){
-
8/17/2019 Transp Are Nci as Java
20/236
20
Entero.cambiarX(1);
Entero.x=2;
System.out.println("El valor final
es "+ Entero.x());
}
}
Salida : El valor final es 2
Herencia
Una subclase hereda las variables y los métodos de su superclase y de todas sus antecesoras:
• hereda los miembros declarados public o protected.
• hereda los miembros declarados sin ningún acceso si está en el mismo paquete que su superclase.
• no heredan un miembro si lo declaran con el mismo nombre que en la superclase. En este caso seocultan variables y se redefinen métodos.
Ejemplo:
class ASuper{
int var1;
void metodo(){
var=1;
}
}class BSub extends ASuper{
int var;
void metodo(){
var=2;
super.metodo();
System.out.println(var);
System.out.println(super.var);
}
}
Clases y Métodos AbstractosAlgunas veces necesitamos implementar un concepto “abstracto”.Por ejemplo, podemos definir una aplicación que dibuje ćırculos, rectángulos, etc. Todos estos ob-
jetos comparten un cierto estado (posición, dimensiones) y un comportamiento (mover, redimensionar,dibujar). Pero no es lo mismo dibujar un ćırculo que un rectángulo. Todos los objetos gráficos debensaber cómo dibujarse, pero difieren en la manera de hacerlo.
Declaramos una clase abstracta con variables y métodos que serán compartidos por todas las sub-clases. Y con métodos abstractos, que necesitan ser implementados por las subclases, pero de diferentesmaneras.
Ejemplo:
-
8/17/2019 Transp Are Nci as Java
21/236
21
abstract class Figura{
int x,y;
.......
void mover(int nuevax,int nuevay){
...
}abstract void dibujar();
}
class Circulo extends Figura{
void dibujar(){...}
}
class Rectangulo extends Figura{
void dibujar(){...}
}
Paquetes Definidos en JavaLas clases e interfases implementadas en Java están agrupadas en diferentes paquetes. La Java
API (Java Application Programming Interface) es un conjunto de paquetes que pueden ser utilizadospor todo programa Java.
• Paquete java.lang
– Contiene clases que constituyen el núcleo del lenguaje Java.
– Java lo importa automáticamente.
• Paquete java.io– Permite la lectura y escritura de datos procedentes de diferentes fuentes.
• Paquete java.applet
– Permite la construcción de pequeños programas o applets (clase Applet).
• Paquete java.utilPosee clases que:
– Tratan estructuras de datos genéricas.
– Tratamiento de bits.– Permiten el trabajo con fechas en diferentes formatos.
– Manipulación de cadenas de caracteres.
– Generación de números aleatorios.
– Acceso a las propiedades del sistema.
• Paquete java.net
– Soporta todo lo relacionado con la red. Es útil para construir applets que necesitan utilizarlos servicios de la red. Contiene la clase URL, sin la cual los applets no podrian cargar nada
de el servidor, lo cual significaria que no se podrian cargar ficheros con imágenes o sonido.
-
8/17/2019 Transp Are Nci as Java
22/236
22
• Paquete java.awt
– Suministra la interfase de comunicacíon con el usuario, que se llama (Abstract Window Toolkit ).
• Paquete java.awt.event– Suministra las clases necesarias para controlar todos los sucesos que ocurren sobre la ventana
de nuestro applet o aplicación.
• Paquete java.awt.image
– Paquete que sirve para tratar los datos de imágenes.
• Paquete java.awt.peer
– Conecta las componentes a sus correspondientes implementaciones independientes de la
plataforma.
• Paquete java.awt.geom
– En este paquete se encuentran clases y métodos para trabajar con objetos geométricos en2D.
• Paquete javax.swing
– En este paquete se encuentran clases y métodos para crear una interfase de usuario. Estepaquete se puede considerar como una versión actualizada del paquete java.awt, pues lasnuevas clases ofrecen mayores posibilidades que las que ofrece el paquete java.awt.
• Paquete javax.swing.event
– Suministra las clases necesarias para controlar todos los sucesos que ocurren sobre los com-ponentes swing.
• Paquete javax.swing.table
– Suministra las clases e interfases necesarias para trabajar con objetos javax.swing.JTable.
• Paquete javax.swing.text
– Suministra las clases e interfases necesarias para trabajar con componentes de texto, editablesy no-editables.
• Paquete javax.swing.border
– Suministra las clases e interfases necesarias para dibujar bordes alrededor de las componentesswing.
Cómo cargar un paquete:
• Para importar una clase espećıfica de un paquete:
-
8/17/2019 Transp Are Nci as Java
23/236
23
import paquete.nombreclase
• Para importar todas las clases de un paquete:
import paquete.*
Por ejemplo, para cargar todas las clases del paquete java.awt:
import java.awt.*
Clase Lista
import java.io.*; import java.util.*;
public class Lista{private long dni[];
int numero;
int maxnum;
public Lista(int longitud){
dni=new long[longitud];
maxnum=longitud;
numero=0;
System.out.println("Se crea la lista");
}
public boolean alta(long newdni){
if(numero
-
8/17/2019 Transp Are Nci as Java
24/236
24
public boolean baja(long dnibaja){
int num;
if((num=buscar(dnibaja))>0)
{
System.out.println("Se da de baja el DNI "+dnibaja);
for(int i=num; i0)
{i--;}
return i;
}
public static void main(String args[]){
Lista L=new Lista(10);
L.alta(44443);
L.alta(34567);
L.alta(42039);
L.alta(20456);
L.imprimir();
L.baja(3333);
L.baja(34567);
L.imprimir();
}
}
/* SALIDA DE MSDOS:
Se crea la lista
Se da de alta el DNI 44443 Se da de alta el DNI 34567 Se da de
alta el DNI 42039 Se da de alta el DNI 20456
Lista con 4 clientes 44443 34567 42039 20456
No existe el DNI 3333 en la lista Se da de baja el DNI 34567
-
8/17/2019 Transp Are Nci as Java
25/236
25
Lista con 3 clientes 44443 42039 20456
*/
Clase Complejo
import java.io.*;
import java.lang.*;
public class Complejo extends Object
double preal,pimag;
public Complejo(double partereal,double parteimag){this.preal=partereal;this.pimag=parteimag;
}
public void opuesto(){
preal=-preal;
pimag=-pimag;
}
public void conjugado(){
pimag=-pimag;}
public double modulo(){
return Math.pow(preal*preal+pimag*pimag,0.5);
}
public double argumento(){
if(preal==0.0 && pimag==0.0){
return 0.0;
}else
return Math.atan(pimag/preal);
}
public void imprime(){
System.out.println("("+preal+","+pimag+")");
}
public void suma(Complejo c1,Complejo c2){
preal=c1.preal+c2.preal;pimag=c1.pimag+c2.pimag;
}
-
8/17/2019 Transp Are Nci as Java
26/236
26
public void producto(Complejo c1,Complejo c2){
preal=c1.preal*c2.preal-c1.pimag*c2.pimag;
pimag=c1.preal*c2.pimag+c1.pimag*c2.preal;
}
public void cociente(Complejo c1,Complejo c2) throws
ZerodivisorException{ double aux;
if(c2.preal==0.0 && c2.pimag==0.0){
throw new ZerodivisorException("Divide por cero");
}
else{
aux=c2.preal*c2.preal+c2.pimag*c2.pimag;
preal=(c1.preal*c2.preal+c1.pimag*c2.pimag)/aux;
pimag=(c1.pimag*c2.preal-c1.preal*c2.pimag)/aux;
}}
}
class ZerodivisorException extends Exception{
ZerodivisorException(){super();}
ZerodivisorException(String s){super(s);}
}
Prueba de la Clase Complejo
El módulo del complejo es:
|( preal, pimag)| = ( preal2 + pimag2)1/2
La suma, el producto y el cociente de complejos son:
(a, b) + (c, d) = (a + c, b + d)
(a, b) × (c, d) = (ac − bd, ad + bc)
(a, b)/(c, d) = (ac + bd
c2 + d2 ,
ad − bc
c2 + d2 ).
Salida del Programa
(1,2)
(3,4)
(-3,-4)
(-3,4)
-
8/17/2019 Transp Are Nci as Java
27/236
(-2,6)
El modulo de la suma es = 6.32456
El argumento de la suma es = -1.24905 radianes
(-14,-22)
El argumento de c2 es = 0 radianes
Al calcular el cociente se ha producido una excepcionclass ZerodivisorException
con el mensaje: Divide por cero
Programa de Prueba
import java.io.*;
import java.applet.*;
//import Complejo;
public class PComplejo extends Applet{
public void init() {
Complejo c1,c2,c3;
c1=new Complejo(1.0,2.0);c2=new Complejo(3.0,4.0);
c3=new Complejo(0.0,0.0);c1.imprime();
c2.imprime();c3=c2;c3.opuesto();c3.imprime();
c3.conjugado();c3.imprime();
c3.suma(c1,c2);c3.imprime();
System.out.println("El modulo de la suma es = "
+ c3.modulo());System.out.println("El argumento de la suma es = "
+ c3.argumento() + " radianes");
c3.producto(c1,c2);c3.imprime();
c2.preal=0.0;c2.pimag=0.0;
System.out.println("El argumento de c2 es = "
+ c2.argumento() + " radianes");
try{ c3.cociente(c1,c2);
System.out.println("El cociente es: ");
c3.imprime();
}catch (ZerodivisorException e){System.out.println("Al calcular el cociente se ha
producido una excepcion " + e.getClass()
+ "\ncon el mensaje: " + e.getMessage());
}
}
}
-
8/17/2019 Transp Are Nci as Java
28/236
28
ENTORNO JDK
-
8/17/2019 Transp Are Nci as Java
29/236
29
Creación de Applets y Aplicaciones
INTÉRPRETEINTÉRPRETECOMPILADORCOMPILADOR
MiPrograma.java
PROGRAMAPROGRAMA
JAVAJAVA
MiPrograma.class
0010110100
MIMIPROGRAMAPROGRAMA
Creaci´ on de aplicaciones
Las aplicaciones son programas autónomos que no necesitan de un navegador para ejecutarse.
1. Creaci´ on del c´ odigo fuente Debe utilizarse algún editor de texto (SimpleText, Edit, Word,...).
Ejemplo 1:
public class MiAplicacion {
public static void main(String argv[]) {
System.out.println("SOY UNA APLICACION");
}
}
-
8/17/2019 Transp Are Nci as Java
30/236
30
El formato del fichero fuente debe ser solo texto.
El nombre de dicho fichero debe ser el mismo que el de la clase con el método main() pero con laterminación .java.
2. Compilaci´ on del c´ odigo fuente
La compilación se puede efectuar directamente con un editor de Java (Kawa, JCreator, etc.),utilizando la opción Compile del menú Build. La compilación también se puede efectuar desdeel DOS, mediante un comando de la forma:
javac MiAplicacion.java
En caso de estar en un directorio diferente al que contiene el código fuente debe indicarse el camino(path ) completo para llegar a él.
Esto también puede resolverse añadiendo a la variable Path, el camino donde se halla el compi-lador. Para ello basta con escribir en el fichero autoexec.bat,
SET PATH=C:\Archivos de programa\Java\jdk1.5.0_07\bin\;
3 Ejecuci´ on de la aplicaci´ on La ejecución se puede hacer con un editor de Java (Kawa, JCreator,etc.), en particular, utilizando la opción Run del menú Build. También se puede hacer desde elDOS, para ello se utiliza el fichero .class asociado a la clase que tiene el método main()
La orden debe darse desde el DOS:
java MiAplicacion
Para poder ejecutar una aplicación, el directorio actual debe ser el que contiene el c ódigo objeto(el fichero MiAplicacion.class).
Aplicaciones que reciben argumentos
Ejemplo 2:
public class MiNombre {
public static void main(String argv[]) {System.out.println("BIENVENIDO "+ argv[0]);
}
}
Los argumentos se pasan desde la ĺınea de comandos del DOS, al mismo tiempo que se ordena laejecución de la aplicación:
java MiNombre "Pepe Pérez"
Creaci´ on de applets
-
8/17/2019 Transp Are Nci as Java
31/236
31
1. Creaci´ on del c´ odigo fuente
Ejemplo:
import java.applet.Applet;
public class MiApplet extends Applet{
public void init() {
System.out.println("SOY UN
APPLET");
}
}
El nombre del fichero con el código fuente debe ser el mismo que el de la subclase de la claseApplet pero con la terminación .java.
2. Compilaci´ on del c´ odigo fuente : Similar al caso de las aplicaciones.
Se generan tantos ficheros .class como clases definidas en el fichero fuente.
3 Integraci´ on en un documento HTML
Se utiliza el comando del HTML.
Ejemplo (Fichero "Ejemplo.html"):
Esta página incluye un applet:
CODIGO FUENTE
El parámetro CODE toma como valor el fichero generado por el compilador correspondiente a lasubclase de la clase Applet.
4 Ejecuci´ on del applet
Existen dos alternativas:
(a) Utilizar un navegador compatible con Java (p.e. Netscape, InternetExplorer).
Abrir con el navegador el documento HTML que integra el applet.
-
8/17/2019 Transp Are Nci as Java
32/236
32
(b) Utilizar la herramienta de visualización de applets del JDK.
En particular, si se utiliza un editor de Java (Kawa, JCreator, etc.), basta con seleccionar el“fichero.html” y llamar al comando Run del menú Build.
La orden que debe darse desde el DOS:appletviewer Ejemplo.html
Ejemplo aplicación
PrimeraAplicacion.java
public class PrimeraAplicacion{
public static void main(String args[]){
if(args.length>0)
System.out.println("̀AComo estas, "+args[0]+"?");
else
System.out.println("Hola");
}
}
}
Ejemplo applet
MiPrimerApplet.java
import java.awt.*; import java.applet.Applet;
public class MiPrimerApplet extends Applet{
public void init(){
repaint();
}
public void paint(Graphics g){
g.drawRect(0,0,200,50);
g.drawRect(5,5,190,40);
g.drawString("Bienvenidos a este curso !",30,30);
}
}
-
8/17/2019 Transp Are Nci as Java
33/236
33
MiPrimerApplet.html
Mi primer applet
CODIGO FUENTE.
EJEMPLO
import java.awt.*;
public class EjemploAplicacion
extends Frame{Button boton;
public EjemploAplicacion(){
boton=new Button("OK");
add("South",boton);
}
public static void main(String[] args){
EjemploAplicacion ejem=
new EjemploAplicacion();ejem.resize(100,100);
ejem.show();
}
}
-
8/17/2019 Transp Are Nci as Java
34/236
EL LENGUAJE JAVA
-
8/17/2019 Transp Are Nci as Java
35/236
35
Variables
Las variables son zonas o espacios de memoria en las que se almacena la informaci ón. Son los pilaresde la programación y los elementos sobre los que se actúa. Es necesario especificar su nombre y su tipo.
• el nombre sirve para saber a qué zona de memoria se está uno refiriendo.
• el tipo sirve para saber el tamaño de la memoria necesario para almacenarla y cómo debe inter-pretarse la información. La información se almacena en binario, es decir, en forma de bits (cerosy unos), por lo que hay que transformarla tanto para almacenarla como para interpretarla.
Toda variable y toda expresión tienen un tipo. Esto limita los valores que pueden tomar las variablesy producir las expresiones, limita las operaciones que pueden realizarse con las variables y expresionesy determina el significado de las operaciones que las afectan.
Al declarar una variable, debe especificarse su tipo y su nombre.
int a,b;String nombre,domicilio;
long d;
boolean f;
Nombre de una Variable
Debe cumplir las condiciones siguientes:
1. Debe comenzar siempre con una letra (mayúscula o minúscula) o con un signo de subrayado (_).
2. El resto del nombre puede estar formado por combinaciones de letras, números y signos de sub-rayado. Por ejemplo miEdad, Edad_1,A1
3. No debe incluir espacios ni caracteres como & y *.
4. Debe ser un identificador legal de Java formado por una serie de caracteres unificados (Unicode).
5. No debe coincidir con una palabra clave ni con true o false.
6. Tampoco debe coincidir con el nombre de otra variable declarada en su mismo campo de acción,pudiendo hacerlo con variables declaradas en diferente campo.
Tipos de Datos
Hay tres tipos de variables o expresiones:
• B´ asicas : contienen la información propiamente dicha. Éstas pueden ser:
– Numéricas: a su vez pueden ser:
-
8/17/2019 Transp Are Nci as Java
36/236
36
∗ Enteras: byte, short, int, long, que toman valores enteros.
∗ Coma flotante: float (simple precisión), double (doble precisión), que toman valoresreales.
– Booleanas: boolean, que toman los valores lógicos “true” y “false”.
– Tipo carácter: char, que toman sólo valores de tipo carácter.
• Referenciales : no contienen la información, sino dónde se encuentra ésta, es decir, son referenciasa objetos. Estas pueden ser:
– Tipo clase: class, que contienen referencias a clases.
– Tipo interfase: interface, que contienen referencias a una interfase.
– Tipo matriz: array, que contienen referencias a una matriz.
• Tipo nulo: es un tipo especial que no tiene nombre. La referencia nula null es el único valor quepuede tomar una expresión de este tipo.
Tipo Tamaño Mı́nimo Máximo
byte 8 bits −256 255short 16 bits −32768 32767int 32 bits −2147483648 2147483647long 64 bits −9223372036854775808 922337203685477580float 32 bits −224E − 149 224E 104double 64 bits −253E − 1045 253E 1000boolean N/A false truechar 16 bits Carácter Unicode
Table 1: Tipos de datos o variables básicas.
Observaciones :
• El tipo double tiene más precisión y puede almacenar más cifras decimales.
• En la mayoŕıa de los ordenadores, los enteros se procesan mucho más rápido que los númerosalmacenados en coma flotante.
• Los números en coma flotante pueden almacenar valores más grandes y más pequeños que los
enteros.
Campo de Acción de una Variable
Se denomina campo de acci´ on de una variable al bloque de código en el que dicha variable es accesible.Además, este campo determina cuándo la variable se crea y se destruye.
Atendiendo al campo de acción, se pueden clasificar las variables en las clases siguientes:
• Variable de clase . Se declara dentro de la definición de una clase o interfase, usando la palabraclave static. Estas variables son creadas e iniciadas, a valores determinados o por defecto, alconstruirse la clase, dejando de existir cuando desaparece dicha clase y tras completar el procesoprevio a la destrucción del objeto.
-
8/17/2019 Transp Are Nci as Java
37/236
37
• Variables miembro de una clase . Se declaran en la definición de una clase sin usar la palabra clavestatic. Si a es una variable miembro de una clase A, cada vez que se construye un nuevo objetode la clase A o una subclase de A se crea una nueva variable a y se inicia dándole un valor concretoo por defecto. La variable deja de existir cuando desaparece la clase a la que pertenece y trascompletar el proceso previo a la des trucción del objeto.
• Componentes de una matriz . Son variables sin nombre que se crean e inician a valores concretoso por defecto cuando se crea un objeto nuevo de tipo matriz. Las componentes de la matriz dejande existir cuando desaparece la misma.
• Variable local . Se declara dentro de un bloque de código y sólo es accesible dentro del mismo. Lasvariables locales no se inician hasta que se ejecuta la sentencia de declaraci ón correspondiente.
Las variables locales dejan de existir cuando se termina el bloque en el que est án declaradas.
• Par´ ametro de un método o constructor . Es el argumento formal de un método o un constructor,mediante el cual se pasan valores al mismo. Cada vez que se invoca el método se crea una variablecon ese nombre y se le asigna el valor que teńıa la correspondiente variable en el método que lallama. Su campo de acción es el método o constructor del cual es argumento.
• Par´ ametro de un manipulador de excepciones . Es el argumento de un manipulador de excep-ciones.
Iniciación de Variables
Al declarar las variables locales, las de clase y las que son miembros de clases pueden darse valoresiniciales. Por ejemplo:
int edad=30;
double estatura=1.78;
boolean Terminado=true;
Además de reservar espacio en memoria para ellas, se almacenan los valores indicados.
Los parámetros de los métodos y los de los manipuladores de excepciones no pueden iniciarse deeste modo. El valor de estos parámetros es fijado por el método que los llama.
Constantes
Las constantes en Java son como las variables, pero su valor no se altera durante la ejecuci ón del pro-grama. Se las precede del adjetivo final. Por convenio, las constantes se escriben todas en mayúsculas.Por ejemplo:
final double PI=3.14159265358979;
final double E=2.71728182;
-
8/17/2019 Transp Are Nci as Java
38/236
38
Comentarios
Existen tres clases de comentarios:
• /* texto */. El texto comprendido entre /* y */ es ignorado por el compilador. Se utiliza paracomentarios de más de una ĺınea.
• // texto. El texto desde // hasta el final de ĺınea es ignorado. Se utiliza para comentarios deuna sola ĺınea.
• /** documentación */. El texto comprendido entre /** y */ puede ser procesado por otraherramienta para preparar documentación de la siguientedeclaración de clase, constructor, interfase, método o campo.
Operadores
Existen operadores unarios y binarios que requieren uno o dos operandos, respectivamente.Los operadores unarios pueden aparecer antes o después del operando, aunque, en ese caso, la acción
que realizan puede ser diferente.
x++;
++y;
Los operadores binarios siempre aparecen entre los dos operandos:
5*6;
a+b;
Todo operador devuelve siempre un valor. Dicho valor y su tipo dependen del operador y del tipode los operandos.
Los operadores pueden clasificarse en las siguientescategorı́as:
• aritméticos
• relacionales y condicionales
• bit-a-bit y l´ ogicos
• de asignaci´ on
Operadores Aritméticos
Los operadores aritméticos binarios, salvo el operador %, que sólo actúa con enteros, manejan indis-tintamente los tipos enteros y los de coma flotante.
Cuando un operador tiene operandos de diferente tipo, éstos se convierten a un tipo común siguiendolas reglas:
• la categoŕıa de los tipos, de mayor a menor, es la siguiente: double, float, long, int,short,char.
-
8/17/2019 Transp Are Nci as Java
39/236
39
Operadores Binarios
Operador Operacíon Descripcíon
+ a + b Adición- a - b Diferencia* a * b Producto/ a / b División% a % b resto de dividir a entre b
Table 2: Operadores Binarios.
• en cualquier operación en la que aparezcan operandos de tipos diferentes, se eleva la categoŕıa delque la tenga menor.
• en una sentencia de asignacíon, el resultado final se convierte al tipo de la variable a la que son
asignados.
Operadores Unarios
Operador Operacíon Descripción
+ y - +a y -a Fijan el signo del operando
++ ++x
x++
Suma 1 a x antes de usarlaSuma 1 a x después de usarla
--
--x
x--
Resta 1 a x antes de usarla
Resta 1 a x después de usarla
Table 3: Lista de operadores unarios
Ejemplos:
int i=7;
4 * i++;
i+2;
Las dos últimas sentencias dan como resultado 4*7=28 y 8+2=10.
int i=7;
4 * ++i;
i+2;
En este caso los resultados son 4*8=32 y 8+2=10.
Operadores Relacionales y Condicionales
Los operadores relacionales comparan dos valores y determinan la relación que existe entre ellos.Los operadores condicionales se utilizan para efectuar operaciones de tipo lógico.
-
8/17/2019 Transp Are Nci as Java
40/236
-
8/17/2019 Transp Are Nci as Java
41/236
41
Operadores de Asignación
Operador Empleo Descripcíon
+= a += b a = a + b
-= a -= b a = a - b
*= a *= b a = a * b
/= a /= b a = a / b
%= a %= b a = a % b
&= a &= b a = a & b
|= a |= b a = a | b
^= a ^= b a = a ^ b
> b
>>>= a >>>= b a = a >>> b
Table 6: Lista de operadores de asignación.
es equivalente a:
n *= 5;
El operador cast
A veces se necesita almacenar valores de un tipo en variables de tipo diferente. Como Java nopermite almacenar a cada variable mas que valores de su tipo, es necesario transformarlos previamente.
Para ello, se recurre al operador cast, que transforma un tipo de dato en otro compatible, tal comose ve en el siguiente ejemplo:
float a;
int b;
b = (int) a;
Matrices
Considérense los 100 primeros múltiplos de 2. Estos podŕıan almacenarse aśı:
int m1 = 2;
int m2 = 4;
int m3 = 6;
...
int m100 = 200;
Para ello, se dispone de las matrices (arrays), cuya declaración se hace como sigue:
-
8/17/2019 Transp Are Nci as Java
42/236
42
int mult[];
mult = new int[100];
En la primera sentencia se especifica el tipo de los elementos de la matriz (int en este caso) y seda un nombre a la matriz, seguido de un doble corchete [], el cual indica al compilador que lo que se
declara es una matriz.Pero la declaración int mult[]; no asigna memoria para almacenar los elementos de la matriz, de
manera que si se intenta acceder a alguno de ellos o asignarle un valor, el compilador dará un mensajede error. Para evitar esto y asignar la memoria necesaria se recurre al operador new.
A partir de ese instante ya se pueden dar valores a todos los elementos de la matriz:
public class Multiplo{
public static void
main(String args[]){
int mult[];
mult=new int[100];for(int i=0;i
-
8/17/2019 Transp Are Nci as Java
43/236
43
"Hola"
Tambíen se pueden unir dos cadenas de caracteres mediante el operador de concatenación +. Porejemplo:
"La ecuacion tiene " + n + " soluciones."
Expresiones
Toda expresi´ on es una combinación de variables, operadores y llamadas a métodos, que calculen unvalor.
Las expresiones se utilizan para calcular y asignar valores a variables y para controlar la ejecuciónde un programa. Realizan las operaciones indicadas por sus elementos y devuelven algún valor.
Existen dos tipos de expresiones:
• Numéricas : que toman valores numéricos.
• Booleanas : que sólo toman los valores true o false.
Expresiones Numéricas
Cualquier variable que represente un número es una expresión numérica.
int i
i+10
--n;
Toda asignación es también una expresión:
a = 100
b * = 2
Expresiones Booleanas
Sólo poseen los valores true o false.
n ! = m
a < b
En una expresión es importante el orden en que se aplican los operadores. No es lo mismo
5 * 3 + 4
que
5 * ( 3 + 4 )
-
8/17/2019 Transp Are Nci as Java
44/236
44
. [] ()
++ -- ! ~ instanceof
new (type)
* / %
+ -
> >>>< >
== !=
&
^
|
&&
||
? :
= += -= *= /= %= ^=
&= |= = >>>=
Table 7: Orden de preferencia de los operadores.
Sentencias y Bloques
Un programa no es más que un conjunto de sentencias ordenadas. Una sentencia es una instruccióncompleta para el compilador, que acaba en un punto y coma.
Una expresíon como a = 100 ó a < b se convierte en una sentencia cuando va seguida de un punto
y coma:
a = 100;
a < b ;
Una sentencia indica una acción. La expresión
2+2;
indica al compilador que realice esa operación pero no lo que debe hacer con el resultado. Por elcontrario, la sentencia
a = 2+2;
ordena al compilador que almacene el resultado en la variable a.Veamos cuatro clases de sentencias:
• Sentencias de declaraci´ on : establecen los nombres y el tipo de variables.
• Sentencias de asignaci´ on : asignan valores a las variables.
• Sentencias de funci´ on : llaman a funciones para realizar una determinada tarea.
• Sentencias estructuradas o de control de flujo: while, if-else, switch, etc., que se analizan en
la sección siguiente.
-
8/17/2019 Transp Are Nci as Java
45/236
45
Un bloque es un conjunto de dos o más sentencias agrupadas y encerradas entre llaves, no existiendopunto y coma tras la llave de cierre. Por ejemplo, el programa que sigue contiene un bloque.
for(i=0;isaldo)
System.out.println("No hay fondos");
else{saldo-=cantidad;
System.out.println("Nuevo saldo: "+saldo);
resultado=true;
}
return resultado;
}
Sentencia else-if
La sentencia else-if amplı́a el número de opciones.
-
8/17/2019 Transp Are Nci as Java
46/236
46
if( cantidad >saldo )
System.out.println("No hay fondos");
else {
saldo-=cantidad; System.out.println("Nuevo saldo: "+saldo); resultado=true;
}
Expresión booleana
Bloque then
Bloque else
if(expresion1)
{sentencias1}
else if(expresion2)
{sentencias2}
...
else
{sentenciasN}
Las expresiones se evalúan en orden; si alguna es cierta, se ejecuta la sentencia o bloque asociado a ella,y se concluye la ejecución de la sentencia else-if. Sólo se ejecuta el último else en el caso de quetodas las expresiones sean falsas.
Pudiera ocurrir que fueran ciertas dos o más expresiones. En este caso, se ejecutaŕıan sólo lassentencias correspondientes a la primera de ellas y se saldrı́a del bloque else-if.Ejemplo:
public boolean retirar(double cantidad){
boolean resultado=false;
System.out.println("Retirar de cuenta "+ cuenta);
System.out.println("Cantidad: "+ cantidad);
if(cantidad==0.0)System.out.println("Introduzca otra cantidad");
else if (cantidad>saldo)
System.out.println("No hay fondos");
else{
saldo-=cantidad;
System.out.println("Nuevo saldo: "+saldo);
resultado=true;
}
return resultado;
}
-
8/17/2019 Transp Are Nci as Java
47/236
47
Ejercicio: Escribir un applet o aplicación que escriba en la salida estándar si un año es bisiesto o nolo es, dado un año cualquiera.
Nota: Una año es bisiesto si es divisible por 4 pero no por 100. Un año que es divisible por 4 y 100es bisiesto si es también divisible por 400.
class Bisiesto{public static void main(String args[]){
int anio=Integer.parseInt(args[0]);
if((anio%4==0)&&(anio%100!=0))
System.out.println("El anio " + anio+" es bisiesto");
else if((anio%4==0)&&(anio%100==0)&&(anio%400==0))
System.out.println("El anio " + anio+" es bisiesto");
else
System.out.println("El anio " + anio+" no es bisiesto");
}}
Sentencia switch
Se dispone de varias opciones derivadas de la evaluación de una única expresión. La sintaxis es lasiguiente:
switch(expresion) {
case {expresion1_constante1}:
{sentencias1}
case {expresion2_constante2}:
{sentencias2}
...
case {expresionN_constanteN}:
{sentenciasN}
default {sentencias}
Cada case lleva una o más constantes enteras o expresiones constantes enteras. Si un case coincidecon el valor de expresion, la ejecución comienza ah́ı. Todas las expresiones de los case deben serdiferentes. Si ninguna de ellas coincide con expresion, se ejecutan las sentencias correspondientes adefault. El default es optativo; si no está y ninguno de los casos coincide, no se ejecuta ningunaacción.
Ejemplo:
class Califica{
static void calificacion(int nota){
switch (nota){
case 3:
System.out.println("S"); break;
case 5:
System.out.println("A"); break;
case 7:
System.out.println("N"); break;
case 9:
-
8/17/2019 Transp Are Nci as Java
48/236
48
switch ( nota ){
case 3 : System.out.println("S"); break;
case 5 : System.out.println("A"); break;
case 7 : System.out.println("N"); break;
case 9 : System.out.println("SB"); break;
default: System.out.println("Será calificado posteriormente"); }
Expresión Aritméticachar, byte, short, int
expresion1_constante1
expresion2_constante2
expresion3_constante3
expresion4_constante4
System.out.println("SB"); break;
default: System.out.println("Sera
calificado posteriormente");
}
}
public static void
main(String args[]){calificacion(5);
calificacion(8);
}
}
Ejercicio: Escribir una aplicación que devuelva el número de dı́as de cada mes en un año cualquiera.
public class Calendario{
public static void
main(String args[]){
int mes=1;int a=2000;
int numDias=0;
switch(mes){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDias=31;
-
8/17/2019 Transp Are Nci as Java
49/236
49
while ( numero
-
8/17/2019 Transp Are Nci as Java
50/236
50
class Bisiesto1{
public static void
main(String args[]){
char ans;
System.out.println("Quiere
introducir anio?? (y/n)");ans=SavitchIn.readLineNonwhiteChar();
while((ans==’y’) || (ans==’Y’) ){
System.out.println("Introduzca
un anio");
int anio=SavitchIn.readLineInt();
if((anio%4==0)&&(anio%100!=0))
System.out.println("El anio " +
anio+" es bisiesto");
else if((anio%4==0)&&(anio%100==0)
&& (anio%400==0))System.out.println("El anio " +
anio+" es bisiesto");
else
System.out.println("El anio " +
anio+" no es bisiesto");
Ejercicio: Calcular el producto de los primeros 20 números impares.
class Pares{
public static void main(String args[]){
int producto=1, numero=1;
int limite=20, ultimoNumero;
ultimoNumero=2*limite+1;
while(numero
-
8/17/2019 Transp Are Nci as Java
51/236
51
Mientras en los ciclos while y for, las condiciones de término se evalúan al principio de cada iteración,en el ciclo do-while se comprueban al final, después de cada repetición del ciclo, por lo que el bloque{sentencias} se ejecuta siempre, al menos una vez.
Aśı, primero se ejecutan las sentencias del bloque sentencias y después se evalúa expresion.Si es verdadera, se vuelve a ejecutar el bloque sentencias, y ası́ sucesivamente.
Cuando expresion toma el valor false se acaba el ciclo.El bloque while:
int a = 1;
while ( a != 15 ) {
a = a + 1;
}
equivale al bloque con do-while:
int a = 1;
do {
a = a + 1;} while (a != 14);
Ciclo for
Actúa hasta un cierto ĺımite impuesto por el programador. Su sintaxis es la siguiente:
for(iniciacion;limite;incremento)
{sentencias}
El ciclo for es equivalente a:
iniciacion
while(limite) {{sentencias}
incremento
}
iniciacion e incremento suelen ser asignaciones o llamadas a una función, que en el caso de sermás de una, se separan por comas, y limite, una expresión relacional.
• La expresión iniciacion se ejecuta al comienzo del bucle.
• La expresión limite indica cuándo se ejecuta el bucle y se evalúa al comienzo de cada iteración,de manera que cuando su valor es true se ejecuta el bloque {sentencia} y si es false, el ciclo
for concluye.
• Las sentencias del bloque sentencias se ejecutan en cada ciclo.
• Las sentencias del bloque incremento se ejecutan al final de cada iteración o ciclo.
El ciclo for es frecuente en la iniciación de los elementos de un matriz:
int mult[];
mult = new int[100];
for(int i=0;i
-
8/17/2019 Transp Are Nci as Java
52/236
52
Definiciones Recursivas
Factorial de un n´ umero (Forma 1)
public class Factorial {
public static long factorial(long x){
if(x==1) return 1;
else return x*factorial(x-1);
}
public static void
main(String args[]) {
Long argumento=new Long(args[0]);
long n=argumento.longValue();
System.out.println(factorial(n));}
}
Factorial de un n´ umero (Forma 2)
import java.math.*;
public class Factorial1 {
public static BigInteger
factorial(long x){
BigInteger fact;
fact= BigInteger.valueOf(x);
if(fact== BigInteger.valueOf(1))
return BigInteger.valueOf(1);
else
return fact.multiply(factorial(x-1));
}
public static void
main(String args[]) {
Long argumento=new Long(args[0]);
long n=argumento.longValue();
System.out.println(
factorial(n).toString());}
}
Sentencias de Bifurcación
Permiten alterar el flujo de ejecución normal del programa. Por ejemplo, la sentencia break en unciclo obliga al programa a abandonar el ciclo y continuar con la ejecuci ón de las sentencias que siguen.La sentencia continue se usa dentro de un ciclo para iniciar la siguiente iteración del ciclo que lacontiene. De esta manera se evita ejecutar las sentencias del ciclo siguientes a continue. Por ejemplo,con las sentencias:
-
8/17/2019 Transp Are Nci as Java
53/236
53
for (i = 0; i < n; i++) {
if(a[i] < 0)
continue;
}
se ignoran los valores negativos de la matriz a.La sentencia return finaliza la ejecución de la función que la contiene y devuelve el control a la
sentencia siguiente de la función de llamada. Además, puede devolver un valor. En este último caso, lasintaxis es: return expresion;
Algoritmo de la Bisección para la Búsqueda de un Número enuna Matriz Ordenada de Enteros
import java.applet.Applet;
public class BusquedaBinaria extends Applet{public static int Buscar(int x[], int n) {
int e1=0;
int e2=x.length-1;
int centro;
if(x[e1]==n)
return(e1);
else if (x[e2]==n)
return(e2);
while (e1
-
8/17/2019 Transp Are Nci as Java
54/236
54
Buscar(datos,30));
System.out.println(2+" --> "+
Buscar(datos,2));
System.out.println(18+" --> "+
Buscar(datos,18));
System.out.println(22+" --> "+Buscar(datos,22));
System.out.println(28+" --> "+
Buscar(datos,28));
}
}
Conjetura de Collatz
public class Collatz {
public static int F(int x) {
if(x%2==1)
return (3*x+1)/2;
else
return x/2;
}
public static void main(String args[]) {
int n, i=1;Integer argumento=new Integer(args[0]);
n=argumento.intValue();
while(n!=1) {
System.out.println( "Iter. " + i +
":" + n );
i++;
n=F(n);
}
System.out.println("SE ALCANZA EL 1
TRAS "+ i +" ITERACIONES");
}
}
Por ejemplo, haciendo la llamada al método main() de la clase Collatz al mismo tiempo que sepasa el valor inicial n = 56, se obtiene un resultado como el que se muestra a continuaci ón:
Iter. 1:56
Iter. 2:28
Iter. 3:14
Iter. 4:7
Iter. 5:11
Iter. 6:17
-
8/17/2019 Transp Are Nci as Java
55/236
55
Iter. 7:26
Iter. 8:13
Iter. 9:20
Iter. 10:10
Iter. 11:5
Iter. 12:8Iter. 13:4
Iter. 14:2
SE ALCANZA EL 1 TRAS 15 ITERACIONES
Programa que Reconoce si un Número es Primo
public class Primo {
public static void main(String args[]) {int n, i=2;
long m;
boolean fin=false;
Integer argumento=new Integer(args[0]);
n=argumento.intValue();
m = Math.round(Math.sqrt(n));
while ((i
-
8/17/2019 Transp Are Nci as Java
56/236
56
1
232
34543
4567654
567898765
678901098767890123210987
890123454321098
90123456765432109
0123456789876543210
123456789010987654321
23456789012321098765432
3456789012345432109876543
456789012345676543210987654
56789012345678987654321098765
int altura=12;
if(args.length>=1)
{
Integer argumento=new Integer(args[0]);
altura=argumento.intValue();
}
else
altura=10;
for(i=1,m=1;i
-
8/17/2019 Transp Are Nci as Java
57/236
57
Arranca elmétodo main
Arranca elintérprete de Java
Carga la clase o
aplicación
Arranca la claseo aplicación
¿Existe elmétodo main?
Envía un mensajede error
No Si
public static void main(String args[]) {}
• public: puede ser llamado por cualquier objeto.
• static: es un método de clase.
• void: no devuelve ningún valor.
• args[]: es una matriz de objetos de la clase String en la que el usuario pasa la información a la
clase. Se trata de los argumentos del método main().
Deben tenerse en cuenta las siguientes observaciones:
• El método main() es un método de clase, por lo que si se quieren invocar métodos de la clase, sedebe crear un ejemplar de la misma.
• Si se diseña una interfase de usuario en una aplicación, se debe crear en el método main() unespacio y una ventana donde colocar dicha interfase.
Llamada al método main()
Cuando el entorno Java ejecuta la clase o aplicación, lo primero que hace es llamar al método main(),el cual invoca al resto de métodos necesarios para hacer funcionar la aplicación.
Si la clase a compilar no tiene implementado un método main(), el proceso se detiene y se env́ıa elmensaje de error:
In class NombreClase:
void main(String args[]) is not defined
Argumentos de la ĺınea de comandos
-
8/17/2019 Transp Are Nci as Java
58/236
58
Los programas pueden necesitar información para poder ejecutarse según los deseos del usuario.Una de las herramientas que lo permiten son los argumentos de la ĺınea de comandos. Son caracteres ocadenas de caracteres que el usuario teclea y que permiten modificar el comportamiento de la aplicaci ónsin necesidad de recompilarla.
El método main() acepta como único argumento una matriz de elementos de la clase String, que
se llaman argumentos de la ĺınea de comandos, puesto que se les puede dar valores al comienzo de laejecución, mediante un cuadro de diálogo que se muestra al usuario al ejecutar el programa Java o enel comando de arranque de la aplicación (entornos UNIX y WINDOWS). Mediante estos argumentosse puede enviar información a la aplicación.
Por tanto, el programa Java debe ser capaz de leer los argumentos y programarlos. El proceso esel siguiente: al ejecutar una aplicación, el sistema pasa los argumentos tecleados por el usuario a sumétodo main(), y los almacena en una matriz de objetos de tipo String. Cada uno de los argumentoses uno de los elementos de la matriz.
Práctica 1
public class Matriz {
public int nfilas, ncolumnas;
public float x[][];
public Matriz(float m[][]) {
nfilas=m.length;
ncolumnas=m[0].length;
x=m;
}
public Matriz(int n, int m) {nfilas=n;
ncolumnas=m;
x=new float[n][m];
}
public void Mostrar() {
int i,j;
for(i=0;i
-
8/17/2019 Transp Are Nci as Java
59/236
59
Matriz C= new Matriz (A.nfilas, B.ncolumnas);
for(i=0;i
-
8/17/2019 Transp Are Nci as Java
60/236
60
Práctica 2
class Persona{
int edad, telefono;
String nombre;
public Persona(){nombre="No ha sido dado";
edad=0;
telefono=0;
}
public Persona(String nombre, int edad, int telefono){
this.nombre=nombre;
this.edad=edad;
this.telefono=telefono;
}
}
class Agenda{
Persona[] entradas;
int contador;
public Agenda(int tamano){
contador=0;
entradas=new Persona[tamano];
System.out.println("Se ha creado una matriz de tamano "+tamano);
}
void anadir(Persona nuevaPersona){if(contador==entradas.length) aumentarTamano();
entradas[contador]=nuevaPersona;
contador++;
}
void aumentarTamano(){
int nuevaLongitud=2*entradas.length;
Persona[] entradasAux=new Persona[nuevaLongitud];
for(int i=0;i
-
8/17/2019 Transp Are Nci as Java
61/236
61
else
encontrarPersona=entradas[localizador];
return encontrarPersona;
}
}
class PrincipalAgenda{
public static void main(String args[]){
Agenda miAgenda;
Persona persona,personaBuscar;
miAgenda=new Agenda(4);
for(int i=0;i
-
8/17/2019 Transp Are Nci as Java
62/236
EXCEPCIONES
-
8/17/2019 Transp Are Nci as Java
63/236
-
8/17/2019 Transp Are Nci as Java
64/236
64
RuntimeException
Throwable
Error Exception
Causas de excepciones
En un programa Java las excepciones pueden provocarse por:
1. El propio sistema cuando detecta un error o una condición de ejecución anormal. Algunas deestas causas de excepciones son:
• Operación que provoca una violación de las normas semánticas del lenguaje. Por ejemplo,ı́ndice fuera de ĺımites en una matriz.
• Error al cargar una parte del programa.
• Exceso en el uso de un cierto recurso. Por ejemplo, agotar la memoria.
• Error interno en la máquina virtual.
2. Expĺıcitamente por el programador, utilizando la sentencia throw.
¿Por qué usar excepciones?
• Proporcionan robustez al programa.
• Permiten separar el código espećıfico de tratamiento de errores del resto del código.
• Permiten propagar los errores a otros métodos dentro de la lı́nea de llamadas.
• Posibilidad de crear grupos de excepciones y diferenciar unas excepciones de otras.
Tipos de Excepciones
Toda excepci´ on es un objeto de la clase Throwable o de alguna de sus subclases
El programador puede crear sus propios tipos de excepciones construyendo subclases de la clase Throwableque se adapten mejor a sus necesidades particulares. Por convenio, todos los nombres de las clases deexcepciones terminan con la palabra Exception.
• La clase Throwable es la superclase de todos los errores y excepciones en el lenguaje java.
• La clase Error agrupa todos los errores “graves” del sistema que conducen a situaciones de dif́ıcilsolución. Es poco probable que dentro de un programa Java se intente hacer un tratamiento deeste tipo de errores.
-
8/17/2019 Transp Are Nci as Java
65/236
65
• La clase Exception y sus subclases son una forma de la clase Throwable que indica condicionesque un programa razonable debe querer capturar.
Excepciones de Obligada Respuesta
El compilador de Java comprueba si en el programa existen manipuladores (handlers ) para las ex-cepciones que se pudieran originar en la ejecución de cada método.
La búsqueda comienza en el método en el que se produce la excepción y continua de forma ascendentepor la ĺınea de llamadas de dicho método. En caso de no encontrarlo se produce un error de compilaciónde la forma:
Warning:
Exception xxxException must be caught,
or it must be declared in throws clause
of this method.
Esta exigencia, que parece bastante estricta, es una de las formas de garantizar la robustez del programa.
Quedan exentas de esta imposici´ on todas las excepciones de la clase RuntimeException o cualquiera de sus subclases.
Excepciones de obligada respuesta :
Definidas en el paquete java.lang:
• ClassNotFoundException: clase no encontrada por el método forName().
• CloneNotSupportedException: error al hacer una copia del objeto con el método clone() de laclase Object.
• IllegalAccessException: intento fallido de cargar una clase desde un método que no tieneacceso a ella porque no es de tipo public y se encuentra en otro paquete.
• InstantationException: intento de crear un ejemplar de una clase de tipo abstract o de unainterfase.
• InterruptedException: un proceso ligero interrumpe a otro que se encontraba en situación de
espera.
Definida en el paquete java.io la clase IOException con las subclases:
• java.io.EOFException: alcanzado el fin de fichero.
• java.io.FileNotFoundException: no se encuentra el fichero.
• java.io.InterruptedIOException: un proceso ligero interrumpe a otro que se encontraba ensituación de espera para completar una operación de Input/Output.
• java.io.UTFDataFormatException: conversión imposible de realizar cuando se utiliza el métodoreadUTF().
-
8/17/2019 Transp Are Nci as Java
66/236
66
Subclases de IOException definidas en el paquete java.net:
• java.net.MalformedURLException
• java.net.ProtocolException
• java.net.SocketException
• java.net.UnknownHostException
• java.net.UnknownServiceException
Excepciones en Tiempo de Ejecución (runtime)
No es obligatoria la presencia de un manipulador para tratarlas
Definidas en el paquete java.lang:
• ArithmeticException: provocada por una operación aritmética ilegal. Por ejemplo, la divisiónpor cero.
• ArrayStoreException: intento de asignar a uno de los elementos de una matriz un valor con untipo no compatible.
• ClassCastException: conversión de tipo ilegal.
• IllegalArgumentException: llamada a un método con un argumento inapropiado. Subclases:
– IllegalThreadStateException: se efectúa una llamada no permitida a un método de unthread.
– NumberFormatException: intento de convertir una cadena que no tiene el formato adecuadoa un determinado tipo numérico.
• IllegalMonitorException.
• IndexOutOfBoundsException: ı́ndice fuera de rango.
• NegativeArraySizeException: intento de crear una matriz cuya longitud es negativa.
• NullPointerException: uso de una referencia nula donde se requeŕıa la referencia a un ob jeto.
• SecurityException: violación de seguridad detectada.
Definidas en el paquete java.util:
• java.util.EmptyStackException: intento de acceder a un elemento de una pila (stack ) vaćıa.
• java.util.NoSuchElementException: intento de acceder a un elemento de un vector vaćıo.
-
8/17/2019 Transp Are Nci as Java
67/236
-
8/17/2019 Transp Are Nci as Java
68/236
68
Un método puede responder a una excepción de dos formas:
1. Incorporando un manipulador de excepciones apropiado al tipo de la misma.
2. Declarándola y dejando que sea alguno de los métodos de los que provino quien se encargue de
responderla.
Construcci´ on de un manipulador de excepciones
Las tres componentes básicas de un manipulador de excepciones son:
• El bloque try: agrupa todas las sentencias que pueden provocar excepciones.
• El bloque o bloques catch: sentencias que se ejecutan cuando se produce la excepción.
• El bloque finally (opcional): sentencias que se ejecutan siempre:
– Tras las sentencias del bloque try si no se producen excepciones.
– Tras las sentencias del bloque catch si se ha producido alguna excepción.
El bloque try define el alcance del manipulador de excepciones y debe ir acompañado de al menos unbloque catch o el bloque finally.
try{
...
} catch (...) {...
} catch (...) {
...
} ...
} finally {
...
}
}
Cuando existen varias sentencias del método que potencialmente pueden provocar una excepción, haydos posibilidades:
(a) Agrupar todas las sentencias en un solo bloque try con varios bloques catch para responder acada una de las excepciones.
(b) Agrupar cada sentencia individual en un bloque try con su bloque catch correspondiente.
Cada bloque catch requiere un argumento que indica el tipo de excepción que trata, este argumentopertenece siempre a una subclase de la clase Throwable. Puede utilizarse el método getMessage() deeste argumento para mostrar información adicional sobre el error que provocó la excepción.
-
8/17/2019 Transp Are Nci as Java
69/236
69
Funcionamiento del manipulador de excepciones.
Si se produce una excepción:
1. Una instrucción dentro de un bloque try provoca una excepción.
2. Se abandona el flujo de ejecución normal del programa.
3. El sistema busca el primer bloque catch cuyo tipo de excepción se ajusta al de la que se haproducido. La búsqueda comienza en el mismo método en el que se produjo la excepción ycontinúa por los métodos de los que proveńıa la llamada.
4. Se ejecutan las sentencias de ese bloque.
5. Si existe bloque finally se ejecutan sus sentencias, en otro caso se da por concluida la ejecucióndel programa.
Si no se produce ninguna excepción:
1. Se ejecutan normalmente las sentencias del bloque try.
2. Si existe bloque finally se ejecutan sus sentencias.
Soluciones alternativas al programa del ejemplo
Solución 1:
import java.io.*; class Division{public static void main(String args[]){
BufferedReader f;
float x,y;
try{
f=new BufferedReader
(new FileReader("Datos"));
x=new Float(f.readLine()).floatValue();
y=new Float(f.readLine()).floatValue();
System.out.println("Resultado = " + x/y);
} catch(FileNotFoundException e){
System.err.
println("No encontrado el fichero");
} catch(IOException e){
System.err.println("Error de lectura");
}
}
}
-
8/17/2019 Transp Are Nci as Java
70/236
70
Solución 2:
import java.io.*;
class Division{
public static void main(String args[]){BufferedReader f;
float x,y;
try{
f=new BufferedReader
(new FileReader("Datos"));
x=new Float(f.readLine()).floatValue();
y=new Float(f.readLine()).floatValue();
System.out.println("Resultado = " + x/y);
} catch(Exception e){
System.err.println("Error: "+ e.toString());
}
}
}
Declaración de Excepciones
La alternativa a la construcción de un manipulador para una excepción es dejar que un métodoanterior en la sucesión de llamadas se encargue de responderla, utilizando para ello el comando throws.
Ejemplo:
public void S(int v[])
throws IndexOutOfBoundsException {
......................
......................
......................
}
Indica que en el método S() puede generarse una excepción IndexOutOfBoundsException, pero en ese
caso, el bloque catch para tratarla debe buscarse no en el método S() sino a partir del método en elque se hizo la llamada a él.
La Sentencia throw
La sentencia throw se utiliza para “lanzar” excepciones, es decir, cuando se detecta una situaci ónque provocaŕıa un error, debe crearse un objeto de la clase de excepción correspondiente, e indicar quela excepción se ha producido mediante una sentencia de la forma:
throw Objeto;
donde Objeto debe pertenecer a alguna de las subclases de la clase Throwable.
-
8/17/2019 Transp Are Nci as Java
71/236
71
• La sentencia throw es utilizada impĺıcitamente por el sistema cuando detecta algunos erroresestándar.
• El programador puede utilizarla para “lanzar” sus propias excepciones de forma expĺıcita.
Práctica de ExcepcionesTerminar de escribir el siguiente programa realizando el tratamiento de las excepciones. (Nota: Noolvidar introducir los argumentos para ejecutar la aplicación. Hay que introducir los nombres de 2ficheros.)
import java.io.*;
class LeerEscribir{
public static void main(String argv[]){File leer=new File(argv[0]);
FileInputStream f1=new FileInputStream(leer);
File escribir=new File(argv[1]);
FileOutputStream f2=
new FileOutputStream(escribir);
int c;
while((c=f1.read()) != -1){
f2.write(c);
}
f1.close();
f2.close();
}
}
Solución 1
import java.io.*;
class LeerEscribir1{
public static void main(String argv[]){try{
File leer=new File(argv[0]);
FileInputStream f1=new FileInputStream(leer);
File escribir=new File(argv[1]);
FileOutputStream f2=
new FileOutputStream(escribir);
int c;
while((c=f1.read()) != -1){
f2.write(c);
}
f1.close();
-
8/17/2019 Transp Are Nci as Java
72/236
72
f2.close();
}
catch(Exception e){
System.out.println("LeerEscribir: "+e);
}
finally{System.out.println(" Se ha realizado con exito");}}
}
Solución 2
import java.io.*;
class LeerEscribir{
public static void main(String argv[])throws IOException{
File leer=new File(argv[0]);
FileInputStream f1=new FileInputStream(leer);
File escribir=new File(argv[1]);
FileOutputStream f2=
new FileOutputStream(escribir);
int c;
while((c=f1.read()) != -1){
f2.write(c);
}
f1.close();
f2.close();
}
}
-
8/17/2019 Transp Are Nci as Java
73/236
CONTROL DE SUCESOS
-
8/17/2019 Transp Are Nci as Java
74/236
74
Programa 1
import java.awt.*;
public class Marco1{
public Marco1(){
setTitle("Marco");
setSize(300,300);
}
public static void main(String[] args){
Marco1 m=new Marco1();
m.show();
}
}
¿ C´ omo cerrar la ventana?
Se puede controlar perfectamente cómo transmitir los sucesos desde las fuentes de sucesos , (botones,barras de desplazamiento) a los receptores de sucesos . Cualquier objeto puede ser un receptor de sucesos.
Las fuentes de sucesos poseen métodos que permiten registrar receptores de sucesos con ellos. Lasfuentes de sucesos son objetos que tienen la capacidad de detectar sucesos y notificar a los receptoresque se han producido dichos sucesos.Resumiendo:
• un receptor es un ejemplar de una clase que implementa una interfase especial llamada interfase receptora
• una fuente de sucesos es un objeto que puede registrar receptores y enviarles mensajes cuandoocurren sucesos. Estos mensajes son métodos de la interfase receptora.
¿C´ omo registrar el receptor con la fuente?
eventSourceObject.
addEventListener(eventListenerObject);
Ejemplo:
Button b=new Button("OK");
b.addActionListener(objeto);
-
8/17/2019 Transp Are Nci as Java
75/236
75
El objeto es avisado cuando tiene lugar un suceso de acci´ on en el botón, (presionar el botón, en estecaso).
Por tanto, la clase a la que pertenece el objeto (el receptor) debe implementar la interfase apropiada:
ActionListener, en este caso.Para implementar ActionListener, la clase del receptor debe poseer un método (actionPerformed)que recibe un objeto de la clase ActionEvent como parámetro.
En el paquete java.awt.Event aparecen once interfases receptoras:
ActionListener KeyListener
AdjustmentListener MouseListener
ComponentListener MouseMotionListener
ContainerListener TextListener
FocusListener WindowListener
ItemListener
Volvamos al ejemplo de partida y veamos cómo cerrar la ventana. Para ello, en primer lugarredefinimos la clase Marco1. Si queremos cerrar la ventana, el suceso que se va a crear es un objeto dela clase WindowEvent.
marco.addWindowListener(x);
¿Quién puede recibir el suceso?
Un objeto de una clase que implemente la interfaseWindowListener. En nuestro caso, la fuente y el receptor son el mismo.Ejemplo:
import java.awt.*;
import java.awt.event.*;
class Marco extends Frame
implements WindowListener{
public Marco(){
addWindowListener(this);
}
}
Pero implementar una interfase no es suficiente. Se deben implementar los métodos necesarios parala interfaseWindowListener en la clase Marco. Nuestra clase debe implementar todos los métodos definidos enla interfase WindowListener. Existen siete métodos. Java los llama como respuestas a siete sucesosdiferentes que pueden ocurrir en una ventana:
-
8/17/2019 Transp Are Nci as Java
76/236
76
void windowClosed(WindowEvent e)
void windowIconified(WindowEvent e)
void windowOpened(WindowEvent e)
void windowClosing(WindowEvent e)
void windowDeiconified(WindowEvent e)
void windowActivated(WindowEvent e)void windowDeactivated(WindowEvent e)
Ejemplo:
import java.awt.*;
import java.awt.event.*;
public class Marco extends Frame
implements WindowListener{
public Marco(){
setTitle("Marco");
setSize(300,300);addWindowListener(this);
}
public void windowClosing(WindowEvent e){
System.exit(0);
}
public void windowClosed(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowOpened(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowActivated(WindowEvent e){}public void windowDeactivated(WindowEvent e){}
public static void main(String[] args){
Marco m=new Marco();
m.show();
}
}
Se han implementado seis métodos que no realizan ninguna acción. Simplifiquemos el programaanterior.
Cada interfase receptora viene acompañada de una clase adaptadora que implementa todos losmétodos de la interfase pero no hace nada con ellos. Existe una clase adaptadora para cada una de lassiete interfases receptoras con más de un método:
ComponentAdapter MouseAdapter
ContainerAdapter MouseMotionAdapter
FocusAdapter WindowAdapter
KeyAdapter
-
8/17/2019 Transp Are Nci as Java
77/236
77
Ejemplo:
import java.awt.*;
import java.awt.event.*;
class CerrarVentana extends WindowAdapter{public void windowClosing(WindowEvent e){
System.exit(0);
}
}
class MarcoSimplificado extends Frame{
public MarcoSimplificado(){
CerrarVentana v = new CerrarVentana();
setTitle("Marco");
setSize(300,300);addWindowListener(v);
}
public static void main(String[] args){
MarcoSimplificado m=new MarcoSimplificado();
m.show();
}
}
Ejemplo:
import java.awt.*;
import java.awt.event.*;
public class MarcoSimplificadoAltern
extends Frame{
public MarcoSimplificadoAltern(){
setTitle("Marco");
setSize(300,300);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);}});
}
public static void main(String[] args){
MarcoSimplificadoAltern m=
new MarcoSimplificadoAltern();
m.show();
}
}
-
8/17/2019 Transp Are Nci as Java
78/236
78
Sucesos
La superclase que engloba todos los sucesos es la clase EventObject implementada en el paquetejava.util
Even tOb j e c t
AWT Event
Adjus tment Event
Component Event
Act ion Event
I t em Event
Text Event
Conta iner Event
Window Event
Focus Event
Input Event
Pain tEvent
Key Event
Mouse Event
Cuando una fuente necesita comunicar a un receptor la ocurrencia de un suceso, el AWT