Können statische Code-Blöcke Ausnahmen auslösen? [Duplikat]

8

In einer hypothetischen Situation habe ich eine Klasse wie folgt:

%Vor%

Beim Kompilieren bekomme ich

  

nicht gemeldete Ausnahme java.io.FileNotFoundException ; muss gefangen oder für geworfen erklärt werden

weil public Scanner(File source) throws FileNotFoundException .

Um das zu beheben, kann ich scanner = new... line in eine try / catch-Anweisung einfügen:

%Vor%

Aber gibt es irgendeinen Weg, wie ich etwas tun kann:

%Vor%

Dies ist eine hypothetische Situation. Bitte sag nicht "gut, warum würdest du das machen wollen?" oder "Hier ist eine bessere Möglichkeit, einen Scanner zu machen!"

    
The Guy with The Hat 24.01.2014, 00:02
quelle

2 Antworten

7

Von JLS §11.2.3 :

  

Es ist ein Fehler bei der Kompilierung, wenn eine Klassenvariable initialisiert wird ( §8.3.2 ) oder statischer Initialisierer ( §8.7 ) einer benannten Klasse oder Schnittstelle kann eine geprüfte Ausnahmeklasse auslösen.

Der Vollständigkeit halber ist eine ungeprüfte Ausnahme in JLS §11.1.1 :

  

RuntimeException und alle Unterklassen sind zusammen die Laufzeitausnahmeklassen.

     

Die ungeprüften Ausnahmeklassen sind die Laufzeitausnahmeklassen und die Fehlerklassen.

Dies ist die einzige Art von Ausnahme, die von einem statischen Initializer ausgelöst werden kann.

    
arshajii 24.01.2014, 00:07
quelle
6

Statische Codeblöcke können keine aktivierten Ausnahmen auslösen, Sie können die geprüfte Ausnahme abfangen, sie ordnungsgemäß protokollieren und eine Laufzeitausnahme auslösen. Sie möchten die geprüfte Ausnahme als Hauptursache verschachteln.

Die Ausnahme, die Sie schließlich erhalten, ist jedoch eine Form von ClassInitializationException, und Sie können in die verschachtelten Ausnahmen schauen, um die Ursache zu ermitteln.

    
Bhaskar 24.01.2014 00:06
quelle