Documente Academic
Documente Profesional
Documente Cultură
Recolector de basura
Memoria es liberada automticamente cuando JMV lo determina
Plataforma Java
y Incluye y J2SE Java 2 Standard Edition y J2EE Java 2 Enterprise Edition y Java ME Java APIs para desarrollo de aplicaciones en PDAs y celulares y Compilador Just in time. En lugar de interpretar una instruccin a la vez, interpreta el bytecode completo a cdigo nativo en mquina cuando se carga en MV y Versin y Version actual de Java es normalmente referida a 1.6 o 6.0
Java
Documentacin
http://java.sun.com/developer/onlineTrainin g/
Tutorial J2SE JDK http://java.sun.com/docs/books/tutorial/index.html
http://java.sun.com/javase/6/docs/api/
Programando en Java
y Primer programa
public class Hello { public static void main(String[] args) { System.out.println("Hola mundo"); } }
y Compilador: javac : Traduce archivos .java en .class (bytecodes) y Intrprete: java : dinmicamente ejecuta programa previa
interpretacin de bytecode a cdigo de lenguaje de mquina y Existen ambientes para la creacin, edicin, compilacin y ejecucin: Eclipse, NetBeans, DrJava, etc
esttico
y
Tipos de datos
En Java son 8 y boolean (true o false), char (16 bits set caracteres unicode), byte (8 bits con signo), short (16 bits), int (32 bits), long (64 bits), float (32 bits punto flotante), double (64 bits punto flotante) Tipos no primitivos se conocen como Tipos Objetos
Constantes
y Declaracin y public static final <type> <name> = <value> ; y Ejemplos
public static final int DAYS_IN_WEEK = 7; public static final double INTEREST_RATE = 3.5; public static final int SSN = 658234569;
Control de flujo
y Ciclos y for(), while(), do-while() y Condicionales y If else y switch (expresion){
case n: sentencias; case m: sentencias; default: sentencias; }
Objetos
y Instancias de tipos de datos complejos llamados clases y Entidad que contiene datos y comportamientos y Existen variables, que almacenan datos dentro de un
objeto y Existen mtodos dentro de objeto que representan su comportamiento y Creacin de objetos en Java mediante uso de la palabra reservada new
Variables de referencia
y Variables de tipos de objetos son llamadas referencias y Referencias no almacenan objeto, sino que almacenan
la direccin de una ubicacin en memoria del objeto y Si uno asigna una referencia a otra para referirse al mismo objeto, el objeto no es copiado. Las dos referencias comparten el mismo objeto. Llamando un mtodo en cualquiera de las dos variables modificar el mismo objeto
Mtodos estticos
y
y Tambin podra darse el caso que nos gustara llamar un mtodos antes de crear un objeto
y
Tales mtodos pueden ser declarados estticos: el mtodo no es parte de una instancia sino que de la clase y Se invocan enviando mensaje a la clase y No puede accesar referencia this o cualquier variable o mtodo dentro de un mtodo esttico dado que no est asociado a un objeto
Entrada de datos
Mtodo despliega un dialog y retorna un string ingresado por usuario o nulo si entrada se cancela
Si se desea un entero o real como entrada debe convertirse con Integer.parseInt o Double.parseDouble String input = JOptionPane.showInputDialog(Ingrese su edad); If(input != null) edad = Integer.parseInt(input);
Salida de datos
y Modo texto-ms simple: y Usando System.out.print (ln) y E/S en java es poderosa, pero no tan simple. y Mirar http://java.sun.com/docs/books/tutorial/essential/io/in dex.html
Strings
Strings no inmutables. Una vez creados no se pueden modificar. Si se necesitan strings que se pueden modificar usar clase StringBuffer
Clases
Concretas
Todos sus mtodos definidos Instanciables Pueden ser superclases
Abstractas
Al menos uno de sus mtodos no definidos No instanciables Pueden ser superclases Proporcionan implementacin parcial
Interfaces
Cuando una clase implementa una interfaz promete que implementa comportamientos definidos en interfaz
Como clases abstractas, pero slo permiten declaracin de mtodos sin su implementacin
Se quiere definir/describir (estas caractersticas) solo una vez, sin repetirlas en cada clase Como se relacionan distintas clases con partes comunes del diseo ?
y Relacin es un/una En este caso, una clase define comportamiento general y clases especficas definen comportamiento especfico
y
Herencia
Superclases
Cada clase es un tipo especial de su superclase Referencias this (a la de objeto actual) super (referencia a superclase) Una clase slo puede ser derivada de una superclase Una clase A extends B.
B es superclase de A o A es clase derivada de B
Definen mtodos cuya implementacin es proporcionada por clases que implementan interface public interface X { } Public interface Y{ }
Overloading y Overriding
y Overloading
y Varios mtodos definidos en una clase, todos con
y Overriding
y Usando herencia y Clase A superclase
y
Clase B subclase
y
Excepciones
Cualquier cosa que no funcione bien que podra resultar en una excepcin
Exception es una clase con muchas subclases que permiter capturar diferentes tipos de problemas Usar try y catch para capturar excepciones
try { // sentencias de cdigo que pueden arrojar excepciones, ejemplo divisin por cero } catch (ArithmeticException e) { // codigo que atiende division por cero }
Throws vs throw
throw :
Un objeto puede detectar una excepcin y enviarla como respuesta al mensaje.
throws :
public Object clone() throws CloneNotSupportedException {
Indica que mtodo puede (es posible) enviar excepcion CloneNotSupported. Debe incluirse la lista de excepciones que mtodo podra enviar. Chequeado por compilador
IllegalArgumentException Valor de parmetro es inapropiado NullPointerException El valor del parmetro es null, cuando no debera IndexOutOfBoundsException Arreglo o lista esta fuera de rango FileNotFoundException No encuentra archivo InterruptedException Se produce una excepcin por interrupcin IOException Excepciones producidas en E/S
Paquetes
Clases de java se pueden agrupar en paquetes. Nombres de paquetes separados por . Como java.io.* // clases de E/S y archivos java.util.* // contenedores, date/time, java.lang.* //clases bsicas de java, importadas automticamente
Math, Integer, Double, System, Thread, String, etc
javax.swing.* // clases soporte grfico java.net.* // clases soporte comm en red, sockets, URLs
Para garantizar nombres de paquetes nicos Sun recomienda dar nombres en sentido inverso a dominios en urls Los archivos de paquetes creados deben seguir jerarqua de directorios dados en secuencia dada en nombre paquete cl.udec.inf.sc.pedro : Clases definidas en pedro debe estar en directorio cl/udec/inf/sc/pedro
Importando paquetes
Para importar paquetes de clases ya definidos usar import Ejemplos import java.util.* // incluye un conjunto de contenedores definidos en java como ArrayLists, Vectors, HashMaps, Lists, etc import java.io.* // incluye clases de clases para entrada/salida import java.lang.* // import no necesario Si nombre de clase en un paquete es igual a otra en otro paquete y ambos son importados, de debe usar el nombre de paquete con clase. Ejemplo java.util.Date y java.sql.Date
Creando paquetes
Para poner una clase en un paquete se agrega la sentencia de package nombre paquete
package cl.udec.inf.pedro; public class Cuenta{ } Cuando la sentencia package no se agrega la clase pertenece al paquete por defecto
ArrayList implementa List (usando arreglos) LinkedList implementa List (usando listas enlazadas) HashSet implementa Set (usando tablas hash) TreeSet implementa Set (usando rboles) HashMap implementa Map (usando tablas hash) TreeMap implementa Map (usando rboles)
Arrays pueden contener datos primitivos u objetos mientras que ArrayLists slo objetos Arrays son de tamao fijo, mientras que ArrayLists crecen dinmicamente
Algunos mtodos comunes Add, remove, size, get, contains, indexOf, isEmpty, etc
Ventaja de ArrayList
No se necesita saber tamao a priori
Desventaja
No se puede ocupar la notacin [] para obtener elementos
Vectors
Similar a ArrayLists
Mtodos de acceso sincronizados, luego ms lento Se puede usar notacin [] directamente, adems de una serie de otros mtodos
LinkedLists
Hilos y Sincronizacin
y Hilo y Una secuencia de sentencias de cdigo que puede estar en ejecucin concurrente con otros hilos y Para crear hilos en Java
y y y y y y
Crear una clase que implementa la Clase que implementa interface Runnable
y
Implementar el mtodo run con un loop que ejecute el codigo concurrente deseado. Crear una instancia de clase A Invocar operacin start, la que llama a mtodo run
Creando hebras
/** Opcin 1 */ import java.lang.*; public class A extends Thread { private: public A(){ } public void run() { .... } public static void main(String[] args){ A thread1 = new A(); thread1.start(); } } /** Opcin 2 */ import java.lang.*; public class B implements Runnable { private: public B(){ } public void run() { .... } public static void main(String[] args){ B b = new B(); Thread thread1 = new Thread(b); thread1.start(); } }
Mtodo esttico
y Pasar tareas concurrentes a clase Executor y API para crear y manejar hebras y Proporciona pool de hebras para aplicaciones de gran escala
Sincronizacin
Sincronizacin (2)
Semforos
Desde java 1.5 http://java.sun.com/javase/6/docs/api/
Monitores
Usar keyword synchronized para exclusin mutua en mtodos Hasta java 1.4 slo soportaba una variable de condicin por objeto
wait() y notifyAll() como acciones en variable de condicin (En Java, nica por objeto) Monitor tipo Mesa luego, wait() debe ser encerrado en ciclo while() await(), signal() y signalAll() son los principales mtodos disponibles
Sincronizacin (2)
VOL TILE NCH ONIZED y Volatile es, j to con sync ronize , no de los
ecanis os
de sincronizaci n bsicos de Java. y e tiliza este odificador sobre los atributos de los objetos ara indicar al compilador ue es posible ue dic o atributo vaya a ser modificado por varios t reads de forma simultanea y asncrona, y ue no ueremos uardar una copia local del valor para cada t read a modo de cac , sino ue ueremos ue los valores de todos los t reads estn sincronizados en todo momento, ase urando as la visibilidad del valor actualizado a costa de un pe ue o impacto en el rendimiento.
Sincronizacin (2)
volatile int contador; public void aumentar() { contador++; }
En caso de que necesitemos atomicidad podemos recurrir a synchronized o a cosas ms avanzadas, como las clases del API java.util.concurrent de Java 5. synchronized se diferencia de volatile entre otras cosas en que este modificador se utiliza sobre bloques de cdigo y mtodos, y no sobre variables. Al utilizarsynchronized sobre un bloque se aade entre parntesis una referencia a un objeto que utilizaremos a modo de lock. int contador; public void aumentar() { synchronized(this) { contador++; } } int contador; public void synchronized aumentar() { contador++; } }
volatile
Ventajas Desventajas Memoria de trabajo es limina la concurrencia. reconciliada con la memoria principal cuando se obtiene el bloqueo. Permite concurrencia. Memoria de trabajo es reconciliada con la memoria principal en cada acceso a memoria.