JavaSE基础自学----异常2

本文详细介绍了Java中finally代码块的使用,强调其在资源管理中的作用,尤其是在异常处理时确保资源得到释放。同时,深入探讨了异常在子父类覆盖中的规则,包括子类如何正确覆盖父类的异常声明,以及在不同场景下异常处理的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

finally

finally代码块 : 定义一定执行的代码
通常用于关闭资源,因为资源必须释放
注:只有一种情况,finally是不会执行的:当catch中有System.exit(0).

    public void method(){
       连接数据库

        数据操作; (可能会出现有一些异常:throw new SQLException)

        关闭数据库;  如果数据操作出现异常,则抛出了异常,函数就结束了,数据库没有被关闭,资源则一直被使用
    }

    public void method1(){
        try{
           连接数据库
           数据操作;
        }catch(SQLException e){
            数据库异常处理方式
        }finally {
          关闭数据库   (无论数据操作是否成功,最终都要关闭数据库释放资源)  
        }
    }

异常在子父类覆盖中的体现

  • 子类在继承父类时,如果父类的方法抛出异常,那么子类覆盖的方法只能抛出父类的异常或者该异常的子类
class AException extends Exception { //  A异常
}

class BException extends AException {  //B异常继承了A异常
}

class CException extends Exception {  //C异常
}

class fu {
    public void div() throws AException {  //父类抛出A异常
    }
}

class zi extends fu {
    public void div() throws BException {  //子类可以抛出B异常或者A异常,不能抛出C异常
    }
}
  • 如果父类抛出多个异常,那么子类覆盖该方法时,只能抛出父类存在的异常或异常子类
  • 果父类或者借口方法中没有异常抛出,那么子类覆盖方法时,也不可以有异常抛出
    如果子类方法发生了异常,就try/catch 内部处理

异常练习

/*
长方形,圆形 求面积
长方形的长宽,园的半径不能为负数和零,否则视为异常
当调用者输入了负数,则程序终止,需要调用者修改输入值才可以
*/

class ValuesException extends RuntimeException { //自定义 值异常,该异常继承RuntimeException
    ValuesException() {
    }

    ValuesException(String msg) {
        super(msg);
    }
}

class Rectangle {  //长方形类
    private int lenght, width;  //定义长宽

    Rectangle(int lenght, int width) {

        if (lenght <= 0 || width <= 0) {
            throw new ValuesException("长和宽的数值异常");  //如果长宽为负数,则抛出一个异常
        }
        this.lenght = lenght;
        this.width = width;
    }
    public void geArea() {
        System.out.println("长发形面积:" + lenght * width);
    }
}

class Circular {
    private int radius;
    public static final double PI = 3.14;  //定义PI常量

    Circular(int radius) {
        if (radius <= 0) {
            throw new ValuesException("圆的半径值异常");
        }
        this.radius = radius;
    }

    public void getArea() {
        System.out.println("圆的面积:" + radius * radius * PI);
    }
}

public class DEMO {
    public static void main(String[] args) {
        Rectangle r = new Rectangle(-1, 5);
        r.geArea();

        Circular c=new Circular(1);
        c.getArea();
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值