Download Iniciación a Java
Document related concepts
no text concepts found
Transcript
Iniciación a Java 1.Introducción a Java 2.Programación Orientada a Objetos 3.Fundamentos del lenguaje Java 4.Trabajando con Objetos 5.Manejo de Clases, Métodos y Variables 6.Conceptos Avanzados de Java 1. Introducción a Java 1.1.Introducción 1.6.El API del SDK 1.2.Orígenes e historia del lenguaje Java 1.7.Cómo compilar archivos 1.3.Características de Java 1.4.El Software Development Kit de Java 1.5.Instalación y configuración del J2SE 1.4.2 1.8.El Classpath 1.9.Ejecución de Programas en Java 1.10.Resumen 1.1. Introducción Hablaremos de: ● origen e historia de Java ● características que lo diferencian de otros lenguajes ● instalación de la plataforma ● consejos de compilación y ejecución 1.2. Orígenes e historia del lenguaje Java ● Desarrollado por Sun Microsystems en 1991 ● Destinado a electrodomésticos domésticos ● Independiente de la plataforma ● Basado en C++ ● El proyecto se disolvió en 1994 ● Sun desarrolla HotJava con soporte de applets ● Netscape da soporte a los applets 1.3. Características de Java ● Simplicidad: Basado en C++ para fácil aprendizaje ● Orientado a Objetos: Ventajas frente a procedural ● Distribuido: Trabajo en red ● Robusto: Elimina problemas comunes en C ● Seguro: sandbox ● Independencia de Plataforma (WORE): JVM ● Multithreaded: Múltiples hilos de ejecución 1.4. El Software Development Kit de Java ● JDK ó SDK: Herramientas para compilar y ejecutar ● J2SE (Java 2 Standard Edition) ● J2ME (Java 2 Mobile Edition) ● J2EE (Java 2 Enterprise Edition) 1.5. Instalación y configuración del J2SE 1.4.2 Descarga: http://java.sun.com/j2se/1.4.2/download.html Una vez instalado: ● W98/ME: Añadir al Autoexec.bat SET PATH=c:\j2sdk1.4.2\bin;%PATH% ● WNT/200/XP: Panel de control/ Sistema/ Avanzado/ Variables de Entorno/ Variables del Sistema añadir a PATH la ruta del SDK ● Linux: Añadir $HOME/.bashrc ó $HOME/bash_profile export PATH=/usr/local/j2sdk1.4.2/bin:$PATH 1.6. El API del SDK http://java.sun.com/j2se/1.4.2/docs/api/ 1.7. Cómo compilar archivos javac d dir_dest classpath cp1:cp2 archivo.java Ej: javac d . MiClase.java 1.8. El Classpath ● ● Caminos de búsqueda de clases utilizadas Como mínimo las del Java Run Time: jdk1.4/jre/lib/rt.jar 1.9. Ejecución de Programas en Java java MiClase Fallos típicos: ● método main() tiene que estar definido ● java MiClase.class (sobra .class) ● si salta java.lang.NoClassDefFoundError y nuestra clase define package paquete.clases hay que ejecutar: java paquete.clases.MiClase 1.10. Resumen Diseñado para electrodomésticos, actualmente para aplicaciones de servidor ●Simplicidad, orientación a objetos, distribución, robustez, seguridad, independencia de plataforma, multihilo ●Al compilar se genera bytecode interpretado por la JVM ●SDK: herramientas para compilar y ejecutar. J2SE, J2EE, J2ME ●API: conjunto de clases ●Compilador: javac; ejecución: java; classpath define camino de búsqueda ● 2. Programación Orientada a Objetos 2.1.Introducción 2.4.Herencia 2.2.Orientación a objetos 2.5.Paquetes 2.3.Clases en Java. Atributos y Métodos 2.6.Resumen 2.1. Introducción ● Que son clases y objetos ● Atributos y métodos en las clases ● Herencia ● Paquetes 2.2. Orientación a objetos (1/2) Ordenador: placa, procesador, memoria, disco duro, etc. ● Disco duro: discos superpuestos, cabeza lectora, circuito controlador, etc. ● “El todo está compuesto por piezas y cada pieza por partes más pequeñas” ● Si se estropea un disco duro y existen estándares para la conexión (indep. fabricante) sin problema. ● Objeto (disco duro), función (almacenar datos), atributos (los datos), interfaz (IDE, SCSI) ● 2.2. Orientación a objetos (2/2) Objetos: ● Realizan una tarea por sí solos ● Proporcionan encapsulación ● Son reutilizables ● Proporcionan escalabilidad (el programa puede crecer) y modularidad (división en bloques para fácil comprensión) 2.3. Clases en Java. Atributos y Métodos (1/4) Escribimos clases (abstracción, plantilla) no objetos (realización) 2.3. Clases en Java. Atributos y Métodos (2/4) class Coche { boolean estadoMotor = false; String color; String modelo; ... 2.3. Clases en Java. Atributos y Métodos (3/4) ... void arrancar() { if (estadoMotor == true) System.out.println(“Coche ya arrancado”); else { estadoMotor = true; System.out.println(“Arrancado”); } } ... 2.3. Clases en Java. Atributos y Métodos (4/4) ... void detener() { if (estadoMotor == false) System.out.println(“Coche ya detenido”); else { estadoMotor = false; System.out.println(“Detenido”); } } } // fin de la clase Coche 2.4. Herencia (1/2) ● ● ● ● ● Toda clase existe dentro de una jerarquía En Java, toda clase tiene una y solo una clase por encima (herencia simple) La clase hereda métodos y propiedades de su superclase Cada subclase extiende y concreta la funcionalidad y características de su superclase, se “especializa” En Java todas las clases heredan de Object 2.4. Herencia (2/2) class Animal { float peso; void comer(){} } class Memifero extends Animal { boolean sangreCaliente; void parir() {} void amamantar() {} } 2.5. Paquetes ● conjunto de clases e interfaces relacionados ● una forma de crear librerías ● API Java, package java ● import ● Por defecto siempre se incluye java.lang sin necesidad del import 2.6. Resumen ● ● ● ● ● Programas Java: compuestos por objetos independientes que se comunican entre sí Objetos: tienen atributos (sus variables) y métodos (comportamiento) Clases: abstracción de objetos (plantillas) Toda clase hereda atributos y métodos de su superclase (cabeza de pirámide java.lang.Object) Paquetes: agrupación de clases 3. Fundamentos del lenguaje Java 3.1.Introducción 3.5.Instrucciones 3.2.Comentarios 3.6.Expresiones y Operadores 3.3.Variables y Tipos de Datos 3.7.Control de Flujo 3.4.Literales 3.8.Resumen 3.1. Introducción ● ● Introduciremos la herramientas para escribir programas en Java Veremos la sintaxis de las instrucciones, variables, tipos de datos, literales, operadores y flujo de programa 3.2. Comentarios ● ● ● /* Comentarios de varias líneas */ int variable; // Comentario de final de línea /** * Comentario de Javadoc * @param parametro Descripción */ 3.3. Variables y Tipos de Datos ● Zonas de memoria donde almacenar valores ● Tienen: tipo, nombre y valor ● Antes de utilizarlas hay que definirlas 3.3.1. El nombre de la variable ● Se pueden definir en cualquier parte (pero mejor al principio) ● Primer carácter: letra, guión bajo (_) o dólar ($) ● A partir del segundo: también permite números ● Casesensitive ● Por norma, la primera letra en minúscula ● Separar palabras con letra mayúscula 3.3.2. La asignación ● int numroEntero, numero2Entero = 3; ● int x=4, y=5, z=6; ● boolean motorEnMarcha = true; ● String texto; texto = “Esto es una cadena de texto”; 3.3.3. El tipo ● Tipo primitivo (boolean, char, byte, short, int, long, float, double) ● Clase o interfaz ● Array de elementos (distinto de la clase Array) 3.4. Literales ● ● Forma de especificar un valor Tipos: de entero, de punto flotante, de caracteres, de cadenas, etc 3.4.1. Literales de enteros ● int entero = 65535; // Valor decimal ● int entero = 0xFFFF; // Valor hexadecimal (0x) ● int entero = 0177777; // Valor octal (0) ● long enteroLargo = 22L; // Entero 64 bits (L) 3.4.2. Literales de punto flotante ● double flotanteLargo = 5.34; // Notación decimal ● double flotanteLargo = 3.00e+8; // Notación científica ● float flotanteCorto = 5.34F; // Notación decimal 32 bits ● float flotanteCorto = 3.00e+8F; // Científica de 32 bits ● Por defecto cualquier literal de punto flotante es de tipo double. Si queremos que sea float hay que especificarlo con F 3.4.3. Literales de caracteres ● ● Se definen utilizando comillas simples char carácter = 'a'; Admiten caracteres de escape ASCII o Unicode char saltoLinea = '\n'; 3.4.4. Literales de cadena ● ● Conjunto de caracteres y secuencias de escape entre comillas dobles Normalmente serán instancias de la clase String String cadena = “Esto es una cadena”; String cadena = “Cadena con \”comillas\” dentro”; 3.5. Instrucciones (1/2) ● Sintaxis muy similar a C o C++ ● Todas las instrucciones aparecen dentro de un bloque ● Un bloque es todo aquello que esté entre “{“ y “}” ● ● Todas las instrucciones finalizan con “;” con excepción de las sentencias de control de flujo Alcance de variables limitado a su bloque 3.5. Instrucciones (2/2) class ClaseEjempo { int variable=1; void metodo() { if (variable == 1) System.out.println(“La variable vale 1”); else { System.out.println(“La variable vale 0”); } } } 3.6. Expresiones y Operadores. Preferencia (1/2) ● ● Expresión = instrucción que devuelve un valor Las expresiones utilizan operadores (definen la operación a realizar entre los operandos) ● Existe una relación de prioridad entre operandos ● A igual prioridad se evalúan de izquierda a derecha ● Para cambiar la prioridad se utilizan los paréntesis 3.6. Expresiones y Operadores. Preferencia (2/2) Pri. Operador Operandos 1 ++, Aritméticos 1 ! Booleano 1 ~ Entero 1 (tipo) Cualquiera 2 *,/,% Aritméticos 3 +, Aritméticos 3 + String 4 << Entero 4 >> Entero 5 <,<=,>,>= Aritméticos 5 instanceof Objeto 6 ==,!= Tipos primitivos Descripción Incremento y decremento Complemento Lógico Complemento en binario Casting Multiplicación, división, módulo o residuo Adición y sustracción Concatenación de cadenas Desplazamiento de bits hacia la izqueirda Desplazamiento de bits hacia la derecha Comparación numérica Comparación de tipo Igualdad o desigualdad de valor 3.7. Control de Flujo ● Sentencias que permiten modificar el flujo de ejecución de los programas 3.7.1. ifelse (1/2) if (condicion) instrucción o bloque de instrucciones; else instrucción o bloque de instrucciones; Donde: condición: Expresión booleana 3.7.1. ifelse (2/2) class ControlFlujo { public static void main(Sring args[]) { String cadena1 = “hola”; String cadena2 = “hola”; String cadena3; if (cadena1.equals(cadena2)) { System.out.println(“Cadenas iguales”); cadena3 = cadena2; System.out.println(“Cadena3: “ + cadena3); } else System.out.println(“Cadenas distintas”); } } 3.7.2. El condicional switch (1/2) ● ● ● ● Permite comparar una variable con varios valores La variable es comparada con cada uno de los valores y se ejecutan las sentencias de aquellos que coincidan Se admite el valor por defecto default que coincide con cualquier cosa La variable debe ser de un tipo primitivo que pueda ser convertido a int ● La sentencia break fuerza la salida del switch ● Los valores deben ser constantes (o variables final) 3.7.2. El condicional switch (2/2) class UsoDeSwitch{ public static void main(String args[]) { int a=3; switch(a) { case 1: System.out.println(“Es 1”); break; case 2: System.out.println(“Es 2”); break; default: System.out.println(“No es 1 ni 2”); } } } 3.7.3. Bucles while y dowhile (1/2) class UsoDeWhile { public static void main(String args[]) { int a=0, b=10; while (a<10 && b>0) { System.out.println(“a: “ + a + “ y b: “ + b); a++; b; } } } 3.7.3. Bucles while y dowhile (2/2) class UsoDeDoWhile { public static void main(String args[]) { int a=0, b=10; do { System.out.println(“a: “ + a + “ y b: “ + b); a++; b; } while (a<10 && b>0); } } 3.7.4. Bucles for class UsoDeFor { public static void main(String args[]) { int a,b=10; for(a=0; a<10; a++) { System.out.println(“a: “ + a + “ y b: “ + b); b; } } } 7.8. Resumen ● ● ● Toda variable tiene tipo, nombre y valor Los tipos pueden ser: uno de los 8 primitivos, una clase, un array de elementos Los literales definen la forma en que especificamos un valor de una variable ● Las instrucciones se agrupan en bloques ● Una expresión es una instrucción que devuelve un valor ● Se pueden concatenar cadenas mediante el + ● Sentencias condicionales: ifelse, switch ● Sentencias repetitivas: while, dowhile, for 4. Trabajando con Objetos 4.1.Introducción 4.5.Conversión mediante Casting 4.2.Creación y Destrucción de Objetos 4.6.Arrays 4.3.Invocación de Variables y Métodos 4.7.Trabajando con cadenas de caracteres 4.4.Métodos Constructores de una Clase 4.8.Resumen 4.1. Introducción ● ● Aprenderemos a crear, destruir y trabajar con objetos. Aprenderemos a invocar a los métodos y atributos, veremos que es el casting y estudiaremos los arrays y las cadenas de caracteres 4.2. Creación y Destrucción de Objetos ● ● ● Instancia = Objeto Instanciar una clase = crear un objeto a partir de dicha clase Coche ferrari = new Coche(); Define una variable de tipo Coche, de nombre ferrari y que almacena una instancia de la clase Coche. El constructor de la clase puede admitir parámetros. ● Recolector de basura: no se necesita destruir objetos 4.3. Invocación de Variables y Métodos ● ● ● ● Una clase, por sí sola, no puede ejecutarse. Debe tener un método main que cree un objeto de la clase o debe ser llamada desde otra clase Todos los métodos hay que definirlos dentro de la clase, incluso el main Podemos acceder a una propiedad mediante objeto.propiedad Podemos invocar un método mediante objeto.metodo(parámetros) 4.4. Métodos Constructores de una Clase ● ● Inicializa un nuevo objeto El operador new: reserva memoria para el objeto inicializa las variables de instancia del objeto invoca al método constructor ● Java define un constructor por defecto sin parámetros ● Un constructor no devuelve ningún tipo (ni void) ● Un constructor tiene el mismo nombre que su clase 4.5. Conversión mediante Casting ● ● ● ● El casting permite cambiar el valor de un objeto o tipo primitivo a otro tipo diferente Para tipos primitivos si la conversión es de un tipo “más grande” a uno “más pequeño” está implícita: int x = 3; float y = x; En caso contrario hay que especificar el casting: float x = 100f; int y = (int)x; Las conversiones entre Objetos solamente se permiten si existen relaciones de herencia 4.6. Arrays (1/2) ● Colección de elementos ordenados ● En Java, los arrays son objetos ● Todos sus elementos deben ser del mismo tipo ● ● Se definen como: String cadenas[]; o String[] cadenas; Se pueden inicializar en la definición: String cadenas[] = {“cadena1”,”cadena2”}; o inicializar solamente el número de elementos String cadenas[] = new String[2]; 4.6. Arrays (2/2) ● ● ● ● ● Las posiciones van de 0 al número de eltos menos uno A los elementos se accede por índice: cadenas[2] = “cad1”; Para saber su longitud se utiliza el atributo length: int logitud = cadenas.length; Para copiar un array podemos utilizar: System.arraycopy(oriben,iniceorigen,destino,indicedestino,num eroelementos) Arrays multidimensionales: int matriz[][] = new int[10][10]; 4.7. Trabajando con cadenas de caracteres ● Las cadenas son secuencias de caracteres ● Se utiliza la clase String ● Se pueden concatenar con el operador + ● ● ● Cualquier objetos se puede convertir a String int edad = 27; String informe = “La edad es “ + edad; Para comparar cadenas se utiliza el método equals() o equalsIgnoreCase() En el API hay muchas funciones útiles (substring, length, ...) 4.8. Resumen ● ● Para instanciar una clase se utiliza new Para acceder a sus propiedades y métodos se utiliza la notación de puntos ● El constructor es un método especial para inicializar un objeto ● Se puede utilizar la conversión de tipos (casting) ● ● Un array es una colección de objetos ordenados y en Java se un Objeto Todas las cadenas de caracteres son instancias de String 5. Manejo de Clases, Métodos y Variables (1/2) 5.1.Introducción 5.2.Tipos de Variables 5.3.Alcance de las Variables 5.4.Modificadores 5.5.Control de Acceso. Tipos de protección 5.6.Finalización de clases, métodos y variables 5.7.Métodos 5.8.Pasando argumentos desde la línea de comandos 5. Manejo de Clases, Métodos y Variables (2/2) 5.9.Métodos de clase e instancia 5.14.Superposición de Métodos 5.10.Análisis del método 5.15.Sobrecarga de main constructores 5.11.Polimorfismo 5.12.This y Super 5.13.Sobrecarga de Métodos 5.16.Superposición de constructores 5.17.Resumen 5.1. Introducción ● ● Veremos que, según su ubicación en el código, existen varios tipos de métodos y variables con un tipo u otro de alcance Estudiaremos el control de acceso a clases, métodos y variables ● Veremos la definición formal de métodos ● Explicaremos el concepto de polimorfismo 5.2. Tipos de Variables ● ● ● Local: dentro de la definición de un método. Sólo válida para el código contenido en ese método De Instancia: se declaran fuera de los métodos (generalmente al principio). Válida para toda la instancia (se puede usar desde cualquier método) De Clase: se declara al principio de la clase. Válida para todas las instancias. Se utiliza la palabra reservada static en su definición 5.3. Alcance de las Variables ● ● Alcance = zona del código donde se puede usar Al llamar a una variable: Java busca la definición en el ámbito (bloque) actual, como puede ser un bucle Si no la encuentra va subiendo hasta llegar a la definición del método (variable local) Si no la encuentra busca una de instancia o de clase Si no la encuentra sube a la superclase a buscarla 5.4. Modificadores ● ● Son palabras reservadas que permiten modificar la definición y el comportamiento de las clases, métodos y variables Los más importantes: public, protected, private para el control de acceso static para crear métodos y variables de clase abstract para crear clase, métodos y variables abstractas final para indicar que finaliza la implementación de una clase, método o variable 5.5. Control de Acceso. Tipos de protección ● ● ● El control de acceso se refiere a la visibilidad de una clase, variable o método. Encapsulación Cuatro niveles de protección: público paquete protegido privado 5.5.1. Protección Friendly o de Paquete ● ● Son visibles a todas las demás clases del mismo paquete, pero no fuera de él Es la protección por defecto cuando no se especifica 5.5.2. Protección Pública ● ● ● Son visibles a todas las demás clases, dentro o fuera de la clase o paquete actual Se utiliza la palabra reservada public NOTA: cuando tengamos más de una definición de clase en el mismo archivo java, solamente una de ellas podrá ser pública y el archivo java deberá llamarse igual que esa clase 5.5.3. Protección Privada ● ● ● Son accesibles únicamente por métodos de la misma clase. Se utiliza la palabra reservada private Existe un tipo especial de clases que pueden ser privadas, las clases internas 5.5.3.1. Clases Internas ● ● ● Es aquella que está definida dentro de otra clase Pueden acceder a la implementación de la clase creadora (incluyendo los privados) Pueden ocultarse a otras clases del mismo paquete class ClasePrincipal { private atributo1; public metodo() {} private class ClaseInterna { // desde aquí podemos acceder a atributo1 } } 5.5.4. Protección Protegida ● ● Son accesibles por todas las clases dentro del paquete y por sus subclases, aunque estén fuera de él Se utiliza la palabra reservada protected 5.6. Finalización de clases, métodos y variables ● ● La finalización permite bloquear la implementación de una clase, variable o método. Se especifica utilizando la palabra reservada final generalmente a continuación de un modificador de protección. 5.6.1. Finalización de variable ● Se convierte en una constante final int a = 6; 5.6.2. Finalización de método ● Evita que un método pueda ser “superpuesto” public final void metodoInmutable() {} ● La utilización de métodos finales acelera la ejecución del programa porque el compilador no tiene que buscar la definición de ese método en las subclases 5.6.3. Finalización de clase ● Evita que una clase tenga subclases public final class ClaseFinal{} ● ● El API Java tiene clases finales para evitar que se puedan extender Salvo por eficiencia no lo haremos 5.7. Métodos (1/2) ● Definen la funcionalidad de un objeto ● Constan de: – uno o varios modificadores (public, static, final, etc) – el Objeto o Tipo Primitivo que devuelve – el Nombre del método – un conjunto de Parámetros – la palabra reservada throws (se verá más adelante) – el Cuerpo del método 5.7. Métodos (2/2) ● ● ● Firma (signature) del método: nombre del método + conjunto de parámetros Cuando un método no devuelve nada debe especificarse el tipo void Paso de parámetros: Los tipos primitivos se pasan por valor Los objetos se pasan por referencia 5.8. Pasando argumentos desde la línea de comandos ● public static void main (String args[]) {...} ● args.length: Número de argumentos ● args[0]: Primer argumento ● if (args[0].equals(“version”))... 5.9. Métodos de clase e instancia ● Los métodos de clase están disponibles para cualquier instancia de esa clase o para otras clases, independientemente de si existe, o no, una instancia de esa clase ● public static int calculaDerivada(String ecuacion) {} ● double coseno = Math.cos(Math.PI); 5.10. Análisis del método main ● ● ● ● ● ● En toda aplicación, al menos debe de existir una clase que tenga un método main public static void main(String args[]) public: el método main debe estar accesible desde fuera de la clase para poder invocarlo al arrancar la aplicación static: es un método de clase, está disponible independientemente de que esté o no instanciada la clase void: no devuelve nada main: siempre se llama así (ya se explicaron los parámetros de la línea de comandos) 5.11. Polimorfismo ● ● Es la capacidad de utilizar un objeto de una subclase como si fuera un objeto de la clase base Permite escribir código que desconoce parcialmente las características de los objetos con los que trabaja (código desacoplado) 5.12. This y Super ● ● ● Relacionadas con la herencia y el alcance de las variables this: permite referirse a las variables y métodos de la instancia así como pasar el propio objeto como argumento super: similar a this, pero se refiere a la superclase del objeto 5.13. Sobrecarga de Métodos ● Consiste en crear varios métodos con el mismo nombre pero con distintas firmas (signature) o definiciones 5.14. Superposición de Métodos ● ● ● ● Son métodos de subclases con la misma firma que los correspondientes de la superclase Permite amplicar la funcionalidad de los métodos de la superclase Java, al igual que con las variables, buscará primero el método en la clase y si no lo encuentra subirá a buscarlo a la superclase Para llamar a la implementación de la superclase: super.metodo(parametros); 5.15. Sobrecarga de constructores ● ● ● ● Se utiliza igual que el resto de métodos Si no se define ningún constructor, existe el constructor por defecto (sin parámetros) Si se define algún constructor, únicamente están disponibles los definidos (ya no está el constructor por defecto si no se define explícitamente) Para ejecutar un constructor desde otro: this(parametros); 5.16. Superposición de constructores ● ● Como los constructores deben tener el mismo nombre de la clase es imposible realizar la superposición Pero podemos aprovechar el constructor de la clase: super(argumentos); 5.17. Resumen ● ● Tipos de variables: locales, de instancia y de clase Modificadores: modifican la definición y comportamiento. Destacan los de control de acceso (public, private, protected y friendly) ● Finalización: permite bloquear la implementación ● Firma: tipo devuelto + nombre método + parámetros ● Polimorfismo: usar un objeto de subclase como si fuese de la clase base (código desacoplado) ● this: se refiere al objeto actual ● super: ser refiere a la superclase ● sobrecarga: varios métodos con el mismo nombre pero distinta firma ● superposición: permite redefinir los métodos en las subclases 6. Conceptos Avanzados de Java 6.1.Introducción 6.4.Interfaces 6.2.Abstracción de clases 6.5.EntradaSalida (E/S) y métodos 6.6.Resumen 6.3.Excepciones 6.1. Introducción ● En este capítulo veremos la abstracción de clases, las interfaces, el control y gestión de interrupciones y la entradasalida (E/S) 6.2. Abstracción de clases y métodos (1/2) ● ● Clases abstractas: – no pueden tener instancias – sirven de “referencias” – generalmente en la parte superior de la jerarquía de clases de Java. – pueden contener métodos concretos y abstractos Métodos abstractos: – firma del método únicamente, sin su implementación – no pueden existir fuera de una clase abstracta 6.2. Abstracción de clases y métodos (2/2) ● ● ● Si una clase contiene un método abstracto deberá ser definida como abstracta Para su definición se antepone abstract Sirven para “obligar” a que las subclases implementen los métodos 6.3. Excepciones ● ● ● Sirven para permitir a un programa recuperarse de los errores de una forma “elegante” Permiten a los programas ser tolerantes a fallos Las excepciones son clases (Exception y Error heredan de Throwable) 6.3.1. Captura de excepciones (1/2) ● ● ● ● Todas las excepciones heredan de java.lang.Exception El código susceptible de generar excepciones se encierra entre try y catch catch admite como parámetro el tipo de excepción a capturar finally: es un bloque opcional después del catch. Permite realizar tareas que deben ser ejecutadas independientemente del comportamiento de errores (como cerrar una conexión de base de datos) 6.3.1. Captura de excepciones (2/2) try { // Código que pueda generar Errores ("Exception's") } catch(Tipo1 id1) { // Manejar "Exception's" para la Clase Tipo1 } catch(Tipo2 id2) { // Manejar "Exception's" para la Clase Tipo2 } catch(Tipo3 id3) { // Manejar "Exception's" para la Clase Tipo3 } finally { // Actividades que siempre ocurren } 6.3.2. Lanzando Excepciones (1/2) ● ● En la firma del método debe especificarse la o las excpciones que puede lanzar utilizando la palabra reservada throws Dentro del cuerpo del método se lanzarán utilizando la palabra reservada throw 6.3.2. Lanzando Excepciones (2/2) public String leerFichero(String fichero) throws IOException, FileNotFoundException { ... throw new FileNotFoundException(“No se ha encontrado el archivo”); } 6.3.3. Creando nuestras propias excepciones (1/2) public class MiExcepcion extends Exception { public MiExcepcion() {} public MiExcepcion(String mensaje) { super(mensaje); System.out.println(“Saliendo del sistema”); // Otras acciones } } 6.3.3. Creando nuestras propias excepciones (2/2) class UsoDeExcepciones { void funcion(int a) throws MiExcepcion { if (a==1) throw new MiExcepcion(“Se ha producido una excepción propia.”); } public static void main(String args[]) { UsoDeExcepciones uso = new UsoDeExcepciones(); try { uso.funcion(1); } catch (MiExcepcion m) { System.out.println(“Excepción: “ + m.getMessage()); } } } 6.3.4. Transfiriendo excepciones class UsoDeExcepciones2 { void funcion (int a) throws MiExcepcion { if (a==1) throw new MiExcepcion(“error”); } void pasarMarron(int var) throws MiExcepcion{ funcion(var); // Otro código } public static void main(String args[]) { UsoDeExcepciones2 uso = new UsoDeExcepciones2(); try { uso.pasrMarron(1); } catch (MiExcepcion m) { System.out.println(m.getMessage()); } } } 6.4. Interfaces (1/2) ● ● ● ● Solución a la herencia simple Interfaz: Clase en la que solo se especifica comportamiento, únicamente se definen firmas de métodos y constantes Se dice que una clase implementa una interfaz cuando implementa todos sus métodos (está obligada) Para definir una interfaz, se antepone la palabra interface al nombre de la clase ● Solamente pueden ser públicas o con protección de paquete ● Los métodos son public y abstract (no se especifica) ● Las variables son public, static y final (no se especifica) 6.4. Interfaces (2/2) ● ● ● ● No se pueden crear instancias de una interfaz (al igual que en las clases abstractas) Una interfaz puede heredar de una o varias interfaces (extends Interfaz1, Interfaz2) herencia múltiple de interfaces. La implementación se indica con implements (similar al extends de la herencia). Múltiples implementaciones se separan por comas La subclase de una clase que implementa una interfaz, también implementa la interfaz 6.5. EntradaSalida (E/S) ● ● ● La clase System: – clase final (no se puede instanciar) del paquete java.lang – in: flujo de entrada (InputStream) – err: flujo donde se redireccionan los errores (OutputStream) – out: flujo de salida (OutputStream) Salida por pantalla System.out.println(); Entrada por teclado String texto = (new BufferedReader(new InputStreamReader(System.in))).readLine(); 6.6. Resumen ● ● ● ● Las clases y métodos abstractos no pueden instanciarse. Se utiliza el modificador abstract Cuando un programa Java falla lanza excepciones. Capturándolas mediante trycatch podemos crear código tolerante a fallos Las interfaces son clases que especifican un comportamiento Java posee funciones de E/S