Java: Ausnahme im Konstruktor, kann mein Objekt noch erstellt werden?
Könnten Sie mir sagen, kann sein, dass Fall, wenn die exception wirft im Konstruktor und Objekt nicht null ist. Ich meine, einige Teil-Objekt erstellt wird und eine andere nicht.Wie diese
public Test(){
name = "John";
//exception
//init some other data.
}
Verstehe ich in dieser sitiation Test-Objekt null sein wird, Kann aber die situation, dass die test-Objekt nicht null ist (block löschen der Ausnahme nicht beantworten 🙂 ) ?
- Nur wenn Sie fangen Ihre Ausnahme direkt in den Konstruktor. Ich meine, wenn es nicht weiter geworfen an den Aufrufer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Klasse-Instanz-Erstellung-Ausdruck erzeugt immer ein neues Objekt, wenn die Bewertung seiner Kennung und Argumente vollständig normalerweise, und wenn dort ist genug Platz, um das Objekt zu erstellen. Es spielt keine Rolle, wenn der Konstruktor eine exception wirft; ein Objekt wird noch erstellt. Die class instance creation expression nicht abgeschlossen, die normalerweise in diesem Fall, obwohl, wie es propagiert die Ausnahme.
Jedoch können Sie immer noch erhalten eine Referenz auf das neue Objekt. Betrachten Sie das folgende:
Hier, eine Referenz auf das neue Objekt wird an anderer Stelle gespeichert, bevor die exception geworfen wird. Wenn Sie dieses Programm ausführen, werden Sie sehen, dass das Objekt tatsächlich nicht null, obwohl der Konstruktor nicht normal abgeschlossen werden.
Nicht. Blick auf den client-code:
Hier, wenn die exception Auftritt, werden die ' = ' - operation nicht ausgeführt. Dein code geht direkt in den catch-block und myObj bleibt
null
.Nicht. Wenn eine Ausnahme Auftritt, während die Instanziierung des Objekts, wird es nicht erstellt.
Sowieso, würden Sie es schreiben?
oder:
Den obigen code Sinn machen als pro ur Erwartung.