Я отвечал на волну основных вопросов практического теста Java, и правильный ответ на следующий вопрос проскользнул мимо меня, пройдя тест.Необработанное исключение Java выполняет остаток метода?
Вопрос: «Если исключение не поймано, блок finally будет запущен, а остальная часть метода будет пропущена - ИСТИНА или ЛОЖЬ?»
Я пытаюсь доказать ответ с классом ThrowTest (вставленный снизу), но я считаю, что обработка исключений Java несколько незнакома. Я компилирую класс, как это происходит с частью ArrayIndexOutOfBoundsException блока catch, закомментированной. Затем я выполняю класс, не передавая входной парм, создавая таким образом исключение (исключение ArrayIndexOutOfBoundsException). Я бы ожидал, что окончательный System.out.println не будет выполняться, и это действительно не так.
Я обнаружил, что если я не комментирую блок catch ArrayIndexOutOfBoundsException и перекомпилирую, класс затем поймает эту конкретную ошибку во время выполнения и выполнит «остальную часть метода» println внизу. Итак, мой код доказывает, что остальная часть «остальной части метода пропущена», или я должен проверить ее по методу, отличному от основного метода? Возможно, существует более простой способ его тестирования.
public class ThrowTest
{
public static void main(String[] args)
{
try
{
String anyString = args[0];
System.out.println("Try code executes");
}
catch(SecurityException e) //any old exception
{
System.err.println ("Error: SecurityException. ");
e.printStackTrace();
}
/* begin comment
catch(ArrayIndexOutOfBoundsException e)
{
System.err.println("Error: Caught ArrayIndexOutOfBoundsException. ");
e.printStackTrace();
}
end comment */
finally
{
System.out.println("finally block executes!");
}
System.out.println("Rest of method executes!");
}
}
Спасибо StrixVaria a nd Veger для быстрых ответов вчера! – user2127664