Блок multi-catch

Блок multi-catch

Если в блоке try выбрасываются исключения из одной иерархии (суперкласс и дочерний класс), то в multi-catch блоке должен указываться только самый верхний класс данной иерархии.


int a = 10;
   try {
       switch(a) {
           case 10: throw new IOException();
           case 100: throw new RemoteException();
           case 0: throw new SQLException();
       }
   // ошибка компиляции. RemoteException является дочерним классом IOException
   } catch (RemoteException | IOException | SQLException e) {
       System.out.println(e.toString());
   }
Если указать только родительский класс, код скомпилируется успешно.


try {
     /* ...*/ 
} catch (IOException | SQLException e) {
    System.out.println(e.toString());
}
Если же ислючения имеют одного родителя, но не имеют между собой иерархической связи, каждый из них нужно указывать в блоке multi-catch.


int a = 10;
   try {
       switch(a) {
           case 10: throw new FileNotFoundException();
           case -10: throw new RemoteException();
           case 0: throw new SQLException();
       }
   } catch (RemoteException | FileNotFoundException | SQLException e) {
       System.out.println(e.toString());   
     }
  }
Исключения