Page 225 - 6253
P. 225

якщо наявний блок catch не обробляє усі типи винятків).

                    // Обробка двох типів винятків

                    public class TwoException {

                     public static void main(String[] args) {

                       try {

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

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

                          int c[] = { 1 / a };

                          c[a] = 71;

                       } catch (ArithmeticException e) {

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

                       } catch (ArrayIndexOutOfBoundsException e) {

                          System.err.println("Вихід за межі масиву: " + e);

                       }

                       System.out.println("Після блоку try-catch");

                     }

                    }

                    Виняток  «Ділення  на  0»  виникне  при  ініціалізації  елементу  масиву  а

            нульовим значенням. В іншому випадку (при а = 1) згенерується виняток «Вихід за

            межі  масиву»  при  спробі  присвоїти  значення  другому  елементу  масиву  c[],  який

            містить  тільки  один  елемент.  Проте  приклад,  приведений  вище,  носить  чисто

            демонстративний  характер  і  не  є  зразком  хорошого  коду,  оскільки  в  цій  ситуації

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

            виконанням операцій. До того ж генерація і обробка винятків – більш ресурсоємна

            операція,  ніж  виклик  оператора  if  для  перевірки  аргументів.  Винятки  повинні

            застосовуватися тільки для обробки виняткових ситуацій, і якщо існує можливість

            обійтися без них, то слід нею скористатися.

                    Підкласи виняткових ситуацій у блоках catch повинні слідувати перед будь-

            яким з їх суперкласів, інакше суперклас перехоплюватиме ці винятки, наприклад:

                    try {

                     // Код, який може згенерувати виняток




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