请检查下面的自定义例外:
public class ReportException extends Exception {
private int mCode = -1;
private String mString = "";
public ReportException(int code, String description)
{
super(description);
mCode = code;
mString = description;
}
public int getCode()
{
return mCode;
}
public String getString()
{
return mString;
}
}
我的问题是为什么在另一堂课中这是非法的:
try{
throw new NullPointerException();
}
catch(ReportException e){
}
对我来说,NullPointerException是从Exception类派生的,因此我的自定义ReportException也是如此,因为我希望它可以在catch子句中捕获。但我的IDE说这是非法的。我与我的一位同事进行了这次讨论,他说那里无法完成,但我只是想知道为什么因为它们都来自同一个Exception类。这看起来无视多态性。
答案 0 :(得分:5)
NullPointerException
而您的ReportException
都是Exception
,但要抓住ReportException
,您必须抛出ReportException
(或子类)。 NullPointerException
不是ReportException
的子类,因此未被捕获。
改为ReportException
。
答案 1 :(得分:0)
try
块中的某些代码必须抛出已检查的异常才能显式捕获它。
这是有效的:
try {
throw new ReportException();
}
catch(ReportException e){
// handle it
}
答案 2 :(得分:0)
java中的每个类都是java.lang.Object的后继者,但这并不意味着所有这些类都可以互相转换。
对于计算机而言,这两个类彼此完全不同。