了解异常
异 常
-
当发现出现如上图所示的输出信息,称为报错,如何解决,是一个长久的积累过程,
-
关键要去记忆一些以Exception结尾的单词含义,Exception就叫做异常
-
异常是可以通过if。。Else。。判定来堵漏洞,但是不是所有的漏洞都能堵上,而且会造成代码的可读性,维护性变差
Java中如何进行异常处理
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(异常)
✨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: 数学运算异常