

当发现出现如上图所示的输出信息,称为报错,如何解决,是一个长久的积累过程,
关键要去记忆一些以Exception结尾的单词含义,Exception就叫做异常
异常是可以通过if。。Else。。判定来堵漏洞,但是不是所有的漏洞都能堵上,而且会造成代码的可读性,维护性变差
Java的异常处理是通过5给关键字实现的
| 关键字 | 处理方式 | 说明 |
|---|---|---|
| try | 捕获异常 | 执行可能产生异常的代码 |
| catch | 捕获异常 | 捕获异常 |
| finally | 捕获异常 | 无论是否发生异常,代码总能执行 |
| throw | 声明异常 | 声明方法可能要抛出的各种异常 |
| throws | 抛出异常 | 手动抛出异常 |
总结起来就是五个关键字:try、catch、finally、throw、throws
使用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(检查异常):强制要求程序进行异常处理,否则编译不给通过的
提问:
代码阅读:
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");
}
}
💥注意:
如果父类抛出异常,子类重写方法不可以抛出比父类异常更高的异常

jar文件,俗称jar包
InputMismatchException: 输入不匹配异常
ArithmeticException: 数学运算异常