我是java的新手,在搜索了关于捕获file.exists()的SecurityException后,我没有看到有人抓住它,所以我不确定是否应该捕获异常。 Eclipse不会抱怨任何一种方式。这是一个服务器扩展插件,当别人运行它时我无法控制。 这是该类的代码:
public class ChatChannels {
private JavaPlugin plugin;
private HashSet<ChatChannel> chatChannels;
private static ChatChannels instance;
File configFile;
FileConfiguration config;
private ChatChannels(JavaPlugin plugin) {
this.plugin = plugin;
configFile = new File(plugin.getDataFolder().getPath()
.concat(File.separator).concat("Data"), "channels.yml");
chatChannels = new HashSet<ChatChannel>();
config = YamlConfiguration.loadConfiguration(configFile);
if (!configFile.exists()) {
return;
}
for (String channelName : config.getStringList("channels")) {
chatChannels.add(new ChatChannel(channelName));
}
}
public static ChatChannels getInstance(JavaPlugin plugin) {
if (instance == null) {
instance = new ChatChannels(plugin);
}
return instance;
}
}
那么,我应该抓住异常还是不必要?
try {
if (!configFile.exists()) {
return;
}
}
catch (SecurityException e) {
plugin.getLogger().log(Level.SEVERE, configFile.getPath().concat(" read permission denied."), e);
}
答案 0 :(得分:2)
捕获所有异常的一般规则是“在可以采取行动的级别捕获它们”。 SecurityException
是RuntimeException
,因此您可以选择不捕获它(因此将其传播),而不要求您的方法显式抛出SecurityException
。那么,如果你得到一份,你的计划是什么?通常,您可以在这里做的唯一事情是使用回退路径(因为您要求的那个被禁止),或者向您的用户显示错误。您选择了哪种选择,以及您捕获异常的调用堆栈中的哪个级别取决于您。
答案 1 :(得分:0)
我认为你的问题是你应该抓住它而不是你是怎么做的(这就是你的要求):
这完全取决于您的使用案例。如果您希望您的应用程序对所引发的安全异常作出反应(例如......再次尝试或通知用户),那么您应该抓住它并做出相应的反应。
如果你真的不在乎,你不需要抓住它。