异常类型创建的类在另一个中使用

时间:2014-05-23 00:26:16

标签: java class exception-handling

我似乎无法找到解决此问题的方法。我有一个名为CardException的类,它扩展了Exception。它唯一的代码是:

public class CardException extends Exception{

String erro;

public CartaoException(String erro){
    this.erro = erro;
}
}

现在我有另一个类,如果条件为false,我想抛出一个Exception:

public void changePin(int pin, int newPin){
    try{
        if(pin == getPin()){
            setPin(newPin);
        }
    } catch (CardException e){
        System.out.println(e.getMessage());
    }
}

但我在" catch(CardException e)"他说: " CardException的无法访问的catch块。永远不会从try语句主体"中抛出此异常。我不明白为什么。

重点是创建一个名为 CardException Exception 类型的类,其构造函数接收错误消息作为参数。然后,在我的另一个课程中,我需要创建一个方法 changePin ,它接收旧引脚和一个新引脚,如果旧引脚与已保存的引脚不匹配,则必须带有消息的抛出和异常:"无效的引脚"。

2 个答案:

答案 0 :(得分:2)

Java编译器足够智能,可以确定try块中的语句是否容易出现已检查的异常。由于try块中的任何语句都不会导致CardException,因此编译器会抱怨。

仅为了测试,如果您将throws子句与CardException一起添加到getPin / setPin方法中,那么编译器就不会抱怨这些方法可以在catch块中抛出异常。

答案 1 :(得分:1)

由于CardException扩展了Exception,而不是RuntimeException,因此它被视为已检查的异常。这意味着抛出异常的所有方法必须在其throws声明子句中声明异常。

由于这个要求,Java编译器可以检查代码块是否抛出特定的已检查异常:

  • 如果代码体内有throws块抛出此异常或其子类之一,则catch有效
  • 如果代码体内调用的任何函数被声明为抛出异常或其子类之一,则catch有效
  • 否则,catch无效,编译器发出错误。

如果getPinsetPin扔掉它,您需要捕获此异常。但是,在这种情况下,函数需要在其声明中添加throws CardException