lunes, 18 de agosto de 2008

Excepciones - Bloque finally

Si se usa return en un bloque try y en un bloque finally se solicita una instrucción, el bloque finally se ejecuta primero y después el return.

POO Uso de referencias

La llamada a changePerson () pasa el objeto Persona como referencia, por lo que el name se ajusta a "GHI". Sin embargo, a continuación, una referencia a un nuevo objeto Persona que se crea con el valor del atributo name "JKL" se ha asignado a p. De ahí la posterior setName () define el atributo name con "MNO" sólo para nuevo objeto Persona y no el objeto original p que todavía se refiere al método principal (que define el atributo name con "GHI").

public class Example1 {
public static void main(String [] args) {
Person p = new Person("ABC");
p.setName("DEF");
changePerson(p);
System.out.println(p.getName());
}

public static void changePerson(Person p) {
p.setName("GHI");
p = new Person("JKL");
p.setName("MNO");
System.out.println(p.getName());
}
}

class Person {
String name;

Person(String name) {
this.name = name;
}

public void setName(String n) {
name = n;
}

public String getName() {
return name;
}
}

Excepciones - Bloque finally

Si se pone el return en un bloque try y en un bloque finally se solicita una instrucción, el bloque finally se ejecuta primero y después el return:



public class Animal {

private static String name = "nameless";

public Animal(String nm) {
name = nm;
}

public static void setName(String name) {
Animal.name = name;
}

public String getName() {
try {
return name;
} catch (Exception e) {
return name;
}finally{
System.out.println("Si alcanzo el finally");
}

}

public static void main(String[] args) {

Animal fido = new Animal("Fido");
Animal garfield = new Animal("Garfield");

System.out.println(fido.getName());

}
}

Salida:
Si alcanzo el finally
Garfield

POO - Variables estaticas y Constructores

Una variable local estática, está compartida por cualquier cantidad de instancias. Si esta se inicializa en el constructor, todas las instancias subsecuentes tendrán el mismo valor.

public class Animal {

public static String name = "Nameless";

public Animal(String iName) {
name = iName;
}

public String getName() {
return name;
}
}


public class Main {

public static void main(String[] args) {
Animal fido = new Animal("Fido");
Animal garfield = new Animal("Garfield");

System.out.println(fido.getName() + " and " + garfield.getName());
}
}
Salida: Garfield and Garfield