黑马程序员-3 异常

 

异常
是在运行时期发生的不正常情况

在Java中用类的形式对不正常情况进行了描述和封装对象;
描述不正常的情况的类,就称为异常类;

以前正常流程代码和问题处理代码相结合,
现在讲正常流程代码和问题处理代码分类,提高阅读性;

其实异常就是Java通过面向对象的思想将问题封装成了对象,
用异常类对其进行描述;
不同的问题用不同的类进行具体的描述;比如角标越界,空指针等;

问题很多,意味着描述的类也很多,
将其共性进行向上抽取,就形成了异常体系;

最终异常分为两大类:
Throwable:无论是Error还是异常,都是问题,问题发生就应该抛出,让调用者知道并处理。
该体系的特点:Throwable及其所有的子类都具有可抛性。
子类的后缀名都是用其父类名作为后缀,阅读性强;

 

2,异常的处理

java 提供了特有的语句进行处理。

try
{
    //需要被检测的代码;
}
catch(异常类 变量)
{
    //处理异常的代码;(处理方式)
}
finally
{
    //一定会执行的语句;
}

 


3,对捕获到的异常对象进行常见方法操作。
String getMessage():获取异常信息。


自定义异常。

当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
要么在内部try catch处理。
要么在函数上声明让调用者处理。

一般情况在,函数内出现异常,函数上需要声明。


发现打印的结果中只有异常的名称,却没有异常的信息。
因为自定义的异常并未定义信息。

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

 

自定义异常:
必须是自定义类继承Exception。


继承Exception原因:
异常体系有一个特点:因为异常类和异常对象都被抛出。
他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。

只有这个体系中的类和对象才可以被throws和throw操作。


throws和throw的区别
throws使用在函数上。
throw使用在函数内。

throws后面跟的异常类。可以跟多个。用逗号隔开。
throw后跟的是异常对象。

 范例:

需求:在本程序中,对于除数是-1,也视为是错误的是无法进行运算的。
那么就需要对这个问题进行自定义的描述。

class FuShuException extends Exception //getMessage();
{
    private int value;

    FuShuException()
    {
        super();
    }
    FuShuException(String msg,int value)
    {
        super(msg);
        this.value = value;
    }
    public int getValue()
    {
        return value;
    }
}


class Demo
{
    int div(int a,int b)throws FuShuException
    {
        if(b<0)
            throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);//手动通过throw关键字抛出一个自定义异常对象。

        return a/b;
    }
}


class  ExceptionDemo3
{
    public static void main(String[] args) 
    {
        Demo d = new Demo();
        try
        {
            int x = d.div(4,-9);
            System.out.println("x="+x);        
        }
        catch (FuShuException e)
        {
            System.out.println(e.toString());
            //System.out.println("除数出现负数了");
            System.out.println("错误的负数是:"+e.getValue());
        }
        System.out.println("over");
    }
}
posted @ 2012-10-16 20:34  EnderViking  阅读(100)  评论(0编辑  收藏  举报