public class Test { public static final class Ex1 extends Exception { private static final long serialVersionUID = 1; } private void a1() { try { a1_1(); } catch (Ex1 si) { assert si != null; } } protected Object a1_1() throws Ex1 { return null; } private void a2() { try { a2_1(); } catch (Ex2 si) { assert si != null; } } protected Object a2_1() throws Ex2 { return null; } public final class Ex3 extends Exception { private static final long serialVersionUID = 1; } private void a3() { try { a3_1(); } catch (Ex3 si) { assert si != null; } } protected Object a3_1() throws Ex3 { return null; } } final class Ex2 extends Exception { private static final long serialVersionUID = 1; }