异常
异常是指程序执行时,没有按照预期进行的情况
比如:请输入一个整数,结果用户输入了“abc”
一、异常会导致什么结果?
程序终止!!(用户体验极差)
二、常见的异常(exception)
1.InputMismatchException // 输入不匹配异常
2.ArrayIndexOutOfBoundsException // 数组下标越界异常
3.ClassCastException // 类型转换异常
4.ArithmeticException // 算术异常
5.StringIndexOutOfBoundsException // 字符串下标越界异常
6.NullPointerException // 空指针异常
7.ParseException // 解析异常
8.IllegalArgumentException//非法数据异常
9.RuntimeExpection//运行时异常
10.IllegalThreadStateException
extends IllegalArgumentException//抛出以指示线程不处于所请求操作的适当状态。
11.FileNotFoundExpection//找不到文件异常
12.MySQLIntegrityConstraintViolationException//数据库完整性约束异常
13.MySQLSyntaxErrorException//sql语句有误异常
(Parameter index out range (2 > number of parameters, which is 1))参数索引超出范围
三、异常的分类
受查异常:性格刚烈,如果不处理则编译无法通过
以Expection及其子类(除了RuntimExpection)
非受查异常:如果不处理它,它也不会提示你,但是如果你没有按照他的要求来,会在执行的时候抛出异常,中止程序
以RuntimeException和Error为首及其子类
四、异常处理机制
自行处理
try:
监视一段代码,这段代码有可能抛出代码
catch:
如果try语句块的代码抛出了异常,则执行对应的catch语句块
finally:
最终的,一定会执行,就算上面的代码return了,也要执行finally里的语句块。就算上面的代码崩溃了,也要执行finally里的语句块。
适用于:资源释放
抛出去
throw
方法中,抛出一个异常对象
throws
方法上,声明异常类型。告诉调用者,这个方法可能会出现什么类型的异常,让他提前防范
自定义异常
Java只提供了一些基本的异常类,不可能满足所有人的需求。
如果有定制需求,可以自定义异常
步骤:
1.继承自系统中已有的异常类(Expection、RnutimeExpection)
2.自定义带参数的构造方法,(用于接受异常的描述信息)
四、工程手段
-
System.out.println();
把看不见的过程可视化
-
单步调试
debug模式
1.打断点
2.进入debug模式
3.三个按钮
-
step into 一行一行的执行,遇见方法就进入方法
-
step out 跳出当前方法
-
step over 把方法调用当作一条语句、一个整体、直接执行完毕
适用场景:比较精确的错误范围,小范围内使用
-
-
单元测试
大到一个模块,小到一个方法
用于测试某个功能是否能够正常使用
@Test
assertEquals(expected,res);
public class Caculator {
public static int add(int a, int b){
return a + b;
}
public static int sub(int a, int b){
return a + b;
}
}
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CaculatorT {
@Test
public void testAdd(){
int res = Caculator.add(3,5);
assertEquals(8,res);
}
@Test
public void testSub(){
int res = Caculator.add(3,5);
assertEquals(2,res);
}
}