处理未处理的异常

时间:2018-06-11 21:26:44

标签: java

我有两种方法。方法A调用方法B.我不能改变两者的异常(作业要求)。然而,2个例外意味着完全相同的事情,所以当我在A上调用方法B时,我已经知道B的例外不会被抛出。但是,我仍然得到了#34;未处理的异常"来自Eclipse的错误。我怎么能避免它?

以下是方法

 public void createProfile(Profile user) throws PEException {
    Vector<Profile> p = new Vector<Perfil>();
    try{
        if (repository.search(user.getUsername()) == null) {
            repository.register(user); //error on this line when I call the method on main
        }

        else {
        throw new PEException(user.getUsername());
        }
    }   catch (PEException e){
        e.printStackTrace();            
    }
}


public void register(Profile user) throws UJCException {
    try {
        if (this.search(user.getUsername()) == null) {
            this.users.add(user);

        }

        else {
            throw new UJCException(user.getUsername());
        }
    } catch (UJCException e) {
        e.printStackTrace();
    }

}

我不能改变方法的定义(我不能在createProfile上抛出UJCException)。提前致谢

1 个答案:

答案 0 :(得分:2)

你不应该抛出异常,然后在同一个方法中捕获它们。这首先打败了抛出异常的目的。调用你的2个方法的方法应该没有任何东西(void)或者在出现错误的情况下的异常。确保您的方法createProfile()register()实际上可以抛出它们的异常,因此调用它们的方法可以捕获异常,并在抛出异常时执行它们所需的任何操作。

public void createProfile(Profile user) throws PEException {
    Vector<Profile> p = new Vector<Perfil>(); //not being used...

    if (repository.search(user.getUsername()) == null) {
        try{
            repository.register(user);
        }catch(UJCException e){
            e.printStackTrace();
            throw new PEException(user.getUsername());
        }
    }
    else {
        throw new PEException(user.getUsername());
    }
}


public void register(Profile user) throws UJCException
{
    if (this.search(user.getUsername()) == null) {
        this.users.add(user);
    }
    else {
        throw new UJCException(user.getUsername());
    }
}

现在,当你调用这些方法时,在try catch中包含调用并根据调用的方法捕获相应的异常