как в предложении catch экземпляр Expection записывается, а я не создаю ни одного из них - PullRequest
0 голосов
/ 26 марта 2012
try{Integer.parse("Abhishek");}
catch(NumberFormatException e){}
catch(Exception e){}

Если для вышеприведенного фрагмента кода возникнет NumberFormatException, он немедленно перейдет к причине перехвата NumberFormatException.Но я не создаю ни одного экземпляра NumberFormatException ..., то, где он создается. Это похоже на - Как только возникает какое-либо исключение, внутренне JVM проверяет тип исключения, и внутренне создается один экземпляр этого конкретного типа исключения, и как только он регистрируется или находит какой-либо соответствующий тип впоймать иерархию, она идет в этот цикл

Ответы [ 5 ]

3 голосов
/ 26 марта 2012

Но я не создаю ни одного экземпляра NumberFormatException ...

 Integer.parseInt("Abhishek");

Этот метод генерирует исключение NumberFormatException, если строка не может быть проанализирована в int. Это задокументировано в Javadoc .

Как только возникает любое исключение, внутренняя JVM проверяет тип исключения, и внутренне создается один экземпляр этого конкретного типа исключения, и, как только он регистрируется или находит какой-либо соответствующий тип в иерархии перехвата, он переходит в этот цикл

Больше или меньше ...

Правда, это не так уж глубоко во внутренностях JVM. Integer # parseInt реализован в Java, как и ваша собственная программа. Вы можете посмотреть исходный код , если вам интересно.

1 голос
/ 26 марта 2012

То, что все упустили до сих пор, объясняет, что где-то внутри кода для Integer.parseInt() есть утверждение:

throw new NumberFormatException(...)

Это точка, где исключение и создается, и выбрасывается.Вы можете посмотреть исходный код и найти это утверждение.

1 голос
/ 26 марта 2012

Объект NumberFormatException создается внутри parseInt метода Integer. (Нет Integer.parse(String) метода.)

Когда генерируется исключение, JVM использует определенный набор правил, описанных в §14.20.1 Спецификации языка Java , чтобы выбрать соответствующее предложение catch для выполнения. Основное правило:

Если тип времени выполнения V совместим по присваиванию с (§5.2) классом перехватываемых исключений любого предложения catch оператора try, то выбирается первое (самое левое) такое предложение catch.

0 голосов
/ 26 марта 2012

Метод parse() создает экземпляр исключения и выдает его, когда считает, что возникла проблема. Когда вы его ловите, вы (почти всегда) ловите экземпляр, созданный и выданный методом parse().

0 голосов
/ 26 марта 2012

Да , JVM создает экземпляр Exception. Вы ответили на свой вопрос ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...