Java 自定义未检查的异常

Java 自定义未检查的异常,java,exception,methods,unchecked-exception,Java,Exception,Methods,Unchecked Exception,好了,伙计们,在过去的一天左右我一直在想这个问题。我的家庭作业要求我创建未检查和检查的异常。我认为我得到的已检查异常基本上必须在编译之前进行处理(使用try&catch或将其抛出到下一个调用它的对象。对于未检查的异常,我不了解自定义异常是如何工作的。它们在运行时被捕获,不一定需要抛出或封装try&catch,但是如果它们是自定义的,IDE或其他什么东西如何知道要查找什么?例如:我的一个自定义未检查文件是sup如果用户添加了口袋妖怪,但聚会已满,我将如何告知IDE需要这样做?我的异常文件如下所示:

好了,伙计们,在过去的一天左右我一直在想这个问题。我的家庭作业要求我创建未检查和检查的异常。我认为我得到的已检查异常基本上必须在编译之前进行处理(使用try&catch或将其抛出到下一个调用它的对象。对于未检查的异常,我不了解自定义异常是如何工作的。它们在运行时被捕获,不一定需要抛出或封装try&catch,但是如果它们是自定义的,IDE或其他什么东西如何知道要查找什么?例如:我的一个自定义未检查文件是sup如果用户添加了口袋妖怪,但聚会已满,我将如何告知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();
            }
        }
    }
public void addToParty(字符串名称)引发PartyFullException{
布尔存在=假;
对于(int i=0;i<152;i++){
exists=(name.equals(pokedex[i]);
}
如果(存在){
抛出新的PokemonAlreadyExistsException();
}否则{
如果(partyPos<6){
当事人[当事人]=姓名;
partyPos++;
}否则{
抛出新PartyFullException();
}
}
}

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

自定义(未选中)异常创建及其内容也可以根据您的特殊需要进行调整。例如,
partyisfullyexception
构造函数可以获取
Party
对象并将其状态格式化为字符串

如果您不需要促进未经检查的异常创建/表示,那么可以使用
RuntimeException
假设您提供了一条描述性消息


我现在意识到我不能扔它们,因为用户不会期待它们,因此也不会试图抓住它们

你可以扔

在实际的项目中,应该清楚地记录下来

/*
 * @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
的小程序,这意味着程序崩溃。)

您不告诉IDE,IDE也不知道。“用户不会期望它们。”-为什么不?您的文档应该提到异常。@我的意思是,我得到了一个驱动程序(我无法编辑)一旦我创建了我的方法和异常,它就不会在发生这些未检查异常的方法中使用try-and-catch块来运行,因此我认为有某种方法可以触发这些异常。我是否只使用if-else并像我在上面的代码中那样将未检查消息与消息一起抛出?或者我是否犯了这样的错误?来做出错误如果抛出异常,您将抛出一个异常。仅此而已。您可以使用if/else条件抛出异常。这样做是可以的。我得到了一个驱动程序(我无法编辑)一旦我创建了我的方法和异常,它就不会在这些未检查的异常发生的方法中使用try-and-catch块,所以我想有某种方法可以触发这些异常。我只是使用if-else并像我在上面的代码中那样用消息抛出未检查的消息吗?还是我做得不对?@Josephhoop呃,你在代码示例中抛出它的方式是有效的。