异常笔记
1.概念
异常是描述一些不同正常的意外的情况,作用是提高程序的健壮性。java中引入了异常处理机制来保证程序的健壮性
2.异常分类
检查异常:一种编译时需要处理的异常,在编译期间收到检查
运行时异常:在程序中发生的异常,编译不受检查
凡是RuntimeException及其子类都是运行时异常,其他异常都是检查异常
3.异常体系
Throwable:可抛出的
- Error: 错误,不应该由程序员捕获处理
- VirtualMachineError:虚拟机异常
- InternalError
- OutOfMemoryError
- StackOverFlowError
- VirtualMachineError:虚拟机异常
- throws 名词,声明方法存在异常,调用时需要处理
- throw 动词,主动抛出异常对象
- 检查异常对象,throws被强迫声明
- 运行时异常,不会被检查
- Exception; 异常
- RuntimeException
- NullpointException 空指针异常,对一个空的引用调用属性和方法
- IndexOutBoundsException 数组下标越界,使用非法下标
- ClassCastException 类型转换异常,多态向下转型
- NumberFormatException 数字格式化异常,字符串转数字
- StackOverFlow:栈溢出异常,无限递归
- ArithmetiocException 算是异常
- ParseException 解析异常
- IOException
- RuntimeException
4.异常处理
java中异常处理使用try、 catch、 finally、 thow、 throws 关键字
try/catch:
语法:
try{
//发生异常的代码
}catch(Exception e){
//处理异常
e.printStackTrace();
}finally{
//最后的操作,无论发生什么都要执行
}
1.顺序为 try [catch | finally]+
1.检查异常要求必须捕获处理
try{
}catch(Exception e){
}
2.对于运行时异常通常不要求捕获处理
try{
}finally{
}
特殊用法,保证某些代码必须执行
对于运行时异常,通常不要求处理。
try可以跟多个catch , 小异常在前大异常在后
try 尝试捕获多种异常,使用 一个大异常集中处理。
5.异常抛出
throw 与 throws
throws : 名词,声明方法存在异常,调用时需要处理。
throw: 动词 ,抛出异常对象。
将来如果你的程序出现异常,一定操作一定是违背了某些要求。
6.自定义异常
为什么要自定义异常? 每个异常类都是为了表示某个特定的意外情况,现有的异常可以通过异常体系中的异常类表达。在实际开发中,使用自定义异常来描述业务逻辑上的意外情况。
- 自定义异常
//自定义一个异常类
class TicketsNotEnough extends Exception {
public TicketsNotEnough() {
super();
}
public TicketsNotEnough(String message) {
super(message);
}
}
- 使用异常类
public static void salesTickets(int num) throws TicketsNotEnough {
if( num<=total ) {
total-=num;
System.out.println("卖出"+num+"张票");
}else {
throw new TicketsNotEnough(); // 在符合抛出异常条件的地方, 创建异常对象并抛出
}
}
异常细节补充:
- 方法重写,之类或实现类,不允许抛出跟宽泛的异常
- 有返回值的方法中,finally 和 return 的执行顺序。