- ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
- 异常
- 一:异常:就是程序在运行时出现不正常情况。
- 1.异常的由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。
- 其实就是java对不正常情况进行描述后的对象体现。
- 2.对于问题划分为两种:一种是严重的问题,一种非严重的问题。
- 3.对于严重的,java通过Error类进行描述。
- 对于Error一般不编写针对性的代码对其进行处理。
- 对于非严重的,java通过Exception类进行描述。
- 对于Exception可以使用针对性的处理方式进行处理。
- 无论Error或者Exception都具备有一些共性内容。比如:不正常情况的信息,引发原因等。
- 4. Throwable
- |--Error
- |--Exception
- |--RuntimeException
- 异常体系特点:异常体系中的所有类已经建立的对象都具备可抛性。也就是说可以被throws和throw关键字所操作。
- 只有异常体系具备这个特点。
- 5.异常有两种:
- 1):编译时被检测异常:
- 该异常在编译时,如果没有处理(没有抛也没有try),编译失败。
- 2):运行时异常(编译时不检测)
- 在编译时,不需要处理,编译器不检查。
- 该异常的发生,建议不处理,让程序停止,需要对代码进行修正。
- 二:异常的处理:
- 1. java提供了特有的语句进行处理
- try
- {
- 需要被检测的代码;
- }
- catch(异常类 变量)
- {
- 处理异常的代码;(处理方式)
- }
- finally
- {
- 一定会执行的语句;
- }
- 有三种结合格式:
- try
{
}
catch ()
{ - }
- ——————————————
- try
{
}
finally
{
}
- ————————————
- try
{
}
catch ()
{
}
- finally
- {
- }
- 注意:1,finally中定义的通常是关闭资源代码,因为资源必须释放。
- 2,finally只有一种情况不会执行,当执行到System.exit(0);finally不会执行。
-
- 2. 在函数上面声明异常。便于提高安全性,让调用出进行处理,不处理编译失败。
- (1)声明异常时,建议声明更为具体的异常,这样处理的可以更为具体。
- (2)对方声明几个异常,就对应有几个catch块,不要定义多余的catch块。
- 如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
- 建立在进行catch处理时,catch中一定义要定义具体处理方式。
- 不要简单定义一句 e.printStackTrace(); 也不要简单的就书写一条输出语句。
- (3)对捕获到的异常对象进行常见方法操作。String getMessage(): 获取异常信息。
-
-
-
-
- 三:自定义异常:定义类继承Exception或者RuntimException
- 1.如何定义异常信息?
- 因为父类中已经把异常信息的操作都完成了,所以子类只要在构造时,将异常信息传递给父类通过super语句。
- 那么就可以直接通过getMessage方法获取自定义的异常信息。
- 2.自定义异常必须是自定义类继承Exception
- 继承Exception的原因:异常体系有一个特点:因为异常类和异常对象都抛出。
- 他们都具备可抛性。这个可抛性是Throwable这个体系中独有的特点。
- 只有这个体系中的类和对象才可以被throws和throw操作。
- 3.throws和throw的区别:
- throws使用在函数上; throw使用在函数内。
- throws后面跟的异常类,可以跟多个,用逗号隔开。
- throw后跟的是异常对象。
-
-
-
-
- 4,Exception中有一个特殊的子类异常RuntimeException 运行时异常。
- 如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。
- 如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。
- 之所以不用在函数上声明,是因为不需要让调用者处理。
-
-
-
- 5,异常的好处:
- 1,将问题进行封装。
- 2,将正常流程代码和问题处理代码相分离,方便阅读。
- 6,异常注意事项:
- 在子类覆盖时:
- 1,子类抛出的异常必须是父类的异常的子类或者子集。
- 2,如果父类或者接口没有异常处理时,子类覆盖出现异常,只能try不能抛