黑马程序员__异常机制

----------- [url=http://www.itheima.com][color=red]android培训[/color][/url]、[url=http://www.itheima.com][color=red]java培训[/color][/url]、java学习型技术博客、期待与您交流! ------------


[b]什么是异常?[/b]
异常是程序在运行中出现的非正常状态。

异常体系
Throwable
|--Error
|--Exception
|--RuntimeException

[b]error和exception的区别?[/b]
error表示恢复不是不可能但是很困难的情况下的一种严重问题,比如内存溢出不可能指望程序能够处理。
exception是实现或设计问题,也就是说如果程序运行正常,从不会发生的情况。

[b]运行时异常和一般异常的区别?[/b]
异常是程序运行中出现的非正常状态。运行时异常是java虚拟机的通常操作中出现的异常,是一种常见的运行错误。java编译器要求方法必须声明或抛出可能发生的非运行时异常,但不要求必须声明抛出未被捕获的运行时异常。

[b]throw和throws关键字[/b]
throw:在方法内抛出异常对象。
throws:在方法上声明可能发生的异常。

异常处理语句格式

//格式一
try
{

}
catch ()
{
}
//格式二
try
{

}
catch ()
{
}
finally
{

}
//格式三
try
{

}
finally
{
}

finally表示总是被执行,通常在里面做关闭资源的动作。只有遇到Sytem.exit(0);语句时finally语句不会被执行。
如果没有对异常进行处理,虚拟机进行默认处理,调用默认异常处理机制,程序终止。

多异常处理
1.声明异常时,建议声明更为具体的异常,这样处理更具体
2.对方声明几个异常,就对应几个catch块
如果对个catch中的异常出现继承关系,父类异常catch块放在最下面,不要定义多余的
catch块。

[b]自定义异常[/b]
因为项目中会出现特有的问题,而这些问题未被java所描述并封装对象,所以对于这些特有问题可以按照java对问题封装思想。将特有问题进行自定义的异常封装。这就是自定义异常。必须继承Exception、

自定义异常信息
因为父类已经将异常信息的操作(如getMessage)都完成了,所以子类只要在构造时,将异常信息传递给父类通过super语句,那么就可以直接通过getMessage方法获取自定义的异常信息。

class FuShuException extends Exception
{
FuShuException(String msg)
{
super(msg);
}
}

class ExceptionTest
{

try
{
//捕获异常
}
catch (FuShuException e)//异常处理
{
System.out.println(e.toString());
}
}


自定义异常时如果该异常发生,无法在继续进行运算(错误运算没有意义),就让自定义异常继承RuntimeException。

[b]异常在子父类中的体现[/b]
1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异
常或父类异常的子类,其他异常必须进行异常处理。
2.如果父类方法出现多个异常,那么子类在覆盖时,只能抛出父类异常的子集。
3.如果父类或接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常,如果子类发生了异常,就必须要进行try处理,绝对不能抛。

[b]异常的好处[/b]
1.将问题进行封装
2.将正常流程代码和问题处理代码分离

[b]异常处理原则[/b]
1.处理方式有两种,声明或捕获(try或throws)
2.调用到抛出异常的功能时,抛出几个就处理几个,一个try对应多个catch
3.多个cantch,父类的catch放到最下面
4.catch内,需要定义针对性处理方式,不要简单定义printStackTrace输出语句,也不要
不写,当捕获到异常,本地功能处理不了,可以继续在catch中抛出。


----------- [url=http://www.itheima.com][color=red]android培训[/color][/url]、[url=http://www.itheima.com][color=red]java培训[/color][/url]、java学习型技术博客、期待与您交流! ------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值