异常的注意事项

1、
当子类重写父类的带有 throws 声明的函数时,其 throws 声明的异常必须在父类异常的可控范围内 —— 用于处理父类的 throws 方法的异常处理器,必须也适用于子类的这个带 throws 方法 。这是为了支持多态。

例如,父类方法 throws 的是 2 个异常,子类就不能 throws 3 个及以上的异常。父类 throws IOException,子类就必须 throws IOException 或者 IOException 的子类。

2、
在 try 块中即便有 return,break,continue 等改变执行流的语句,finally 也会执行。

也就是说:try…catch…finally 中的 return 只要能执行,就都执行了,他们共同向同一个内存地址(假设地址是 0×80)写入返回值,后执行的将覆盖先执行的数据,而真正被调用者取的返回值就是最后一次写入的。

finally 中的 return 会覆盖 try 或者 catch 中的返回值。
finally 中的 return 会抑制(消灭)前面 try 或者 catch 块中的异常
finally 中的异常会覆盖(消灭)前面 try 或者 catch 中的异常

示例1:

public static String m1(){
    try{
        System.out.println("this is try method");

        return "this is try return";
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        System.out.println("this is finally method");

        return "this is finally return";
    }

}

public static void main(String[] args) {
    System.out.println(m1());
}

上述执行结果为:
this is try method
this is finally method
this is finally return

示例2:

public static String m1(){
    try{
        System.out.println("this is try method");

        return "this is try return";
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        System.out.println("this is finally method");

//            return "this is finally return";
    }

    return "this is last return";
}

public static void main(String[] args) {
    System.out.println(m1());
}

执行结果为:
this is try method
this is finally method
this is try return

注:三个return 同时出现会编译错误

建议:
不要在 fianlly 中使用 return。
不要在 finally 中抛出异常。
减轻 finally 的任务,不要在 finally 中做一些其它的事情,finally 块仅仅用来释放资源是最合适的。
将尽量将所有的 return 写在函数的最后面,而不是 try … catch … finally 中。

关于Java中的继承和异常,以下是一些注意事项和重要知识点: 1. 继承是Java面向对象编程的基本概念之一,它允许你从一个现有的类派生出一个新类,并在新类中添加或修改功能。 2. 子类继承了父类的成员变量和方法,包括私有成员变量和方法,但是不能直接访问父类的私有成员变量和方法,只能通过父类提供的公有方法来访问。 3. Java中的异常处理是非常重要的,它可以帮助我们在程序运行过程中捕获和处理错误,防止程序崩溃或出现不可预料的错误。 4. Java中的异常分为两种类型:检查异常和非检查异常。检查异常必须在代码中进行处理,否则编译器会报错。非检查异常可以不处理,但是如果不处理,程序在运行过程中可能会出现错误。 5. 在Java中,异常处理的关键字包括try、catch、finally和throw。try块用于包含可能会出现异常的代码,catch块用于捕获并处理异常,finally块用于释放资源或执行一些必须要完成的代码,throw用于手动抛出异常。 6. 在继承中,子类可以重写父类方法,但是重写方法不能抛出比父类方法更宽泛的检查异常。也就是说,子类方法声明的异常类型不能比父类方法声明的异常类型更多。 7. 在继承中,子类可以通过super关键字来调用父类的构造方法,但是必须放在子类构造方法的第一行。 以上是Java中继承和异常的一些注意事项和重要知识点,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值