Varias personas dicen que un objeto no se creará si el constructor lanza una excepción. Solo me gustaría señalar que esto no es verdad.A modo de ejemplo, echar un vistazo a esta muy mal código:
public class Test {
static int count;
static Set<Test> set = new HashSet<Test>();
int id = count++;
public Test() {
set.add(this);
throw new RuntimeException();
}
public static void main(String[] args) throws Exception {
for(int i = 0; i < 5; i++) {
try {
new Test();
} catch(Exception e) {
}
}
System.out.println(set);
}
public String toString() {
return "Test[" + id + "]";
}
}
La salida es:
[Test[0], Test[1], Test[2], Test[4], Test[3]]
new
crea un nuevo objeto cada vez.
¿Por qué lo preguntas? ¿Estás obteniendo un comportamiento extraño en alguna parte? –
Sin comportamiento extraño. Simplemente curioso: estaba leyendo sobre el constructor Integer (int i). El punto que se planteó fue que el método estático Integer.valueOf (int i) podría ser mejor, ya que reutilizará los objetos según sea necesario. Quería comprobar que era imposible. , no solo no convencional, para que un constructor haga lo de reutilización. –
Sí, es imposible. En C++, puede anular el operador 'new', pero no puede hacerlo en Java. Lo cual no me pone triste. –