transp are nci as java

Upload: martin-quintana

Post on 06-Jul-2018

234 views

Category:

Documents


0 download

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