java异常

28 篇文章 0 订阅
24 篇文章 0 订阅

首先异常是什么呢?不好说,我的结论就是一种你可以去避免的问题,我们不能因为一些存在的异常,就让整个程序停止,这让不好,你的程序就太瘦弱了,健壮性不足,所以要学会异常,师夷长技以制夷。

异常体系图

异常分运行时异常,这个你可以try catch ,另一个是编译异常必须要改,相当于癌症晚期了属于是

常见的运行异常

NullPointerException
这个异常我印象尤为深刻,为什么呢?因为我当时判断是老是出现这个异常,后面就是初始化之后才弄好的,总之这个异常就是你使用到了空指针
ArithmeticException 数学运算异常
就是你的数学问题,比如除数不能是0,指数大于0这些吧,
ArrayIndexOutOfBoundsException 数组下标越界异常
ClassCastException 类型转换异常
这个涉及到多态,
​
        Animals cat = new Cat();
        Cat cat1 = (Cat)cat;
        Cat cat2 = (Dog)cat1;//这里就不行,你是猫这么还能变成狗讷?

​
NumberFormatException 数字格式不正确异常 []
经典案例就是字符串转数字(为什么"1234"可以,他不行捏"nanami"
编译异常,多是和文件Sql有关,我不会

处理异常

一种是try+catch+final,一定有try

还有一种是throw,甩锅组合,把他甩到上一级,看啊看会不会处理,知道jvm,直接输出错误信息终止程序,其实只要你不用try catch都会默认throw

我觉得值得说说的就是一旦发生异常,try里面的语句就会转到catch或者final(无catch的情况且不会执行下面的语句了捏),要是有catch的话就还会执行下面的语句,其实也没什么。

放几道练习题就好了

这里唯一的一点就是只能return 一个,就是catch里的return只能做return的操作,

实践的案例如下,你让用户输入,用户指不定给你输入些牛马,所以这时就可以try catch 

public class Text
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        int lbk = 0;
        while (true)
        {
            try {
                Scanner scanner1 = new Scanner(System.in);
                lbk = scanner1.nextInt();
                break;
            } catch (Exception e) {
                System.out.println("你的输入有误");
            }
        }
        System.out.println(lbk);
    }
}

这里说一点要注意的就是有多个异常的话,把子类的异常写前面,主要是逻辑问题,你要是第一个就写了父类的异常要是有的话,铁进入,后面再次重复也不好

我说说那个final其实无论如何都要执行,就是在程序快到异常,既无catch时会,会最后一个执行,普通的开摆就行

throws和throw

throw就是摆烂,看有无人员接手,一直摆烂,最后会摆到jvm上,jvm就会直接给你停了,叫你运行

细节一

throw和throws的区别

我觉得可以这么理解,方法只有一个throw,但类里却可以有许多方法所以用throws

细节二

自定义异常,就是extend继承运行异常,因为运行异常会有有默认的,但是你编译异常的一个个写,烦死了

细节三

当父类抛出异常时,子类重写的方法是不能超过父类异常的范围,就是说你子类的异常只能是父类的异常或其异常的子类。就像范问权限一样捏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值