好的家伙们,我一直试图在过去的一天左右解决这个问题。我的家庭作业让我创建了Unchecked和Checked Exceptions。经过检查的异常我认为基本上它们必须在编译之前处理(使用try& catch或将其抛给下一个调用它的东西。对于未经检查的异常,我不明白自定义的如何工作。它们在运行时捕获并且不一定需要使用try& catch来抛出或封装,但如果它们是自定义的IDE或者其他什么知道要查找什么?示例:如果用户添加了一个自定义的未经检查的文件,则应该触发口袋妖怪,但派对已满,但我怎么告诉IDE这是什么需要发生?我的异常文件如下:
public class PartyIsFullException extends RuntimeException {
public PartyIsFullException() {
super();
}
public PartyIsFullException(String message) {
super(message);
}
}
然后我想在这个方法中实现它,但是idk怎么做。我意识到现在我不能抛弃它们,因为用户不会期望它们,因此不会试图抓住它们。
public void addToParty(String name) throws PartyIsFullException {
boolean exists = false;
for (int i = 0; i < 152; i++) {
exists = (name.equals(pokedex[i]));
}
if (exists) {
throw new PokemonAlreadyExistsException();
} else {
if (partyPos < 6) {
party[partyPos] = name;
partyPos++;
} else {
throw new PartyIsFullException();
}
}
}
答案 0 :(得分:2)
我意识到现在我不能抛弃它们,因为用户不会期望它们,因此不会试图抓住它们。
你可以扔掉它们!
在一个真实的项目中,应该清楚地记录下来。
/*
* @throws PartyIsFullException if isPartyFull() would return true
*/
public void addToParty(String name) throws PartyIsFullException {...}
通常,未经检查的异常用于方法的客户端本身避免异常情况的情况,例如:
if(theParty.isPartyFull()) {
// tell the user the party is full
// and they can't add more Pokemon
} else {
theParty.addToParty(thePokemon);
}
因此他们不应该明确地抓住它,因为他们已经处理了这种情况。
如果抛出异常并且外部没有try
- catch
,它将一直向上抛出以终止线程。 (对于只有main
的小程序,这意味着程序崩溃。)
答案 1 :(得分:0)
虽然您不知道是否可以从特定方法抛出某个自定义未经检查的异常,但您仍然可以捕获它(或者它的超类Exception
)。由Java提供的自定义异常可以添加一些特定于特殊情况的有用详细信息(即异常名称应该有意义,以便更容易读取日志)。
自定义(未经检查)的例外创建及其内容也可以根据您的特定需求进行调整。例如。 PartyIsFullException
构造函数可以使用Party
对象并将其格式化为字符串。
如果您不需要为未经检查的异常创建/演示提供便利,假设您提供描述性消息,则可以使用RuntimeException
。