Исключение, брошенное в улов и, наконец, пункт - PullRequest
138 голосов
/ 23 сентября 2010

На вопрос для Java в университете был следующий фрагмент кода:

class MyExc1 extends Exception {}
class MyExc2 extends Exception {}
class MyExc3 extends MyExc2 {}

public class C1 {
    public static void main(String[] args) throws Exception {
        try {
            System.out.print(1);
            q();
        }
        catch (Exception i) {
            throw new MyExc2();
        }
        finally {
            System.out.print(2);
            throw new MyExc1();
        }
    }

    static void q() throws Exception {
        try {
            throw new MyExc1();
        }
        catch (Exception y) {
        }
        finally {
            System.out.print(3);
            throw new Exception();
        }
    }
}

Меня попросили дать его вывод.Я ответил 13Exception in thread main MyExc2, но правильный ответ 132Exception in thread main MyExc1.Почему это так?Я просто не могу понять, куда идет MyExc2.

Ответы [ 12 ]

0 голосов
/ 30 июля 2013

Я думаю, что это решит проблему:

boolean allOk = false;
try{
  q();
  allOk = true;
} finally {
  try {
     is.close();
  } catch (Exception e) {
     if(allOk) {
       throw new SomeException(e);
     }
  }
}
0 голосов
/ 23 сентября 2010

Я думаю, вам просто нужно пройтись по finally блокам:

  1. Печать "1".
  2. finally в q печать «3».
  3. finally in main печать "2".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...