2020.8.10Finally、自定义异常

01_Finally

finally:不管有没有异常,finally里面的代码都会执行。

  1. finally的特点
  2. 被finally控制的语句体一定会执行(前提 jvm没有停止)
    特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))
  3. finally的作用: 用于释放资源,在IO流操作和数据库操作中会见到

案例演示

package FinallyDemo01;

import java.util.InputMismatchException;
import java.util.Scanner;

public class FinallyTest01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        try {
            System.out.println(1 / 0);
            System.out.println("请输入一个整数");
            int num = scanner.nextInt();
            System.out.println(num);
        }catch (Exception e){
            e.printStackTrace();
            //System.exit(0);
        }finally {
            System.out.println("finally 里面的代码执行了");
            //释放
            scanner.close();
        }
    }
}
执行结果为
java.lang.ArithmeticException: / by zero
	at FinallyDemo01.FinallyTest01.main(FinallyTest01.java:10)
finally 里面的代码执行了

01.1_final,finally和finalize的区别

  • final: 是一个状态修饰符, 可以用来修饰类 , 变量 , 成员方法.
  1. 被修饰的类不能被子类继承, 修饰的变量其实是一个常量不能被再次赋值
  2. 修饰的方法不能被子类重写
  • finally:用在try…catch…语句中 , 作用: 释放资源 . 特点: 始终被执行(JVM不能退出)
  • finalize: Obejct类中的一个方法,用来回收垃圾

案例演示:如果catch里面有return语句请问finally的代码还会执行吗?如果会,请问是在return前还是return后。

package FinallyDemo01;

public class FinallyTest02 {
    public static void main(String[] args) {
        try {
            System.out.println(23 / 0);
        } catch (Exception e) {
            System.out.println("哦,catch了...............");
            return ;
        }finally {
            System.out.println("哦,被执行了..............");
        }
    }
}
执行结果
哦,catch了...............
哦,被执行了..............
会执行, 在return前

02_自定义异常类

02.1_概述

  • 为什么要有自定义异常:Java给我们提供了很多异常,来描述我们在开发中所遇到一些常见问题,还是不足以描述我们所遇到的一些异常情况。

  • 自定义异常概述 需要将我们自定义的异常类纳入到我们的异常体系中
    1.继承自Exception
    2.继承自RuntimeException

案例演示:自定义异常

package customDemo01;
//自定义异常 需要把这个类纳入到Java异常类体系中
public class NoMoneyException extends RuntimeException {
    public NoMoneyException(String message) {
    }
}
package customDemo01;

import com.oracle.xmlns.internal.webservices.jaxws_databinding.XmlOneway;

import java.util.Scanner;

//自定义异常
public class customTest01 {
    private static double money=100;
    public static void main(String[] args) {
    //取款案例
        /*1.定义一个数字,100,如果你输入的数字大于100,输出余额不足
        * 如果数字小于100,输出取款成功,还有剩余额
        2,然而异常中没有余额异常,我们可以自定以一个余额异常
         */

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入取款金额");
        double num=scanner.nextInt();
        //调用一个方法
        take(num);
    }

    private static void take(double num) {
        if (num<=money){
            System.out.println("取款成功");
            System.out.println(money-num);
        }else {
           throw new NoMoneyException("余额不足异常");
        }
    }
}
运行结果
请输入取款金额
101
Exception in thread "main" customDemo01.NoMoneyException
	at customDemo01.customTest01.take(customTest01.java:29)
	at customDemo01.customTest01.main(customTest01.java:21)


注意:

  • 子类在重写父类方法是,父类方法没有抛出异常,子类在重写时不能抛出异常
  • 父类方法如果有跑出异常,那么子类在重写父类方法时,可以跑出和父类一样的异常,或者说比父类的异常小,或者说不抛异常也可以
  • 子类不能跑出父类没有跑出的一张
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有点。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值