文章目录
一、错误与异常概述
1.概念
- 程序运行过程中,可能会发生一些不被期望的效果,肯定会阻止我们的程序按照指令去执行
这种不被期望出现的效果,肯定需要抛出来告诉我们 - java中有一个定义好的规则Throwable(可以抛出的)有两个子类,Throwable是一个父类实现了接口
2.错误(Error)
- 通常是一些物理性的,JVM虚拟机本身出现的问题,程序指令是处理不了的
3.异常(Exception)
- 通常是一种人为规定的不正常现象,通常是给定的程序指令产生了一些不符合规范的事情
二、异常整体分支
1.运行时异常(非检查异常)
Error和RuntimeException都算作运行时异常
javac编译的时候,不会提示和发现的
在程序编写时不要求必须处理,如果我们愿意可以添加处理手段(try throws)
要求出现这样的异常的时候,知道怎么产生及处理
1、InputMisMatchException 输入不匹配
例如:int value = input.nextInt();//abc
2、NumberFormatException 数字格式化
例如:int value = Integer.parseInt("123.4");
3、NegativeArraySizeException 数组长度负数
例如:int[] array = new int[-2];
4、ArrayIndexOutOfBoundsException 数组索引越界
例如:int[] array = {1,2,3};
array[5];
5、NullPointerException 空指针异常
例如:int[][] array = new int[3][];
array[0][0] = 10;
6、ArithmeticException 数字异常
例如:10/0 整数不允许除以0 Infinity小数除以0会产生无穷
7、ClassCastException 造型异常
例如:Person p = new Teacher();
Student s = (Student)p;
8、StringIndexOutOfBoundsException 字符串越界
例如:String str = "abc";
str.charAt(5);
9、IndexOutOfBoundsException 集合越界
例如:一般list家族中出现
ArrayList list = new ArrayList();
list.add() list.add() list.add()
list.get(5);
10、IllegalArgumentException 非法参数异常
例如:ArrayList list = new ArrayList(-2);
2.编译时异常(检查异常)
除了Error和RuntimeException以外的其他异常
javac编译的时候,强制要求我们必须为这样的异常做处理(try或者throws)
因为这样的异常在程序运行的过程中极有可能产生问题
异常产生后后续的所有执行就停止了
1、InterruptException
try
{
Thread.sleep(5000);
}
catch(Exception e)
{
}
三、处理异常手段
- 添加处理异常的手段
- 处理异常不是异常消失了
- 处理异常指的是处理掉异常之后,后续的代码不会因为此异常而终止执行
1.try{}catch(){}[fianlly{}]
1、try不能单独的出现
2、后面必须添加catch或者finally
3、catch有一组括号()是为了捕获某一种异常
4、catch可以有很多个存在
捕获的异常之间没有任何的继承关系
捕获的异常需要从小到大进行捕获
5、finally不是必须存在的
若存在finally结构,则必须执行
6、处理异常放在方法内部时
如果在方法内部含有返回值
不管返回值return关键字在哪里,finally一定会执行完毕
返回的具体结果看情况
2.throws抛出
1、异常只能在方法上抛出,属性是不能处理异常的
2、方法 构造
3、方法可以抛出不止一个异常,通过逗号隔开
4、抛出的异常与多个catch类似,要么没关系,要么先抛出小异常
四、自定义异常
- 我们可以自己创建异常–具体步骤
1、自己描述一个异常的类
2、让我们自己的类继承
如果继承是RuntimeException--->运行时异常(不需要必须处理异常手段)
如果继承Exception---->编译时异常(必须添加处理手段)
3、创建一个当前自定义异常类的对象
通过throw关键字,主动产生异常
4、当我们设计描述的方法(事情)之前没有相关的异常能描述我的问题时
这个时候才会利用自定义异常来描述