Ответ 1
Попробуйте следующее:
try
{
throw new InvalidEmployeeTypeException();
input.nextLine();
}
catch(InvalidEmployeeTypeException ex)
{
//do error handling
}
continue;
Я пытаюсь исключить исключение (без использования блока 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);
}
}
Попробуйте следующее:
try
{
throw new InvalidEmployeeTypeException();
input.nextLine();
}
catch(InvalidEmployeeTypeException ex)
{
//do error handling
}
continue;
Если вы выбросите исключение, выполнение метода остановится и исключение будет передано методу вызывающего. throw
всегда прерывает поток выполнения текущего метода. блок try
/catch
- это то, что вы могли бы написать, когда вы вызываете метод, который может генерировать исключение, но исключение исключений просто означает, что выполнение метода прекращается из-за ненормального условия, а исключение уведомляет метод вызывающего это условие.
Найдите этот учебник об исключении и о том, как они работают - http://docs.oracle.com/javase/tutorial/essential/exceptions/
Если у вас есть метод, который вы хотите выбросить, но вы хотите сделать некоторую очистку в своем методе заранее, вы можете поместить код, который будет генерировать исключение внутри блока 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 фактически не обрабатывает ошибку, но дает время для выполнения действий до того, как метод завершит работу и все еще гарантирует, что ошибка передается вызывающему.
Примером этого может быть, если переменная изменена в методе, то эта переменная была причиной ошибки. Может быть желательно вернуть переменную.