在Java中抛出异常的方法抛出异常
问题描述:
我想了解对象抛出和方法重写。在Java中抛出异常的方法抛出异常
我有一段代码:
public class ExceptionClass{
void m() throws SQLException{}
}
class A extends ExceptionClass{
void m() throws Exception{}
}
这给出了一个错误“异常异常是不兼容于ExceptionClass.m throws子句()”。
同样的,如果我写的是:
public class ExceptionClass{
void m() throws SQLException{}
}
class A extends ExceptionClass{
void m() throws RuntimeException{}
}
这并不给予任何错误和方法也被重写正常。 经过一些分析,我认为可能是,因为SQLException从Exception类扩展,因此我们不能在子类(我们正在改变重写方法的签名)中将“SQLException”替换为“Exception”。
但后来我这样做:
public class ExceptionClass{
void m() throws NullPointerException{}
}
class A extends ExceptionClass{
void m() throws RuntimeException{}
}
但这里没有错误..!我认为它应该给出同样的错误,因为我上面提到的原因。
我不知道为什么会以这种方式表现。 当我们重写方法时会遵循什么规则,这会在方法签名中引发异常。
答
NullPointerException
和RuntimeException
都是未检查例外。
他们不需要throws
子句中被列出。
答
是的,你是对的,第一个问题是由于方法签名的改变而发生的。使用NPE和RuntimeException进一步加大错误是不正确的,因为运行时异常不需要在签名中声明。
答
您只能减少或消除重写的方法中引发的异常。语言不允许抛出更广泛的例外。
“的抛出压倒一切的方法的子句可以不指定该 方法将导致抛出任何检查其中 重写方法是不允许的异常,通过其throws子句,至扔。”
重点是OP声明重写方法抛出更广泛的异常 –
@JigarJoshi:看起来他已经明白了。 – SLaks
_当我们覆盖methods_时,还有什么规则要遵循_ –