(try catchブロックを使用せずに)例外をスローしようとしていますが、例外がスローされた直後にプログラムが終了します。例外をスローした後、プログラムの実行を継続する方法はありますか?別のクラスで定義した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/