我似乎无法找到解决此问题的方法。我有一个名为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 ,它接收旧引脚和一个新引脚,如果旧引脚与已保存的引脚不匹配,则必须带有消息的抛出和异常:"无效的引脚"。
答案 0 :(得分:2)
Java编译器足够智能,可以确定try
块中的语句是否容易出现已检查的异常。由于try
块中的任何语句都不会导致CardException
,因此编译器会抱怨。
仅为了测试,如果您将throws
子句与CardException
一起添加到getPin
/ setPin
方法中,那么编译器就不会抱怨这些方法可以在catch
块中抛出异常。
答案 1 :(得分:1)
由于CardException
扩展了Exception
,而不是RuntimeException
,因此它被视为已检查的异常。这意味着抛出异常的所有方法必须在其throws
声明子句中声明异常。
由于这个要求,Java编译器可以检查代码块是否抛出特定的已检查异常:
throws
块抛出此异常或其子类之一,则catch
有效catch
有效如果getPin
或setPin
扔掉它,您需要捕获此异常。但是,在这种情况下,函数需要在其声明中添加throws CardException
。