一、异常的概念
a)程序在运行过程中出现的不正常的情况称之为异常。
b)异常的父类:所有异常的父类throwable,java.lang包下的类。
c)常用方法
i.String getMessage();//返回此异常的String信息。
ii.void printStackTrance();//打印异常栈详细信息。
二、异常的分类
a)Error:java.lang包下
错误,通过程序运行解决不了的错误。
特点:不需要解决,解决不了。
b)Exception:java.lang 包下
i.RuntimeException(运行时异常 未检查异常)
特点:编译器不会检查,但是运行时会报错,可以避免,可处理可不处理。
ii.非RuntimeException(已检查异常 非运行时异常)
特点:编译器会检查,必须要处理,不处理会报错。
c)常见的异常
i.数组下标越界异常 java.lang.ArrayIndexOutOfBoundsException
ii. 类型转换异常 java.lang.ClassCastException
iii. 空指针异常 java.lang.NullPointerException
iv.数据格式转换异常 java.lang. NumberFormatException
三、异常的产生
a)自动产生异常
特点:当程序运行出现错误,程序自动产生异常,导致程序中断。后续代码不再执行。
b)手工产生异常
语法:throw new 异常名(“参数”);
要求:必须包含在方法内。
作用:相当于return语句,导致程序自动终止,后续代码不再执行。
四、异常的传递
沿着方法的调用链反向传递,直到主函数,最后到达JVM,程序终止。
五、异常的处理
a)消极的处理方式(外抛 声明异常)
i.语法: throws 异常名
ii.位置:方法声明后面
修饰符 返回值类型 方法名(参数表) 抛出的异常{
//方法主体
}
iii.特点:使用throws只是消极的把异常传递,可以使已检查异常编译通过,推卸责任,并没有解决问题,程序仍然会因异常而终止。
b)积极的处理方式(捕获)
try{
//可能出现异常的代码
}catch(可能出现的异常 e){
//处理异常的方式
}… catch(可能出现的异常 e){
//处理异常的方式
}
c)注意:
i.catch块可以出现多次,可能出现异常的代码会匹配到catch块中的处理异常代码。
ii.可以使用父类的异常代替子类的异常
iii.父类异常只能出现在子类异常后
d) finally
无论如何都必须要执行的代码。
try{
//可能出现异常的代码
}catch(异常类型 e){
//出现异常之后需要执行的代码
}finally{
//无论如何都必须要执行的代码
}
六、 自定义异常
写一个类 继承Exception 提供有参构造方法 传入一个message。
七、方法的覆盖(完整版)
访问修饰符子类和父类相同或更宽 ,返回值类型、方法名、参数表相同。
子类不能比父类抛出更多、更宽泛的异常。
消极的处理异常:throws 后续代码不会执行
积极的处理异常:try-catch try块中的后续代码不会执行 try块后的代码会执行
注意:
final,finally,finalize 三者区别
Final是一个修饰符:
当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值
当final修饰的**变量为静态变量(即由static修饰)**时,必须在声明这个变 量的时候给它赋值
当final修饰方法时,该方法不能被重写
当final修饰类时,该类不能被继承
Final不能修饰抽象类,因为抽象类中会有需要子类实现的抽 象方法,(抽 象类中可以有抽象方法,也可以有普通方法,当一个抽象类中没有抽象方 法时,这个抽象类也就没有了它存在的必要)
Final不能修饰接口,因为接口中有需要其实现类来实现的方法
Finally:
Finally只能与try/catch语句结合使用,finally语句块中的语句一定会执行, 并且会在return,continue,break关键字之前执行
finalize:
Finalize是一个方法,属于java.lang.Object类,finalize()方法是GC (garbage collector垃圾回收)运行机制的一部分,finalize()方法是在 GC清理它所从 属的对象时被调用的。