PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez Variables y Métodos de Clase 2 Miembros de Clase Para declarar un atributo (variables) o método de clase se usa el keyword static Una variable de clase variable compartida por todos los objetos de la clase Se inicializan las variables estáticas al cargar la clase, sólo una vez public static int CONTADOR=0; 3 Ejemplo de variable compartida (2) public class Cat{ private int peso; private String nombre; public static int CONTADOR=0; public Cat() { CONTADOR++; } public Cat(String nombre, int peso) { this.nombre = nombre; this.peso = peso; CONTADOR++; } 4 Ejemplo de variable compartida (2) public void printDatos( ) { System.out.println("Me llamo:"+ nombre ); System.out.println("Peso:"+ peso ); } public void info( ) { System.out.println("Total de objetos creados:"+ CONTADOR); } } // fin clase Cat 5 Ejemplo de variable compartida (3) public class TestCat{ public static void main (String[] args){ Cat c = new Cat("Felix", 10); c.info(); Cat c2 = new Cat("Garfield", 30); c2.info(); Cat c3 = new Cat(); c.info(); } } 6 Método de clase Los métodos se definen como estáticos No se requiere de ninguna instancia para invocarlo Se usa el nombre de la clase para su invocación Ejemplo: public static void info() Los métodos de clase no pueden referenciar a las variables de instancias public static void info( ) { System.out.println("Total de objetos creados:"+ CONTADOR); } 7 Invocación método de clase public class TestCat{ public static void main (String[] args){ Cat c = new Cat("Felix", 10); Cat.info(); Cat c2 = new Cat("Garfield", 30); Cat.info(); Cat c3 = new Cat(); Cat.info(); } } Nota. Usar el nombre de la clase para acceder a atributos o métodos estáticos 8 Lectura de parámetros 9 Lectura de parámetros public class Test{ public static void main (String[] args){ for(int i=0; i< args.length; i++) { System.out.println("Argumento "+ i +" ==> " + args[i]); } } } Ejecución: C::> java Test Juan 1950 Masculino 10 Clases Wrapper Proporcionan la forma de envolver valores primitivos en un objeto Proporcionar funciones utilitarias para trabajar con datos primitivos conversiones de valores a representación de cadenas, entre tipos de datos, etc. Existe una clase wrapper para cada tipo de dato primitivo int Integer float Float 11 Clases Wrapper Constructores Integer i1 = new Integer(42); Integer i2 = new Integer("42"); Float f1 = new Float(3.14f); Float f2 = new Float("3.14f"); 12 Clases Wrapper 13 Métodos de clases Wrapper Para convertir el valor de un objeto numérico al valor primitivo se usa el método xxxValue() Integer i2 = new Integer(42); byte b = i2.byteValue(); // convierte el valor de i2 a un valor primitivo byte double d = i2.doubleValue(); 14 Métodos de clases Wrapper Para convertir valores representados po un String al valor primitivo se usa el método parseXxx() int x = Integer.parseInt("16"); Para convertir a la representación en Binario del número System.out.println("X= " + x + " en binario =" + Integer.toBinaryString(x)); Lanza una excepción si el formato del número no es adecuado 15 Métodos de clases Wrapper Los métodos esenciales para la conversión entre objetos son • primitive xxxValue( ) • primitive parseXxx(String) • Objeto de clase Wrapper valueOf(String) double d4 = Double.parseDouble("3.14"); System.out.println("d4 = " + d4); // resultado: "d4 = 3.14" http://java.sun.com/javase/6/docs/api/ 16 Ejemplo public class TestWrapper{ public static void main (String[] args){ int x = Integer.parseInt("16"); System.out.println("X= " + x + " en binario =" + Integer.toBinaryString(x)); } } 17 Manejo de Excepciones 18 Manejo de Excepciones Excepcion significa “condición excepcional” el flujo normal del programa se alteró Una excepción, en Java, se dice que se lanza El código que debe administrar la excepción se llama manejador de excepción atrapa la excepción lanzada Se transfiere la ejecución del programa al manejador de excepciones apropiado abrir archivo (no existe) conversión (formato erróneo) 19 Manejo de Excepciones Se usa try, catch van unidos try Bloque de código que se intentará pero que puede causar una excepción catch Declara un bloque de código para administrar una excepción finally Bloque de código, generalmente seguido de trycatch que se ejecuta siempre sin importar que flujo siguió 20 Manejo de Excepciones try { // región para garantizar la ejecución. } catch(Excepcion1) { // código que maneja esta excepción. } catch(Excepcion2) { // código que maneja esta excepción2. } finally { // código para liberar recursos usados en la sección try } 21 Jerarquía de Excepciones 22 Ejemplo public class TestException{ public static void main (String[] args){ String val = "16as"; int x=0; try { System.out.println("Valor por convertir =>" + val); x = Integer.parseInt(val); System.out.println("Valor convertido => " + x); } catch (NumberFormatException e) { System.out.println("!!!Error al convertir:" + val); } 23 Ejemplo catch (Exception e) { System.out.println(“Error!!! :" + e.getMessage()); } System.out.println(“más código... "); } // Fin main } // Fin Clase 24 Ejercicio I Diseñar una clase TestParametros que acepte dos números como parámetros, los sume y muestre el resultado en pantalla. Si algún número no es válido indicarlo al usuario adecuadamente, es decir, que se muestre un mensaje controlado por el programa. Salida: c:> java TestParametros 3 4 El resultado es: 7 c:> java TestParametros 14 50 El resultado es: 64 25 Ejercicio II Diseñar una clase TestParametrosN que acepte como argumentos un conjunto de números, los sume y muestre el resultado en pantalla. Si algún número no es válido indicarlo al usuario adecuadamente, y sumar los que sí sean válidos. Salida: c:> java TestParametrosN 3 4 El resultado es: 7 c:> java TestParametrosN 2 4 6 8 El resultado es: 20 26