小编Vij*_*van的帖子

在finally和catch块中抛出异常

对catch中抛出的异常有问题,最后阻止:

class MyExc1 extends Exception {}
class MyExc2 extends Exception {}
class MyExc3 extends MyExc2 {}

public class C1 {
    public static void main(String[] args) throws Exception {
        try {
            System.out.print(1);
            q();
        }
        catch (Exception i) {
            throw new MyExc2();
        }
        finally {
            System.out.print(2);
            throw new MyExc1();
        }
    }
    static void q() throws Exception {
        try {
            throw new MyExc1();
        }
        catch (Exception y) {
            System.out.print(3);
        }
        finally {
            System.out.print(4);
            throw new Exception();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

我试过多次执行上面的代码.它每次给我不同的输出.

output 1: 1Exception …
Run Code Online (Sandbox Code Playgroud)

java exception try-catch-finally rethrow

3
推荐指数
1
解决办法
156
查看次数

Java 8没有提供相同的解决方案来允许他们为解决接口默认方法而提供的多重继承

问题:

我们知道Java不允许扩展多个类,因为它会导致Diamond问题,编译器无法决定使用哪个超类方法.使用接口默认方法,Diamond问题Java 8中引入.也就是说,因为如果一个类实现两个接口,每个接口定义相同的默认方法,并且实现类不会覆盖常见的默认方法,则编译器无法决定选择哪个实现.

解:

Java 8需要提供由多个接口实现的默认方法的实现.因此,如果一个类实现上面提到的两个接口,它将不得不为常见的默认方法提供一个实现.否则编译器会抛出编译时错误.

题:

通过重写子类引入的常用方法,为什么此解决方案不适用于多类继承?

multiple-inheritance java-8 default-method

3
推荐指数
1
解决办法
368
查看次数