Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вложенный блок try catch 
:(
    Опции темы
Golovastik
Дата 12.12.2010, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: 1
Всего: 0



Вроде программа компилируется, но не срабатывают исключения, и не выводятся сразу 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);
       }

       }
   }



   

PM MAIL   Вверх
Temdegon
Дата 12.12.2010, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



У вас получается все наоборот:
для массива вы ловите ArithmeticException, а не ArrayIndexOutOfBoundsException. Следовательно, на строке 6 ваша программа завершится, т.к. исключение ArrayIndexOutOfBoundsException произойдет, а вы его не обрабатываете. Поменяйте местами обработчики.
PM MAIL   Вверх
Golovastik
Дата 12.12.2010, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: 1
Всего: 0



Если написать так:
Код

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 исключения выдавало, по поводу массива и по поводу деления на ноль.

PM MAIL   Вверх
Temdegon
Дата 12.12.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



А чего вы ожидали?
В строке 6 возникает исключение, и исполнение переходит в стоку 13. Или вы как-то по-другому представляете себе работу исключений?
PM MAIL   Вверх
Golovastik
Дата 12.12.2010, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 19.7.2009

Репутация: 1
Всего: 0



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

 
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());
      }
   }
}


PM MAIL   Вверх
Temdegon
Дата 12.12.2010, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



Никак.
От того, что вы напишете свои классы исключений, 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();
         }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0894 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.