Page 226 - 6253
P. 226

} catch(RuntimeException e) {

                     // Клас RuntimeException перехопить об'єкти всіх своїх підкласів

                    } catch(ArithmeticException e) {

                     // Не може бути викликаний, тому виникає помилка компіляції

                    }

                    Оператори try можна вкладати один в одний. Якщо у оператора try нижчого

            рівня  немає  блоку  catch,  що  відповідає  згенерованому  винятку,  то  пошук  буде

            виконаний на рівень вище, і будуть перевірені блоки catch зовнішнього оператора

            try.

                    // Вкладені блоки try-catch

                    public class MultiTryCatch {

                     public static void main(String[] args) {

                       try { // Зовнішній блок

                          int a = (int) (Math.random() * 2) - 1;

                          System.out.println("a = " + a);

                          try { // Внутрішній блок

                                  int b = 1 / a;

                                  StringBuffer sb = new StringBuffer(a);

                          } catch (NegativeArraySizeException e) {

                                  System.err.println("Недопустимий розмір буфера: " + e);

                          }

                       } catch (ArithmeticException e) {

                          System.err.println("Ділення на 0" + e);

                       }

                     }

                    }

                    В  результаті  запуску  програми  при  a = 0  буде  згенеровано  виняток

            ArithmeticException,  а  відповідний  за  його  обробку  блок  try-catch  є  зовнішнім  по

            відношенню  до  місця  генерації  винятку.  Цей  блок  і  буде  задіяний  для  обробки

            згенерованої виняткової ситуації.

                    Третій  підхід  до  обробки  виняткових  ситуацій  буде  розглянутий  нижче  на




                                                              225
   221   222   223   224   225   226   227   228   229   230   231