zoukankan      html  css  js  c++  java
  • 讲一讲java异常及自定义异常

    1.异常,说白了。两种,一种就是就是不能让代码通过编译的异常。另一种就是程序运行期间出现的异常。
    异常就是错误,只要出现异常,程序就不会向下运行了。就不会执行后面的代码了。
    这时候就可以通过显示statcktrace堆栈信息的瞬间信息,知道错误发生在什么地方,及报的什么错。
    所以我们要在代码捕获异常的地方catch地方,用log打印记录下来stacktrace信息。

    2.为什么对异常要进行try catch捕获?
    try catch捕获异常的目的是,当异常发生时,能够继续向下执行我们的程序(即使是runtime异常),而不是程序挂掉(不捕获异常时,就会立即挂掉程序)。
    将异常进行捕获的目的是,使程序不挂掉。可以向下执行。
    在捕获的地方catch分句处,打印出try代码块出错的堆栈信息,然后程序代码继续向下执行。

    try {
    int i = 1 / 0;
    } catch (Exception e) {
    System.out.println("异常发生了,,不知道还能向下运行否。。。。");
    e.printStackTrace();
    }

    logger.info("execute finished");
    System.out.println("啦啦啦啦 ");
    输出结果:
    异常发生了,,不知道还能向下运行否。。。。
    java.lang.ArithmeticException: / by zero
    at APPMain.main(APPMain.java:111)
    execute finished
    啦啦啦

    总结:所以程序继续向下运行了,这样就能达到,异常的产生并不会使程序挂掉。而使程序能继续执行。

    3.输出那些异常具体信息,是通过e.printStackTrace();这个方法的,如果去掉这个方法,就不会再控制台中显示java.lang.ArithmeticException: / by zero
    at APPMain.main(APPMain.java:111)这种错误提示了。
    1)异常捕获的catch代码块中,直接调用e.printStackTrace(),会在控制台直接打印出来异常的信息。
    2)若产生异常时,不进行e.printStackTrace(),而是在日志输出时打印e.printStackTrace()。就会将java.lang.ArithmeticException: / by zero
    at APPMain.main(APPMain.java:111)这种错误提示输出到error.log文件中,就不会再控制台显示了,控制台就当做没有任何异常产生了,不会报任何错误信息,即使有异常产生。
    3)e.printStackTrace()才是打印错误提示的关键。
    3.hashmap是可以转换为string的,hmap可以进行日志打印。hashmap有hashmap.toString()方法。

    二。自定义异常

    1.自定义异常是要自己爆出来的,因为自定义异常是业务异常,只有程序员自己知道什么情况下才会发生自定义异常。所以就需要自己手动代码if判断,值不对的时候,就
    throw抛出来。然后可以自己catch捕获或者在调用这段异常代码的地方捕获,catch捕获,打印具体的异常信息,也就是自定义异常的对象。

    /*下面做了归纳总结,欢迎批评指正*/

    /*自定义异常*/
    class ChushulingException extends Exception
    {
    public ChushulingException(String msg)
    {
    super(msg);
    }
    }

    class ChushufuException extends Exception
    {
    public ChushufuException(String msg)
    {
    super(msg);
    }
    }

    /*自定义异常 End*/

    class Numbertest
    {
    public int shang(int x,int y) throws ChushulingException,ChushufuException
    {
    if(y<0)
    {
    throw new ChushufuException("您输入的是"+y+",规定除数不能为负数!");//抛出异常
    }
    if(y==0)
    {
    throw new ChushulingException("您输入的是"+y+",除数不能为0!");
    }

    int m=x/y;
    return m;
    }
    }





    class Rt001
    {
    public static void main(String[]args)
    {
    Numbertest n=new Numbertest();

    //捕获异常
    try
    {
    System.out.println("商="+n.shang(1,-3));
    }
    catch(ChushulingException yc)
    {
    System.out.println(yc.getMessage());
    yc.printStackTrace();
    }
    catch(ChushufuException yx)
    {
    System.out.println(yx.getMessage());
    yx.printStackTrace();
    }
    catch(Exception y)
    {
    System.out.println(y.getMessage());
    y.printStackTrace();
    }

    finally{ System.out.println("finally!");} ////finally不管发没发生异常都会被执行

    }
    }
    /*
    [总结]

    1.自定义异常:

    class 异常类名 extends Exception
    {
    public 异常类名(String msg)
    {
    super(msg);
    }
    }

    2.标识可能抛出的异常:

    throws 异常类名1,异常类名2

    3.捕获异常:
    try{}
    catch(异常类名 y){}
    catch(异常类名 y){}

    4.方法解释
    getMessage() //输出异常的信息
    printStackTrace() //输出导致异常更为详细的信息

    本文“自定义异常”部分的内容转自http://blog.csdn.net/stellaah/article/details/6738424 感谢作者

  • 相关阅读:
    [转]Code! MVC 5 App with Facebook, Twitter, LinkedIn and Google OAuth2 Sign-on (C#)
    [转]OAuth 2.0
    SpringMVC之七:SpringMVC中使用Interceptor拦截器
    多数据源问题--Spring+Ibatis 访问多个数据源(非分布式事务)
    读写分离
    SVN中检出(check out) 和 导出(export) 的区别
    Hbase之三:Hbase Shell使用入门
    hadoop之一:概念和整体架构
    Twitter Storm如何保证消息不丢失
    Twitter Storm: storm的一些常见模式
  • 原文地址:https://www.cnblogs.com/panxuejun/p/6430412.html
Copyright © 2011-2022 走看看