----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------
一.异常的定义:在运行时期发生的一些不正常情况。就是异常。
二.异常的由来:程序运行时总会一些不正常的情况。java语言对这些不正常情况也进行了描述,并对这些不正常进行了对象的封装。
三.异常体系:异常情况有多种,比如角标越界,空指针等都是。就对这些问题进行分类。而且这些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系,就是Exception。
通过查阅api。发现异常体系是这样的?
Throwable:可抛出。
|--Error:严重的问题。一般都是由jvm从底层抛出来的问题。通常不需要处理。直接修改程序即可
|--Exception:是可以定义针对性的处理方式对该种情况进行处理。
不正常情况分两种,一种是可以解决的Exception,一种是严重性的Error。
无论是Error还是Exception,它们的子类都一个特点:子类名的后缀都是父类名。
这个异常体系最大的特点:就在于该体系中的类和对象都具备可抛性。
可抛性的体现就是无论是类,还是对象都可以被throws或者throw所操作。
throws操作类。throw操作对象。
四.异常的处理方式:
1,声明抛出。告诉调用者功能会有问题。通过throws关键字对问题声明在功能上。
2,进行捕捉。可以使用针对性的捕捉代码块完成。
try
{
//需要被检测的代码;
}
catch(异常类 变量)//该变量用于接收try检测到的异常对象。
{
//异常处理代码。
}
finally
{
//一定会被执行的代码。
}
五. throws throw关键字的区别:
throws用在函数上,用于功能声明异常,后面抛出的是异常类可以抛出多个,只要用逗号隔开即可。
throw 只能用在函数内,用于抛出异常对象,额外特点,一旦执行,就可以结束功能。
例子:
六.自定义异常:
对于常见的不正常情况,java都有对应的描述,比如角标越界,或者空指针等。对于自定义的程序中的出现的特有问题,java并没有给出对应的描述。这时就需要我们按照面向对象的思想对这个问题进行描述,像异常一样将其封装成对象。
定义的方式:
1,定义一个类,对问题进行描述。
2,必须要让这个类继承异常类,具备可抛性。
七.异常细节:
1,定义功能,功能内部因为传入的参数问题,导致了功能会出现问题。这时为了解决这个问题,通常,我们都会将问题通过throws声明在函数上。
目的:为了调用者在使用这个功能的时候,能明确处理方式。也就是说throws抛出的目的是为了让调用者预先定义好问题的处理方式。
2,如果一个功能抛出多个异常。
那么在调用该功能时,需要有多个catch进行每一个异常的针对性处理。
如果多个catch中有父类异常,一定要定义在最下面。否则编译失败。
3,特殊部分:
函数内throw抛出异常对象,函数上一定要用throws声明。否则编译失败。
调用到声明异常的函数,要进行throws声明抛出,或者trycatch捕捉,否则,编译失败。
注意:异常分两种。
1,编译时被编译器检测的异常。
通常都需要编写针对性的处理代码进行处理。
2,编译时不被检测的异常。这种异常出现,编译时期是不在检查之列。这种异常称为运行时异常。
也就说函数内throw抛出运行时异常,不需要在函数上声明。即使声明了,调用者也不用一定给出预先处理方式。 因为它不会导致编译失败。
通常,不编写针对性的代码进行处理。一旦发生,就让程序停掉。
为了对代码进行修正。
区分方式:
Exception中一个特殊的子类:RuntimeException就是运行时异常。
RuntimeException和其子类都不需要编译时检测。
意味着:我们在自定义异常时,可以继承Exception,称为编译时被检测的异常。
也可以继承RuntimeException,称为运行时异常。
八.总结:异常的处理方式主要有两种,一种是通过throws关键字对异常进行抛出。另一种方式就是通过try{} catch{} finally{} 代码块对异常进行捕捉。像一些自定义程序中出现的一些问题,则需要我们自定义异常来进行处理。
---------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
详情请查看: