[英]how to go back to the cause methode(1) after catching an Exception in previous method(2) in java?
我正在尝试学习Java中的“异常处理错误”。 我知道有关它的一件令人惊奇的事情,就是您可以只在一个地方处理一个Exception,并且只要在该部分中抛出该异常,它就会被捕获,所以我有这段代码,我想回到ReservationManager()
求解后InputMismatchException
在catch块中的异常main
。 实际上,现在当用户在ReservationManager
部分中键入字符串而不是整数时,程序将返回到
请选择:预订或返回房间:1退出:0
但我想打印
请选择:预订房间:1退房:2退出:3
实际上,我想在main中的catch块之后返回到ReservationManager
。
我在名为hotel
的类中有这部分代码:
public static void main(String[] args) {
Hotel hotel = new Hotel(5);
int serviceNumber;
System.out.println("Welcome");
Formatter f = new Formatter(System.out);
Map <Integer, String> whatService = new LinkedHashMap<>(); //list of model services
whatService.put(1,"b.a.service.ReservationManager");
while (true) {
Scanner scanner = new Scanner(System.in);
try {
f.format("%s\n %40s\n %21s\n", "Please select:", "To book or return the room: 1", "To Exit: 0");
serviceNumber = scanner.nextInt();
if(serviceNumber != 0) {
Class c = Class.forName(whatService.get(serviceNumber)); //using RTTI!
c.newInstance();
}
else {
System.exit(0);
}
} catch (NullPointerException e){
System.out.println("---Please Choose from the options!---");
} catch (ClassNotFoundException e) {
System.out.println("ClassNotFoundException");
} catch (IllegalAccessException e) {
System.out.println("IllegalAccessException");
} catch (InstantiationException e) {
System.out.println("InstantiationException");
}catch (InputMismatchException e) {
System.out.println("---Please enter a number!---");
}
}
}
如果用户首先输入“ 1”,则将创建名为ReservationManager的类中的该部分。
public ReservationManager() throws Exception{ //constructor
System.out.println("Welcome to reservation section");
int service = 0;
Formatter f = new Formatter(System.out);
while(true){
Scanner scanner2 = new Scanner(System.in);
f.format("%s\n %28s\n %26s\n %21s\n","Please select:","To book a room: 1", "To check out: 2", "To Exit: 3");
service = scanner2.nextInt();
switch (service) {
case 1:
bookingHotelRooms();
break;
case 2:
System.out.println("Please Enter the room number");
checkout(scanner2.nextInt());
break;
case 3:
System.exit(0);
break;
}
}
}
提前致谢。
我想,我找到了答案。 关键是我犯了一个小错误,我认为最好只在一个地方处理一个Exception,并且不应该在程序中重复相同的try_catch,但这是不正确的,实际上不像它不好处理在程序中不同位置具有相同的异常,这对于查找异常的确切位置也很有帮助。 因此,我将在“ ReservationManager”中编写相同的try-catch并在其中与“ main”相同的位置处理“ InputMismatchException”,但最好显示一些有关确切位置的信息(可能是通过记录器)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.