Page 231 - 6253
P. 231

throw new SalaryException("Ділення на 0", e);

                       }

                     }

                     public static void main(String[] args) {

                       try {

                          double res = salary(3);

                       } catch (SalaryException e) {

                          System.err.println(e.toString());

                          System.err.println(e.getHiddenException());

                       }

                     }

                    }

                    У  випадку,  якщо  значення  заробітної  плати  обчислити  не  вдається,  то

            генерується об'єкт класу ArithmeticException, обробник якого, в свою чергу, генерує

            виняток SalaryException, який раніше був створений розробником. Він приймає два

            аргументи.  Один  з  них  –  повідомлення,  яке  має  бути  виведене  в  потік  помилок;

            інший – існуючий об’єкт винятку, який призвів до виклику винятку SalaryException.

            Представлений  вище  код  показує,  як  можна  зберегти  інформацію  всередині

            власного винятку. Перевага такого збереження полягає в тому, що метод всередині

            якого генерується виняткова ситуація може дізнатися реальну причину виникнення

            винятку SalaryException, викликавши метод getHiddenException().

                    // Створення власного винятку SalaryException

                    public class SalaryException extends Exception {

                     private Exception _hidden;



                     public SalaryException(String er) {

                       super(er);

                     }

                     public SalaryException(String er, Exception e) {

                       super(er);

                       _hidden = e;




                                                              230
   226   227   228   229   230   231   232   233   234   235   236