You are on page 1of 185

C. R.

Derechos reservados

Programacin en Java Introduccin Parte I

Objetivo
Al termino de este curso deber conocer los conceptos bsicos del lenguaje Java para el desarrollo de aplicaciones.

Agenda
Caractersticas de Java JDK Programacin Orientada a Objetos Conceptos bsicos Estatutos de Control Objetos y Clases en Java Ejercicios

Definicin de Java (Sun Microsystems)


The Java programming language is a high-level language that can be characterized by all of the following buzzwords:

Simple and familiar Architecture neutral Object oriented Portable Distributed

High performance Interpreted Multithreaded Robust Dynamic Secure

Caracteristicas de Java
Familiar:
Estrucutra parecida a lenguajes como C++

Simple:
Eliminaron caracteristicas inecesarias del lenguaje C++ y no eran necesarias para aplicar orientacin a objetos (Se elimin: typedefs, define, estructuras y uniones, enumeraciones, funciones, herencia multiple, goto, apuntadores, ajuste automtico valores primitivos.

Caracteristicas de Java
Orientado a Objetos
Encapsulacin Polimorfismo Herencia Construccin Dinamica

Caracteristicas de Java

Arquitectura Neutral Portable

Caracteristicas de Java
Arquitectura neutral, portable

Byte-Codes
Mquina Virtual (JVM) Sistema Operativo Computadora

Caracteristicas de Java
Dinmico
Independencia entre clases. (link) Clases se cargan conforme se van requiriendo

Multi Hilos (Threads)


Sincronizacin Threads Seguros

Rendimiento (Performance)
Just In Time (JIT) compiler

Caracteristicas de Java

JDK (Java Development Kit)

JDK
Bajar la ltima versin del JDK del site de SUN (JDK 1.4.2) www.javasoft.com Instalar el JDK en la mquina Bajar la documentacin Instalar la documentacin Comenzar a programar en Java

Instalacin del JDK


Ejecutar el instalador (j2sdk-1_4_2_06windows-i586-p.exe) Modificar la variable de entorno path (\raiz\jdk\bin\)
Ej: path=%path%;c:\j2sdk1.4.2_06\bin

Modificar la variable de entorno CLASSPATH Ej: CLASSPATH=%CLASSPATH%;.

El primer programa

Ejecucin

Programacin Orientada a Objetos OOP

Es una filosofa para el desarrollo de sistemas basado en el modelado del mundo real a travs de la identificacin de objetos
Surgi inicialmente como un enfoque para la programacin pero se ha extendido a todo el ciclo de desarrollo de sistemas

Programacin Orientada a Objetos

Objeto
Un elemento con estado, comportamiento.
Estado (lo que se sabe del objeto) Nombre, color, raza, contento Comportamiento (lo que puede hacer) Ladrando, durmiendo, corriendo Estado Nmero de llantas, color, marca, modelo Comportamiento Acelerando, frenando, Reparando.

Objetos

Perro

Representa

Objetos de Software

Objetos reales

Objeto (Software)
Estado
Representado por sus Variables

Comportamiento
Modificado por sus Mtodos

Los objetos en programacin representan objetos reales y objetos abstractos (conceptos), ej. Eventos

Objetos de Software

Variables (Estado) API pblica

Application Program Interface

El Objeto Perro
come ladra

Nombre - Fido Color - negro Estado - ladrando

brinca

duerme

Encapsulacin
- Permite ocultar los detalles de la implementacion de un objeto - El usuario solo tiene acceso a la Interfaz

API pblica
Application Program Interface

Encapsulacin
Modularidad
Independencia entre objetos

Transparencia
Publica una interfaz publica Puede cambiar la implementacin sin afectar su utilizacin

A veces se hacen pblicas las variables y se esconden algunos mtodos por razones de eficiencia

Mensajes
Permiten la interaccin entre objetos Mandar a ejecutar un mtodo

Mensaje
Acelera, frena, etc.

Parmetros
A veces los mtodos necesitan ms informacin para realizar una accin Esta informacin adicional se pasa en forma de parmetros

enciende

enciende (%)

Mensajes
Expresan el comportamiento de un objeto, cambiando el estado de ste Ocultan la necesidad de exponer las variables Los objetos pueden estar en procesos y/o mquinas diferentes

Mensajes
Objeto destino Nombre del mtodo a ejecutar Parmetros necesarios

focoSala.enciende(porcentaje)

Clases
Prototipo de objetos Definen las variables y mtodos comunes para todos los objetos

Clases y Objetos
Los objetos son ejemplares (instancias) de clases Los objetos de una clase comparten el comportamiento (mtodos) Cada objeto tiene su propio estado (variables)

Variables y Mtodos de Clase


De ejemplar (instancia)
Se crea una copia particular de las variables y se tiene acceso a los mtodos

De clase
Todos los objetos de una clase comparten la misma copia No se necesita crear un objeto para el acceso a variables y mtodos Si un objeto cambia una variable de clase, esa variable se cambia para todos los objetos de la clase

Variables y Mtodos de Clase


Ejemplo
Clase Perro Objeto Perro Fido

Objeto Perro cuco

Abstraccin
La abstraccin se refiere a quitar las propiedades y acciones de un objeto que no son necesarias para el sistema.

Herencia
Especializacin de una clase Subclases se definen con base en Superclases La subclase hereda las variables y mtodos de la superclase La subclase define sus propias variables y mtodos los cuales se agregan a los de la superclase

Herencia
Televisin
Televisin Blanco y negro Televisin color Televisin stereo

Televisin Pantalla Plana

Una subclase puede redefinir (override) mtodos heredados, para que realicen algo diferente o en diferente forma

Herencia

Esquema jerrquico Reutilizacin de cdigo Una super clase puede guardar una referencia a una subclase, Por ejemplo:
Una televisin puede almacenar una instancia de una televisin a color

Conceptos Bsicos Java

Palabras reservadas
Palabras con funcionalidad especifica en Java. No pueden Ser utilizadas como identificadores

Variables
Un objeto guarda su estado en variables. Una variable es un espacio en memoria que sirve para almacenar informacin El tamao de el espacio en memoria vara dependiendo de la informacin que se desea guardar.

Variables
Identificador legal con carcteres unicode (65,536 posibles, 34,168 asignados) Debe iniciar con letra (A-Z,a-z) No debe ser palabra reservada Convencin:
Primera letra minscula y cada palabra subsiguiente comienza con mayscula, sin espacios (variableDeVariasPalabras) Constantes todas en mayuscula separando las palabras cor el carcter _ (EJEMPLO_CONSTANTE)

Variables
Declaracin de Variables:
tipo_dato lista_de_variables;
Donde lista_de_variables puede ser el nombre de una variable o una lista separada por coma.

Ejemplos:
int edad, semestre, matricula; boolean encontrar; char sigla;

Tipos de datos primitivos


Tipo Tamao Descripcin entero complementos a 2 entero complementos a 2 entero complementos a 2 entero complementos a 2 punto flotante prec. sencilla punto flotante prec. doble Unicode, entero sin signo true/false

byte short int long float double char boolean

8 bits 16 bits 32 bits 64 bits 32 bits 64 bits 16 bits

Literales
Una literal es una representacin en cdigo de los tipos de dato primitivos, por ejemplo:
b //literal para char 42 //literal para int false //literal para boolean 2453.345 //literal para double

Literales
Enteros: Se pueden representar de 3 formas:
Decimal (base 10): smbolos del 0 al 9
int longitud = 345;

Octal (base 8): smbolos del 0 al 7. Se antepone un 0 al inicio


int longitud = 010;

Hexadecimal (base 16): Utiliza 16 simbolos diferentes(0 al 9 adems de las letras A, B, C, D, E).
int longitud = 0X10

Por default todos son tipo entero. Si se quieren definir como long se tendr que agregar al final la letra L.

Literales
Punto Flotante
Representacin decimal
double d = 112424.3453;

Por default las literales de punto flotante son double. si se quiere representar como float es necesario agregar una F al final del nmero
float f = 1234.35F;

Literales
Literales boolean
Pueden tener solo el valor de true o false.
boolean t=true; boolean f=false;

Literales
Literales char
Carcter entre comilla simple
char a = a;

Para valores Unicode se antepone el carcter de escape \u, seguido de el cdigo en Hexadecimal
char a = \u004E //Letra N

Debido a que el char es en realidad un entero sin signo de 16 bits, es posible asignarle un valor entero.
char a = 16;

Literales
Strings
El valor de un String se puede representar como Literal.
String letrero = Letrero

El operador + es el nico operador sobrecargado en Java. Sirve para concatenar Strings


String letrero = Parte 1 + Parte 2;

Operadores
Unitarios
Requiere solo un operando, prefijo o postfijo

Binarios
Dos operandos, infijo

Ternarios
Tres operadores expresin ? op1 : op2

Operadores aritmticos
Operador + * / % + ++ ++ --Uso
op1+op2 op1-op2 op1*op2

Descripcin Suma Resta Multiplicacin Divisin Residuo de op1 / op2 Promueve a int si es byte, short o char Regresa el valor negado de op Incrementa a op en 1, se evalua antes del incremento Incrementa a op en 1, se evalua despus del incremento Decrementa a op en 1, se evalua antes del incremento Decrementa a op en 1, se evalua antes del incremento

op1/op2
op1%op2 +op -op op++ ++op op---op

Ejemplos
class Aritmeticos { public static void main int x = 17, y = 5; System.out.println("x System.out.println("y System.out.println("x System.out.println("x System.out.println("x System.out.println("x System.out.println("x } } (String args[]) { = = + * / % " " y y y y y + + = = = = = x); y); " + " + " + " + " +

(x (x (x (x (x

+ * / %

y)); y)); y)); y)); y));

Salida a pantalla

x = 17 y=5 x + y = 22 x - y = 12 x * y = 85 x/y=3 x%y=2

Ejemplos
class Incrementos { public static void main (String args[]) { int x = 8, y = 13; System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("++x = " + ++x); System.out.println("y++ = " + y++); System.out.println("x = " + x); System.out.println("y = " + y); } } x = y = ++x y++ x = y = 8 13 = 9 = 13 9 14

Salida a pantalla

Operadores relacionales
Regresan un valor booleano (true o false)
Operador Uso
op1>op2
op1<op2 op1>=op2 op1<=op2 op1==op2 op1!=op2

Descripcin

> < >= <= == !=

Regresa verdadero si op1 es mayor que op2 Regresa verdadero si op1 es menor que op2 Regresa verdadero si op1 es mayor o igual que op2 Regresa verdadero si op1 es menor o igual que op2 Regresa verdadero si op1 es igual a op2 Regresa verdadero si op1 es diferente a op2

Ejemplos
class Relacionales { public static void main (String args[]) { int x = 7, y = 11, z = 11; System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("z = " + z); System.out.println("x < y = " + (x < y)); System.out.println("x > z = " + (x > z)); System.out.println("y <= z = " + (y <= z)); System.out.println("x >= y = " + (x >= y)); System.out.println("y == z = " + (y == z)); System.out.println("x != y = " + (x != z)); } }

Salida a pantalla

x y z x x y x y x

= 7 = 11 = 11 < y = true > z = false <= z = true >= y = false == z = true != y = true

Operadores Logicos
Regresan un valor booleano (true o false)
Operador && || ! & | ?:
int int int int int int a b c d e f = = = = = =

Uso
op1&&op2

Descripcin

AND lgico, condicionalmente evalua op2 op1||op2 OR lgico, condicionalmente evalua op2 !op Niega lgicamente a op op1&op2 AND lgico, siempre evalua op2 op1|op2 OR lgico, siempre evalua op2 Evalua exp y regresa op1 si es verdadera exp?op1:op2 o regresa op2 si exp es falsa
28; 4; 45; 0; (b == 0) ? 0 : (a / b); (d == 0) ? 0 : (c / d);

e=7 f =0

Operadores Logicos
public class ShortCut { public static void main (String args[]){ if ((esMenor(3)) || (esMenor(9))) { System.out.println("Resultado es true"); } } public static boolean esMenor(int i) { if (i < 5) { System.out.println(i +" menor que 5"); return true; } else { System.out.println(i + " mayor que 5"); return false; } } }

Salida

3 menor que 5 Resultado es true

Operadores Logicos
public class ShortCut { public static void main (String args[]){ if ((esMenor(3)) | (esMenor(9))) { System.out.println("Resultado es true"); } } public static boolean esMenor(int i) { if (i < 5) { System.out.println(i +" menor que 5"); return true; } else { System.out.println(i + " mayor que 5"); return false; } } }

Salida

3 menor que 5 9 mayor que 5 Resultado es true

Operadores de bit
Operador >> << >>> & | ^ Uso
op1>>op2 op1<<op2

Descripcin Recorre los bits de op1 hacia la derecha op2 bits Recorre los bits de op1 hacia la izquierda op2 bits Recorre a la derecha, pero sin signo AND lgico, bit a bit OR lgico, bit a bit XOR lgico, bit a bit Complementa op, bit a bit

op1>>>op2
op1&op2 op1|op2 op1^op2

~op

Ejemplos
class Shift { public static void main (String args[]) { int x = 7; System.out.println("x = " + x); System.out.println("x >> 2 = " + (x >> 2)); System.out.println("x << 1 = " + (x << 1)); System.out.println("x >>> 1 = " + (x >>> 1)); System.out.println("12 & 13 = "+ (12 & 13)); } }

Salida a pantalla

x=7 x >> 2 = 1 x << 1 = 14 x >>> 1 = 3 12 & 13 = 12

Operadores de asignacin
Operador = += -= *= /= %= &= |= ^= <<= >>= >>>= Uso
op1=op2 op1+=op2 op1-=op2

Equivalente a op1 = op1 + op2 op1 = op1 - op2 op1 = op1 * op2 op1 = op1 / op2 op1 = op1 % op2 op1 = op1 & op2 op1 = op1 | op2 op1 = op1 ^ op2 op1 = op1 << op2 op1 = op1 >> op2 op1 = op1 >>> op2

op1*=op2
op1/=op2 op1%=op2 op1&=op2 op1|=op2 op1^=op2 op1<<=op2 op1>>=op2 op1>>>=op2

Prioridad de Operadores

Expresiones
Se forman utilizando operadores relacionales y lgicos y se evalan de acuerdo a la prioridad de los operadores involucrados.
Ejemplo Expresiones Lgicas:
5 > 3 && 7 == 0 int x = 10+8*2; int x = (10+8)*2; false Resultado x=26 Resultado x=36

Ejemplo Expresiones Aritmticas:

Cast datos primitivos


Realizar un Cast permite convertir datos primitivos de un tipo a otro. Existen 2 tipos:
Implcito Explcito

Casting Implcito
Se realiza de forma automtica cuando un tipo de menor capacidad se asigna a un tipo de mayor capacidad, tambin llamado promocin numrica.
byte -> short -> int -> long -> float -> double

Ejemplo:
double n; int x = 7; n= x / 3;

Resultado n=2

Casting Explcito
Es necesario utilizar un operador de tipo cast.
Ejemplo:
double n; int a = 7; n = (double) a / 3; Resultado n = 2.333

Ejemplo: double n; int a = 7; n = (double) (a / 3);


Resultado n = 2.0

Estatutos Secuenciales
Un estatuto forma una unidad completa de ejecucin.
Estatutos de declaracin:
double valor=10;

Estatutos de expresiones:

valor = 8933.234; //asignacin valor++; //incremento System.out.println(valor); //llamadas a mtodo Integer integer = new Integer(4); //Creacin de Objetos

Estatutos de Control
Decisin (seleccin) se ejecuta un bloque de cdigo de acuerdo a la condicin.
Repeticin (ciclo) se repite la ejecucin de un bloque de cdigo de acuerdo a una condicin.

Estatutos de Control
Condicionales: Se utilizan estatutos condicionales cuando se tienen varias alternativas de ejecucin.
if - else switch

Ciclos: Se utilizan cuando se desea repetir un bloque de estatutos una o ms veces.


while do - while for

Bloque de Cdigo
Grupo de cero o ms estatutos. Se delimita entre llaves ( { } ) Una variable declarada dentro de un bloque de cdigo, solo puede ser utilizado en el mismo.
Ejemplo: { int x = 10; System.out.println(x) } System.out.println(x); Error Bloque

Comentarios
Para agregar comentarios dentro del cdigo de Java se utilizan 2 metodos
Comentarios de una sola lnea: 2 diagonales (//) seguido del comentario deseado. Comentarios de varias lneas: Comienzan con /* y para indicar el final del comentario */

//comentarios 1 lnea //se repiten las diagonales //por cada rengln

/*comentarios varias lneas Se marca solo el inicio y el fin, pueden ser N lneas */

int x = 10; System.out.println(x) } }

int x = 10; System.out.println(x)

Estatutos de Control

if - else
La forma bsica del estatuto If es la siguiente:
if (expresinBooleana) { System.out.println(Dentro del estatuto"); }

La expresin booleana puede ser cualquier combinacin de operadores que al ser evaluados se obtenga como Resultado true o false El bloque else es opcional, se ejecuta en caso de que la expresin booleana regrese false
if (x > 3) { System.out.println("x mayor a 3"); } else { System.out.println("x no es mayor a 3"); }

if - else
Si no utilizamos las llaves ({ }), solamente el primer estatuto ser considerado para el estatuto
if (x > 3) y = 2; z += 8; a = y + x;

Se ejecuta dependiendo de la condicin Siempre se ejecuta


if (precio < 300) { comprarProducto(); } else if (precio < 400) { obtenAprovacion(); } else { noComprar(); }

Ifs Anidados

if - else
OJO
if (examen.terminado()) if (examen.obtenCalificacion() < 0.61) System.out.println(Intenta en segundas); else //A que if pertenece ??? System.out.println(Felicidades);

Recomendacin
if (examen.terminado()){ if (examen.obtenCalificacion() < 0.61){ System.out.println(Intenta en segundas); } else{ System.out.println(Felicidades); } }

if - else
OJO
boolean boo = false; if (boo = true) { System.out.println(Siempre entra); }

Notas:
Expresiones ilegales int x = 1; if (x) { } if (0) { } if (x = 6) Forma Legal int x = 1; if (x == 1) { } if (false) if (x == 6)

if - else
if (Condicin) Estatuto1; if (Condicin) Estatuto1; else Estatuto2; if(condicin){ ____; ____; } else if (condicin2){ ____; ____; } else{ ____; ____; }

if (Condicin){ _____; _____; : : }else{ _____; _____; : : }

switch
switch (Expresin) { case Constante1: Estatutos1; break; case Constante2: Estatutos2; break; : : default: Estatutos; break; }

Expresin debe ser char, byte, short o int Las constantes deben de ser del mismo tipo que la expresin break es opcional, si no se utiliza se ejecutan todos los estatutos despus del primer case que coincida con la expresin default maneja todos los casos que no estn contamplados en los case, es opcional No puede haber dos constantes iguales Solamente puede existir un default

Ejemplo
int x = 2; switch (x) { case 1: System.out.println(x es igual a 1"); break; case 2: System.out.println("x es igual a 2"); break; case 3: System.out.println("x es igual a 3"); break; default: System.out.println(Fuera de rango"); }

Resultado x

es igual a 2

Ejemplo 2
OJO
int x = 2; switch (x) { case 1: System.out.println(x es igual a 1"); break; case 2:

System.out.println("x es igual a 2");


case 3: System.out.println("x es igual a 3"); break; default: System.out.println(Fuera de rango"); }

Falta break

Resultado

x es igual a 2 x es igual a 3

Ejemplo 3
final int uno=1; final int dos=2; final int tres=3; int x = 2; switch (x) { case uno: System.out.println(x es igual a 1"); break; case dos: System.out.println("x es igual a 2"); break; case tres: System.out.println("x es igual a 3"); break; default: System.out.println(Fuera de rango"); }

Resultado x

es igual a 2

while
3
while (condicin) estatuto;

1 Condicin

Estatutos

while (condicin){ estatuto1; estatuto2; : : }

4
Pasos de ejecucin: 1. Evala la condicin Si es verdadera ir al paso 2. Si es falsa ir al paso 4 2. Ejecuta el o los estatutos 3. Ir al paso 1 4. Fin del ciclo

Ejemplo while
Ejemplo: Sumar los nmeros 1, 2, 3, 4, 5, 6, ... n
int i = 1, suma = 0; // Inicializacin while ( i <= n ) // Condicin del ciclo { // Inicio del cuerpo del ciclo suma+= i; i++; // Estatuto que modifica la //condicin } // Fin del cuerpo del ciclo

do - while
do estatuto; while (condicin); do{ estatuto1; estatuto2; : : }while (condicin);

Estatutos
2

Condicin
Pasos de ejecucin: 1. Ejecuta el o los estatutos 2. Evala la condicin Si es verdadera ir al paso 1 Si es falsa ir al paso 3 3. Fin del ciclo

Ejemplos
int i = 0; int n = 10; while (i<n){ System.out.println(i= +i); i++; } i= 0 i= 1 : : i= 9

int i = 0; int n = 10; do{ System.out.println(i= +i); i++; } while (i<n);

i= 0 i= 1 : : i= 9

for (asignacin inicial; condicin booleana; expresin de iteracin) estatuto; for (asignacin inicial; condicin booleana; expresin de iteracin){ estatuto1; estatuto2; : :

for

La asignacin inicial se realiza una sola vez. Se pueden inicializar 0, 1 o ms variables (separado por comas) La condicin (Expresin booleana) se evalua al principio de cada ciclo, si es verdadera ejecuta los estatutos y vuelve a hacer la evaluzacin, si es falsa termina y se sale La expresin de iteracin puede actualizar 0,1 o ms variables, separado por comas Cualquiera de los componentes puede ser estatuto vacio

Ejemplos
int i; int n=10; for (i=1;i<n;i++) System.out.println(i= "+i);

i= 1 i= 2 : : i= 9

int i,j; int n=10; for (i=j=1;i*j<n;i++,j++){ System.out.println("i= "+i+" j= "+j); System.out.println("i*j= "+i*j); }

i= 1 i*j= i= 2 i*j= i= 3 i*j=

j= 1 1 j= 2 4 j= 3 9

break
Brinca al final de los estatutos del ciclo y continua con la siguiente instruccin

int i=0; int n=10; do{ System.out.println(i= "+i); if (i>n) break; i++; }while(true);

i= 0 i= 1 : : i= 11

continue
Brinca al final del ciclo, pero evalua la condicin para saber si continua iterando
int i=0; int n=10; do{ i++; if (i%2!=0) continue; System.out.println(i= "+i); }while(i<n); i= i= i= i= i= 2 4 6 8 10

break - ciclos anidados


for(int i=0; i<2; i++) { for (int j=i;j < 2;j++) { if(j==0){ break; } System.out.println("Hola"); } // ciclo interno System.out.println("Ciclo externo."); } // ciclo externo System.out.println("Adios");

Resultado

Ciclo externo. Hola Ciclo externo. Adios

Ciclos Etiquetados
externo: for(int i=0; i<10; i++) { while (i < 7) { System.out.println("Hola"); break externo; } // ciclo interno System.out.println("Ciclo externo."); // Nunca entra } // ciclo externo System.out.println("Adios");

Resultado

Hola Adios

Objetos y Clases en Java

Creacin de Objetos
Se divide en 3 secciones:
Declaracin
No crea el objeto, slo notifica al compilador el tipo de la variable

Creacin
Crear un ejemplar (instancia) de una clase

Asignacin de valor inicial (inicializacin)


Por medio de constructores

Declaracin
Tipo nombre;

Clase o interfaz

variable (el valor es una referencia)

Creacin del objeto


Crear un ejemplar (instanciacin) de una clase
new Clase (parmetros) en caso necesario (opcionales) Crea el objeto y regresa una referencia (Separa la memoria para almacenarlo) Constructor de la clase (mtodo con el mismo nombre)

Inicializacin del objeto


Por medio de constructores

nombre = new Clase (parmetros);

apunta a la localizacin de un objeto de Clase

Todo en una instruccin

Clase variable = new Clase();

Constructor
Rectangulo r = new Rectangulo(10,20,300,200); Constructor con parametros de inicializacin

Clases
Son el prototipo de los Objetos Se pueden declarar varias clases en un archivo pero solamente puede haber una pblica El nombre de la Clase pblica tiene que ser igual a el nombre del archivo con que se grabe.

Ejemplo:
class MiClase { }

public class Rectangulo{ int x, y; int ancho, alto; public Rectangulo(){ x = 0; y = 0; ancho = 100; alto = 100; } public void mueve(int x, int y){ this.x = x; this.y = y; } public void cambiaTamano(int ancho, int alto){ this.ancho = ancho; this.alto = alto; } protected void finalize () throws Throwable{ x = null; y.close(); super.finalize();

Declaracin

Variables

Cuerpo

Constructor

Mtodos

Limpieza

}
}

Paquetes
Las clases de Java estan organizadas en paquetes. Cada paquete corresponde a una carpeta en la computadora Ayuda a tener organizado el cdigo en proyectos grandes
Ejemplo:
Varios programadores en un proyecto, si crean una clase llamada Utilerias habra problemas al juntar los modulos. Al organizarlo en paquetes evitamos este tipo de problemas.

Paquete
SUN recomienda seguir la siguiente estructura de paquetes:
Dominio reservados.nombre de proyecto.modulo de proyecto Ejemplo:
Paquete: com.mecasa.sipre.contabilidad

Estructura en disco:

Importar paquetes
Si una clase requiere crear objetos de otro paquete, es necesario especificarle al compilador en que paquetes buscar la clase.
package edu.uanl.estudiantes; public class Estudiante { } package edu.uanl.maestros; import edu.uanl.estudiantes.Estudiante; import edu.uanl.estudiantes.*; public class Maestro{ . . . }

public class Rectangulo{ int x, y; int ancho, alto; public Rectangulo(){ x = 0; y = 0; ancho = 100; alto = 100; } public void mueve(int x, int y){ this.x = x; this.y = y; } public void cambiaTamano(int ancho, int alto){ this.ancho = ancho; this.alto = alto; } protected void finalize () throws Throwable{ x = null; y.close(); super.finalize();

Declaracin

Variables

Cuerpo

Constructor

Mtodos

Limpieza

}
}

Declaracin de Clases
modificador class UnaClase extends Superclase implements Interfaz{}

Modificadores De acceso (default, public) De comportamiento (abstract, final) extends identifica superclase implements identifica interfaz que se debe de implementar

Declaracin - Acceso a Clases


Clase A tiene acceso a Clase B, se refiere a:
Clase A puede crear instancias (Objetos) de la clase B Clase A puede extender a la clase B (Herencia) Accesar sus metodos, dependiendo de los modificadores de acceso de los mismos.

Declaracin Acceso Default


Cuando a una clase no se le especifica su nivel de acceso se dice que su acceso es nivel default o nivel de paquete Solamente clases del mismo paquete pueden accesar a esta clase
Ejemplo:

package edu.uanl.estudiantes; class Estudiante { }

package edu.uanl.maestros; import edu.uanl.estudiantes.Estudiante;

class Maestro{ //NO podra crear instancias de estudiante }

Declaracin Acceso Publico


Se antepone la palabra public a la clase Todas las clases podrn crear instancias de la clase

package edu.uanl.estudiantes; public class Estudiante { }

package edu.uanl.maestros; import edu.uanl.estudiantes.Estudiante; class Maestro{ //PODR crear instancias de estudiante }

Declaracin - Comportamiento
final
Una clase con un modificador final no puede tener subclases

abstract
Una clase abstracta no puede instanciarse. Su proposito es solo para generar subclases. Sirve para especificar el comportamiento de sus subclases

Extends
La palabra reservada extends sirve para especificar la super clase. La subclase hereda todas las funciones y metodos de la super clase
public abstract class Fruta { . . }

public class Manzana extends Fruta { . . }

Cuerpo
Constructores Mtodos Variables finalize()

Las variables y mtodos de una clase son llamados miembros de la clase. Los constructores no son mtodos, no son miembros

public class Rectangulo{ int x, y; int ancho, alto; public Rectangulo(){ x = 0; y = 0; ancho = 100; alto = 100; } public void mueve(int x, int y){ this.x = x; this.y = y; } public void cambiaTamano(int ancho, int alto){ this.ancho = ancho; this.alto = alto; } protected void finalize () throws Throwable{ x = null; y.close(); super.finalize();

Declaracin

Variables

Cuerpo

Constructor

Mtodos

Limpieza
}

Constructores
Mismo nombre de la clase Puede haber ms de uno (sobrecarga) Inicializacin del objeto Opcional Pueden tener variables locales, ciclos y otros estatutos

Especificadores de acceso para constructores


private
Ninguna otra clase puede crear una instancia de esta clase.

protected
Slo subclases de esta clase pueden crear instancias

public
Todas las clases pueden crear instancias de esta clase

package
Slo clases del mismo paquete puede crear instancias de esta clas. Este caso se da cuando no se especifica ninguno de los otros niveles de acceso.

Ejemplo
package figuras; public class Rectangulo{ public Rectangulo(int alto, int ancho){ //Cualquier clase puede declarar rectangulos //Especificando su ancho y alto } Rectangulo(int alto, int ancho, int posicionX, int posicionY){ //Solo clases del mismo paquete pueden //Inicializar el rectangulo con } } public class Utilerias { Utilerias(){ Rectangulo rect=new Rectangulo(10,10, 0, 5); } }

Error

public class Rectangulo{ int x, y; int ancho, alto; public Rectangulo(){ x = 0; y = 0; ancho = 100; alto = 100; } public void mueve(int x, int y){ this.x = x; this.y = y; } public void cambiaTamano(int ancho, int alto){ this.ancho = ancho; this.alto = alto; } protected void finalize () throws Throwable{ x = null; y.close(); super.finalize();

Declaracin

Variables

Cuerpo

Constructor

Mtodos

Limpieza
}

Declaracin de variables
[nivel de acceso] [atributos] tipo nobre;

Son declaradas dentro de una clase Nivel de acceso


public, protected, default (package), private

Atributos
static, final, transient, volatile

Especificadores de acceso para variables


private
Solo pueden ser accesadas dentro de la clase donde son definidas

protected
Slo la clase donde son definidas, subclases de sta y clases del mismo paquete pueden accesar a estas variables

public
Todas las clases pueden accesar a estas variables

package
Slo clases del mismo paquete pueden accesar estas variables, no sublclases, es especificador por omisin

Atributos de una variable


static
variable de clase (no de instancia)

final
Valor de la variable no puede cambiar (constante)

transient
Variable no debe ser serializada

volatile
El compilador no efectua ciertas optimizaciones

Uso de this
Indica este objeto Sirve para diferenciar variables miembro de parmetros con el mismo nombre Est implcito en todos los miembros de la clase Tambin se puede usar en mtodos
public class Rectangulo{ int x; int y; public Rectangulo(int x, int y){ this.x = x; this.y = y; ancho = 100; alto = 100; } }

Ejemplo - Variable publica


class Zoo { public String variable="Gallo"; public int x=4; } class Moo { public Moo() { Zoo z = new Zoo(); System.out.println("Variable de Zoo " + z.variable); z.variable="Pato"; System.out.println("Variable modificada " + z.variable); }

}
Variable de Zoo Gallo Variable modificada Pato

Resultado

Ejemplo - Variable privada


class Zoo { private String variable="Gallo"; public int x=4; } class Moo { public Moo() { Zoo z = new Zoo(); System.out.println("Variable de Zoo " + z.variable); z.variable="Pato"; System.out.println("Variable modificada " + z.variable); }

}
Variables.java:19: variable has private access in Zoo System.out.println("Variable de Zoo " + z.variable); ^

Ejemplo - static
class Zoo { public static String variable="Gallo"; public String v2="Perro"; }

class Moo { public Moo() { Zoo z1 = new Zoo(); Zoo z2 = new Zoo();
z1.variable="Pato"; z1.v2="Gato"; System.out.println("Variables z1 " + z1.variable+" "+z1.v2); System.out.println("Variables z2 " + z2.variable+" "+z2.v2); System.out.println("Variable estatica "+Zoo.variable); } }

Variables z1 Pato Gato Variables z2 Pato Perro Variable estatica Pato

Ejemplo - final
class Zoo { public final String variable="Gallo"; public String v2="Perro"; } class Moo { public Moo() { Zoo z1 = new Zoo(); Zoo z2 = new Zoo(); z1.variable="Pato"; z1.v2="Gato"; System.out.println("Variables z1 " + z1.variable+" "+z1.v2); System.out.println("Variables z2 " + z2.variable+" "+z2.v2); } }

Variables.java:18: cannot assign a value to final variable variable z1.variable="Pato";

Metodos
Todas las variables declaradas dentro del mtodo son variables locales. Casi todos los mtodos tiene una lista de parmetros que permiten comunicar informacin entre mtodos. Los parmetros tambin son variables locales al mtodo.

Mtodos
Un mtodo o funcin es un segmento de programa que realiza una accin en especfico.
Nivel de Acceso
Declaracin public static int convierte(String s) throws NumberFormatException{ int valorFinal=0; . . }

Atributos

Tipo que regresa

Nombre

Parmetros

Throws Exceptions

Variables locales

Cuerpo

Metodos - Declaracin
Nivel de acceso Nombre de la funcin Atributo Exepciones

public static int convierteEntero(String s) throws NumberFormatException{ //

Tipo de regreso

Parametros

Especificadores de acceso para mtodos


private
Solo pueden ser accesados dentro de la clase donde son definidos

protected
Slo la clase donde son definidos, subclases de sta y clases del
mismo paquete pueden accesar a estos mtodos

public
Todas las clases pueden accesar a estos mtodos

package
Slo clases del mismo paquete pueden accesar estos mtodos, no

sublclases, es especificador por omisin

Ejemplos Public, Private


class CarroDeportivo{ public void acelerar(){ } public void activaPilotoAutomatico(){ pilotoAutomatico(); } private void pilotoAutomatico(){ } } class Convertible extends CarroDeportivo{ public void operaAuto(){ acelerar(); //Herencia CarroDeportivo carro=new CarroDeportivo(); carro.acelerar(); //Instancia } public void hazCosas(){ pilotoAutomatico(); class Conductor{ public void maneja(){ CarroDeportivo carro=new CarroDeportivo(); carro.acelerar(); //Correcto carro.pilotoAutomatico(); //Error (privado) } }

//Herencia Error (privado)

CarroDeportivo carro=new CarroDeportivo(); carro.pilotoAutomatico(); //Instancia - Error } }

Ejemplo Protected
package autos; public class Carro{ public void acelerar(){} protected void enfriarMotor(){} } package autos; //Mismo paquete public class Compacto { public Compacto(){ Carro carro=new Carro(); carro.enfriarMotor(); } }

package autos.deportivos; import autos.*; public class CarroDeportivo extends Carro{ public CarroDeportivo(){}; public void operaAuto(){ acelerar(); enfriarMotor(); Carro carro=new Carro(); carro.acelerar(); carro.enfriarMotor(); } } package autos.deportivos;

//Herencia //Herencia //Instancia //Instancia - Error Protegido, acceso desde otro paquete

public class Convertible { public Convertible(){ CarroDeportivo carro=new CarroDeportivo(); carro.enfriarMotor(); } }

Al heredar funciones protegidas, la subclase las hereda como privadas

Atributos de mtodos
static
Mtodo de clase y no de instancia

abstract
No tiene implementacin. Debe de pertencer a una clase abstract

final
No puede ser reprogramado (overriden)

native
Escrito en otro lenguaje, cdigo especfico para una plataforma
http://java.sun.com/docs/books/tutorial/native1.1/index.html

synchronized
Para ser usado por threads y no causar problemas tpicos de multiproceso

Ejemplo - Abstract
Clase abstracta
package autos; public abstract class Vehiculo { abstract void acelerar(); abstract void enfriarMotor(); public void mostrarTemepratura(){ //Implementacion } }

Primer subclase no abstracta tiene que implementar todas las funciones abstractas de la superclase

package autos; public class Carro extends Vehiculo{ public void acelerar(){ //Implementacion } protected void enfriarMotor(){ //Implementacion } }

Ejemplo - Abstract
Clase abstracta package autos;
public abstract class Vehiculo { abstract void acelerar(); abstract void enfriarMotor(); public void mostrarTemepratura(){ //Implementacion } }

Subclase abstracta. No tiene que implementar los mtodos.

package autos; public class abstract Carro extends Vehiculo{ public void acelerar(){ //Implementacion } }

Ejemplo - Static
public class Empleado { private static int numEmpleados = 0; public Empleado() { incrementa(); } private static void incrementa() { numEmpleados++; } public static void despliegaNum() { System.out.println(" Numero de empleados = " + numEmpleados); } }

public class PruebaEmpleado{ public static void main(String args[]){ new Empleado(); Empleado.despliegaNum(); } }

Resultado
Numero de empleados = 1

Ejemplo - Static
public class Empleado { private static int numEmpleados = 0; private String nombre; public Empleado() { incrementa(); } private static void incrementa() { numEmpleados++; } public static void despliegaNum() { nombre=""; System.out.println(" Numero de empleados = " + numEmpleados); } }

Desde una funcin estatica no es posible mandar utilizar variables de instancia, solamente de clase.

Sobrecarga de mtodos
Varios mtodos pueden compartir el mismo nombre, deben de diferir en el nmero y/o tipo de parmetros

public int suma (int a, int b){}

public double suma (double a, double b){}


public void suma (){}

Redefinicin de mtodos
Una clase puede reemplazar (override) un mtodo de su superclase
El mtodo debe ser exactamente igual (tipo de regreso, nombre y parmetros), slo cambia la implementacin

Los mtodos final y static no se pueden reprogramar


Los mtodos abstract de una superclase se deben de reprogramar

Ejemplo
package autos; public abstract class Vehiculo { abstract void acelerar(); abstract void enfriarMotor(); public void mostrarTemepratura(){ System.out.println("Temperatura de Vehiculo"); } } package autos; public class Carro extends Vehiculo{ public void acelerar(){ //Implementacion } protected void enfriarMotor(){ //Implementacion } public void mostrarTemepratura(){ System.out.println("Temperatura de Carro"); } public void mostrarTemperaturaVehiculo(){ super.mostrarTemepratura(); } }

La palabra reservada super, nos permite mandar llamar funciones de la superclase

Variables locales
Son las variables declaradas en un mtodo e inicializadas en un mtodo. Su tiempo de vida es desde que comienza el mtodo hasta que termina. Es posible declarar variables locales con el mismo nombre que variables de instancia. Una variable local es posible declararla como final

Ejemplos
public class Empleado { private boolean activo=true; public void calculaSueldo(){ boolean activo=this.activo; double sueldoBase=10000; double prestaciones=5000; String leyendas=""; . . activo=false; this.activo=false; } }
OJO, mismo nombre que variable de instancia.

Qu variable se modific ???

Valores de retorno
Valor de retorno

public static int convierteEntero(String s) throws NumberFormatException{ }

Al declarar un metodo se debe especificar un valor de retorno. El valor de retorno puede ser cualquier tipo de dato, ya sea primitivo u objetos. Si la funcin no regresa ningn valor se utiliza la palabra reservada void.

Regresando un valor
En el cuerpo de la funcin se utiliza el operador return para regresar algn valor.

Cuando se manda llamar el operador return no se continua ejecutando el resto de los estatutos de la funcin.
El valor de retorno tiene que ser del mismo tipo al declarado.

Ejemplo - Return
public class Empleado { private boolean activo=true; public boolean estaActivo(){ if(activo){ System.out.println("Esta activo"); return true; } System.out.println("No esta activo"); return false; } }

public class PruebaEmpleado{ public static void main(String args[]){ Empleado empleado=new Empleado(); boolean activo=empleado.estaActivo(); empleado.estaActivo(); } }

Resultado
Esta activo Esta activo

Parmetros de un mtodo
Se usan para pasar informacin a un mtodo Se debe declarar el tipo y nombre de cada uno, separados por coma Se puede pasar un objeto y llamar a uno de sus mtodos No pueden tener el mismo nombre que otro parmetro o variable local

Paso por valor


Los parmetros en Java se pasan por valor Tipos primitivos
El valor no cambia

Tipos por referencia


La referencia no cambia, pero se pueden invocar sus mtodos y modificar sus variables

Ejemplo
public cambiaValor (int x, Button b){ x = 5; b.setLabel(Otro letrero); }

int edad = 25; Button boton = new Button (Letrero original); cambiaValor (edad, boton);

edad = 25
cambiaValor(edad,boton)

edad = 25

Ejemplo 2
public cambiaValor (int x, Button b){ x = 5; b = new Button( ); b.setLabel(Otro letrero); }
int edad = 25; Button boton = new Button (Letrero original); cambiaValor (edad, boton);

OJO

edad = 25
cambiaValor(edad,boton)

edad = 25

Ejemplo 3 - Referencias
public class Empleado { private String nombre; public void asignaNombre(String nombre){ this.nombre=nombre; } public String obtenNombre(){ return nombre; } } class PruebaEmpleado{ public static void main(String args[]){ Empleado empleado1=new Empleado(); Empleado empleado2=empleado1; empleado1.asignaNombre("Juan");

empleado1

Objeto Juan

empleado2

empleado1
Juan Juan

Objeto Juan Objeto Pedro

1 2 3

empleado2

empleado2=new Empleado(); empleado2.asignaNombre("Pedro");

Juan Pedro

empleado1
empleado1=empleado2; Pedro Pedro

Objeto Juan Objeto Pedro

empleado2

} }

Referencia

Heap

main()
El main es el mtodo principal que controla el programa. Crea objetos nuevos e invoca mtodos pertenecientes a esos objetos. Tiene un parmetro nico, el cual es una arreglo de tipo String Se accesa con el nombre y subndice comenzando en 0 (args[0])

Ejemplo
class EjemploMain{ public static void main(String[] args){ System.out.println(args[0]); System.out.println(args[1]); } }

Garbage Collection
La creacin y destruccin de objetos es tediosa y propensa a errores El proceso de liberacin de memoria es automatizado en Java Ms prctico y libera al programador de esta tarea Disminucin de errores de programacin (bugs)

Garbage Collection
Responsable: La mquina virtual Un objeto es elegible para ser eliminado por el recolector de basura cuando ya no existen referencias a l Cuando una variable se sale de alcance o se le asigna explcitamente el valor null
unaVariable = null;

Variable fuera de alcance


: for (int i = 0; i < n; i++){ : : } :
Alcance de i i ya es elegible para ser recolectada

Perdida de referencia
StringBuffer sb = new StringBuffer(Hola"); System.out.println(sb); // El objeto sb an no puede ser eliminado por el // garbage Collector sb = null; // En este momento el objeto sb puede ser // elegido por el Garbage Collector

StringBuffer s1 = new StringBuffer(Hola"); StringBuffer s2 = new StringBuffer(Adios"); System.out.println(s1); // s1 y s2 no son elegibles para eliminar s1 = s2; // La referencia de s1 apunta ahora a s2 //El StringBuffer s2 ahora puede ser eliminado

Perdida de Referencia
public class Empleado { private String nombre; public void asignaNombre(String nombre){ this.nombre=nombre; } public String obtenNombre(){ return nombre; } } class PruebaEmpleado{ public static void main(String args[]){ Empleado empleado1=new Empleado(); Empleado empleado2=empleado1; empleado1.asignaNombre("Juan");

empleado1

Objeto Juan

empleado2

empleado1 empleado2

Objeto Juan Objeto Pedro

1 2 3 4

Juan Juan

empleado1

Objeto Juan Objeto Pedro

3
empleado2=new Empleado(); empleado2.asignaNombre("Pedro"); Juan Pedro

empleado2

empleado1=empleado2;

Pedro Pedro

4 Referencia Heap

empleado1=null; empleado2=null;

} }

finalize()
Mtodo que se ejecuta antes de que la mquina virtual destruya al objeto Todos los objetos tienen uno por default Util para liberar recursos del sistema No se puede asegurar que se ejecutar en un momento determinado

finalize()
protected void finalize () throws Throwable{ x = null; y.close(); super.finalize(); }

Liberar recursos del sistema archivos, sockets, etc.

Al final llamar al finalize de la superclase

Convenciones
Nombres de clases
Primera letra mayscula y cada palabra subsiguiente comienza con mayscula, sin espacios ClaseDeVariasPalabras

Nombres de mtodos y variables


Primera letra minscula y cada palabra subsiguiente comienza con mayscula, sin espacios variableDeVariasPalabras

Paquetes
Todas las letras con minuscula edu.uanl.estudiantes

Ejercicio
Un grupo de personas esta apostando a los dados. Escribe el segmento de cdigo que utiliza la funcin predefinida random de la clase Math para simular el lanzamiento del dado (3 lanzamientos) y despliega las ganancias de acuerdo a las siguientes reglas: Si en los tres lanzamientos se obtiene el nmero 6, lapersona gana $200. Si en los tres lanzamientos se obtiene el mismo nmero (diferente de 6), la persona gana $100. Si en dos de los tres lanzamientos se obtiene el mismo nmero, la persona gana $50.

Ejercicio 2
Modifica el ejercicio anterior y desarrolla un segmento de programa utilizando algunos de los ciclos vistos, para que 3 personas que participan obtengan una de las tres condiciones que lo hacen ganador, el segmento de programa deber de desplegar la cantidad de veces que cada persona tuvo que tirar el dado tres veces, para ganar.

Ejercicio 3
Desarrolla una o varias clases que permitan manejar cuentas bancarias, tomando en cuenta la siguiente informacin: Nombre del cliente, nmero de cuenta, domicilio, saldo de la cuenta. Las acciones a realizar con la cuenta son: darla de alta, incrementar saldo, disponer de efectivo y desplegar su informacin en pantalla. El nmero de cuenta se deber de asignar automticamente y es un nmero consecutivo.

Ejercicio 4
Desarrolla una aplicacin en Java que permita dar de alta una cuenta bancaria (utilizando la clase que desarrollaste en el ejercicio # 3), y que realice 1movimiento de depsito y 1 de disposicin de efectivo. Adems, deber desplegar el saldo final de cada cuenta. Utiliza el mtodo random para generar las cantidades a depositar (entre 1 y 50,000) y a retirar (entre 1 y el saldo actual de la cuenta)

Manejo de Excepciones

Excepciones
El propsito del manejo de excepciones es permitir a los programas atrapar y manejar los errores en lugar de dejar que ocurran. Los mtodos arrojan excepciones

Excepciones
Es una situacin que interrumpe el flujo normal. Permite detectar errores facilmente. Ejemplos:
Intentar abrir archivos que no existen. Divisin entre cero Tratar de leer un nmero y se recibe letra.

Excepciones - try/catch
La palabra reservada try permite definir un bloque de cdigo en el que pueden ocurrir excepciones. (region resguardada) Los bloques de cdigo catch permiten especificar el cdigo para el manejo de la excepcin. (manejador de excepciones)

Excepciones - try/catch
Estructura
try { // Primer lnea de regin resguardada // Cdigo que puede lanzar excepciones // Tantas lneas de cdigo como sean necesarias. } catch (PrimerExcepcion e) { // Manejador de excepciones // Tantas lneas de cdigo como sean necesarias } catch (SegundaExcepcion e) { // Manejador de excepciones 2 }

Jerarqua de excepciones

Excepciones no controlables. Se pueden atrapar pero no es obligatorio. Ej. OutOfMemoryError

Indica Excepciones que se deben atrapar

Excepciones que pueden ser lanzadas en operacin normal de la MV. No requieren ser atrapadas

throws

Indica que un mtodo arroja una excepcin determinada.

Ejemplo

import java.io.*; public class Excepciones {


public static void main(String args[]){ Excepciones e=new Excepciones(); } public Excepciones() { FileReader file=new FileReader("c:\\archivo.prueba"); System.out.println("Paso"); } }

Unhandled exception type FileNotFoundException

Excepciones
import java.io.*; public class Excepciones { public static void main(String args[]) { Excepciones e = new Excepciones(); }

public Excepciones() { try { FileReader file = new FileReader("c:\\archivo.prueba"); System.out.println("Paso"); } catch (FileNotFoundException e) { System.out.println("Error"); } System.out.println("Salgo"); }
} Error Salgo

Resultado:

Excepciones
import java.io.*; public class Excepciones { public static void main(String args[]) { Excepciones e = new Excepciones(); }

public Excepciones() { try { FileReader file = new FileReader("c:\\archivo.prueba"); System.out.println("Paso"); System.out.println("Salgo"); } catch (FileNotFoundException e) { System.out.println("Error"); } }
} Resultado:

Error

Excepciones
Se pueden atrapar todas las excepciones particulares de cada mtodo o agrupar varias llamadas a mtodos y atrapar las excepciones en bloque Depende del diseo de tu programa y de la legibilidad de cdigo que quieras

Ejemplo
public static void main(String[] args) { FileReader entrada; try { String nombreArchivo = args[0]; entrada = new FileReader(nombreArchivo); System.out.println("Archivo abierto sin problemas"); } catch (FileNotFoundException e) { System.out.println("Archivo no existe"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Faltan argumentos"); } }

Excepciones
Al poner en un catch una superclase, esta atrapar todas las excepciones generadas por sus subclases. Esta practica no es muy recomendable ya que normalmente realizamos operaciones diferentes por cada excepcin.

Ejemplo
La clase Exception es superclase tanto de FileNotFoundException como ArrayIndexOutOfBoundsException

public static void main(String[] args) { FileReader entrada; try { String nombreArchivo = args[0]; entrada = new FileReader(nombreArchivo); System.out.println("Archivo abierto sin problemas"); } catch (Exception e) { System.out.println(No encontr el archivo faltaron argumentos ?"); } }

finally
finally siempre se ejecuta Nos permite hacer una limpieza de los recursos que un mtodo pudo haber dejado abiertos o en uso Eso nos evita el tener que duplicar cdigo en cada catch para hacer la limpieza

finally
public ejemplo() { FileReader file =null; try { file = new FileReader("c:\\archivo.prueba"); System.out.println("Paso"); } catch (FileNotFoundException e) { System.out.println("Error"); } finally { System.out.println("Siempre entra"); if(file!=null){ //Cerrar archivo } } }

Resultado:

... Siempre entra

Excepciones
Las Excepciones proveen de mtodos tiles para manejar los errores. Los mtodos que se utilizan principalmente son:
getMessage(); printStackTrace();

Excepciones - Mensaje
Las Excepciones cuentan con un metodo llamado getMessage() , el cual regresa un String con el mensaje de error.

Excepciones
import java.io.*; public class Excepciones { public static void main(String args[]) { Excepciones e = new Excepciones(); } public Excepciones() { try { FileReader file = new FileReader("c:\\archivo.prueba"); System.out.println("Paso"); } catch (FileNotFoundException e) { System.out.println("Mensaje: "+e.getMessage()); } finally { System.out.println("Siempre entra"); } } }

Resultado

Mensaje: c:\archivo.prueba (The system cannot find the file specified) Siempre entra

Excepciones - StackTrace
Imprime el estado del Stack en el momento que se gener la excepcin. Inicia imprimiendo el ltimo mtodo ejecutado y contina con la secuencia de mtodos que fueron llamados hasta llegar al main.

Ejemplo stackTrace
import java.io.*; public class Excepciones { public static void main(String args[]) { Excepciones e = new Excepciones(); } public Excepciones() { try { FileReader file = new FileReader("c:\\archivo.prueba"); System.out.println("Paso"); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { System.out.println("Siempre entra"); } } } java.io.FileNotFoundException: c:\archivo.prueba (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:106) at java.io.FileInputStream.<init>(FileInputStream.java:66) at java.io.FileReader.<init>(FileReader.java:41) at Excepciones.<init>(Excepciones.java:10) at Excepciones.main(Excepciones.java:5) Siempre entra

Resultado

Excepciones
Podemos crear nuestras propias excepciones extendiendo a la clase Exception o RunTimeException

public class AutoVacioException extends Exception{


public AutoVacioException(String message){ super(message); } public AutoVacioException(){ super("El auto est vacio"); } }

Excepciones
public class Carro { private boolean encendido=false; public static void main(String args[]){ Carro carro=new Carro(); try{ carro.acelerar(); } catch(AutoVacioException e){ System.out.println(e.getMessage()); } } public void acelerar() throws AutoVacioException{ if(!encendido){ throw new AutoVacioException("No puedo acelerar+ , estoy vacio"); } } }

Resultado

No puedo acelerar, estoy vacio

Excepciones
public class Carro { private boolean encendido=false;
public static void main(String args[]) throws AutoVacioException{ Carro carro=new Carro(); carro.acelerar(); } public void acelerar() throws AutoVacioException{ if(!encendido){ throw new AutoVacioException("No puedo acelerar+ , estoy vacio"); } } }

Si no se quiere manejar la excepcin en la funcin actual, se puede declarar a la misma como si esta la lanzara tambin.

You might also like