Смотрела на работу исключений по такому коду:
public class HelloWorld {

        public static void main(String[] args)
        {
            System.out.println("Адронный Коллайдер запущен");

            try
            {
                start(0);
            }
            catch(Exception e)
            {
                System.out.println(Arrays.toString(e.getStackTrace()));
                e.printStackTrace();
            }

            System.out.println("Адронный Коллайдер остановлен");
        }

        public static void start(int n)
        {
            System.out.println("Все отлично работает: " + n);
            System.out.println(2/n);
            System.out.println("Никаких проблем нет: " + n);
        }
    }
Вывод был таким:
Адронный Коллайдер запущен
Все отлично работает: 0
[HelloWorld.start(HelloWorld.java:25), HelloWorld.main(HelloWorld.java:11)]
Адронный Коллайдер остановлен
java.lang.ArithmeticException: / by zero
	at HelloWorld.start(HelloWorld.java:25)
	at HelloWorld.main(HelloWorld.java:11)
Даже если убрать строчку 13 из кода, все равно сперва выведется строка "Адронный Коллайдер остановлен". Но по моей логике, раз она идет после блока catch, то и выводиться должна после него. Почему же она выводится до?