异常概述及自定义异常类

来源:互联网 发布:淘宝网页版电脑版登录 编辑:程序博客网 时间:2024/06/05 04:52
/*1.异常:就是程序在运行时出现不正常情况。异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。            其实就是java对不正常情况进行描述后的对象体现。对于问题的划分:两种:一种是严重的问题,一种是非严重的问题。            对于严重的,java通过Error类进行描述。                对于Error一般不编写针对性代码对其进行处理。            对于非严重的,java通过Exception类进行描述。                对于Exception可以使用针对性的处理方式进行处理。无论Error或者Exception都具有一些共性内容。比如:不正常情况的信息,引发原因。Throwable //所有异常和错误的超类    |--Error    |--Exception2.异常的处理java提供了特有的语句进行处理try{    需要被检测的代码;}catch(异常类 变量){    处理异常的代码;(处理方式)}finally{    一定会执行的语句;}3.对捕获到的异常对象进行常见方法操作。    String getMessage():获取异常的信息。    String toString():异常名称:异常信息    void printStackTrace():异常名称,异常名称,异常出现位置-->jvm默认的异常处理机制就是调用这个方法,打印异常的堆栈的跟踪信息。    在功能上通过throws的关键字声明了该功能可能出现的问题。--->抛出后必须要捕获问题或者再次抛出,否则编译失败。最上层抛给jvm在函数上声明异常。便于提高安全性,让调用进行处理。不处理编译失败。对多异常的处理。1.声明异常时建议声明更为具体的异常,这样处理的可以更具体。2.对方声明几个异常,就对应几个catch块。    如果多个catch块的异常出现继承关系,父类异常catch要放在最下面。    当出现未声明的异常出现时,要把程序停掉。建议在进行catch处理时,catch一定要定义具体处理方式。不要简单定义一句e.printStackTrace(),也不要简单的输出一条语句。真正出现问题--->文件记录异常信息--->日志*//*自定义异常类:因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。将特有的问题。进行自定义的异常封装。需求:在除数时不能为负数,那么就需要对这个问题进行自定义的描述。当在函数内部出现了throw抛出异常,那么就必须给出对应的处理动作。要么在内部try catch处理。要么在函数上声明让调用者处理。!!!!!!特殊的一种:RuntimeException 如果在函数内抛出该异常,只需要throw 对象,函数上不用声明,编译一样通过            如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。            之所以不用在函数上声明,是因为不需要让调用者处理。            当该异常发生,希望程序停止。因为在运行时,出现无法继续的运算情况,希望程序停止后            程序员对代码进行修正。一般情况下,函数内出现异常,函数上需要声明。发现打印的结果中只有异常的名称,却没有异常信息。因为自定义的异常并未定义信息。如何定义异常信息?因为父类中已经把异常信息的操作都完成了。所以子类中只要在构造时将异常信息传递给父类通过super语句。那么就可以直接通过getMessage方法获取自定义的异常信息。自定义异常:必须是自定义类继承Exception。继承Exception原因:异常体系有一个特点:因为异常类和异常对象都需要被抛出。他们都具备可抛性。这个可抛性是Throwable这个体系中的独有特点。只有这个体系中的类和对象才可以被throws和throw操作。throws和throw的区别:throws使用在函数上。throw使用在函数内。throws后面跟异常类,可以跟多个,用逗号隔开。throw后面跟异常对象。自定义异常时:如果该异常的发生无法继续运行下去就让自定义异常继承RuntimeException对于异常分两种:1.编译时被检测的异常--->要么继续抛,要么try2.编译时不被检测的异常(运行时异常。RuntimeException以及其之类)--->里面抛,外面不用声明。--->程序停止*/class FuShuException extends RuntimeException{    private int value;    FuShuException(){        super();    }    FuShuException(String msg){        super(msg);    }    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("出现了除数时负数的情况",b);//手动通过throw关键字抛出自定义异常对象                                        //抛出后要继续抛出或者捕获        return a/b;    }}class ExceptionDemo_zdy{    public static void main(String[] args) {        Demo d = new Demo();        //try        //{            int x = d.div(5,-5);            System.out.println("x="+x);        //}        //catch (FuShuException e)        //{        //    System.out.println(e.toString());        //    System.out.println("错误的负数是:"+e.getValue());        //}        System.out.println("over");    }}
0 0