热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

了解异常

了解异常异常当发现出现如上图所示的输出信息,称为报错,如何解决,是一个长久的积累过程,关键要去记忆一些以Exception



了解异常

异 常

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

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

  • 关键要去记忆一些以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: 数学运算异常






推荐阅读
author-avatar
王欣纶淑玲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有