Try/catch über ganze Klasse

Fohnbit

Top Contributor
Hallo,

besteht die Möglichkeit, eine Klasse komplett in einen Try/Catch Block zu setzen?
Damit ich bei ersten Tests nicht jede Methode extra einen Try Block erstellen muss.

Danke!
 
K

kneitzel

Gast
Das geht nicht und im Augenblick sehe ich da auch recht wenig Sinn drin, da die Behandlung der Exception doch von Aktion zu Aktion anders sein dürfte.

Wenn in der Klasse keinerlei Behandlung von Exceptions gewünscht ist, dann lass es weg und dann muss die nächst höhere Ebene sich darum kümmern.
 

Saheeda

Top Contributor
Eine komplette Klasse in ein try-catch zu packen (sofern das möglich wäre) riecht stark nach Designfehler. Eine Exception sollte möglichst nah am Ort ihres Ursprung behandelt werden, ein try über ~ 400 Zeilen macht es nahezu unmöglich, die genaue Fehlerquelle einzugrenzen und mit einer vernünftigen Fehlermeldung zu behandeln. Viel mehr als "ups, geht net", wirst du dem Nutzer so nicht mitteilen können. Fehlermeldungen sollten aber ne gewisse Aussagekraft haben, z.B. "Speichern nicht möglich, da die Datenbankverbindung falsch ist." oder "Gesuchte Datei existiert nicht."
 

JStein52

Top Contributor
Ich hatte den TE so verstanden dass er mal schnell was ausprobieren will und dabei will er nicht von Exceptions gestört werden denn die interessieren ihn dabei überhaupt nicht. Also sowas wie "ignoriere alle Exceptions, darum kümmere ich mich später"
 

Saheeda

Top Contributor
@JStein52
Auch zum "nur mal kurz Probieren" würde ich mir sowas gar nicht erst angewöhnen, das greift sonst ganz schnell auf echten Code über. Macht ja die Tests so schön grün. Zumal ne Exception ja heißt, dass irgendetwas nicht funktioniert. Wenn mir aber egal ist, obs geht oder nicht, brauch ichs gar nicht erst probieren.
 

JStein52

Top Contributor
Auch zum "nur mal kurz Probieren" würde ich mir sowas gar nicht erst angewöhnen
Ja, du hast ja auch recht ! Ich wollte nur deine Bemerkung mit Designfehler ein bisschen relativieren. Es ging glaube ich nicht darum generell Exceptions wegzulassen oder zu sparen oder so was. Er will mal kurz einen Codeschnipsel ausprobieren und weiss genau dass dafür die Datei die er einlesen will auch da ist. Und deshalb will er diese Exception erst mal "ausblenden ". Ist nur so eine Vermutung. ... Aber im allgemeinen hast du natürlich recht.
 
K

kneitzel

Gast
Designfehler ist evtl. falsch gewählt. Statt dessen ist es evtl. ein falsches Vorgehen. Hier wäre wichtig zu verstehen, was das eigentliche Anliegen ist.

a) Stört es den TE, dass er sich beim Schreiben von Code um gewisse Exceptions zu kümmern hat? Damit Code compiliert, müssen manche Exceptions behandelt werden oder die Funktion muss diese auch nach außen weiter geben.

Hier ist in meinen Augen wichtig, dass man immer relativ sauberen Code schreiben muss und dazu gehört halt ein behandeln der wichtigsten Exceptions. Die Gefahr ist hier in meinen Augen einfach gegeben, dass man mal eben schnell etwas ausprobiert und dann wird es komplett oder teilweise in den eigentlichen "produktiven" Code übernommen.

b) Evtl. stört es den TE, dass er mehrere Dinge testen will. Bei seinem ersten Test gibt es dann so eine Exception und die anderen Tests laufen nicht mehr. Ich habe hier jetzt bewusst von testen und nicht von probieren geschrieben. Hier wäre die Lösung, einfach separate Tests zu schreiben. Die kann er dann alle zusammen laufen lassen und dann bekommt er klare Ergebnisse a.la. Test 1 gab es eine Exception, Test 2 und 3 waren ok, Test 4 war ein Assert falsch und beim Test 5 gab es wieder eine Exception.
Sprich: Hier bietet sich ggf. die Nutzung von Test-Frameworks an. (Man mag da zustehen, wie man will - ich probiere vieles z.B. direkt in Unit Tests aus. Es ist trivial eine neue Klasse mit Unit-Tests zu erstellen und darin dann die Tests durchzuführen. Ggf. werden dann darauf Unit-Tests die bleiben oder ich schmeisse die Datei am Ende weg (Undo Pending Changes und winke winke sind die Tests erledigt und weg). Meistens ist es dann am Ende aber tatsächlich so, dass die Unit-Tests am Ende bleiben. Werden dann lediglich umgeschrieben so dass die nicht mehr die eigentliche Logik enthalten sondern eben die Logik aus anderen Klassen aufrufen und per Asserts die Ergebnisse prüfen.

Vieles ist somit wohl eine Frage der Vorgehensweise. Dabei ist in der Vorgehensweise auch keinerlei Wertung zu sehen! Gewisse Vorgehen mögen prinzipiell gut und sinnvoll sein (für spezielle Zielgruppen und in speziellen Szenarien) nur eben werden die durch die vorhandenen Tools nicht unterstützt, so dass man sich überlegen sollte, ob man auf Grund der Tools nicht anders vorgehen möchte.

Somit möchte ich nur alternative Vorgehen anbieten / vorschlagen ohne jegliche Wertung!
 

Fohnbit

Top Contributor
Hallo,

gerne erkläre ich den Hintergrund genauer.

Ich schreibe kleine Plugins für ein OSGi System. Sehr viele Methoden werden nicht durch mich aufgerufen.

Um nun beim testen eventuelle Fehler zu erkennen, MUSS ich in jeder Methode eine try/catch Block einfügen.

Ich dachte, ich kann vielleicht irgendwie Methoden übergreifend mit einem try/catch Block absichern.

Es soll natürlich eine exakte und genaue Fehlerausgabe erfolgen. Aber mit PrintStack() hatte ich immer auf die Zeile genau das Problem gefunden.

Also statt:
Java:
@Override
    public void methode1() {
try{}catch{}
}

@Override
    public void methode1o() {
try/catch
}
@Override
    public void methode2() {
try{}catch{}
}

@Override
    public void methode3() {
try{}catch{}
}

Pseudomässig so:
Java:
try{
@Override
methode1()

@Override
methode2()

@Override
methode3()
catch{}

Somit habe ich für alle Methode nur eine try/catch Block und muss nicht in 50 Methoden jeweils einen eigenen try/catch Block einfügen.

Der Aufwand ist zwar überschaubar, aber es interessiert mich generell ob statt 50 Anweisungen ich es mit einer schaffen könnte.

Oder kann man eine class global mit einem try/catch absichern?
 
K

kneitzel

Gast
Also evtl. hilft Dir ja AOP (Aspect oriented programing). AspectJ könntest Du Dir z.B. ansehen. Das ist meines Wissens einer der am meisten benutzten Bibliotheken wobei es auch andere Lösungen für AOP gibt.

Und da gäbe es dann z.B. den after-throwing advice.

Die Idee hinter AOP ist eben genau so ein Szenario: Es soll doppelter Code vermieden werden, der so an vielen Stellen auftritt. Da gibt es leider von Java aus keine Methodik so dass diese Aspekte eingeführt wurden.

Evtl. lohnt es sich für Dich, dich da einmal einzulesen?
 

thecain

Top Contributor
3 Möglichkeiten:

1. Wenn du Zugriff auf die Methode hast, welche die Exception wirft, könntest du sie in eine unchecked Exception umwandeln

2. Den Methodensignaturen ein throws Exception anhängen.

3. Den Aufruf der die Exception wirft in eine eigene private Methode wrappen und dort die Exception einmal catchen. dann im eigentlichen Code nur noch deine Methode verwenden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Testing JUnit5: try ... catch arbeitet nicht sauber Allgemeine Java-Themen 6
M IndexOutOfBoundsException / Try-Catch Allgemeine Java-Themen 9
K Zweifacher Try-Catch Allgemeine Java-Themen 6
ralfb1105 LogManager logger schreibt nicht in Catch() Zweig Allgemeine Java-Themen 2
C try-catch Block Verständnisfrage Allgemeine Java-Themen 14
C Unendlich Wiederholungsfehler bei try catch - Block Allgemeine Java-Themen 3
H try catch Allgemeine Java-Themen 4
V Designfrage: try-catch-throws Allgemeine Java-Themen 11
E Immer nur der Catch-Zweig Allgemeine Java-Themen 3
N String aus Try/Catch-Block übernehen Allgemeine Java-Themen 14
B Execption auf Oberfläche werfen, try-catch-Block Allgemeine Java-Themen 6
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
R return in try-catch-Blöcken Allgemeine Java-Themen 6
I Exceptions - weder catch- noch finally-Klausel funktioniert Allgemeine Java-Themen 12
F try und catch Blöcke Allgemeine Java-Themen 3
Final_Striker Exceptionhandling: Richtige Verwendung des Try/Catch Blocks Allgemeine Java-Themen 14
M Try-Catch: wie wird Variable bei Exception initialisiert? Allgemeine Java-Themen 8
P Methodenaufruf von catch Allgemeine Java-Themen 2
S native methoden in try / catch ? Allgemeine Java-Themen 3
V Was tun mit "nötigen" Catch-Blöcken? Allgemeine Java-Themen 3
V Try-Catch und Code der folgt? Allgemeine Java-Themen 3
B Try/Catch in While-Schleife mit Scanner - Hilfe! Allgemeine Java-Themen 3
E try/catch Block um ganzes Programm Allgemeine Java-Themen 10
T rießiger try - catch - Block Allgemeine Java-Themen 13
M try-catch (Wie erzwing ich die catch-Anweisung)? Allgemeine Java-Themen 13
L Try ... Catch Allgemeine Java-Themen 3
kodela Datenübergabe über Buttons Allgemeine Java-Themen 8
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
A ByteArray über Socket Allgemeine Java-Themen 3
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
I OpenPDF erzeugt riesige PDFs, wenn Grafiken über PdfGraphics2D#drawImage gezeichnet werden Allgemeine Java-Themen 1
T Etikettendrucker über TCP-IP Allgemeine Java-Themen 1
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
L Aufwandsabschätzung: Android-App Aufnahmefunktion (foto) und zweiter Ebene über dem Foto (teiltransparent) Allgemeine Java-Themen 6
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Threads über Kommandozeile Allgemeine Java-Themen 5
david19 Software AE über Domain laufen lassen Allgemeine Java-Themen 0
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
K Auf Dateiverzeichnis extern zugreifen (evtl über XML??) Allgemeine Java-Themen 22
C VisualVM oder Jconsole über Jolokia-Proxy Allgemeine Java-Themen 0
G USB-Pins über Java ansteuern Allgemeine Java-Themen 8
Ernesto95 Best Practice Localization über ResourceBundle Allgemeine Java-Themen 6
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
kodela Eigenartige Datumsberechnung über GregorianCalendar Allgemeine Java-Themen 15
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
T .jar über cmd ausführen (später dann batch) Allgemeine Java-Themen 6
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
C Input/Output Zip Files über Socket senden und empfangen Allgemeine Java-Themen 6
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
L Videodateien über Java öffnen unabhängig vom Format Allgemeine Java-Themen 4
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
F Content-Disposition ermitteln über URL Allgemeine Java-Themen 2
ARadauer Checksumme über BigDecimal Werte Allgemeine Java-Themen 11
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
S VLC + Lied über Java starten Allgemeine Java-Themen 17
M HTML-Code von Webseite über Browser oder Console auslesen?? Allgemeine Java-Themen 5
A Sinuston ausgeben und über Mikro Amplitude messen – machbar? Allgemeine Java-Themen 6
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
S NoSuchMethodError beim Ausführen einer C Methode über JNI Allgemeine Java-Themen 5
H OOP Daten über TCP Allgemeine Java-Themen 5
Pastafari Iterator über nested HashMaps Allgemeine Java-Themen 7
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
B VoIP-Gespräche über Computer führen Allgemeine Java-Themen 3
S Jar-File startet nicht über doppelklick Allgemeine Java-Themen 2
C Java Programm über SSH starten Allgemeine Java-Themen 16
K Internetverbindung über PuTTy herstellen?! Allgemeine Java-Themen 9
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
S Input/Output Binärdatei über Bytestreams Allgemeine Java-Themen 4
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben