Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Вложенный блок try catch


Автор: Golovastik 12.12.2010, 01:24
Вроде программа компилируется, но не срабатывают исключения, и не выводятся сразу 2 исключения, первый для массива, второй для чисел деленеи на ноль.

Код


package javaapplication3;
public class Main {
   public static void main(String[] args) {
       try{
       int f[]= {1};
       f[2] = 25;
       try{
        int d = 5/0;
       } catch(ArrayIndexOutOfBoundsException e){
           System.out.println("Ошибка в массиве "+e);
       }
       }catch(ArithmeticException e){
         System.out.println("Деление на ноль "+e);
       }

       }
   }



   

Автор: Temdegon 12.12.2010, 02:34
У вас получается все наоборот:
для массива вы ловите ArithmeticException, а не ArrayIndexOutOfBoundsException. Следовательно, на строке 6 ваша программа завершится, т.к. исключение ArrayIndexOutOfBoundsException произойдет, а вы его не обрабатываете. Поменяйте местами обработчики.

Автор: Golovastik 12.12.2010, 17:05
Если написать так:
Код

package javaapplication3;
public class Main {
   public static void main(String[] args) {
      try{
         int f[]= {1};
         f[2] = 25;
         try{
            int d = 5/0;
         } catch(ArithmeticException e){
            System.out.println("Деление на ноль "+e);
         }
      }catch(ArrayIndexOutOfBoundsException e){
         System.out.println("Ошибка в массиве "+e.getMessage());
      }
   }
}


Происходит вывод такой:
Код

run:
Ошибка в массиве 2 |Что это за число 2 вывелось?
BUILD SUCCESSFUL (total time: 0 seconds)


А мне нужно чтоб 2 исключения выдавало, по поводу массива и по поводу деления на ноль.

Автор: Temdegon 12.12.2010, 18:40
А чего вы ожидали?
В строке 6 возникает исключение, и исполнение переходит в стоку 13. Или вы как-то по-другому представляете себе работу исключений?

Автор: Golovastik 12.12.2010, 19:55
Ещё проблема такая, скажите как сделать тоже самое, только с использованием моих собственных исключений, как правильно написать так чтоб было тоже самое только используя собственные исключения?
Код

 
package javaapplication3;
public class Main {
   public static void main(String[] args) {
      try{
         int f[]= {1};
         f[2] = 25;
         try{
            int d = 5/0;
         } catch(ArithmeticException e){
            System.out.println("Деление на ноль "+e);
         }
      }catch(ArrayIndexOutOfBoundsException e){
         System.out.println("Ошибка в массиве "+e.getMessage());
      }
   }
}


Автор: Temdegon 12.12.2010, 22:23
Никак.
От того, что вы напишете свои классы исключений, JVM не станет их вам бросать, вместо ArithmeticException и ArrayIndexOutOfBoundsException.
Если вы пишете какой-то свой класс, то вы можете бросать свои исключений и обрабатывать их.
На пример:
Код

    public void myMethod(Object o) throws MyException {
        if (o == null) throw new MyException();
    }

По понятным причинам, заменить ArithmeticException вашим собственным не получится.
Единственное, что вы можете сделать, это ловить ArithmeticException и вместо него бросить ваше исключение:
Код

         try{
            int d = 5/0;
         } catch(ArithmeticException e){
            throw new MyArithmeticException();
         }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)