我有一个 java 程序,它试图从服务器列表中收集某个 rss 提要。如果出现任何故障(身份验证、连接等),我想抛出一个异常,该异常基本上将我带回可以捕获它的主循环,在日志中显示一些信息,然后继续尝试下一个服务器在循环。大多数例外似乎都是致命的……即使它们并不真正需要。我相信我已经看到了不致命的异常......但不记得了。我试图四处搜索,但我可能使用了错误的术语。
有人可以帮我指出正确的方向吗?与停止整个程序在其轨道上相比,我可以抛出哪些特定类型的异常可以恢复?
本身没有“不可恢复的异常”。在 Java 中,如果它注册为“异常”,您可以捕获它:
try {
// Attempt to open a server port
} catch (SecurityException ex) {
// You must not be able to open the port
} catch (Exception ex) {
// Something else terrible happened.
} catch (Throwable th) {
// Something *really* terrible happened.
}
如果您正在创建服务器连接应用程序,您可能想要什么,如下所示:
for(Server server : servers) {
try {
// server.connectToTheServer();
// Do stuff with the connection
} catch (Throwable th) {
//Log the error and move along.
}
}
无论您抛出什么类型的异常,它都会在调用堆栈中向上,直到它被捕获。所以你只需要抓住它:
for (Server server : servers) {
try {
contactServer(server);
}
catch (MyCustomException e) {
System.out.println("problem in contacting this server. Let's continue with the other ones");
}
}