todas tipos salida propagacion manejo las lanzamiento jerarquia excepciones entrada ejemplos arbol java exception-handling throw

tipos - la ejecución continua después de que se lanza una excepción en java



tipos de excepciones en java netbeans (3)

Prueba esto:

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

Estoy intentando lanzar una excepción (sin usar un bloque try catch) y mi programa finaliza justo después de que se lanza la excepción. ¿Hay alguna forma de que después de lanzar la excepción, continuar la ejecución de mi programa? Tiro la excepción InvalidEmployeeTypeException que he definido en otra clase, pero me gustaría que el programa continúe después de que se haya lanzado.

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


Si lanza la excepción, la ejecución del método se detendrá y la excepción se lanzará al método del llamador. throw siempre interrumpir el flujo de ejecución del método actual. un bloque try / catch es algo que podría escribir cuando llama a un método que puede generar una excepción, pero lanzar una excepción simplemente significa que la ejecución del método termina debido a una condición anormal, y la excepción notifica al método que llama de esa condición.

Encuentre este tutorial sobre excepciones y cómo funcionan: http://docs.oracle.com/javase/tutorial/essential/exceptions/


Si tiene un método que quiere lanzar un error pero desea hacer una limpieza en su método de antemano, puede poner el código que lanzará la excepción dentro de un bloque try, luego poner la limpieza en el bloque catch, luego lanzar el error.

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 esta manera, el bloque try / catch no controla realmente el error, pero le da tiempo para hacer cosas antes de que el método termine y aún así se asegura de que el error se transmita a la persona que llama.

Un ejemplo de esto sería si una variable cambiara en el método, entonces esa variable fue la causa de un error. Puede ser conveniente revertir la variable.