Sunteți pe pagina 1din 41

Clases Bsicas y Utilidades

Introduccin Object y Class Math System RunTime Clases de envoltura

rea de Lenguajes y Sistemas Informticos Universidad de Burgos

Introduccin
Clases bsicas del paquete java.lang Object
clase raz, las clases que no extienden a ninguna clase explcitamente extienden a Object.

Class Math: Clase que contiene a travs de mtodos estticos las operaciones matemticas. System y Runtime: que contienen informacin sobre el entorno. Las clases de envoltura sobre los tipos primitivos, que permiten a los valores ser tratados como objetos.
2

Clase Base: Object Clase raz de todas las clases.


Sin variables y un solo constructor: Object() Contenida dentro del paquete bsico java.lang; Ofrece un conjunto de mtodos que se heredan por parte de todas las clases java.

Mtodos equals y hashcode


se usan para construir tablas de direccionamiento de objetos.
public boolean equals(Object obj)
Igualdad de valor a diferencia de == (igualdad de identidad entre objetos). Redefinido correctamente en las siguientes clases:
Boolean, Character, Integer, Long, Float, Double, String y Bitset.

En las dems clases se recomienda que lo redefina el programador, de lo contrario aplica el criterio ms restrictivo: ((Object)x).equals(y) x==y

Clase Base: Object


public int hashCode() Devuelve un entero asociado con la direccin de memoria del objeto (cdigo hash del bucket donde est posicionado el objeto). Es el mismo si son equals, suele ser distinto si no son equals. Asociados al manejo de java.util.Hashtable. Ejemplo: Hashtable numbers = new Hashtable(); numbers.put("one", new Integer(1)); numbers.put("two", new Integer(2)); numbers.put("three", new Integer(3)); Integer n = (Integer) numbers.get("two"); if (n != null) { System.out.println("two = " + n); }
Nota: las tablas de direccionamiento son como arrays, pero vienen indexadas por clave y crecen de tamao dinmicamente.

Clase Base: Object


protected Object clone() throws cloneNotSupportedException Crea una copia idntica de un objeto. Slo objetos que implementen Cloneable.
x.clone() != x x.clone().getClass() == x.getClass() x.clone().equals(x) //true. //true. //true.

public final Class getClass()


Clase de la que es instancia directa el objeto.

protected void finalize() throws Throwable


Mtodo que se ejecuta cuando el recolector libera el objeto.

public String toString()


Por defecto devuelve:
getClass().getName() + '@' + Integer.toHexString(hashCode()), por lo que es conveniente redefinirlo.

El operador concatenacin +, lo invoca implcitamente.

Clase Base: Object


La clase Object ofrece tres mtodos wait() y dos mtodos notify() para el control de hilos. Se ponen a disposicin de hilos de aquellas clases que no extienden a la clase Thread. El mtodo wait hace que un hilo espere hasta que sea notificado o haya transcurrido un periodo de tiempo.
public final void wait(long timeout) throws InterruptedException public final void wait(long timeout, int nanos) throws InterruptedException public final void wait() throws InterruptedException

Los mtodos notify se usan para notificar a los hilos que esperan que su espera ha finalizado.
public final void notify() public final void notifyAll()
6

Clase Base: Class


La clase Class admite el procesamiento en tiempo de ejecucin de la clase de un objeto y de la informacin de la interfaz. Carece de constructores. A los objetos de esta clase se les denomina Descriptores de clase se crean y asocian automticamente a los objetos a los que se refieren. Los mtodos getName y toString devuelven la descripcin de la clase.
public String getName() public String toString() public Class getSuperClass() devuelve el descriptor de la superclase. public boolean isInterface() identifica a una interfaz. public Class[] getInterfaces() devuelve un array de objetos Class que especifica las interfaces de una clase. public Object newInstance() crea un nuevo objeto a partir de la clase. 7

Ejemplo

import java.util.*; public class ClassApp { public static void main(String args[]){ Vector v = new Vector(); System.out.println(v.getClass().getName()); System.out.println(v.getClass().getSuperclass().getName()); System.out.println(v.getClass().isInterface()); } }
java.util.Vector java.util.AbstractList false

Clase Math
Ofrece un conjunto amplio de mtodos matemticos en forma de clase puramente esttica
Contenida en java.lang y definida sobre StrictMath

Constantes
public static final double E //valor del nmero e public static final double PI // valor del nmero pi

Funciones Trigonomtricas
public static public static public static Nota: a es el double sin(double a) // seno double cos(double a) // coseno double tan(double a) // tangente ngulo en radianes en todos los casos anteriores.

public static double asin(double a) // arco seno public static double acos(double a) // arco coseno public static double atan(double a) // arco tangente public static double toRadians(double angdeg) // devuelve el valor en radianes public static double toDegrees(double angrad) // devuelve el valor en grado 9

Clase Math
Funciones Exponenciales
public public public public static static static static double double double double exp(double a) // ea log(double a) // logaritmo de a pow(double a, double b) //ab sqrt(double a) // raz cuadrada

Redondeo
public static int round(float a) // retorna el int ms cercano a al valor double ( (int) Math.floor(a + 0.5f) ) public static long round(double a) // retorna el long ms cercano al valor double ( (long) Math.floor(a + 0.5d) ) public static double rint(double a) // retorna el doble ms prximo a un valor entero public static double floor(double a) // retorna el doble inferior entero public static double ceil(double a) // retorna el doble superior entero
10

Clase Math
Otros:
public static double random() // nmero aleatorio entre [0,1) siguiendo una distribucin (aproximadamente) uniforme public public public public public public public public public public public public static static static static static static static static static static static static int abs(int a) // valor absoluto long abs(long a) float abs(float a) double abs(double a) int max(int a, int b) // valor mximo int max(int a, int b) float max(float a, float b) double max(double a, double b) int min(int a, int b) // valor mnimo long min(long a, long b) float min(float a, float b) double min(double a, double b)

11

Ejemplo Empleo de la clase Math


public class MathApp { public static void main(String args[]) { System.out.println(Math.E); System.out.println(Math.PI); System.out.println(Math.abs(-1234)); System.out.println(Math.cos(Math.PI/4)); System.out.println(Math.sin(Math.PI/2)); System.out.println(Math.tan(Math.PI/4)); System.out.println(Math.log(1)); System.out.println(Math.exp(Math.PI)); for(int i=0;i<3;++i) System.out.print(Math.random()+" "); System.out.println(); } 2.718281828459045 3.141592653589793 } 1234
0.7071067811865476 1.0 0.9999999999999999 0.0 23.140692632779267 0.8607222127395251 0.6211994779224611 0.5556497142672706

12

Ejemplo java 1.5 Empleo de la clase Math


import static java.lang.Math.*; public class MathApp15 { public static void main(String args[]) { System.out.println(E); System.out.println(PI); System.out.println(abs(-1234)); System.out.println(cos(Math.PI/4)); System.out.println(sin(Math.PI/2)); System.out.println(tan(Math.PI/4)); System.out.println(log(1)); System.out.println(exp(Math.PI)); for(int i=0;i<3;++i) System.out.print(random()+" "); System.out.println(); 2.718281828459045 3.141592653589793 } 1234 0.7071067811865476 }

1.0 0.9999999999999999 0.0 23.140692632779267 0.8607222127395251 0.6211994779224611 0.5556497142672706

13

Clase System
La clase System proporciona una interfaz estndar a los recursos y funciones comunes del sistema.
No puede ser instanciada (puramente esttica)

Incluye el acceso a los flujos de E/S estndar y error:


public static final InputStream in public static final PrintStream out Ej: System.out.println("mensaje de texto"); public static final PrintStream err

Fecha-Hora actual en milisegundos desde el 01/01/1970


public static long currentTimeMillis()

Obtener/cambiar las propiedades del sistema:


public static String getProperty(String key) public static String setProperty(String key, String value)

Terminar ejecucin
public static void exit(int status)
Status, se suele poner a 0 si la terminacin es normal.

14

Propiedades de Sistema
Clave
java.version java.vendor java.vendor.url java.home java.vm.specification.version java.vm.specification.vendor java.vm.specification.name java.vm.version java.vm.vendor java.vm.name java.specification.version java.specification.vendor java.specification.name java.class.version java.class.path os.name os.arch os.version file.separator path.separator line.separator user.name user.home user.dir

Descripcin del valor asociado


Java Runtime Environment version Java Runtime Environment vendor Java vendor URL Java installation directory Java Virtual Machine specification version Java Virtual Machine specification vendor Java Virtual Machine specification name Java Virtual Machine implementation version Java Virtual Machine implementation vendor Java Virtual Machine implementation name Java Runtime Environment specification version Java Runtime Environment specification vendor Java Runtime Environment specification name Nmero de versin de formato de clases Java class path nombre de sistema operativo arquitectura de sistema operatvio versin de sistema operativo separador de ficheros ("/" on UNIX) separador de path (":" on UNIX) separador de lnea ("\n" on UNIX) nombre de cuenta de usuario directorio home de usuario directorio actual de trabajo del usuario

15

Ejemplo Empleo de la clase System


public class SystemApp { public static void main(String args[]) { long time = System.currentTimeMillis(); System.out.print("Milliseconds elapsed since January 1, 1970: "); System.out.println(time); System.out.println(System.getProperty("java.vm.version")); System.out.println(System.getProperty("os.name")); System.out.println(System.getProperty("user.name")); System.exit(13); } } Milliseconds elapsed since January 1, 1970: 1072539231339 1.4.2-b28 Windows 2000 Administrador
16

Clase System: Entrada y Slida


Encapsula la entrada y salida estndar en modo consola (teclado y pantalla) a travs de instancias
in canal de entrada estndar. Tpicamente el teclado u otra fuente especificada por el entorno o el usuario out canal de salida estndar. Tpicamente la pantalla err canal de salida de errores

System.in

Mtodos de lectura abstract int read(); // lee el siguiente byte int read(byte[] b); // lee un n de bytes y los almacena en el buffer b int read(byte[] b, int off, int len); // lee un n de bytes

System.out

Mtodos de escritura sobrecargados


mtodo print mtodo println

17

Ejemplo Empleo de System.in


import java.io.*; // obligatorio public class Lector{ public static void main(String args[]) throws IOException{ for ( int i=0; i<10;i++){ int b= System.in.read(); if (b==10 || b==13){ // no consideramos los caracteres del salto de carro i--; continue; } System.out.println(( char ) b); } } }

18

Ejemplo Empleo de System.out


import java.io.*; public class Escritor{ public static void main(String args[]) throws IOException{ for ( int i=0; i<10;i++){ boolean b = ((i % 2) == 0); System.out.print("Iteracion "); System.out.println(i); System.out.print(b); System.out.println(); } } }

19

Clase Runtime
Se obtiene un objeto de tipo Runtime a partir de la clase System Devuelve un entorno de ejecucin (Runtime). public static Runtime getRuntime() Permite acceder a recursos relacionados con la ejecucin. A partir del cual se obtiene cantidad de memoria libre y total. public long freeMemory() public long totalMemory() Tiene mtodo que permite la ejecucin de otras aplicaciones Ejemplo: public class RuntimeMemApp { public static void main(String args[]){ Runtime r = Runtime.getRuntime(); System.out.println(r.totalMemory()); //memoria total en bytes System.out.println(r.freeMemory()); //memoria libre en bytes //Nota: memoria disponible para la MVJ } }
20

Clases de Envoltura
Los tipos primitivos existen por cuestiones de eficiencia. Se impide a los tipos primitivos ser tratados como objetos. Clases de Envoltura (en el paquete java.lang) Boolean Byte Character Number Integer Short Long Float Double
21

Clases de Envoltura
Cada clase de envoltura proporciona
Constructores con el tipo primitivo como argumento Constructor con un String como argumento

Disponible:
mtodo toString(). mtodo tipoValue, como charValue, booleanValue, etc. conversiones hacia / desde String. Ejemplo:
boolean bandera=(new Boolean(true)).booleanValue(); String s=(new Boolean( bandera )).toString();

22

Utilidades java.util
Estructuras de Datos
Enumeraciones Vectores Pilas Diccionarios Tablas hash Propiedades

Utilidades varias
Anlisis de cadena Generacin de nmeros aleatorios

23

Enumeraciones
Enumeraciones Interface Enumeration public boolean hasMoreElements() public Object nextElement()
Hay que hacer la conversin oportuna desde Object.

Una enumeracin slo se puede recorrer una vez, ya que no hay forma de volver al primer elemento. Consumidas por su uso. No tiene porqu haber una coleccin de datos detrs aunque lo normal es que la haya.
24

Vectores
Clase Vector, ofrece la posibilidad del manejo de arrays crecientes. Colecciones de objetos (no tipos primitivos). Son redimensionables, pero el crecimiento es una operacin costosa, por lo que se dimensionan con capacidad mayor que el tamao. Constructores:
public Vector(int initialCapacity,int capacityIncrement) public Vector(int initialCapacity) //Incremento=1 public Vector() //Capacidad inicial=10, incremento=1.

25

Vectores
Mtodos public void addElement(Object obj) //Aade al final public void insertElementAt(Object obj, int index) //Indice desde 0, incrementa capacidad si lo necesita. public void setElementAt(Object obj, int index) public void removeElementAt(int index) //No altera capacity, solo size public boolean removeElement(Object obj) //Es lo mismo que v.removeElementAt(0) public void removeAllElements() public void copyInto(Object[] anArray) public boolean contains(Object elem) //testea con equals.
26

Vectores
Mtodos
public int indexOf(Object elem) public int indexOf(Object elem, int index) public Object elementAt(int index) public Object firstElement() public Object lastElement() public int size() public int capacity() public void ensureCapacity(int minCapacity) //Para forzar explcitamente un incremento de capacidad, (negativo la dobla). public void trimToSize() //Ajusta la capacidad al valor de size. public void setSize(int newSize) public Enumeration elements()

27

Ejemplo: Enumeracin + Vector


Ejemplo: Se crea un vector en el que se aaden valores. Se recorre el vector a travs de una enumeracin. Se elimina uno de los elementos. Se comprueba la eliminacin de dicho elemento.
import java.lang.System; import java.util.Vector; import java.util.Enumeration; public class VectorApp { public static void main(String args[]){ Vector v = new Vector(); v.addElement("one"); v.addElement("two"); v.addElement("three"); v.insertElementAt("zero",0); v.insertElementAt("oops",3); v.insertElementAt("four",5); System.out.println("Size: "+v.size()); Enumeration iter = v.elements(); while (iter.hasMoreElements())
System.out.println(iter.nextElement()+" ");

v.removeElement("oops"); System.out.println("Size: "+v.size()); for(int i=0;i<v.size();++i) System.out.prinlnt(v.elementAt(i)+" "); } } 28

Ejercicio 1: Enumeracin + Vector


Dada la clase Empleado, definir una clase VectorApp2 que realice las siguientes operaciones : Crear un vector en el que se aaden empleados. Recorrer el vector a travs de una enumeracin. Eliminar uno de los empleados. Comprobar la eliminacin de dicho elemento.
class Empleado{ private String nombre; private String apellido; private float sueldo; public Empleado(String p_nombre, String p_apellido, float p_sueldo){ nombre=p_nombre; apellido=p_apellido; sueldo=p_sueldo; } public void aumentarSueldo(int aumento){ sueldo += aumento; } public String getNombre(){ return nombre; } public String getApellido(){ return apellido; } public float getSueldo(){ return sueldo; } } 29

Ejercicio 2: Enumeracin + Vector


En java 1.5 las colecciones e iteradores incorporan genericidad.
java.util.Enumeration<E> java.util.Vector<E>
Enumeration<E> elements()

En java 1.5 aparecen los bucles for... Each


Vector<Empleado> v=new Vector <Empleado>(); for (iter=v.elements(); iter.hasMoreElements(); ) System.out.print( ((Empleado)iter.nextElement()).getNombre()); for (Empleado e : v) System.out.print(e.getNombre());

Repetir el ejercicio anterior con estas nuevas caractersticas de java 1.5


30

Pilas
La clase Stack es una subclase de Vector que implementa una estructura FIFO. Hereda de Vector e implementa una LIFO.
public boolean empty() public Object peek() //Devuelve el objeto de la cima sin consumirle. //java.util.EmptyStackException si est vaca. public Object pop() //java.util.EmptyStackException si est vaca. public Object push(Object item) public int search(Object o) //Devuelve el nmero de pops necesarios para
obtenerlo. //-1 si no lo encuentra..

31

Ejemplo: Pilas
Ejemplo: Se crea una pila en la que se aaden valores. Se vaca la pila.

import java.lang.System; import java.util.Stack; public class StackApp { public static void main(String args[]){ Stack s = new Stack(); s.push("one"); s.push("two"); s.push("three");
System.out.println("Top of stack: "+s.peek());

while (!s.empty()) System.out.println(s.pop()); }


} 32

Diccionarios
Clase Dictionary
Es una clase abstracta, representa un contenedor en el que almacenar pares clave/valor. Subclases Hashtable y Properties.
public abstract int size() //Nmero de pares que contiene el diccionario. public abstract boolean isEmpty() public abstract Enumeration keys() public abstract Enumeration elements() public abstract Object get(Object key) public abstract Object put(Object key, Object value) //No puede haber claves duplicadas, luego si ya existe la clave se machaca el valor antiguo. public abstract Object remove(Object key)

33

Tablas Hash
Hastable, hereda de Dictionary e implementa

Cloneable. Factor de Carga=Numero EntradasTamao/Capacidad. Cuando se supera el factor de carga se hace rehash. La clave suele ser del tipo String, y debe de tener implementado equals y hashCode (que se heredan de Object). Constructores:
public Hashtable(int initialCapacity, float loadFactor) public Hashtable(int initialCapacity) //loadFactor=0.75 public Hashtable() //loadFactor=0.75

Mtodos:
public boolean contains(Object value) public boolean containsKey(Object key) protected void rehash() public Object get(Object key) public Object put(Object key, Object value)

34

Ejemplo: Tabla Hash


Ejemplo:
import java.lang.System; import java.util.Hashtable; import java.util.Enumeration; public class HashApp { public static void main(String args[]){ Hashtable h = new Hashtable(); h.put("height","6 feet"); h.put("weight","200 pounds"); h.put("eye color","blue"); h.put("hair color","brown"); System.out.println("h: "+h); Enumeration iter = h.keys(); System.out.print("keys: "); while (iter.hasMoreElements())
System.out.print(iter.nextElement()+", ");

while (iter.hasMoreElements())
System.out.print(iter.nextElement()+", ");

System.out.println();
System.out.println("height: +h.get("height")); System.out.println("weight: +h.get("weight")); System.out.println("eyes: +h.get("eye color")); System.out.println("hair: +h.get("hair color")); h.remove("weight"); System.out.println("h: "+h);

} }

System.out.print("\nelements: "); iter = h.elements();

35

Propiedades
Hereda de Hashtable y es persistente, aadiendo mtodos para especificar valores por omisin.
Las claves y valores han de ser Strings.

Constructores
public Properties() public Properties(Properties defaults)

Mtodos
public String getProperty(String key) //Si no lo encuentra y hemos utilizado el 2 constructor busca recursivamente en el Properties pasado por parmetro, si de todas formas no lo encuentra devuelve null. public Object setProperty(String key, String value) //Igual que public abstract Object put(Object key, Object value) heredado de dictionary. public void list(PrintStream out) public void load(InputStream inStream) throws IOException public void save(OutputStream out, String header) //Deprecated public void store(OutputStream out, String header) throws IOException 36

Ejemplo: Propiedades
Ejemplo:Escritura/Almacenamiento de propiedades

Properties tabla; FileOutputStream output; ... tabla=new Properties(); try{ output=new FileOutputStream(miconfig.dat); tabla.store( output, Propiedades de Muestra); output.close(); } catch (IOException e) { System.out.println(Error al guardar las propiedades); throw e; }

37

Ejemplo: Propiedades
Ejemplo:Lectura/carga de propiedades.

Properties tabla; FileInputStream input; ... tabla=new Properties(); try{ input=new FileInputStream(miconfig.dat); tabla.load( input); input.close(); } catch (IOException e) { System.out.println(Error al cargar las propiedades); throw e; }

38

Utilidades Varias. Anlisis de Cadenas Permite dividir una cadena en tokens. Implementa Enumeration, donde recoger los tokens. Necesito una cadena de entrada y otra con los delimitadores, por defecto blancos. Constructores:
public StringTokenizer(String str, String delim,boolean returnTokens) public StringTokenizer(String str, String delim) public StringTokenizer(String str) El tercer argumento opcional es para saber si los delimitadores han de devolverse como otro token (true) o no.

Mtodos

public String nextToken() nextToken public boolean hasMoreElements() hasMoreElements public int countTokens()

39

Utilidades Varias. Nmeros Aleatorios Random, es un generador de nmeros pseudo-aleatorios. El constructor puede tomar como argumento una semilla.
La clase Constructores:
public Random(long seed) Random public Random() { this(System.currentTimeMillis()); } Random

Mtodos:
public int nextInt(int n) nextInt
Devuelve un int distribuido uniformemente a lo largo del rango (0,n-1). public int nextInt() { nextInt(Math.pow(2,32)); } nextInt

public public public public

long float double double

nextLong() //Entre o y 264-1. nextLong nextFloat() //[0,1) nextFloat nextDouble() //[0,1) nextDouble nextGaussian()//Distrib. Gauss nextGaussian setSeed(long seed) setSeed

//centro=0, y devStd=1.
40

public void

Bibliografa
Horstmann, G.S., Cornell, G. Java 2. Fundamentos. Volumen 1. Prentice Hall. 2003.
Captulo 5, Herencia

Horstmann, G.S., Cornell, G. Java 2. Fundamentos. Volumen 2. Prentice Hall. 2003.


Captulo 2, Colecciones

Jaworski, Jamie. Java 1.2 al Descubierto, [Jaworski99]


Captulo 10, Escribir aplicaciones de consola. Captulo 11, Uso de los paquetes Utility y Math.

Sun Enhancements in JDK 5 http://java.sun.com/j2se/1.5.0/docs/guide/lang uage/


41

S-ar putea să vă placă și