------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
异常:就是程序在运行时出现不正常的情况。
异常由来:问题也是现实生活中的一个具体事物,也可以通过java类的形式进行描述。并封装成对象。
其实就是java对不正常情况进行描述后的对象体现。
对于问题的划分:两种:一种是严重的问题。一种非严重的问题。
对于严重的,java通过error类进行描述。
对于Error一般不编写针对性的代码对其进行处理。
对于非严重的,java通过Exception类进行描述。
对于Exception可以使用针对性的处理方式处理。
无论Error或者Exception都具有一些共性的内容。
比如:不正常情况的信息,引发原因等。
Throwable -- Error --Exception
2、异常处理
java提供了特有的语句处理
try
{
需要被检测的代码:
}
catch(异常类 变量)
{
处理异常的代码;(处理方式)
}
finally
{
一定会执行语句;
}
3、对捕获到的异常对象进行常见方法操作。
String getMessage():获取异常信息。
对多异常的处理
1、声明异常时,建议声明更为具体的异常。这样处理的可以更具体。
2、对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。
如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
建议在进行catch处理时,catch中一定哟啊定义具体处理方式。
不要简单地定义一句e.prinStackTrace();
也不要简单地就书写一条输出语句。
自定义异常:必须是自定义类继承Exception。
继承Exception原因:
因为异常类和异常对象都需要被抛出。
他们具备可抛性。这个可抛性是Throwable这个体系中独有特点。
只有这个体系中的类和对象才可以被throws和throw操作。
throws和throw的区别
throws使用在函数上。
throw使用在函数内。
throws后面跟的是异常类。可以跟多个。用逗号隔开
throw跟的是异常对象
Exception中有一个特殊的子类异常RuntimeException运行时异常。
如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。
如果在函数上声明了该异常,调用者可以不用进行处理。编译一样通过;
当该异常发生,希望程序停止。因为在程序运行时,出现了无法继续运算的情况,希望停止程序对程序进行修饰。
finally: 中存放的是一定会被执行的代码。
通常用于关闭资源
第一个格式:
try{}
catch(){}
第二个格式
try{}
catch(){}
finally{}
第三个格式:
try{}
fainally{}
只要问题没有被解决(被catch)就要往外抛
异常在子父类覆盖中的体现:
1、子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者改异常的子类。
2,、如果父类方法抛出多个异常,那么子类在覆盖该方法时,也不可以抛出异常。
如果子类方法发生了异常。就必须就行try处理。绝对不能抛。
总结:
异常是什么?是对问题的描述。将问题进行对象的封装。
异常体系:
Throwable
Error
Exception
RuntimeException
异常体系的特点:异常体系中的所有类以及建立的对象都具备可抛性。
也就是说可以被throw和throws关键字所操作。
只有异常体系具备这个特点。
throw和throws的用法:
throw定义在函数内,用于抛出异常对象。
throws定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开。
当函数内容有throw抛出异常对象时,并未进行try处理。必须要在函数上声明,否则编译失败。
注意,RuntimeException除外,也就是说,函数内如果抛出的RuntimeExcpetion异常,函数上可以不用声明。
如果函数声明了异常,调用者需要进行处理,处理方法可以用throws 可以用try。
异常有两种:
编译时被检测异常
该异常在编译时,如果没有处理(没有抛也没有try),编译失败。
该异常被表示,代表可以被处理。
运行时异常(编译时不检测)
在编译时,不需要处理,编译器不检查。
该异常的发生,建议不处理,让程序停止,需要对代码进行修正。
finally有一种情况读不到
编译失败,非静态内部类中不可以定义静态成员。
内部类中如果定义了静态成员,该内部类必须被静态修饰。
成员变量看左边