throw — для того, чтобы вручную выбросить исколючение

Что будет выведено на экран ?

public static void main(String[] args) {

        System.out.println("=== START PROGRAM ===");
        try {
            z();
            System.out.println("After z");
        } catch (Exception e) {

            System.out.println("e " + e.getMessage());
        }
        System.out.println("=== END PROGRAM ===");
    }


    static void z() throws IOException {
        try {
            System.out.println("z in try");
            throw new IOException("IOException in z()");

        } catch (IOException e) {
            System.out.println("e " + e.getMessage());
            System.out.println("z catch");
            throw e;
        }


    }

=== START PROGRAM ===
z in try
e IOException in z()
z catch
e IOException in z()
=== END PROGRAM ===

Т.е. сначала

=== START PROGRAM ===
z in try
Далее выбросится IOException и мы попадем в catch метода z.
e IOException in z() — будет напечатано, т.к. данные текст передается в конструктор класса IOException.
z catch
Далее, выбрасываем еще исключение throw e, поэтому в методе main строку «After z» не печатаем, а попадаем в catch метода main.
Там опять же печатается:
e IOException in z()
И финиш программы:
=== END PROGRAM ===