异常?什么是异常呢?

导言:在java中,总会出现各种各样的小bug,但是,有的是机器本身导致的,有的就是程序员编写代码不规范导致了,这一类被称作异常。今天我总结了异常的类型,出现的原因,解决方法,还有如何防止异常。

当然,本文章并不是为了让我们不出现异常,只是出现了异常要知道如何处理。

架构图:

  • 异常:异常就是代表程序出现的问题
  • Exception:叫做异常,所有异常的父类


    代表程序可能出现的问题,我们通常会用Exception以及他的子类来封装程序出现的问题。
    • 编译时异常:编译阶段就会 出现异常提醒的。(如:日期解析异常)


      在编译阶段,必须手动处理,否则代码会报错
      • 在 java文件 经过 javac命令后 编译成 字节码文件(class文件) 时候,出现的异常;提醒 程序员 检查本地信息
        编译阶段:Java不会运行代码,只会检查语法是否错误,或者做一些性能的优化
    • 运行时异常::RuntimeException及其子类,编译阶段不会出现异常提醒;运行时出现的异常(如:数组索引越界异常)


      运行时异常(编译阶段不需要处理,代码运行时出现异常)
      • 在字节码文件(class文件) 经过 java命令 到运行结果 之间,运行时出现的异常;代码出错而导致程序出现的问题
  • 运行时异常和编译时异常的区别?

    • 编译时异常:除了RuntimeExcpetion和他的子类,其他都是编译时异常。编译阶段需要进行处理,作用在于 提醒程序员。
    • 运行时异常:RuntimeException本身和所有子类,都是运行时异常编译阶段不报错,是程序运行时出现的。一般是由于 参数传递错误带来的问题
  • 异常的作用

    • 作用一:异常是用来查询bug的关键参考信息

    • 作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

  • 异常的处理方式

    • JVM默认的处理方式


      把异常信息以红色字体打印在控制台,并结束程序,下面的代码不在执行
      • 把异常的名称,异常原因及异常出现的位置等信息输出在了控制台
      • 程序停止执行,下面的代码不会再执行了
    • 自己处理


      捕获异常:try...catch 目的:当代码出现异常时,可以让程序继续往下执行。
      细节:父类异常,写在最后,否则会接收所有的子类异常​
      • 格式:

        • try { 可能出现异常的代码; } catch ( 异常类名 变量名 ){ 异常的处理代码; }
      • 过程:try里面出现异常,创建对应异常对象,跟catch里面的 异常名对比,找到对应的catch,执行对应的 处理代码。
      • 注意:catch中的异常名也可以是其父类接收,当出现其父类异常时候,将父类尽量放最下方,否则会将所有的异常全部接收
      • 灵魂四问:
        • 灵魂一问:如果try中没有遇到问题,怎么执行?

          • 会把try里面所有的代码全部执行完毕,不会执行catch里面的代码
            注意: 只有当出现了异常才会执行catch里面的代码
        • 灵魂二问:如果try中可能会遇到多个问题,怎么执行?

          • 会写多个catch与之对应。但是如果遇见异常会直接去找对应的catch,并结束,不会再执行下一个异常
          • 细节: 如果我们要捕获多个异常,这些异常中如果存在父子关系的话,那么父类一定要写在下面 否则父类会接收所有异常。后续catch无法使用

        • 灵魂三问:如果try中遇到的问题没有被捕获,怎么执行?

          • 相当于try...catch的代码白写了,最终还是会交给虚拟机进行处理。
        • 灵魂四问:如果try中遇到了问题,那么try下面的其他代码还会执行吗?

          • 下面的代码就不会执行了,直接跳转到对应的catch当中,执行catch里面的语句体但是如果没有对应catch与之匹配,那么还是会交给虚拟机进行处理
      • Throwable 的成员方法

        • 常用:public void printStackTrace() 在底层是利用System.err.println进行输出
          细节:仅仅是打印信息,不会停止程序运行 , 把异常的错误信息以 红色字体 输出在控制台
        • 其他:
          • public String getMessage() 返回此 throwable 的详细消息字符串 public String tostring() 返回此可抛出的简短描述
    • 抛出异常


      throws :细节点:编译时异常:必须要写。 运行时异常:可以不写。 throw:写在方法内部,手动抛出异常,交给调用者处
      • throws:代表可能会有这个异常,如果出了这个异常,你没有做处理, 会自动交给JVM处理——打印到控制台中,并结束程序 细节点:(编译时异常:必须要写。 运行时异常:可以不写。)


        编译时异常:必须要写。 运行时异常:可以不写。
      • throw:写在方法内部,手动抛出异常,交给调用者处,下面方法不需要执行在方法中,出现异常了。方法就没有继续运行下去的意义了,采取抛出处理,让该方法结束运行并告诉调用者出现了问题,


        交给调用者:返回到方法的调用处
    • RuntimeException() :运行时异常,只要是运行过程中出现异常,都可以用这个声明、抛出或捕获


      父类异常,写在最后,否则会接收所有的子类异常
  • 自定义异常:为了让控制台的报错信息更加的见名之意

    • 自定义异常过程:

      • 1.定义异常类
      • 2.写继承关系
      • 3.空参构造(继承父类)

      • 4.带参构造(继承父类)
    • 命名技巧:

      • NameFormat:当前异常的名字,表示姓名格式化问题
      • Exception:表示当前类是一个异常类
    • 要继承的父类:
      • 运行时异常 :RuntimeException 核心 就表示由于参数错误而导致的问题
      • 编译时异常 :Exception 核心 提醒程序员检査本地信息

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值