您的位置:首页 > 职场人生

黑马程序员_复习异常:理解自定义异常

2014-04-13 20:32 239 查看
----------------------
android培训 、 java培训 、 期待与您交流! ----------------------

1、理清异常处理的思路:

所有的异常继承于:Throwable:这个体系的特点:体系中的所有类,以及对象都具备可抛性。

Throwable有两个直接子类:Error,Exception

Throws用来声明问题。

throw用抛出问题对象。

try...catch...进行异常捕获处理。

2、 为什么要自定义异常?

有很多异常的子类继承了Throwable,来描述常用见的异常,但是在实例开发的时候我们会遇到一些Java类库中没有描述的异常,这时候就需要我们自定义异常来处理程序中的异常;

我们可以模仿已经在类库中描述的异常处理的类来自定义异常,首先查AFI文档,发现Error、Exception各有四个构造方法,没有直接方法,所以我们在定义异常的时候只要继承Error、Exception覆盖其构造方法就能达到自定义异常的效果。用两个继承Exceptin的例子说明:

class FuShuException extends Exception//自定义异常,继承Exception
{
private int num;
FuShuException()//覆盖空参构造方法
{
super();
}
FuShuException(String meg,int num)//覆盖传参构造方法
{
super(meg);//访问父类中的有参构造函数

this.num = num;
}
public int getNum()
{
return num;
}
}
class Demo
{
int div(int a,int b)throws FuShuException/*声明自定义的异常*/,ArithmeticException
{
if(b<0)
throw new FuShuException("负数啦,又废啦!",b);//抛出自定义异常

return a/b;//throw new ArithmeticException();
}
}
class ExceptionDemo4
{
public static void main(String[] args)
{
Demo d = new Demo();
try
{
int num = d.div(4,0);
System.out.println("num="+num);
}
catch (FuShuException e)//用try...catch...捕获自定义异常
{
System.out.println(e.toString()+e.getNum());
}
catch (ArithmeticException e)
{
System.out.println(e.toString()+".....");
}
System.out.println("over");
}
}

3、 演示使用自定义异常处理实际开发中的问题:

/*
自定义老师上课时可能出现的异常,以及异常的处理;
以及自定义公司老师上课计划异常,以及异常处理方案
*/
class LanPingException extends Exception//电脑可能出现蓝屏异常
{
LanPingException(String msg)
{
super(msg);
}
}
class MaoYanException extends Exception//电脑可能出现冒烟异常
{
MaoYanException(String msg)
{
super(msg);
}
}
class NoPlanException extends Exception//老师计划可能有变,无法完成教学计划
{
NoPlanException(String msg)
{
super(msg);
}
}
class Computer
{
/*
假设三种状态:state==0、state==1、state==2;
0---电脑正常运行、1---电脑蓝屏、2---电脑冒烟
*/
int state=0;
void run()throws LanPingException,MaoYanException//声明两个异常
{
if(state==1)//当电脑状态为1时,电脑是蓝屏状态
throw new LanPingException("蓝屏啦!");//抛出蓝屏异常

if(state==2)//当电脑状态为2时,电脑是冒烟状态
throw new MaoYanException("冒烟啦,废啦!");//抛出冒烟异常

System.out.println("电脑运行!");//电脑正常运行状态
}
void reset()//电脑重启函数
{
System.out.println("电脑重启!");
state=0;//电脑重启后,改变电脑状态
}
}
class Teacher
{
private String name;
private Computer cmpt;
Teacher(String name)
{
this.name=name;
cmpt=new Computer();
}
public void prelect()throws NoPlanException//异常转换,抛出一个与教学任务有关的异常
{
/*
对异常进行环绕处理
*/
try
{
cmpt.run();
System.out.println("讲课!");
}
catch (LanPingException e)//对抛出蓝屏异常进行接收
{
System.out.println(e);
cmpt.reset();//处理蓝屏异常,重启电脑
prelect();//电脑重启后,状态恢复正常,继续讲课!
}
catch (MaoYanException e)//对抛出冒烟异常进行接收
{
System.out.println(e);
test();
/*MaoYanException e=new MaoYanException();*/
//throw e;//将解决不了的问题继续抛出。
/*考虑到实际开发中是不应该抛出调用者无法解决的异常,此时应对异常进行转换*/

throw new NoPlanException("课时进度无法继续!");//抛出与教学任务有关的异常
}
}
public void test()//老师处理异常的方法
{
System.out.println("做练习!");
}
}
class ExceptionDemo2
{
public static void main(String[] args)
{
Teacher t=new Teacher("老毕");

try//公司对老师抛出的教务计划异常的环绕处理
{
t.prelect();
}
catch (NoPlanException e)//异常接收
{
System.out.println(e);
System.out.println("换个老师讲课!");//异常处理方法
}
}
}

如有错漏,诚恳求证!

---------------------- android培训 、 java培训 、 期待与您交流! ----------------------
详细请查看:www.itheima.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: