#java #eclipse #exception #exception-handling
#java #eclipse #исключение #обработка исключений
Вопрос:
У меня есть ваше стандартное try/catch
утверждение:
try
{
// Do a bunch of stuff
}
catch ( Exception e )
{
throw e;
}
Есть ли какой-либо способ определить, какие возможные исключения могут быть перехвачены из моего кода, не пытаясь вызвать сбой моего кода, чтобы увидеть, какой тип исключения e
?
Например, если я выполнил несколько HTTP-вызовов или, возможно, некоторые JSON-файлы, которые я хочу обработать по-другому, мой код может выглядеть так:
try
{
// Do a bunch of stuff
}
catch ( HttpException e )
{
// Do something
throw e;
}
catch ( JSONException e )
{
// Do something else
throw e;
}
catch ( Exception e )
{
throw e;
}
Но, возможно, я делаю целую кучу вещей в своем коде, и я не уверен (из-за отсутствия опыта работы с Java), какие возможные исключения могут быть обнаружены…
Есть ли какой-либо возможный способ использовать Eclipse для просмотра набора кода и получения списка всех возможных типов исключений, которые могут быть обнаружены?
Ответ №1:
Ну, есть два типа исключений: проверенные и непроверенные.
Вы не можете получить список всех непроверенных исключений, потому что они могут не сообщать вам, что это такое. (Они могут быть, если вы прочитаете документацию для библиотек, которые вы используете.)
Для проверенных исключений вы не смогли бы скомпилировать код, если бы не перехватывали их все. Я бы просто удалил Exception e
блок и скомпилировал его. Честно говоря, перехватывать каждое исключение — плохая идея, если вы действительно не готовы с ним справиться.
Ответ №2:
Невозможно получить список возможных непроверенных исключений. Поскольку они нигде не объявлены (они создаются «на лету»), это просто невозможно без довольно специфического инструмента анализа кода — и даже тогда он может не перехватить некоторые из скомпилированных библиотечных классов.
Для примеров сложных вещей, которые нужно предсказать, рассмотрим, что все, что выделяет память, может вызвать исключение нехватки памяти, и вы даже можете создать экземпляр исключения рефлексивно, что было бы практически невозможно найти с помощью КАКИХ-ЛИБО инструментов статического анализа.
Если вы действительно параноик, вы можете перехватить RuntimeException, который должен получить все непроверенные исключения, с которыми вы хотели бы иметь дело — это не рекомендуемая тактика, но может предотвратить сбой вашей программы из-за какой-то неизвестной / невидимой будущей ошибки…
Хорошим тоном является помещать любые генерируемые исключения в комментарии, но эта практика не соблюдается последовательно.
Ответ №3:
В NetBeans и, вероятно, в Eclipse, если вы просто вводите код без какого-либо блока try-catch, IDE намекнет вам, какие исключения будут выдаваться, и предложит обернуть инструкции в блок try-catch. Это, вероятно, ваш самый простой способ перехватить все возможные исключения.
Комментарии:
1. Сможет ли он сообщить вам о необъявленных непроверенных исключениях?
2. Это происходит до тех пор, пока оно предоставляется непосредственно определениями методов в пути вызова, оно будет предлагать их.
3. @glowcoder Нет, они не отмечены, а не в сигнатуре методов, которые могут их вызывать. Как говорит Билл К., они могут быть созданы любым способом, в том числе динамически.