catch(Exception e){...}
Если срабатывает один из блоков catch, то остальные блоки в данной конструкции try-catch выполняться не будут.
Создание пользовательских классов исключений
Как уже отмечалось, допускается создание собственных классов исключений. Для этого достаточно создать свой класс, унаследовав его от любого наследника java.lang.Throwable (или от самого Throwable ).
Пример:
public class UserException extends Exception { public UserException() { super(); } public UserException(String descry) { super(descry); } }
Соответственно, данное исключение будет создаваться следующим образом:
throw new UserException( 'Дополнительное описание');
Переопределение методов и исключения
При переопределении методов следует помнить, что если переопределяемый метод объявляет список возможных исключений, то переопределяющий метод не может расширять этот список, но может его сужать. Рассмотрим пример:
public class BaseClass{ public void method () throws IOException { ... } } public class LegalOne extends BaseClass { public void method () throws IOException { ... } } public class LegalTwo extends BaseClass { public void method () { ... } } public class LegalThree extends BaseClass { public void method () throws EOFException,MalformedURLException { ... } } public class IllegalOne extends BaseClass { public void method () throws IOException,IllegalAccessException { ... } } public class IllegalTwo extends BaseClass { public void method () { ... throw new Exception(); } }
В данном случае:
определение класса LegalOne будет корректным, так как переопределение метода method() верное (список ошибок не изменился);
определение класса LegalTwo будет корректным, так как переопределение метода method() верное (новый метод не может выбрасывать ошибок, а значит, не расширяет список возможных ошибок старого метода);
определение класса LegalThree будет корректным, так как переопределение метода method() будет верным (новый метод может создавать исключения, которые являются подклассами исключения, возбуждаемого в старом методе, то есть список сузился);
определение класса IllegalOne будет некорректным, так как переопределение метода method() неверно ( IllegalAccessException не является подклассом IOException, список расширился);
определение класса IlegalTwo будет некорректным: хотя заголовок method() объявлен верно (список не расширился), в теле метода бросается исключение, не указанное в throws.
Особые случаи
Во время исполнения кода могут возникать ситуации, которые почти не описаны в литературе.
Рассмотрим такую ситуацию:
import java.io.*; public class Test { public Test() { } public static void main(String[] args) { Test test = new Test(); try {