1

好吧,伙计们,过去一天左右我一直在努力解决这个问题。我的家庭作业让我同时创建未经检查和检查的异常。我相信我得到的检查异常基本上必须在编译之前处理(使用 try & catch 或将其扔给调用它的下一个东西。对于未经检查的异常,我不明白自定义异常是如何工作的。它们在运行时被捕获并且不要'不一定需要抛出或用 try & catch 包裹,但如果它们是自定义的,IDE 或其他什么知道要查找什么?示例:如果用户添加了一个 pokemon,我的自定义 Unchecked 文件之一应该触发但是派对已满,但我如何告诉 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();
            }
        }
    }
4

2 回答 2

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,这意味着程序崩溃。)

于 2015-03-21T00:55:31.193 回答
0

尽管您不知道某个自定义的未经检查的异常是否可以从某个方法中抛出,但您仍然可以捕获它(或者它是超类Exception)。使用 Java 提供的自定义异常可以为您的异常情况添加一些有用的详细信息(即异常名称应该有意义,以便更容易阅读您的日志)。

自定义(未经检查的)异常创建及其内容也可以调整以满足您的特定需求。例如PartyIsFullException,构造函数可以获取一个Party对象并将其状态格式化为字符串。

如果您不需要促进未经检查的异常创建/演示,则可以RuntimeException假设您提供描述性消息。

于 2015-03-21T00:38:33.393 回答