了解 异常

了解异常

异 常

在这里插入图片描述
在这里插入图片描述

  • 当发现出现如上图所示的输出信息,称为报错,如何解决,是一个长久的积累过程,

  • 关键要去记忆一些以Exception结尾的单词含义,Exception就叫做异常

  • 异常是可以通过if。。Else。。判定来堵漏洞,但是不是所有的漏洞都能堵上,而且会造成代码的可读性,维护性变差

Java中如何进行异常处理

  • Java的异常处理是通过5给关键字实现的

    关键字处理方式说明
    try捕获异常执行可能产生异常的代码
    catch捕获异常捕获异常
    finally捕获异常无论是否发生异常,代码总能执行
    throw声明异常声明方法可能要抛出的各种异常
    throws抛出异常手动抛出异常
  • 总结起来就是五个关键字:try、catch、finally、throw、throws

try-catch块

  • 使用try-catch块捕获异常,分为三种情况

    • 第一种情况:正常
      在这里插入图片描述

      try块代码没有发生异常,catch块内的代码不会运行,后续的代码可以正常运行

    • 第二种情况:出现正常
      在这里插入图片描述

      try块中代码出现异常,则try块后续的代码中止运行,这个异常在catch块中能找到匹配的处理,进入catch块运行,再运行后续的代码块

    • 第三种情况:异常类型不匹配

    • 在这里插入图片描述

      try块中代码出现异常,则try块后续的代码中止运行,这个异常在catch块中不能找到匹配的处理,中断代码运行,后面代码均不执行

在catch块中处理异常

加入用户自定义处理信息

System.err.println("出现错误:采摘量和果商数应为整数,果商数应大于零!");

调用方法输出异常信息

e.printStackTrace();

异常对象常用的方法

方法名说明
void printStackTrace()输出异常的堆栈信息
String getMessage()返回异常信息描述字符串,是printStackTrace()输出信息的部分

这两个方法,第一个方法printStackTrace() 一定要写,它可以提供错误的类型和错误的信息提示,第二个方法getMessage()只能看到错误的信息提示,但是大多数错误都没有信息提示,所以第二个方法能力有限

重点

  • 在try-catch块后加入finally块

    • 是否发生异常都执行:

    • 在这里插入图片描述

      try块正常运行,运行完进入finally块执行

      try块运行出现异常,先进入catch块,再进入finally

    • 存在return的try-catch-finally块:

    在这里插入图片描述

catch块中加return,finally块一样会运行,finally在return之前执行
在这里插入图片描述

💥特殊点注意!

如果catch和finally中都存在return,由于finally块会在catch的return前运行,而finally中存在了return则直接返回了,catch中的return就不会运行了

···
在这里插入图片描述

代码运行正常,finally一定会执行,即使try块中有return,但是先执行finally,再执行return,由于finally存在return语句,则直接返回,结果为2

···
在这里插入图片描述

只有这一种写法不会运行finally块,真实场景下绝对不可能出现这行代码的

异常的分类

在这里插入图片描述

​ 所有异常和错误的父类:Throwable可抛出的

​ Throwable下面有2个子类,一个叫Error错误),一个叫Exception异常

  • 其中Error 属于非常难以解决的问题,通过编码逻辑基本得不到解决方案的

  • Exception属于代码出现了逻辑性,违反Java的编程规定所出现的一些简单问题,可以得到解决的

✨Exception下会分为两种异常类型:

一种叫RuntimeException(运行时异常):只有程序运行了,才可能发生的异常

另一种叫CheckedException(检查异常):强制要求程序进行异常处理,否则编译不给通过的

小结

提问:

  • 自定义异常需要继承哪个类
  • 如何使用Java编写自定义异常类

代码阅读:

public class Superclass{
    public void start() throws IOExeption{
        throw new IOExeption("Not acble to open file");
    }
}
public class SubClass extends Superclass{
    public void start() throws Exeption{
        throw new Exeption("Not acble to start");
    }
}

💥注意:

  • 这段代码编译器对子类重写start()方法产生错误。
  • 因为每一个Java方法的重写是有规则的。
  • 一个重写方法抛出的异常不能比父类原方法继承关系高。

如果父类抛出异常,子类重写方法不可以抛出比父类异常更高的异常
在这里插入图片描述

jar文件,俗称jar包

InputMismatchException: 输入不匹配异常

ArithmeticException: 数学运算异常

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值