----------Android、Java开发期待与您交流----------
Java面向对象—异常处理机制
异常在java程序运行期间由于人为、外部环境、程序内部某种错误导致程序终止运行或没有达到预期效果的行为
异常有两种情况:Error、Exception
Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象。如果出现了这样的内部错误,除了通知用户,并尽力使程序安全终止之外,再也无能为力。
Exception指程序本身可以处理的异常;其包含两个分支,一支为RuntimeException,另一支为其它异常
Error和Exception的区别:异常可以被程序本身处理,错误无法处理。
Error和Exception都直接继承自Throwable类
Java的异常按编译的处理方式可分为:可检查异常和不可检查异常
可检查异常:指编译器必须处理的异常。方法应该在其首部声明所有可能抛出的异常
不可检查异常:指编译器不需要强制处理的异常。RuntimeException的子类和Error的子类
异常处理机制:抛出异常和捕获异常
抛出异常:在方法参数列表后和方法体之间使用Throws关键字抛出具体异常名称,如果有多个异常中间用逗号隔开,遇到异常时会交给虚拟机处理
捕获异常:使用try、catch、finally块处理异常
try块里面写可能出现异常的代码
catch块里面是具体的异常类型及异常情况说明,try后面可以跟若干个catch块;一般情况子异常放在上面,父类异常放在下面。
finally块里面的内容无论程序是否有异常发生都会被执行到,但在其之前执行到System.exit(0)(终止当前正在运行的虚拟机)则例外
Throws和throw的区别:
1.throws用在方法上,throw用在方法内
2.throws后面跟异常类型,throw后面跟的是异常对象
异常在子父类方法覆盖中的体现
1.子类覆盖父类方法时,如果父类的方法抛出异常,那么子类的覆盖方法只能抛出父类的异常或该异常的子类
2.如果父类抛出多个异常,那么子类子覆盖方法时,只能抛出父类的子集
3.如果父类或者接口的方法中没有抛出异常,那么子类在覆盖方法时,也不可以抛出异常;如果子类发生了异常,就只能进行捕捉
自定义异常
定义类继承Exception或者RuntimeException
目的:
1.为了让该自定义类具备可抛性
2.让该类具备操作异常的共性方法
当要定义自定义异常的信息时,可以使用父类已经定义好的功能,将异常信息传递给父类的构造函数
异常的好处
1.将问题进行封装
2.将正常流程代码和可能问题代码分离,方便阅读
异常处理的原则
1.处理方式有两种:try和throws
2.调用到抛出异常的功能时,抛出几个,处理几个。一个try对应多个catch
3.多个catch存在时,父类的catch放到最下面
4.catch内建议定义针对性的处理方式
常见RuntimeException
1.java.lang.ArithmeticException
2.java.lang.ArrayIndexOfBoundsException
3.java.lang.ClassCastException
4.java.lang.ClassNotFoundException
5.java.lang.NullPointerException
6.java.lang.IllegalArgumentException
---------- Android、Java开发期待与您交流----------