Verwendung von try und catch bei exceptions

Status
Nicht offen für weitere Antworten.

Daniel_L

Bekanntes Mitglied
Hallo,

ich hab mal eine Frage zu Exceptions. ich habe folgende Methode:

Code:
    public int getKeywordPosition( String kw ) throws JDOMException {
        // get a list of all keywords of the keywordfile
        List<?> keywordList = XPath.selectNodes( keywordFile, "/keywords/entry/" );
        // counter for the return value if a found keyword matches the parameter
        int cnt = 1;
        
        // iterate all elements of the keyword list
        for ( Object object : keywordList ) 
        { 
            Attribute attribute = (Attribute) object;
            // if keyword matches the parameter string, return the position
            if( kw.equals(attribute.getValue() )) return cnt;
            // else increase counter
            cnt++;
        }
        // if no keyword was found, return -1
        return -1;
    }

keywordFile ist ein XML-Dokument vom Typ Document.

Meine Fragen: Wann wird hier möglicherweise eine JDOMException verursacht? Und: Kann ich diese dann mit try/catch abfangen, sodass ich vorher keine if-Abfragen machen muss, die bspw. überprüfen, ob auch tatsächlich Elemente im keywordFile enthalten sind?

Vielleicht noch ein kurzes anderes Beispiel:

Code:
    public String getKeyword( int pos ) throws JDOMException {
        // create a path to the selected entry
        String path = "/keywords/entry["+String.valueOf(pos)+"]";
        // get the single element which matches the given position (path)
        Object kw = XPath.selectSingleNode( keywordFile, path);
        // return the value of the element, i.e. the requested keyword
        return ((Attribute) kw).getValue();
    }

Wenn der Parameter pos nun auf ein Element zeigt, das es gar nicht gibt (z.B. es gibt 5 Elemente, pos enthält aber den Wert 7), wird dann eine JDOMException verursacht? Und könnte ich dann im "catch"-Bereich das angeben, was passieren soll, wenn der Parameter nicht zulässig ist? (also bspw. einen leeren String zurückgeben)

Vielen Dank im Voraus
Daniel
 

Wildcard

Top Contributor
Dafür gibt es doch API-Doc.
http://www.jdom.org/docs/apidocs/org/jdom/xpath/XPath.html#selectNodes(java.lang.Object)
 

Daniel_L

Bekanntes Mitglied
Meine Frage bezog sich eher allgemein auf das Prinzip von Exceptions.

NetBeans bietet ja an, automatisch einen try/catch-Block um eine Auswahl zu setzen. Meine untere Funktion aus dem obigen Beispiel sieht jetzt so aus:
Code:
    public String getKeyword( int pos ) throws JDOMException {
        // create a path to the selected entry
        String path = "/keywords/entry["+String.valueOf(pos)+"]";
        
        try {
            // get the single element which matches the given position (path)
            Object kw = XPath.selectSingleNode(keywordFile, path);
            // return the value of the element, i.e. the requested keyword
            return ((Attribute) kw).getValue();
        }
        catch (JDOMException jDOMException) {
            // if element doesn't exist due to invalid parameter, return an empty string
            return("");
        }
    }

Allerdings kommt bei der oberen der Hinweis, dass keine JDOMException, sondern nur eine Exception auftreten kann:
Code:
    public int getKeywordPosition( String kw ) throws JDOMException {
        // get a list of all keywords of the keywordfile
        List<?> keywordList = XPath.selectNodes( keywordFile, "/keywords/entry/" );
        // counter for the return value if a found keyword matches the parameter
        int cnt = 1;
        
        try {
            // iterate all elements of the keyword list
            for (Object object : keywordList) {                
                Attribute attribute = (Attribute) object;
                // if keyword matches the parameter string, return the position
                if (kw.equals(attribute.getValue())) {
                    return cnt;
                // else increase counter
                }
                cnt++;
            }
        }
        catch (Exception e) {
            // if no keyword was found, return -1
            return -1;
        }
        
        // if no keyword was found, return -1
        return -1;
    }

Ich bin da etwas unsicher, ob ich so den Umgang mit Exceptions richtig verstanden habe?
 

Daniel_L

Bekanntes Mitglied
Ah, ich glaube, ich verstehe deinen Hinweis: Der try/catch-Block muss um diese Anweisung herum:
Code:
        // get a list of all keywords of the keywordfile
        List<?> keywordList = XPath.selectNodes( keywordFile, "/keywords/entry/" );

Sollte die Liste (d.h. die XML-Datei bzw. das Document) also leer sein, gibt es eine JDOMException, andernfalls gibt es mind. ein Element/Objekt in der Liste.

Die korrekte Verwendung wäre dann:
Code:
        List<?> keywordList = null;
        try {
            // get a list of all keywords of the keywordfile
            keywordList = XPath.selectNodes(keywordFile, "/keywords/entry/");
        } catch (JDOMException e) {
            return -1;
        }
?
 
M

maki

Gast
>> Ich bin da etwas unsicher, ob ich so den Umgang mit Exceptions richtig verstanden habe?

Wage mal zu behaupten, dass du es nicht verstanden hast ;)

Exception selbst zu fangen ist in 99% der Fälle schlicht falsch, JDOMException zu fangen wäre richtig.

return -1 zurückzugeben ist etwas das man in C gemacht hat, obwohl es neuerdings wieder Strömungen gibt welche Returncodes gegenüber Exceptions bevorzugen, unterstelle ich dir schlicht dass du es wie in C machen möchtest ;)

Lese dich mal in Exception Handling ein, dieses Wissen brauchst du immer in Java.

http://www.javaworld.com/jw-08-2000/jw-0818-exceptions.html
http://www.javaworld.com/jw-07-1998/jw-07-exceptions.html

http://www.javaworld.com/javaworld/javatips/jw-javatip134.html
http://www.javaworld.com/javaworld/javaqa/2003-02/02-qa-0228-evilthrow.html
 

Daniel_L

Bekanntes Mitglied
maki hat gesagt.:
>> Ich bin da etwas unsicher, ob ich so den Umgang mit Exceptions richtig verstanden habe?

Wage mal zu behaupten, dass du es nicht verstanden hast ;)

Da könntest du recht haben. :) In alter C-Gewohnheit frage ich vorher immer mit if-Abfragen ab, ob ein möglicher Fehler vorliegt, ob etwas geklappt hat etc.

Aber zum Rückgabewert -1: Ich rufe die Funktion ja von anderer Stelle auf, und dort brauche ich ja weiterhin die Information, ob ein Element existiert oder nicht. Daher habe ich einen Rückgabewert von -1 mit dabei. Wie sonst könnte ich an anderer Stelle feststellen, ob alles ok ist?

Bsp eines Aufrufs:

Code:
int kpos = myClass.getKeywordPosition( "Schlagwort" );

So, nun enthält kpos entweder einen Wert > 0, wenn das "Schlagwort" existiert, oder eben -1, falls nicht. Kann ich das wiederum anders abfragen als mit einer if-Abfrage, sodass ich den Rückgabewert von -1 nicht mehr benötige?
 
M

maki

Gast
Klar kannst du immer noch mit if Abfragen falls es keinen Sinn macht eine Exception zu fangen, nur weil ein Element eben nicht da ist.

Was machst du denn mit der Information der Position des Keywortes?
Wertest du sie weiter aus?
Wenn ja, kann das so stehen bleiben.
 

Daniel_L

Bekanntes Mitglied
maki hat gesagt.:
Was machst du denn mit der Information der Position des Keywortes?
Wertest du sie weiter aus?

Ja. Teilweise nutze ich diese Funktion nur zur Überprüfung, ob ein Schlagwort existiert, teilweise werden die Informationen weiter verwertet.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
G try. catch Verwendung Java Basics - Anfänger-Themen 11
R Input/Output Verwendung des Euro-Zeichens in Java Java Basics - Anfänger-Themen 7
D Probleme bei Verwendung short und int im Constuctor Java Basics - Anfänger-Themen 6
T Verwendung jna Java Basics - Anfänger-Themen 15
L Zufälligen Zahlencode, ohne mehrfacher Verwendung einer Ziffer Java Basics - Anfänger-Themen 15
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
A OOP Richtige Verwendung von ArrayList und equals Java Basics - Anfänger-Themen 24
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
b1ck Scanner schließen, erneute Verwendung Java Basics - Anfänger-Themen 12
H Datentypen Fehler bei Verwendung von enum Java Basics - Anfänger-Themen 9
A Verwendung von Interfaces Java Basics - Anfänger-Themen 7
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
G Verwendung von Konstruktor Java Basics - Anfänger-Themen 8
M Verwendung von System.exit(0) problematisch? Java Basics - Anfänger-Themen 1
D native Methoden, Verwendung? Java Basics - Anfänger-Themen 8
fLooojava kleines Projekt - Verwendung von Youtube Java Basics - Anfänger-Themen 22
X Array Ausgabe bei Verwendung von 2 Schleifen erklären Java Basics - Anfänger-Themen 8
G verwendung von regex Java Basics - Anfänger-Themen 3
K Problem bei der Verwendung von Gregorian Calender Java Basics - Anfänger-Themen 3
T NullPointerException bei Verwendung einer Klasse einer anderen .jar datei Java Basics - Anfänger-Themen 3
B Wie wichtig ist Verwendung von StringBuffer in Schleifen? Java Basics - Anfänger-Themen 10
B Verwendung von Arrays Java Basics - Anfänger-Themen 2
U Verwendung von Interface Java Basics - Anfänger-Themen 33
A Methoden Verwendung von crypt? Java Basics - Anfänger-Themen 2
D Muss ich eigentlich immer auf die Verwendung des richtigen Datentyps achten? Java Basics - Anfänger-Themen 7
D reg Exp, verwendung des endezeichen "$" Java Basics - Anfänger-Themen 5
C Verwendung von Schleifen? Java Basics - Anfänger-Themen 18
J Datentypen Array - Verwendung im Konstruktor Java Basics - Anfänger-Themen 8
C Verwendung von primitiven Datentypen Java Basics - Anfänger-Themen 8
J Problem mit NullPointerException bei Verwendung eines Arrays Java Basics - Anfänger-Themen 6
D Frage zur Verwendung einer Schnittstelle Java Basics - Anfänger-Themen 4
A Verwendung von abstrakten Klassen Java Basics - Anfänger-Themen 17
D Verwendung der Klasse Map Java Basics - Anfänger-Themen 9
C Verwendung von Matrizen in einer Schleife Java Basics - Anfänger-Themen 5
F Umlaute eines Strings entfernen (Verwendung von this?) Java Basics - Anfänger-Themen 2
I Verwendung von Constant Field Values Java Basics - Anfänger-Themen 4
J Verwendung von eigenen Klassen in JSP Java Basics - Anfänger-Themen 2
Z Beispiel Würfelspiel mit Verwendung von Feldern Java Basics - Anfänger-Themen 7
H Verwendung lokaler Einstellungen Java Basics - Anfänger-Themen 4
G getName, substring Verwendung Java Basics - Anfänger-Themen 3
I Fehler bei Verwendung von substring Java Basics - Anfänger-Themen 4
S Verwendung von Super Java Basics - Anfänger-Themen 7
M Verwendung von Robot... wie? Java Basics - Anfänger-Themen 6
M Verwendung von "this" Java Basics - Anfänger-Themen 2
U Liste importieren und für weitere Verwendung sichern Java Basics - Anfänger-Themen 4
feuervogel Integral unter Verwendung der Java-Bibliothek berechnen Java Basics - Anfänger-Themen 10
frau-u Probleme mit richtiger Verwendung von FileInputStream Java Basics - Anfänger-Themen 2
S valueOf() vs. toString() Verwendung??? Java Basics - Anfänger-Themen 13
A Kurze Frage zur Verwendung von this Java Basics - Anfänger-Themen 9
S Verwendung bitweiser Operatoren Java Basics - Anfänger-Themen 6
F Verwendung von this in statischen Kontext nicht möglich Java Basics - Anfänger-Themen 8
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
missy72 Catch Blöcke zusammenfassen Java Basics - Anfänger-Themen 6
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
D try/catch-Block bei for-Schleife Java Basics - Anfänger-Themen 14
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
districon Try - Catch Java Basics - Anfänger-Themen 8
JavaNoobi Try and Catch und übergabe von Objekten Java Basics - Anfänger-Themen 2
Y Wie kann ich die Variable in der Try Catch returnen? Java Basics - Anfänger-Themen 3
B Try-Catch Block Java Basics - Anfänger-Themen 3
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
B try catch finally Java Basics - Anfänger-Themen 2
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
H throws und try catch Java Basics - Anfänger-Themen 8
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
I Try-Catch innerhalb eines Catchblocks Java Basics - Anfänger-Themen 1
J Endlosschleife bei Try-Catch? Java Basics - Anfänger-Themen 3
K JOptionPane/catch/try/finally/if Java Basics - Anfänger-Themen 9
V InputMismatchException (Try and catch) Java Basics - Anfänger-Themen 10
L do-while-Schleife läuft doppelt, try catch fehler Java Basics - Anfänger-Themen 12
J Erste Schritte catch Exeption Parameter Java Basics - Anfänger-Themen 7
TheMenox Try and Catch Java Basics - Anfänger-Themen 12
J Try Catch Java Basics - Anfänger-Themen 6
DeVolt Java8 Paket Time: Datum prüfen / try-catch Java Basics - Anfänger-Themen 1
J Code in Try-Catch Block wird nicht komplett ausgeführt Java Basics - Anfänger-Themen 5
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
A Nicht zu findender Fehler in einem try/catch Block Java Basics - Anfänger-Themen 6
F try/catch Ausführungen ? Java Basics - Anfänger-Themen 3
S try-catch - Variablen werden nicht an return übergeben Java Basics - Anfänger-Themen 3
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
I Exception try-catch Java Basics - Anfänger-Themen 1
E Buchstaben verhindern / Try & Catch Block Java Basics - Anfänger-Themen 3
F try/catch - (else) Java Basics - Anfänger-Themen 11
L Warum ist der catch-Block nicht erreichbar ? Java Basics - Anfänger-Themen 8
C Problem mit try-catch in Schleife Java Basics - Anfänger-Themen 15
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
J Methoden try / catch exception Java Basics - Anfänger-Themen 5
S 'continue' in catch- und if-blöcken Java Basics - Anfänger-Themen 2
B Erste Schritte try-catch-Klauseln, überprüfte Ausnahmen Java Basics - Anfänger-Themen 4
D Erste Schritte Warum try-catch für FileWriter Java Basics - Anfänger-Themen 5
S try-catch-finally-Problem Java Basics - Anfänger-Themen 10
xehpuk Compiler-Fehler final Variable in try-catch Wert zuweisen Java Basics - Anfänger-Themen 8
F Exceptionbehandlung --> catch/throws Java Basics - Anfänger-Themen 11
M Try und Catch Java Basics - Anfänger-Themen 5
B Fehler mit try + catch verhindern Java Basics - Anfänger-Themen 8
N Catch Block in Try erzwingen Java Basics - Anfänger-Themen 14
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben