JAVA异常处理

异常的分类

错误:
error 这是无法throw的问题,如内存溢出
异常:
Exception 编译期问题,可以throw或者try catch
RuntimeExeption 运行期间出现的问题,可以throw或者try catch

运行期异常的分类:
1、
运行期异常可以是由于数据逻辑错误产生,举例:空指针异常。如果没有提前定义,系统在识别异常后一定会中断程序。如果提前写try datch可以使程序继续运行。
2、
运行期异常是由程序员自定义的。比如提前预知了某个异常出现,在异常中添加注释方便排查问题。也可以是人为地定义一些正常的情况为异常,强制中断程序(说实话我实在想不通为什么不直接写return难道有人就是觉得红色字体比较好看???这里边有些是IOException等等都是有分类的,分类有什么用?不知道!!!)自定义exception以后不能再往下继续写代码了。
在这里插入图片描述

在这里插入图片描述以上展示了自定义异常运行的结果

异常的定义

关键字throw的用法
必须写在方法内部
必须是exception的子类
如果不是runtime exception必须在方法后面写throws或者try catch

相关方法:objects.requireNonNull可以判断是否制定元素为空并且抛出异常

throws
异常抛出。如果某个方法有“throws”小尾巴,那么调用这个方法的方法,最好是写个try catch,或者继续thows。如果在整个方法调用的过程中没有任何一个方法写try catch,到最后java就会进行中断处理。

try catch
注意,每个try可以有多个catch。如果每个方法里有多个异常,可以分别使用多个catch语句来捕获。如果这些异常之间存在子父类关系,必须把子类写在前面,父类写在后面。或者干脆就不要写子类,直接写父类。
最省事的方法就是写

catch (Exception e) 

这个语句会自动捕获所有的异常

三种打印异常的方法

有三种异常打印的方法,第一种是输出红色字体,第二和第三种本质上都是生成字符串,但是字符串附带的信息不同。

public class Lesson {
    public static void main(String[] args)
             {
                 try {
                     a();
                 } catch (Exception e) {
                     System.out.println("第一种打印异常的方法");
                     e.printStackTrace();
                     System.out.println("第二种打印异常的方法"+e.getMessage());
                     System.out.println("第三种打印异常的方法"+e.toString());
                 }
    }
    public static void a() throws Exception {
        System.out.println("程序开始");
        throw new Exception("自定义异常产生的原因");
    }
}

在这里插入图片描述

异常结束

finally语句表示不管是否出现异常都要执行。实际上,只要你写在try语句结束后,就能实现这个效果。所以finally事实上仅仅用于处理IO流。该问题后边补充。证据如下。

public class Lesson {
    public static void main(String[] args)
             {
                 try {
                     a();
                 } catch (Exception e) {
                 }finally{
                     System.out.println("finally模块执行");
                 }
                 System.out.println("后续代码");
    }
    public static void a() throws Exception {
        throw new Exception("自定义异常产生的原因");
    }
}

在这里插入图片描述

注意:
1、在try语句中定义的变量在finally中也无法应用
2、尽量不要在finally中写return语句,思维逻辑容易混乱。try和finally中同时有return时java会忽略try中的return,只识别finally中的return。

在这里插入图片描述
其他问题
1、如果extend了某个父类,如果父类没有声明某个异常,子类也不能声明。(这个规定有什么用?)

自定义异常类

作用:相当于给Exception或者RnutimeException换了个名字,方便看一点,显得代码高大上,不用每次报错都看一大堆报错信息才知道错误是什么。
如何创建:
定义一个普通类,继承Exception或者RnutimeException,包含一个空参数的构造方法,和一个包含异常信息的构造方法。使用super(message)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值