Diverse persone dicono che un oggetto non verrà creato se il costruttore genera un'eccezione. Vorrei solo sottolineare che questo non è vero.A titolo di esempio, dare un'occhiata a questo pessimo codice:
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 + "]";
}
}
L'output è:
[Test[0], Test[1], Test[2], Test[4], Test[3]]
new
crea un nuovo oggetto OGNI VOLTA.
fonte
2009-07-02 20:18:04
Perché lo chiedi? Stai ricevendo strani comportamenti da qualche parte? –
Nessun comportamento strano. Semplicemente curioso - stavo leggendo sul costruttore Integer (int i) - il punto che si è fatto era che il metodo statico Integer.valueOf (int i) potrebbe essere migliore dato che riutilizzerà gli oggetti come necessario - volevo controllare che fosse impossibile , non solo non convenzionale, per un costruttore per fare la cosa del riutilizzo. –
Sì, è impossibile. In C++, è possibile sovrascrivere l'operatore 'new', ma non è possibile in Java. Il che non mi rende triste. –