Exception
Throwable 是所有异常 (Exception) 和 错误(Error) 的父类
我们可以将异常分为两类:
检查异常(Cheaked Exception)
在编译期间产生的异常
例如:
Class clazz = Class.forName(“com.huayu.t1.bird”); //指的是寻找这个类
是Exception的子类 但是不是RuntimeException的子类。
这样的异常必须在编译时处理。
运行时异常(Runtime Exception)
在程序运行的过程中产生的异常
例如:
NullPointerException
ClassCastException ....
RuntimeException 及其子类。。。
注意:程序抛出异常不会让jvm宕机
处理异常的方式:
1.throws关键字 继续往外抛异常
如果异常不能自己进行处理 将异常抛给调用者 如果都不处理 则异常会抛给jvm
Jvm 会将异常信息在控制台中显示。
如:
Public static void f1(){
Class clazz = Class.forName(“com.huayu.t1.Bird”);
}
Public static void f2(){
f1();
}
main:
f2();
3.try catch
格式:
try{
将可能抛出异常的代码
}catch(异常){ // 捕获的异常
// 处理异常
//记录日志
//继续往外抛
thow e; //往上一级抛 不过每一级的方法都要加上thows Exception表示可以抛出异常。
}
注:
- e.printStrackTrace(); 为打印某异常信息。不需要sysout。
- e.getMassage 为异常信息。
3.try 必须出现 而catch 和finally 两者至少出现一个。
finally
try{
}catch(){
}finally{}
4.无论如何都会执行的代码。
5.作用:关闭io流等。。。
6.如果产生了异常,改行代码下面的程序不会执行,会被catch捕获到异常
7.Catch的时候 通常会将对应的异常分配好 如:
try{
}catch(){
}catch(){
}
8.catch 可以出现多个 范围小的要放在前面。
9.catch捕获的时候 必须把对应的检查异常写出 或者写Exception。
10.在父子类中使用异常
1>父类方法没有抛出异常,子类重写的方法能否用throws抛出异常? 可以
但是它不能抛出检查异常,只能抛出运行时异常。
2>父类方法抛出了异常,子类重写父类的方法,可以抛出异常,也可以不抛出异常。
父类方法抛出了异常,子类方法不能抛出比父类范围更大,个数更多的检查异常。
异常在平时开发中的使用:
结合日志进行处理。 log4j 来记录日志 开源的jar包
使用log4j 需要下载第三方的jar包
分布式的日志系统 elk
