2014-09-28 5 views
-2

При использовании определенных классов в java, почему я, похоже, вынужден предоставлять обработку исключений для определенных классов в java api?Требования к обработке исключений

, такие как:

private DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
private DocumentBuilder db; 

    try { 
     db = dbf.newDocumentBuilder(); 
    } catch(Exception e) {} 

компилируется, но:

private DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
private DocumentBuilder db; 


     db = dbf.newDocumentBuilder(); 

не будет. Зачем? Может кто-нибудь прояснить это для меня? Могу ли я не просто позволить возможному исключению повлиять на мою программу во время выполнения без ее обработки?

ответ

2

Потому что Java проверила исключения. Это означает, что компилятор потребует от вас либо уловить исключение, либо рекламировать, что ваш метод может потенциально throw исключение, которое может вызвать вызов метода.

This particular method может выбросить ParserConfigurationException.

Вы не имеют, чтобы поймать его, но если вы этого не сделаете, то вы сделать должны рекламировать этот факт на вашем методе. Например:

private void myMethod() throws ParserConfigurationException 

Это говорит о потребляющем коде, который должен быть подготовлен для потенциального обнаружения и обработки исключения.

Это еще один аргумент, полностью ли проверенные исключения - это хорошо. В Интернете нет недостатка в дискуссиях по этому вопросу. Но это не то, что компилятор будет заботиться о :)

Также отметим, что, в то время как это компилирует:

try { 
    db = dbf.newDocumentBuilder(); 
} catch(Exception e) {} 

пустой catch блок является классно плохая идея. Это означает, что вы ловли исключение, но вы не имеете смысла обработка это. The two are very different things.

Смежные вопросы