web-dev-qa-db-fra.com

exécution continue après qu'une exception est levée dans java

J'essaie de lever une exception (sans utiliser de bloc try catch) et mon programme se termine juste après la levée de l'exception. Existe-t-il un moyen qu'après avoir levé l'exception, pour continuer ensuite l'exécution de mon programme? Je lève l'exception InvalidEmployeeTypeException que j'ai définie dans une autre classe, mais j'aimerais que le programme continue après qu'il soit levé.

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


}
22
R Doolabh

Essaye ça:

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

continue;
5
rs.

Si vous lève l'exception, l'exécution de la méthode s'arrête et l'exception est levée vers la méthode de l'appelant. throw interrompt toujours le flux d'exécution de la méthode actuelle. un bloc try/catch est quelque chose que vous pourriez écrire lorsque vous appelez une méthode qui peut lever une exception, mais lever une exception signifie simplement que l'exécution de la méthode est terminée en raison d'une condition anormale, et le exception notifie la méthode de l'appelant de cette condition.

Trouvez ce didacticiel sur les exceptions et leur fonctionnement - http://docs.Oracle.com/javase/tutorial/essential/exceptions/

33
manub

Si vous avez une méthode que vous souhaitez générer une erreur mais que vous souhaitez effectuer un nettoyage dans votre méthode au préalable, vous pouvez placer le code qui lèvera l'exception dans un bloc try, puis placez le nettoyage dans le bloc catch, puis lancez le Erreur.

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

De cette façon, le bloc try/catch ne gère pas réellement l'erreur, mais il vous donne le temps de faire des choses avant la fin de la méthode et garantit toujours que l'erreur est transmise à l'appelant.

Un exemple de ceci serait si une variable changeait dans la méthode alors cette variable était la cause d'une erreur. Il peut être souhaitable de rétablir la variable.

4
j_v_wow_d