2015-09-03 3 views
-1

Быстрые вопросы, ребята, я вижу много кода в отношении блоков try/catch, и я видел это много раз, что люди используют определенные Исключения для вещей. Я имею в виду, что это за причина? Обычно я просто помещаю Exception e внутри блока catch и просто читаю его из Log ... это проблема производительности или просто привычка?Кастинг с необходимостью исключения

ответ

2

Имея разные классы исключений, вы можете иметь конкретный код исключения без необходимости определять тип.

Например, вместо написания:

try { 
    ...do some stuff 
} catch(Exception e) { 
    if(e instanceof NullpointerException) { 
     ... do something 
    } else if(e instanceof IOExceptio) { 
     ... do something else 
    } 
} 

вы можете просто написать:

try { 
    ... do something ... 
} catch (NullpointerException epe) { 
    ... handle NPE 
} catch (IOException ioe) { 
    ... handle IO Exception 
} 

т.д.

Кроме того, вы можете также выбрать, чтобы поймать только некоторые исключения, и позволяют другие должны быть брошены по методу:

public void doSomeIO() throws IOException { 

    try { 
     ... do something ... 
    } catch(NullpointerException) { 
     ... handle NPE 
    } 

} 

И тогда вы бы назвали:

try { 
    doSomeIO(); 
except (IOException) { 
    handle the IO exception 
} 

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

+0

так что это как разные методы для разных исключений? любой пример? – sixeco

+0

См. Выше, например. – 323go

0

Ошибка не такая, если вы поймаете ClassCastException, чем если вы поймаете исключения ArrayIndexOutOfBounds. Вы должны обращаться с ними соответственно.