2013-11-14 3 views
2

Создание класса TestBook и создавать тестовые случаи тестового класса Bookобращения с попытаться поймать

Не обрабатывать любое исключение в этой фазе исключения, просто передать их в метод вызывающего абонента.

Приведенная выше инструкция означает класс моего тестировщика, TestBook должен иметь основной метод «throws ParseException», и когда я запускаю свою программу с «ошибкой», это не должно разрушаться, вместо этого должно быть исключение ...?

public class TestBook{ 
     public static Book directory=new Book(); //Book contains an arraylist of dates 

    public static void main(String[] args) throws ParseException { 
       directory.addApt("01-04-1996","testdate"); 
      //this will create an instance of a Apt and is in the INCORRECT format. 
     } 

Метод addApt из класса Book выглядит следующим образом:

 String[] dates=date.split("-"); 
     if(dates[0]!=2) 
      throw new ParseException("incorrect format day should be in numbers,2); 
      if(dates[0]!=3) 
      throw new ParseException("incorrect format month should be in letters,2); 
      if(dates[0]!=4) 
      throw new ParseException("incorrect format year should be in numbers,2); 
     Apt newAppt=new Apt=(date,type); 

Когда я запускаю это, я получаю сообщение об ошибке: Исключение в потоке «основного» java.text.ParseException: неправильный формат , месяц должен быть в буквах.

Но мой вопрос в том, почему это проявляется, так как я его бросаю, почему он обрабатывает это так? я предполагаю, что я запутался о броске (ы) против попробовать/поймать ..

+0

Вы указали, что выбрали ParseException из main без его обработки. – shazin

+0

Я уверен, что этот код не компилируется. Вы имели в виду «даты [0] .length! = 2'? Тогда это должны быть «даты [0]», «даты [1]» и т. Д. –

ответ

0

throw throws a exception. Ключевое слово позволяет вам создавать собственные пользовательские исключения.

ВСЕ необработанные исключения, нестандартные или стандартные, вызовут исключение во время выполнения.

Поместите код, который вызывает метод addApt в try/catch блоке, и catchexceptions, что вы throwing.


Бросив исключение это отличный способ, чтобы выйти из возвращения значения из метода с Непустым типом возвращаемого значения. Для очень простого примера предположим, что у нас есть метод, называемый public int getDaysInMonth(int month). Теперь мы ожидаем, что month будет 1-12. И наш метод должен вернуть int. Итак, что мы будем делать, когда метод вызывается с недопустимым месяцем?

int getDaysInMonth(int month) { 
    switch(month) { 
     //case 1-12 
     default: 
      break; 
    } 
} 

Итак ... у нас может быть случай для всех допустимых месяцев, это не проблема. Одним из решений было бы, возможно, вернуть 0 или -1 или что-то, что будет очевидным возвратным значением. Но на самом деле нам вообще ничего не нужно возвращать. Мы можем просто выбросить исключение.

default: 
    throw new IllegalArgumentException("Month must be between 1 and 12"); 

Теперь мы помещаем наши звонки getDaysInMonth(int) в try/catch блоке, или если мы не будем, наша программа будет потенциально остановить с незаконным исключением аргумента.Но мы можем поставить логику в блок catch, чтобы справиться с тем, как справиться с этим исключением и т. Д.

Я знаю, что мой пример не смоделирован после вашей ситуации, но это достойный пример того, как эффективно использовать throw ,

0

Похоже, присваивание создать класс TestBook без метода main, но и с другими static методами, которые проверяют Book класс. Например, у вас может быть один метод, который проверяет создание книг в правильном формате, тот, который тестирует создание книг в неправильном формате и т. Д.

0

Никто не ловит/не обрабатывает исключение, которое вы бросили, так что он пузырится полностью наверху и заканчивается тем, что распечатывается. Чего вы ожидали?

throw вызывает исключение. Если вы хотите справиться с этим самостоятельно, вам нужно catch это где-то ...

Смежные вопросы