自定义未检查异常
Custom Unchecked Exceptions
好的,过去一天左右我一直在努力解决这个问题。我的家庭作业要求我创建未检查和已检查的异常。我相信我得到的检查异常基本上必须在编译之前处理(使用 try & catch 或将其扔给调用它的下一个东西。对于未经检查的异常,我不明白自定义异常是如何工作的。它们在运行时被捕获并且不不一定需要用 try & catch 抛出或包裹,但如果它们是自定义的,IDE 或其他什么知道要查找什么?示例:我的自定义未检查文件之一应该在用户触发时触发添加了一个口袋妖怪,但聚会已满,但我如何告诉 IDE 那是需要发生的事情?我的异常文件如下所示:
public class PartyIsFullException extends RuntimeException {
public PartyIsFullException() {
super();
}
public PartyIsFullException(String message) {
super(message);
}
}
然后我想在这个方法中实现它,但我不知道该怎么做。我现在意识到我不能扔掉它们,因为用户不会期待它们,因此不会试图抓住它们。
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();
}
}
}
虽然您不知道某个自定义的未经检查的异常是否可以从某个方法中抛出,但您仍然可以捕获它(或者它是超类 Exception
)。根据 Java 提供的自定义异常可以添加一些特定于您的异常情况的有用详细信息(即异常名称应该有意义,以便更容易阅读您的日志)。
自定义(未经检查的)异常创建及其内容也可以根据您的特定需要进行调整。例如。 PartyIsFullException
构造函数可以采用 Party
对象并将其状态格式化为字符串。
如果您不需要促进未经检查的异常creation/presentation,假设您提供了描述性消息,可以使用RuntimeException
。
I realize now I can't throw them because the user won't be expecting them and therefore won't try to catch them.
你可以扔!
在实际项目中,应该清楚地记录下来。
/*
* @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
的小程序,这意味着程序崩溃。)
好的,过去一天左右我一直在努力解决这个问题。我的家庭作业要求我创建未检查和已检查的异常。我相信我得到的检查异常基本上必须在编译之前处理(使用 try & catch 或将其扔给调用它的下一个东西。对于未经检查的异常,我不明白自定义异常是如何工作的。它们在运行时被捕获并且不不一定需要用 try & catch 抛出或包裹,但如果它们是自定义的,IDE 或其他什么知道要查找什么?示例:我的自定义未检查文件之一应该在用户触发时触发添加了一个口袋妖怪,但聚会已满,但我如何告诉 IDE 那是需要发生的事情?我的异常文件如下所示:
public class PartyIsFullException extends RuntimeException {
public PartyIsFullException() {
super();
}
public PartyIsFullException(String message) {
super(message);
}
}
然后我想在这个方法中实现它,但我不知道该怎么做。我现在意识到我不能扔掉它们,因为用户不会期待它们,因此不会试图抓住它们。
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();
}
}
}
虽然您不知道某个自定义的未经检查的异常是否可以从某个方法中抛出,但您仍然可以捕获它(或者它是超类 Exception
)。根据 Java 提供的自定义异常可以添加一些特定于您的异常情况的有用详细信息(即异常名称应该有意义,以便更容易阅读您的日志)。
自定义(未经检查的)异常创建及其内容也可以根据您的特定需要进行调整。例如。 PartyIsFullException
构造函数可以采用 Party
对象并将其状态格式化为字符串。
如果您不需要促进未经检查的异常creation/presentation,假设您提供了描述性消息,可以使用RuntimeException
。
I realize now I can't throw them because the user won't be expecting them and therefore won't try to catch them.
你可以扔!
在实际项目中,应该清楚地记录下来。
/*
* @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
的小程序,这意味着程序崩溃。)