• Java复习6异常处理


    Java复习6.异常处理 20131005

    前言:

             Java中的异常处理机制是非常强大的,相比C++ 来说,更加系统。但是我们开发人员没有很好的使用这一点。一些小的程序是没有什么问题的,但是对于大型项目来说,异常处理机制十分重要。在Java中我们使用的异常处理,一般就是捕获异常,输出堆栈中的异常信息,就没了,这些方法仅仅适合开发环节,便于我们调试错误,但是对于后期发布上下的话,这些就没有用了,需要我们恢复错误等等,甚至要重新启动。

             本章的就学习一段代码,通过它来学习Java中的异常处理机制。

    Connection conn = null;

    OutputStreamWriter out = null;

    try{

        Statement stat = conn.createStatement();

        ResultSet rs = stat.executeQuery("select uid,name from user");

        while(rs.next()){

            out.write("ID:" + rs.getString("uid") + ",name" + rs.getString("name"));

        }

        conn.close();

        out.close();

    }catch(Exception e){

        e.printStackTrace();

    }

    这一段代码的优化分析有六处不好的地方:

    1.异常丢弃

             e.printStackTrace(); 这里捕获了异常,但是没有做任何处理,就是相当于丢弃异常,虽然这样可以便于我们调试程序,单丝当程序调试阶段结束之后,就没有什么作用了。我们捕获了异常但是不处理,降低了程序的健壮性。

    2.不指定确切的异常类型

    Exception e 这里会将所有的类型的异常都会捕获掉,我们无法确定异常的类型,也就无法处理异常了,这里可能是SQLException,也可能是IOException。

    3.占用资源不释放

        当抛出异常的时候,我们的连接conn是没有关闭的,这样会造成资源的而浪费,我们在catch最后面应该加上finally,关闭掉conn数据库连接。

    4不说明异常的详细信息

        e.printStackTrace();这里是指简单的打印异常的堆栈信息,应当适当的提供异常的错误信息,便于寻找错误和调试。

    5.庞大的Try代码块

        庞大的try代码块,这样可能在其中产生各种异常,我们不容易找错误的那一段代码,而且可能我们捕获的异常不是我们想要的,而是自己编写代码是产生了其他的错误,抛出的其他的异常。所以我们呢应该尽量减少catch的大小。

    6.数据输出不完整

        不完整的数据输出问题,在程序的输出的时候,我们取出一条数据,然后输出一条数据,这样造成大量的IO开销,同时也可能在输出数据的时候发生错误,所以建议将所有要输出的数据缓冲起来,最后一次性输出。

    修改程序:

    Connection conn = null;

    OutputStreamWriter out = null;

    try{

        Statement stat = conn.createStatement();

        ResultSet rs = stat.executeQuery("select uid,name from user");

        while(rs.next()){

            out.write("ID:" + rs.getString("uid") + ",name" + rs.getString("name"));

        }

    }catch(SQLException e){

        //out.write("Waring: 数据不完整");

        //throw new ApplicationException();

    }catch(IOException e){

        //out.write("Waring: 写入数据的时候出错");

    }finally{

        if(conn != null){

            try{

                conn.close();

            }catch(SQLException e){

                System.err.println("cannot close the database connection" +e.toString());

            }

        }

        if(out !=null ){

            try{

                out.close();

            }catch(IOException ioe){

                System.err.println("cannot close the outputstream " + ioe.toString());

            }

        }

    }

  • 相关阅读:
    object对象
    addEventListener 和 attachEvent
    BOM常用对象
    动态原型
    鼠标移动图片放大效果(兼容IE8、多图)
    伪元素:before和:after
    javascript/js 判断是否安装flash player插件,提示安装方法。
    Form表单值转换为[{name:'',value}]键值对
    [转][网站、云服务与虚拟机]弄清负载均衡的机制
    C# Lazy Initialization
  • 原文地址:https://www.cnblogs.com/hbhzsysutengfei/p/3409524.html
Copyright © 2020-2023  润新知