浅谈java异常的捕获及处理

            在程序的编译或者运行过程中都有可能出现各种错误,有语法错误,有语义错误,也有硬件问题。这些错误的出现有可能导致程序的停止,缓慢运行,对于java程序而言这些都称为异常,就是导致程序不能正常运行或者编译的各种因素。


一 异常的概念:

    异常是导致程序不能正常进行的一种因素,如果不能正确去处理异常就会干扰你的程序,所有我们在写代码时需要考虑异常的产生可能,或者对可能产生异常程序进行处理,在java中对于异常的处理其实也是遵从面向对象的思想,所谓万物皆对象,我们可以把具体的异常作为一个对象,我们也可以去自定义异常类。


 认识异常:

    

public static void main(String[] args) {
    int i =  1;
    int j = 0;
    System.out.println(i/j);//次数会有异常,因为被除数不能为0
    System.out.println("ssss");


}

从上面的实例刻制,如果某处代码发生了异常没有处理,那么程序就会停止无法继续执行

【小记】在计算机的发展中,有两大杀手,一是断电,二是无穷大,如果被除数是0代表结果是无穷大,一旦结果是无穷大内存就会被全部占满,程序无法运行。


Java异常的分类和类结构图

浅谈java异常的捕获及处理_第1张图片


错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

在程序中异常的处理:

public static void main(String[] args) {

    try {
        //有可能出现异常的语句
        System.out.println("ssss");
    } catch (Exception e) {//异常类和对象

        //异常处理1
        e.printStackTrace( );
    }catch (RuntimeException e) {

        //异常处理2
    }catch (RuntimeException e) {

        //异常处理3
    }finally {
        //此处的代码一定会执行
    }


}
浅谈java异常的捕获及处理_第2张图片



【提示】

    在catch语句中输出异常时,除了可以直接使用

System.out.println("异常信息");

这样异常信息外,大部分都会选择使用Exception类的printStackTrace()打印异常信息,这样的好处是打印出来的异常信息更加完整。


java异常的出咯机制:

        一旦有异常就实例化一个异常对象,然后再try中进行捕捉,

浅谈java异常的捕获及处理_第3张图片

        在catch中对改异常对象进行类型匹配,因为产生的异常类型不一样,所有显示的结果也不一样

浅谈java异常的捕获及处理_第4张图片

【注意】在实际的开发中,如果已经将Exception作为最大的异常去处理。如果在catch中还有Exception的子类去匹配那么就会出现异常

浅谈java异常的捕获及处理_第5张图片



                    throws和throw关键词

    1:throws  

    在定义一个方法时可以使用throws关键词申明,表示此方法内部对此对象的异常不做处理,而是交给调用者处理。

    

/**
 * 普通方法处使用throws  表示此方法不处理异常
 * @throws Exception
 */
public void df() throws Exception{
    System.out.println("sss");
    
    
}
/**
 * 主方法抛出异常,此时的异常是交给虚拟机处理,因为一个程序是从主方法开始运行
 * @param args
 * @throws Exception
 */
public static void main(String[] args)  throws Exception{

    try {
        //有可能出现异常的语句
        System.out.println("异常信息");
        throw new Exception();//实例化一个异常对象


二  throw  直接实例化一个异常对象,throw只负责产生一个异常对象,至于这个异常怎么处理,是抛出还是直接处理他是不干预的。

浅谈java异常的捕获及处理_第6张图片

    

【注意】

    throw尽量不要单独使用,因为你产生了一个异常就必须要处理,要么自己处理,要么抛出。


        throw和throws的总合运用

class ExceptionTest {
    public void s() throws Exception{  //如果有异常就抛出
        System.out.println("1111111111");
        int i = 0;
        int j = 1;
        try {
            //此处会有异常
            i = i/j;
            System.out.println("22222222222");
        } catch (Exception e) {
            //实例异常
            throw  e;
        }finally {
            System.out.println("33333333");
        }
    }
}

class showe {
    
    public  void  gg() {
        ExceptionTest e = new ExceptionTest();
        try {
            //调用上面类中的方法,因为调用的方法有异常抛出,所有在调用时那么处理要么继续抛出
            e.s();
        } catch (Exception e1) {
            //这里的异常类就是上面类throw出来的
            System.out.println(e+"异常类");
        }
    }
   
【好好体会上面的例子】




 Exception和RuntimeException

   1: Exception在程序中必须try  catch

   :2:RuntimeException可以不try  因为如果有异常有JVM处理。

浅谈java异常的捕获及处理_第7张图片


自定义异常

在实际的开发中,基本都会自定义异常,因为自定义异常可以满足我们需要的各个场合,并且可以按照我们的想法打印出相应的内容。


在自定义异常类时必须要继承Exception 类,在设计时我们还可以在自定义类的构造方法中定义一个枚举类,枚举类的作用是打印相应的内容。这里就用到了多太的思想,因为自定义的类都是xception的子类,所有该异常子类继承了Exception的所有的异常情况,

浅谈java异常的捕获及处理_第8张图片

code       表示错误码  比如500  系统异常  404  找不到路径    等

erroMsg  表示具体的错误信息

EnumRespCode 表示一个枚举类,提供了各种需要的异常信息提示和错误码

浅谈java异常的捕获及处理_第9张图片



实例:

class MyErroe extends Exception {
    private String code;
    private String mesg;

    public MyErroe(String code , String mesg) {
        super();
        System.out.println("我的自定义异常");
    }
}



class showe {

        try {
        //调用上面类中的方法,因为调用的方法有异常抛出,所有在调用时那么处理要么继续抛出
        System.out.println("可能存在异常的代码");
        throw MyErroe("1","存在异常");
    } catch (Exception e) {
        //这里的异常类就是上面类throw出来的  上面throw出来的异常对象就是Exception的子类
        //所以这里打印出来的对象就是自定义的异常类
        System.out.println(e+"异常类");
    }
}


对于枚举在自定义异常类的使用在实际开发中用的比较多,可以多去思考一下。
















你可能感兴趣的:(浅谈java异常的捕获及处理)