Können Konstruktoren Ausnahmen in Java auslösen?


Answers

Ja, sie können Ausnahmen auslösen. Wenn dies der Fall ist, werden sie nur teilweise initialisiert und wenn sie nicht endgültig sind, können sie angegriffen werden.

Das Folgende stammt aus den Secure Coding Guidelines 2.0 .

Auf teilweise initialisierte Instanzen einer nicht endgültigen Klasse kann über einen Finalizer-Angriff zugegriffen werden. Der Angreifer überschreibt die geschützte finalize-Methode in einer Unterklasse und versucht, eine neue Instanz dieser Unterklasse zu erstellen. Dieser Versuch schlägt fehl (im obigen Beispiel löst die Überprüfung von SecurityManager im Konstruktor von ClassLoader eine Sicherheitsausnahme aus), der Angreifer ignoriert jedoch einfach jede Ausnahme und wartet darauf, dass die virtuelle Maschine die Finalisierung für das teilweise initialisierte Objekt durchführt. Wenn dies geschieht, wird die böswillige Finalize-Methodenimplementierung aufgerufen, die dem Angreifer Zugriff darauf gewährt, eine Referenz auf das Objekt, das finalisiert wird. Obwohl das Objekt nur teilweise initialisiert wird, kann der Angreifer dennoch Methoden darauf aufrufen (wodurch die SecurityManager-Prüfung umgangen wird).

Question

Können Konstruktoren Ausnahmen auslösen?




Ja.

Konstruktoren sind nichts anderes als spezielle Methoden und können Ausnahmen wie jede andere Methode auslösen.




Ja, es kann wie bei anderen Methoden eine Ausnahme auslösen




Ja, Konstruktoren dürfen Ausnahmen auslösen.

Seien Sie jedoch sehr klug bei der Auswahl der Ausnahmen, die sie sein sollten - Ausnahmen geprüft oder deaktiviert. Ungeprüfte Ausnahmen sind im Grunde Unterklassen von RuntimeException.

In fast allen Fällen (ich konnte hier keine Ausnahme machen) müssen Sie eine geprüfte Ausnahme auslösen. Der Grund dafür ist, dass ungeprüfte Ausnahmen (wie NullPointerException) normalerweise auf Programmierfehler zurückzuführen sind (z. B. nicht ausreichend Eingaben validieren).

Der Vorteil einer geprüften Ausnahme besteht darin, dass der Programmierer gezwungen ist, die Ausnahme in seinem Instanziierungscode abzufangen, und erkennt dabei, dass die Objektinstanz nicht erstellt werden kann. Natürlich wird nur eine Code-Überprüfung die schlechte Programmierpraxis des Schluckens einer Ausnahme erfassen.