Frage zu Exceptions und der import Anweisung

DennisXX

Bekanntes Mitglied
Hallo !

Ich habe nochmal eine Frage. Ist es eigentlich ein Problem, wenn ich einfach alle Exceptions, die durch x beliebigen Code ausgelöst werden können, einfach mit Exception abfange? Beispiel:


Java:
try{

//Code, der den Fehler auslöst }

catch(Exception e);

also statt einer spezifischen Exception nehme ich hier einfach immer die oberste Exceptionklasse. Wäre das ein Problem?

Eine andere Sache:

Ist es eigentlich ein Problem, wenn ich bei der import Anweisung immer das Sternchen angebe? Beispiel:
Java:
import java.swing.*

Oder ist es besser, immer die spezifischen Klassen anzugeben, wenn man genau weiß, welche man importieren möchte oder ist generell ein Stern kein Problem?
 
>Ist es eigentlich ein Problem wenn ich einfach alle Exceptions,.., einfach mit Exception abfange?

Im Prinzip nein, aussert du möchtest die Exceptions behandeln (na wer kennt denn)

Je nach dem möchtest du evtl verschieden auf Exceptions reagieren. zb ziemlich viel ist eine IOException..von Datei gibts nicht bis die Harddisk hats zerbröselt. Auf Datei nicht gefunden kann man einfach reagieren mit zb Bitte nochmals Datei wählen, auf HD kaputt evtl nicht mehr. Ist die Datei zwar da aber der Inhalt kaputt, gibts vielleicht eine ParseException oder eine InhaltKaputException. Je nach dem möchte man dies anders beahndeln.

>Ist es eigentlich ein Problem, wenn ich bei der import Anweisung immer das Sternchen angebe?

In Prinzip nein, ausser du möchtest eine schnellere Übersicht, was genau importiert wurde.
Der Compiler macht eh aus
Code:
import java.util.*;
Code:
List<String> list = new ArrayList<String>();
ein
Java:
java.util.List<java.lang.String> list = new java.util.ArrayList<java.lang.String>()

Also imports sind nur für den Benutzer da, könntest auch gleich den FQN nehmen. Wird dann halt schnell unübersichtlich.
 
Zuletzt bearbeitet:
Hallo !
Ich habe nochmal eine Frage. Ist es eigentlich ein Problem, wenn ich einfach alle Exceptions, die durch x beliebigen Code ausgelöst werden können, einfach mit Exception abfange? Beispiel:

Es gibt nur wenige (und wenn du die Frage so stellst, für dich: KEINE 😉 ) Fälle in denen das sinnvoll ist. Eigentlich sollte man immer die spezifischste Exception abfangen.
 
@ müder Joe

Ich bin in der Thematik noch nicht allzu fit, aber was genau habe ich denn davon, wenn ich die Exceptions eben spezifischer abfange, also bspw. mit IO.Exception oder IndexOutOfBoundException usw.

Bieten diese spezfischen Exceptionklassen (und auch noch alle anderen relevanten) einfach nur mehr Funktionen und Möglichkeiten für eine bestimmte Behandlung von Exceptions an, als die Oberklasse Exception? Liegt darin der einzige Vorteil?
 
aber die frage war ja ob es möglich ist und das ist es ja 😉 ob es nun gut ist alle abzufangen haben ja meine vorredner schon gesagt !!

aber machbar ist es auf jedenfall
 
Mit
Code:
catch(Exception e)
würdest zum Beispiel keine Error, z.B.
Code:
NoClassDefFoundError
fangen können, wenn du schon möglichst weit oben ansetzen willst 😉

Ansonsten macht es keinen Sinn mit deinem Exception-Ansatz. Eine ArrayIndexOutOfBoundsException deutet auf weniger gut durchdachten Code hin (daher ist das eine RuntimeException) während du bzw. dein Programm für eine IOException nicht viel kannst. Dabei bist du ja von externen Geräten oder ähnlichem abhängig. IOException ist also nicht von RuntimeException abgeleitet (siehe auch checked und unchecked exceptions).
 
>einfach nur mehr Funktionen und Möglichkeiten

Nein. Die meisten Klassen sehen wahrscheinlich zu 99% gleich aus. E extends Exception und alles super();
Es bietet spezifische Informationen, was passiert ist.

Nehmen wir mal die Klasse Auto an mit der Methode motorStarten. Die Methode schmeisst die Exceptions KeinKraftstoffException und KeinMotorException. Wenn du beide mit Exception fängst, schmeisst du das Auto einfach auf den Abbruch, wenns nicht funktioniert. Ist ja egal was passiert ist, einfach es tut net. Fängst du sie hingegen gesondert, kannst du sehr schön auf die KeinKrafstoffException mit der Methode fülleTank reagieren und es nochmals probieren. Bei kein Motor muss da wohl aufgegeben werden und ohne das Framework Autobauer geht nix mehr.

Etwas bildlich ausgedrückt ;-)
 
Du möchtest ja evtl verschieden auf die Exceptions reagiere, etwas konstruiertes Beispiel:
Java:
public Connection connectToDatabase(String username, String password) throws IllegalArgumentException, SQLException{
   if(username == null || password == null){
       throw new IllegalArgumentException("Username or password cannot be null");
   }
   ...
   Code um per DriverManager eine connection zu bekommen, kann ein SQL Exception werfen
   ...
   return connection;
}

public void doSomething(){
   try {
   Connection con = connectToDatabase(getUserName(), getPassword());
   } catch (IllegalArgumentException iae) {
     // tu was weil parameter null   
   } catch (SQLException sqle) {
     // tu was weil es eine Datenbank exception gab
   }
}
 
>einfach nur mehr Funktionen und Möglichkeiten

Nein. Die meisten Klassen sehen wahrscheinlich zu 99% gleich aus. E extends Exception und alles super();
Es bietet spezifische Informationen, was passiert ist.

Nehmen wir mal die Klasse Auto an mit der Methode motorStarten. Die Methode schmeisst die Exceptions KeinKraftstoffException und KeinMotorException. Wenn du beide mit Exception fängst, schmeisst du das Auto einfach auf den Abbruch, wenns nicht funktioniert. Ist ja egal was passiert ist, einfach es tut net. Fängst du sie hingegen gesondert, kannst du sehr schön auf die KeinKrafstoffException mit der Methode fülleTank reagieren und es nochmals probieren. Bei kein Motor muss da wohl aufgegeben werden und ohne das Framework Autobauer geht nix mehr.

Etwas bildlich ausgedrückt ;-)


okay ja das is dann plausibel erklärt wieso man doch besser die einzelnen exceptions abfängt!
mir würde jetzt auch kein gutes gegen bsp einfallen :bahnhof:
aber für jemanden der noch keine ahnung von dem ganzen thema hat und erst mit exceptions anfängt ist es doch alle ma okay wenn er nur mal um dahinter zu kommen erstmal alle abfängt um dann überhaupt mal das zu verstehen!? danach kann man dann anfangen sich mit den einzelnen exceptions zu beschäftigen
 
aber für jemanden der noch keine ahnung von dem ganzen thema hat und erst mit exceptions anfängt ist es doch alle ma okay wenn er nur mal um dahinter zu kommen erstmal alle abfängt um dann überhaupt mal das zu verstehen!? danach kann man dann anfangen sich mit den einzelnen exceptions zu beschäftigen

Naja, besser gar nicht erst angewöhnen... Wenn du Eclipse oder NetBeans automatisch die try/catch Blöcke einfügen lässt wird dir auch gleiche jede Exception einzeln angeboten, da muss man gar nicht mal nachdenken.
 
aber für jemanden der noch keine ahnung von dem ganzen thema hat und erst mit exceptions anfängt ist es doch alle ma okay wenn er nur mal um dahinter zu kommen erstmal alle abfängt um dann überhaupt mal das zu verstehen!? danach kann man dann anfangen sich mit den einzelnen exceptions zu beschäftigen
nein - wenn man anfangs gleich falsches Verhalten lernt wird man später das seltener ablegen.... man sollte schon versuchen den richtigen weg von anfang an zu gehen. Ist uptopisch ... klar ... aber man sollte es versuchen
 

Neue Themen


Zurück
Oben