2012-03-26 3 views
0
try{Integer.parse("Abhishek");} 
catch(NumberFormatException e){} 
catch(Exception e){} 
jeden

Wenn für das obige Stück Code zu schaffen bin, wenn Number auftritt, sofort auf den Fang Ursache von Number gehen. Aber ich erstelle keine Instanz der NumberFormatException ... und dann, wo sie erstellt wird. Ist es - Sobald eine Ausnahme auftritt, überprüft intern JVM den Typ der Ausnahme und intern wird eine Instanz dieses bestimmten Ausnahmetyps erstellt und sobald es einen übereinstimmenden Typ in der Fanghierarchie registriert oder findet Geht zu dieser Schleifewie in catch-Klausel wird eine Instanz von Expection aufgezeichnet zu werden, während ich nicht von ihnen

Antwort

3

Aber ich bin nicht eine Instanz der Number ... und

Integer.parseInt("Abhishek"); 

Das Verfahren zur Herstellung eines Number werfen, wenn der String nicht in einen int analysiert werden. Dies ist documented in the Javadoc.

Sobald eine Ausnahme auftritt, intern JVM die Art der Ausnahme überprüft und intern eine Instanz dieses besonderen Ausnahmetypen erstellt bekommen und sobald es oder findet registriert jede passende Art in der Hierarchie zu fangen, geht es, dass zu Schleife

Mehr oder weniger ...

Das ist nicht wirklich, dass alle tief in JVM Interna geht, though. Integer # parseInt ist in Java implementiert, genau wie Ihr eigenes Programm. Sie können the source code betrachten, wenn Sie interessiert sind.

1

Das NumberFormatException-Objekt wird innerhalb der parseInt-Methode von Integer erstellt. (Es gibt keine Integer.parse(String) Methode.)

Wenn eine Ausnahme ausgelöst wird, die JVM einen bestimmten Satz von Regeln in §14.20.1 of the Java Language Specification beschrieben verwendet eine passende catch Klausel auszuwählen auszuführen. Die wichtigste Regel ist:

Wenn der Laufzeittyp von V Zuordnung kompatibel (§ 5.2) einer abfangbare Ausnahmeklasse jeder catch-Klausel der try-Anweisung, dann der erste (ganz links), so catch-Klausel ist ausgewählt.

0

Ja, die JVM die Instanz von Exception erstellt .. Sie beantwortet Ihre eigene Frage ...

0

Verfahren parse() schafft die Exception-Instanz und wirft sie, wenn sie denkt, dass ein Problem aufgetreten ist. Wenn Sie es fangen, fangen Sie (fast immer) die Instanz parse() Methode erstellt und warf.

1

was jeder verpasst hat erklärt, so ist noch lange nicht, dass in den Code irgendwo für Integer.parseInt() gibt die Aussage:

throw new NumberFormatException(...) 

, dass der Punkt, wo die Ausnahme beide erstellt und geworfen ist. Sie könnten den Quellcode nachschlagen und diese Anweisung finden.

Verwandte Themen