Download está la segunda parte de java
Document related concepts
no text concepts found
Transcript
Java Arreglos • Declaración preferida de un arreglo: int[] A; • Declaración compatible con C: int A[]; Arreglos • En Java, la declaración de un arreglo es similar a la declaración de un puntero en C: • Errores típicos con arreglos: int A[10]; // Ahí no va el tamaño! int[] A; // Ok A[1]= 100; // Todavía no se ha pedido // espacio para el arreglo. • Petición de espacio para un arreglo: int[] A; A= new int[10]; A[1]= 100; // Ahora sí! Los argumentos de un programa Al ejecutar un programa en la ventana de comandos, el usuario puede especificar argumentos: java Hello Hola que tal Los argumentos "Hola", "que" y "tal" se reciben en un arreglos de strings en el main: public static void main(String[] args) { ... } – args[0] es "Hola" – args[1] es "que" – args[2] es "tal" • Ejemplo: Un programa que despliega todos los argumentos que recibe desde la línea de comandos. • Ejecute el siguiente comando en la ventana de DOS: • java Echo Hola que tal • El código de Echo.java es: public class Echo { public static void main (String[] args) { for (int i=0; <args.length; i++) System.out.println(args[i]); } } public class Suma { public static void main (String[] args) { // Un arreglo de 4 enteros: int[] a= new int[4]; a[0]= 1; a[1]= 5; a[2]= 20; a[3]= 15; // (estas dos instrucciones se pueden resumir en una sola: // int[] a={1, 5, 20, 15}; ) // Un segundo arreglo de 4 enteros con la inicializacion abreviada: int[] b= {2, 3, 23, 4}; // Esta es la parte que tiene que hacer Ud. Construya un arreglo de ``a.length'' enteros y asígnelo a una variable c (de tipo arreglo de enteros). Haga un ciclo haciendo que una variable entera i tome valores desde 0 hasta a.length-1 En cada iteración sume el i-ésimo elemento de a con el i-ésimo elemento de b y asigne el resultado al i-ésimo elemento de c // Desplagamos el resultado: for (int i=0; i<c.length; i++) System.out.println("c["+i+"]= "+c[i]); Consola.esperar(); } } Ejercicio • Realice la suma de vectores siguiendo las instrucciones que aparecen en el ejemplo anterior. Propuesto: Frecuencia de números • Haga un programa que determine cuantas veces aparece cada número entero especificado en la línea de comandos. Ejemplo: • java Frec 4 6 6 6 10 1000 • 4 -> 1 6 -> 3 10 -> 1 Sólo considere los números enteros que estén entre 0 y 99. Obs.: Para obtener el valor entero almacenado en el string s utilice Integer.parseInt(s). Respuesta public class Frec { public static void main (String[] args) { int[] F= new int[100]; // Con índices de 0 a 99 for (int i= 0; i<args.length; i++) { int num= Integer.parseInt(args[i]); if (num>=0 && num<100) F[num]++; // o bien F[num]= F[num]+1; } for (int j=0; j<F.length; j++) if (F[j]!=0) System.out.println(j+" -> "+F[j]); } } Objetos y Clases • • • • Un objeto es un tipo de datos abstracto. Los objetos se crean con el operador new: new Animator(); new Box(Color.black, Color.red, 20, 25, 30, 15); • Al operador new se le indica la clase del objeto que se desea crear. • Los argumentos indicados son los atributos del objeto. • La clase de un objeto determina las operaciones (métodos) que acepta ese objeto. Para conocer un objeto es necesario tener una referencia de él: Animator anim; Box box; • Una variable referencia un objeto creado con new. La variable no contiene el objeto. • El tipo de la variable indica la clase de objetos que podrá referenciar. anim= new Animator(); box= new Box(Color.black, Color.red, 20, 25, 30, 15); box= new Animator(); // ¡Error en compilación! • Invocación de métodos: anim.push(box); box.moveTo(100,200); • Las variables en Java referencian objetos. • Las variables de tipos no primitivos son punteros. • La asignación Box box2= box; hace que las variables box y box2 referencien el mismo objeto. • Sólo las variables de tipos primitivos contienen directamente los valores (int, double, boolean, etc.). La referencia nula: null • Agregue el siguiente código: • Box box3= null; anim.push(box3); • java.lang.NullPointerException: at Scenes.Scene.addAfter(Scene.java:64) at Scenes.Scene.push(Scene.java:86) at Game.main(Game.java:27) • Una variable asignada con null no referencia ningún objeto. Si se intenta realizar cualquier operación con él se produce un NullPointerException. Subclases • La clase Grob tiene subclases: Box, Text, Ellipse. • Los objetos de la subclase también pertenecen a la clase. • Las operaciones de la clase también son válidas en objetos de la subclase. • Proyección: Una variable de tipo Grob también puede referenciar objetos de cualquiera de las subclases de Grob. • Grob go= box; Bibliotecas de Clases • Java ofrece una enorme biblioteca estándar de clases: Java Platform Core API. • Todas las implementaciones de Java 1.1 implementan esta API. • La API se organiza en paquetes de clases. • Para poder usar el paquete java.io: • import java.io.*; Entrada/Salida en Java • Para leer un archivo por líneas: BufferedReader reader= new BufferedReader(new FileReader(args[0])); String linea= reader.readLine(); while(linea!=null) { System.out.println(linea); linea= reader.readLine(); } Excepciones • En la API se indica que ciertos métodos lanzan (throws) excepciones. • Una excepción es una eventual situación de error que se podría producir al invocar un método. Ejemplo: El archivo no existe. • Java encausa la programación de aplicaciones robustas forzando a que los programadores manejen todas las excepciones. • Una excepción es un objeto de la clase Exception. Excepciones • Forma simple de manejar una excepción E: • El método declara que lanza esa excepción (throws E). • public static void main(String[] args) throws IOException { ... } Ejecute el programa colocando cualquier archivo de texto como argumento del programa en la línea de comandos. • Forma recomendada de manejar una excepción E: • Atrapar la excepción con: • try { instrucciones } catch ( tipo-excepción variable ) { instrucciones } public static void main(String[] args) // sin throws { try { coloque aquí todo el cuerpo del main } catch ( IOException e ) { System.err.println("Se produjo un error de E/S"); } } Constructores • Un constructor es un método que lleva el mismo nombre de la clase. • Se invoca automáticamente cada vez que se crea un nuevo objeto. • Sirve para inicializar las variables de instancia del objeto. • Un constructor puede incluir parámetros. Estos parámetros se enlazan con los argumentos especificados al crear un objeto con new. • Una clase puede definir varios constructores con distintos tipos de argumentos (sobrecarga). • Ejemplo: el constructor de Punto. public class Punto { int x,y; // Variables de instancia public Punto(int x, int y) { // El constructor this.x= x; this.y= y; } ... } • Ejercicio: se desea agregar un nuevo constructor a la clase Punto que reciba como argumento otro punto. El punto creado debe quedar en las mismas coordenadas que el punto recibido. • Ejemplo de uso: • Punto p= new Punto(10,10); Punto q= new Punto(q); • System.out.println(q); // (10,10)