2016-03-26 2 views
0

Ich schrieb diesen Code mit try/catch machen, und ich will es diese zur Ausgabe:try/catch-Methode einen Parameter zu erhalten, die eine bestimmte Ausgabe von einer Methode in Java

A null pointer exception occurred 
In the finally block 

The length of the string is 1 
A number format exception occurred 
In the finally block 

A null pointer exception occurred 
Some type of exception occurred 
In the finally block 

The length of the string is 1 
The value is 5 

aber für einige Grund, wenn ich rufe Ich versuche, es von der Hauptsache zu bekommen, bekomme ich einen Fehler, so ist meine Frage, wie kann ich die Methode richtig von der Haupt anrufen, um die Ausgabe oben zu bekommen?

dies ist die Methode, die ich schrieb:

public static void problem2(String s) { 
    try { 
     int stringLen = s.length(); 
     System.out.println("The length of the string is " + stringLen); 
     int i = Integer.parseInt(s); 
     System.out.println("The value is " + i); 
    } catch (NumberFormatException e1) { 
     System.out.println("A number format exception occurred"); 
    } catch (NullPointerException e2) { 
     System.out.println("A null pointer exception occurred"); 
    } catch (Exception e3) { 
     System.out.println("Some type of exception occurred"); 
    } finally { 
     System.out.println("In the finally block"); 
    } 
} 
+0

Was ist der Fehler, den Sie bekommen? – KevinO

+0

Ich habe es gerade getestet und es funktioniert, so wie Kevin sagt, was ist der Fehler? –

Antwort

2

Vorausgesetzt, dass Sie diese statische Methode in einer Klasse „TryCatchExample“ gesetzt, dann wird der Folgenden wird die Ausgabe für die Beispiele 1, 2, produzieren und 4. Da Sie gefangen Bei der NullPointerException wird der Code nicht von einem Catch-Block zum nächsten übergeben. Außerdem, warum möchten Sie? Sie haben die spezifischere Ausnahme abgefangen, die dem Benutzer möglicherweise eine bestimmte Rückmeldung gibt. Die allgemeinere Ausnahme ist weniger informativ und wird von vielen als ein schlechter Ansatz angesehen.

public static void main(String[] args) 
{ 
    TryCatchExample.problem2(null); // prints NPE 
    TryCatchExample.problem2("A"); // prints numberformat 
    // no example for both numberformat and npe 
    TryCatchExample.problem2("5"); // prints lengths & value 5 
} 
0

Ich habe gerade Ihren Code ausführen und es scheint gut zu laufen

public class UnknownError { 

public static void main(String[] args) { 
    problem2("hello"); 

} 

public static void problem2(String s) { 

     try { 
     int stringLen = s.length(); 
     System.out.println("The length of the string is " + stringLen); 
     int i = Integer.parseInt(s); 
     System.out.println("The value is " + i); 

     } catch (NumberFormatException e1) { 
     System.out.println("A number format exception occurred"); 

     } catch (NullPointerException e2) { 
     System.out.println("A null pointer exception occurred"); 

     } catch (Exception e3) { 
     System.out.println("Some type of exception occurred"); 

     } finally { 
     System.out.println("In the finally block"); 
     } 
} 

}

Sind Sie die Methode anders zu diesem Aufruf?

0

Die Methode hat die folgende Signatur und hat drei Möglichkeiten. Ich möchte, dass Sie die folgenden Möglichkeiten verstehen und dann Ihre Methode mit den entsprechenden Parameterwerten aufrufen oder Änderungen an Ihrem Code vornehmen, um die gewünschte Ausgabe zu erhalten. Es wird besser für Sie lernen, anstatt den Lösungscode oder Sie aufzuschreiben.

public static void problem2(String s)

1. Möglichkeit

Wenn der Parameter Null s dann bewirkt, dass int stringLen = s.length();NullPointerException ist, wie Sie Länge zu holen versuchen() von einem Objekt, das nie erstellt (null) wurde. Jetzt erreicht der Code-Flow den unteren Block.

catch (NullPointerException e2) { 
    System.out.println("A null pointer exception occurred"); 

    } 

Also die nächste Zeile gedruckt ist Eine Null-Zeiger-Ausnahme aufgetreten

Als nächstes wird schließlich aufgerufen werden und gedruckt nächste Zeile wird Im finally-Block

2. Möglichkeit

seines

Falls der Parameter nicht null ist.

int stringLen = s.length(); 
System.out.println("The length of the string is " + stringLen); 

Above Code wird Die Länge der Zeichenfolge gedruckt ist 1 (1, wenn nur ein Zeichen in der Zeichenfolge vorhanden ist).

Im Falle s enthält eine Zeichenkette, die nicht

Dieser Code wird werfen NumberFormatException in diesem Fall zu einem Integer tut entspricht und Strömung wird im folgenden Code erreichen.

catch (NumberFormatException e1) { 
    System.out.println("A number format exception occurred"); 
} 

Dieser druckt ein Zahlenformat Ausnahme aufgetreten

Wieder wird schließlich im Block schließlich gedruckt wird Block ausgeführt und werden.

3. Möglichkeit

Wenn Ihr String-Parameter nicht null und enthält ein Zeichen auf einen gültigen Integer entspricht dann

int stringLen = s.length(); 
System.out.println("The length of the string is " + stringLen); 
int i = Integer.parseInt(s); 
System.out.println("The value is " + i); 

dieser Code in der Druck Die Länge der Saite führen ist ** gefolgt von ** Der Wert ist 1, gefolgt von der Zeichenkette, die vom finally-Block gedruckt wird, Im finally-Block.

Verwandte Themen