продолжение выполнения после исключения в java

18

Я пытаюсь исключить исключение (без использования блока catch try), и моя программа заканчивается сразу после исключения. Есть ли способ, который после того, как я выброшу исключение, чтобы продолжить выполнение моей программы? Я бросаю InvalidEmployeeTypeException, которое я определил в другом классе, но я хочу, чтобы программа продолжалась после этого.

    private void getData() throws InvalidEmployeeTypeException{

    System.out.println("Enter filename: ");
    Scanner prompt = new Scanner(System.in);

    inp = prompt.nextLine();

    File inFile = new File(inp);
    try {
        input = new Scanner(inFile);
    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
        System.exit(1);
    }

    String type, name;
    int year, salary, hours;
    double wage;
    Employee e = null;


    while(input.hasNext()) {
        try{
        type = input.next();
        name = input.next();
        year = input.nextInt();

        if (type.equalsIgnoreCase("manager") || type.equalsIgnoreCase("staff")) {
            salary = input.nextInt();
            if (type.equalsIgnoreCase("manager")) {
                e = new Manager(name, year, salary);
            }
            else {
                e = new Staff(name, year, salary);
            }
        }
        else if (type.equalsIgnoreCase("fulltime") || type.equalsIgnoreCase("parttime")) {
            hours = input.nextInt();
            wage = input.nextDouble();
            if (type.equalsIgnoreCase("fulltime")) {
                e = new FullTime(name, year, hours, wage);
            }
            else {
                e = new PartTime(name, year, hours, wage);
            }
        }
        else {


            throw new InvalidEmployeeTypeException();
            input.nextLine();

            continue;

        }
        } catch(InputMismatchException ex)
          {
            System.out.println("** Error: Invalid input **");

            input.nextLine();

            continue;

          }
          //catch(InvalidEmployeeTypeException ex)
          //{

          //}
        employees.add(e);
    }


}
    
задан R Doolabh 22.03.2012 в 18:12
источник

3 ответа

4

Попробуйте следующее:

try
{
    throw new InvalidEmployeeTypeException();
    input.nextLine();
}
catch(InvalidEmployeeTypeException ex)
{
      //do error handling
}

continue;
    
ответ дан rs. 22.03.2012 в 18:16
  • Разве вы не думаете, что это не хороший пример того, как использовать исключения? –  manub 22.03.2012 в 18:17
  • Это сработало отлично. Я смог позаботиться об обработке ошибок и продолжить выполнение –  R Doolabh 22.03.2012 в 18:37
  • Мне потребовалось некоторое время, чтобы понять, почему этот код «не является хорошим примером» в вежливо выраженном вступительном комментарии. input.nextLine (); никогда не выполняется. –  Reg 08.12.2017 в 14:05
30

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

Найдите этот учебник об исключении и о том, как они работают - Ссылка

    
ответ дан manub 22.03.2012 в 18:16
4

Если у вас есть метод, который вы хотите выбросить, но вы хотите сделать некоторую очистку в своем методе заранее, вы можете поместить код, который будет генерировать исключение внутри блока try, а затем поместить очистку в блок catch, затем выбросите ошибку.

try {

    //Dangerous code: could throw an error

} catch (Exception e) {

    //Cleanup: make sure that this methods variables and such are in the desired state

    throw e;
}

Таким образом, блок try / catch фактически не обрабатывает ошибку, но дает время для выполнения действий до того, как метод завершит работу и все еще гарантирует, что ошибка передается вызывающему.

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

    
ответ дан j_v_wow_d 27.12.2014 в 21:39