1.异常:程序出问题的警示.提示代码哪里出错了.(分为;人为的(Exception),非人为的(Error))
Exception的异常:需要程序员去铺抓,并解决
Erro:属于系统类级别的错误,一般不需要去铺抓
例子:NullpointException:空指针异常;简称:NPE
ParseException:格式解析异常
ArrayIndexBroughtExcep:数组下标溢出异常
类型转化异常
OutOfMemoryError:堆异常错误.简称OOE.产生对象太多,内存不够用
.
.
.
1.1.检查性异常:继承Exceptiong的必须要处理的异常.要么抛出,要么try--catch.否则不能编译通过(有后遗症),引发更大的问题.必须要处理的异常.比如:IO运行了,打开了资源,突然IO异常,如果内存不处理,就会一直扩大
例子:若一个IO流开启了一个流,不关闭,就会造成资源泄露(就是资源占用,gc不会回收,一直在内存中,造成资源占用)
非检查性异常:继承RuntimeException的都是非检查性异常,可以处理,也可不处理.不影响全局的运作.比如:数据下标溢出,类型转化异常.....
2.异常的处理:
1.检查性异常(继承Exception):①try…catch…②throws 这两种方式该怎么处理呢?
①try{
//1.一般用来写可能要抛出异常的代码
1.1.只要中间发生异常,代码执行流程.立马中断,(是编译性异常不可能让整个项目运行后,再抛出异常的,因为如:IO,),且跳转到catch内
}catch(Exception e){
//2.只要try里面的代码,出现了异常,就被catch模块捕获到,跳进catch内处理
2.1.try不发生异常,则不执行catch
2.2.若try内有多个异常,则要catch多个,精确分类处理(从子到父类写,不然会报错)
}finally{
//3.资源关闭的地方.无论try还是catch是否终止,finally一定会走的
}
注意:打开资源型的代码,一定要关闭资源,否则会造成资源泄漏(gc不会回收,一直会存在内存中,直到系统崩溃)
②throws抛异常:当异常当代码无法处理,或者要交个上层处理,则用throws抛出去
方式: 在方法后,throws + xxxxxException(可以一下子抛多个,用逗号隔开)
③第三种情况:异常已经捕捉,并且记录了,但是没办法处理,或者把信息给上一层,则在catch抛出
方式:
try{
}catch(ArrayIndexBroughtExcep e){
System.out.println("异常已经捕捉,并且记录了,但是没办法处理");
throw new Exception("文件找不到了,怎么搞");
}finally{
}
注意:throws和throw的区别
3.自定义异常:根据实际情况,用它们
两种情况:
第一步:
①继承Exception
②继承RuntimeException(自定义的,非编译性异常较多)
第二步:覆写两个构造方法(无参,有参)
4.异常类:子类与父类之间异常情况
4.1.子抛异常,父类抛异常.父类抛的是父类的异常,子类只能抛同类或者子类
如:子:
public void test()throws RuntimeException{}
父类:
public void test1()throws Exception{
}
子类抛到异常类<=父类抛出的异常类
子类与父类异常的注意事项:
1.子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类;
2.如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是它的子集,子类不能抛出父类没有的异常;
3.如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
注意:如果多个异常,有同样的处理方式,可以用在括号里用 | 或来连接
try…catch注意的事项:
1.try不要放太多的代码
2.尽量不要在try内放for循环
3.catch处理异常时,要给出处理方式
4.捕获多个异常时,先处理小异常,再处理大的异常
5.适当的用finally代码块
1.什么是异常?
答:异常就是程序出错的提示,并告诉出错的地方
2.异常分为哪几种?
答:Exception 和 error 两种. Exception:需要程序员去铺抓,并解决;而 error 一般不需要去铺抓解决(系统性异常)
3.什么是检查性异常?
答:检查性异常就是继承与Exception,除了RuntimeException外的子类,都是属于检查性异常.
检查性异常需要必须处理,否则编译不通过.因为不解决,可能会引发更大的问题.如:IO,数据库连接,等如果异常不处理,就造成资源泄漏
4.检查性异常的解决方式有多少种?
答:抛出去throws和try----catch----finally
1.throws:当异常无法处理,或者要交个上层处理,则用throws抛出去.在方法的尾部
2.try---catch----finally:try代码块里面发生的异常,catch就会捕捉并跳到catch处理.最后执行finally
5.finally可以在try中吗?在catch中吗?为什么?
答:不可以.
因为当try发生异常时,代码执行路程就会中断,所以会出现finally走不到的情况
catch也是,如果try没有发生异常时,catch是不会走的,也会出现finally不执行的情况
6.说一下throw与throws的区别
答:区别在于用法.
throws,用在方法声明后面,跟的是异常类名;可以跟多个异常类名,由逗号隔开;表示抛出异常,由该方法的调用者来处理
throw用在方法体内,跟的是异常对象名;只能抛出一个异常对象名;表示抛出异常,有方法体内的语句处理