Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cecilia Hernndez
Introduccin a Java
Recolector de basura
Memoria es liberada automticamente cuando JMV lo determina
Plataforma Java
Incluye J2SE Java 2 Standard Edition J2EE Java 2 Enterprise Edition Java ME Java APIs para desarrollo de aplicaciones en PDAs y celulares 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 Versin 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
Primer programa
public class Hello { public static void main(String[] args) { System.out.println("Hola, amigo!!"); } }
Compilador: javac : Traduce archivos .java en .class (bytecodes) Intrprete: java : dinmicamente ejecuta programa previa interpretacin de bytecode a cdigo de lenguaje de mquina Existen ambientes para la creacin, edicin, compilacin y ejecucin: Eclipse, NetBeans, DrJava, etc
Al menos una de las clases debe contener el mtodo main Declaracin de mtodo main debe ser mtodo esttico
Metodo asociado a clase no objeto
Palabras claves tienen significado especial y no pueden usarse como identificadores de variables ni clases ni mtodos
Tipos de datos
Tipos primitivos
Constantes
Declaracin
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
Ciclos
Condicionales
Objetos
Instancias de tipos de datos complejos llamados clases Entidad que contiene datos y comportamientos Existen variables, que almacenan datos dentro de un objeto Existen mtodos dentro de objeto que representan su comportamiento Creacin de objetos en Java mediante uso de keyboard new
Variables de referencia
Variables de tipos de objetos son llamadas referencias Referencias no almacenan objeto, sino que almacenan la direccin de una ubicacin en memoria del objeto 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
Tambin podra darse el caso que nos gustara llamar un mtodos antes de crear un objeto
Tales mtodos pueden ser declarados estticos: el mtodo no es parte de una instancia sino que de la clase Se invocan enviando mensaje a la clase 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
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
Reconocer caractersticas comunes cuando se disea Como se capturan las caractersticas comunes en un diseo?
Se quiere definir/describir (estas caractersticas) solo una vez, sin repetirlas en cada clase Como se relacionan distintas clases con partes comunes del diseo ?
Ejemplo: Un auto tiene-un motor, 4 ruedas, un volante, etc La relacin en este caso es que un objeto tiene un componente que es otro objeto
Relacin es un/una En este caso, una clase define comportamiento general y clases especficas definen comportamiento especfico
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
Overloading
Varios mtodos definidos en una clase, todos con el mismo nombre, pero diferentes argumentos Usando herencia
Clase A superclase
Define mtodo dibujar()
Overriding
Clase B subclase
Redefine mtodo dibujar()
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
Hebras y Sincronizacin
Hebra
Una secuencia de sentencias de cdigo que puede estar en ejecucin concurrente con otras hebras Para crear hebras en Java
Crear una clase que implementa la Clase que implementa interface Runnable
Class A implements Runnable
Implementar el mtodo run con un loop que hace algo en un periodo de tiempo 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(); } }
join
Permite a una hebra esperar por la terminacin de otra Una hebra puede dormir por un tiempo dado
Mtodo esttico
sleep
Sincronizacin
Sincronizacin Keyword synchronized para indicar, bloque o mtodo sincronizado, slo una hebra puede ejecutarse dentro de bloque o mtodo sincronizado Paquete java.util.concurrent Operaciones atmicas: (concurrent.atomic)
Acciones atmicas sobre variables voltiles Variable volatile utilizada para decir a compilador que variable puede ser modificada por mltiples hebras y se necesita ltimo valor almacenado
Locks
Hasta java 1.4 cada objeto tiene un lock asociado Desde java 1.5 construcciones de locks para locks, LectoresEscritores y locks reentrantes
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()
/** Clase que define test de prueba para Problema ProductorConsumidor usando semaforos */ public class TestSemPC { public static void main(String[] args){ QueuePC queue = new QueuePC(new Integer(1)); Producer prod1 = new Producer(queue, new Integer(1)); Consumer cons1 = new Consumer(queue, new Integer(1)); Producer prod2 = new Producer(queue, new Integer(2)); Consumer cons2 = new Consumer(queue, new Integer(2)); Producer prod3 = new Producer(queue, new Integer(3));
prod1.start(); prod2.start(); prod3.start(); cons1.start(); cons2.start(); } }