【Java异常】什么是异常,Java中如何处理异常?

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述


1. 了解异常:

异常

  • 继承/实现 关系:
  • Java.lang.Throwable
    • Error
    • Exception —— 异常顶层父类
      • RuntimeException
      • 其他异常(编译时异常)

  • Error:代表系统级别错误(属严重问题),系统一旦出现问题,sun公司就会把这些错误封装成Error对象,Error是给sun公司自己使用,不是提供给开发者使用。
  • Exception:异常,代表程序可能出现问题,我们通常会用Exception以及他地子类来封装程序出现的问题(异常)。
  • 运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。(如:NullPointerException、ArrayIndexOutOfBoundsException)
  • 编译时异常:除去RuntimeException及其子类,其余异常都是编译时异常,是编译阶段就会出现的异常,不解决,程序就无法编译运行。

作用

  • 异常是用于检查bug的关键参考消息。
  • 异常可以作为方法内部的一种特殊值返回,以便通知调用者底层的情况。



2. 异常处理

  • ①JVM默认处理方式:

    • 把异常名称,异常原因以及异常出现的位置等信息输出在了控制台。
    • 程序停止运行,下面的代码不会执行。
  • ②手动处理方式(捕获异常):

    • //捕获异常 使用方式:
      try{
          可能出现异常的代码;
      }catch(异常类型 变量名){
          异常处理代码;
      }
      
    • 好处:可以让程序继续往下执行,不会停止。

    • Throwable成员方法

      • public String getMessage():返回此throwable的详细信息字符串
      • public String toString():返回此throwable的简单描述
      • public void printStackTrace():把异常的错误信息输出在控制台
    • 注意

      • 若没有异常,catch块不执行。

      • 若存在多个异常,应该设置多个对应的catch块来捕获异常。

      • 有多个catch块时,若待捕获的异常存在继承关系,应当先捕获子类异常再捕获父类异常。

      • JDK7以后,可以在一个catch块中捕获多个异常,用|符号分隔。

      • try中遇到异常未被捕获,会使用JVM默认处理方式。

      • try中捕获到异常就直接跳转到catch块,try中后续代码不会执行。

  • ③抛出处理(抛出异常):

  • 1)throws

    • //使用:
      public void 方法名()throws 异常类名1,异常类名2...{
          ...
      }
      
    • 注意:

      • 写在方法定义处,表示声明一个异常,告诉调用者使用此方法可能会有哪些异常。
      • 编译时异常必须要写,运行时异常可以不写。
  • 2)throw

    • //使用
      public void 方法(){
      	throw new NullPointerException();
      }
      
    • 注意:

      • throw使用在方法内,会结束方法并手动抛出异常,使得后续代码不再被执行。



3. 自定义异常

自定义异常

  • 步骤

    • ①定义异常类

      • Exception作为异常类名的后缀,运行时异常类需继承RuntimeException,编译时异常需继承Exception
    • ②写继承关系

    • ③空参构造器

    • ④带参构造器

    • //①异常类名后缀Exception
      public class AgeOutOfBoundsException extends RuntimeException{ //②继承关系
          //③空参构造
          public AgeOutOfBoundsException(){}
          
          //④带参构造
          public AgeOutOfBoundsException(String message){
              super(message);
          }
      }
      
    • 遵循见名知意的原则,让控制台报错信息清晰明了,方便错误定位。




4. finally块

  • 特性:finally块中的代码一定会被执行,除非JVM退出。

  • 由于一定会被执行的特性,finally{}通常用作资源的释放。

  • //捕获异常 使用方式:
    try{
        可能出现异常的代码;
    }catch(异常类型 变量名){
        异常处理代码;
    }finally{
        //一定会被执行的代码
    }
    
  • 注意:当三个块中都出现了return语句,首先记录try{}中return的结果,出现异常时,还会记录catch{}中return的结果,最后记录finallu{}块中的结果,最终返回的是finallu{}块中的结果



在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

.29.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值