Java中异常分为运行时异常RuntimeException,和编译时Exception异常。编译时异常必须处理,而运行时异常可以不处理。
- 当try catch finally中都有return语句时,finally中的return语句会覆盖前面的,也就是前面的return失效
- 当try catch 中都有return语句时,看程序执行try还是catch代码块,然后存储该代码块中return语句中的值,等finally代码块执行完毕后再将return语句中的返回值进行返回。
- 子类重写父类方法,方法抛出的异常类型不能大于父类被重写的方法,理由如下
class Fu{
public void run() throws IOException {
}
}
class Zi extends Fu{
@Override
public void run() throws Exception{//这里写法错的,只是演示
}
}
class TestWhyCantBig{
/**
* 该类的构造方法传入的参数是Fu这个类
* 然后在 testMethod 方法中调用了fu的run()方法,并且捕获这个方法抛出的异常
* 如果传入的是Fu子类的对象,且该子类重写父类方法时,抛出的异常类型大于父类方法的类型。那么下面这个方法就不能捕获到子类方法的异常了
* 逻辑有问题,所以不允许这样
*/
private Fu fu;
public TestWhyCantBig(Fu fu) {
this.fu = fu;
}
public void testMethod(){
try {
fu.run();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
- 子类重写父类的方法,方法的权限修饰符应该不小于父类被重写的方法
class Fu{
void run() throws IOException {
}
}
private class Zi extends Fu{ //这里private写法错的,只是演示
@Override
private void run() throws IOException{
}
}
/**
如果说子类方法权限修饰符比父类小
根据多态,父类的引用指向子类的对象,那么此时下面的例子则无法调用z的run方法
**/
class TestWhyCantBig{
public static void main(String[] args) {
Fu z = new Zi();
try {
z.run();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
标签:run,Fu,子类,方法,return,Java,父类,异常
From: https://www.cnblogs.com/pzistart/p/16730615.html