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());

}

}

}

Java复习6异常处理的更多相关文章

  1. java复习(6)---异常处理

    JAVA异常处理知识点及可运行实例 接着复习java知识点,异常处理是工程中非常重要的. 1.处理异常语句: try{ .... }catch(Exception e){ ..... } finall ...

  2. 第11章 Java异常与异常处理

    1.Java异常简介 1.什么是异常异常出现的时候代码会无法正常运行下去,会产生各种问题2.捕捉异常的作用提早发现异常,方便查找问题,并给出解决方法3.Java中的异常1.Java中所有不正常的类都是 ...

  3. JAVA动手动脑异常处理

    1>请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. import javax.swing.*; class AboutEx ...

  4. Java Socket常见异常处理 和 网络编程需要注意的问题

    在java网络编程Socket通信中,通常会遇到以下异常情况: 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发 ...

  5. Java中实现异常处理的基础知识

    Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...

  6. java 复习003 之排序篇

    由java 复习003跳转过来的C语言实现版见some-sort-algorithms 快速排序(不稳定 O(n log n)) package vell.bibi.sort_algorithms; ...

  7. java 复习001

    java 复习001 比较随意的记录下我的java复习笔记 ArrayList 内存扩展方法 分配一片更大的内存空间,复制原有的数据到新的内存中,让引用指向新的内存地址 ArrayList在内存不够时 ...

  8. java 中的异常处理

    一. 异常的概念和Java异常体系结构  异常是程序运行过程中出现的错误.本文主要讲授的是Java语言的异常处理.Java语言的异常处理框架,     是Java语言健壮性的一个重要体现. Java把 ...

  9. Java进阶02 异常处理

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/09/3000894.html 作者:Vamei 出处:http://www.cnblogs.com ...

随机推荐

  1. $digest / $apply digest in progress报错

    有的时候出于某种原因,如jq操作了model.或者$watch.setTimeout等函数改变了model,导致最后没有脏数据检测.所以我没就手动调用了$apply( )等.但是第一次运行的时候ang ...

  2. Java ArrayList详细介绍和使用示例

    ①对ArrayList的整体认识 ArrayList是一个数组队列,相当于动态数组.与Java中的数组相比,它的容量能动态增长.它继承了AbstractList,实现了List,RandomAcces ...

  3. etcd:从应用场景到实现原理的全方位解读 转自infoq

    转自 infoq etcd:从应用场景到实现原理的全方位解读 http://www.infoq.com/cn/articles/etcd-interpretation-application-scen ...

  4. Netflix Hystrix — 应对复杂分布式系统中的延时和故障容错 转

    转自 https://segmentfault.com/a/1190000005988895 前言 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为 ...

  5. 异常信息 Exception

    void GetExceptionMsg(Exception ex, StringBuilder sb, string Prefix = "") { sb.AppendLine(P ...

  6. win32api win32gui win32con 窗口句柄 发送消息 常用方法

    Pywin32是一个Python库,为python提供访问Windows API的扩展,提供了齐全的windows常量.接口.线程以及COM机制等等. 1.通过类名和标题查找窗口句柄,并获得窗口位置和 ...

  7. Python面试题之Python中的lambda map filter reduce zip

    当年龟叔想把上面列出来的这些都干掉.在 “All Things Pythonic: The fate of reduce() in Python 3000”这篇文章中,他给出了自己要移除lambda. ...

  8. wordpress安装插件提示“wordpress发生意外错误,可能WordPress.org或服务器配置文件存在问题”

    安装wordpress插件,提示报错“wordpress发生意外错误,可能WordPress.org或服务器配置文件存在问题” 出问题的页面是http://*.*.*.*/wp-admin/updat ...

  9. 关于Spring Test 小结

    1.>public class CustomerPackagePrealertControllerTest  extends WebSpringBaseTest{} 2.> @WebApp ...

  10. Android -- 多线程下载, 断点下载

    1. 原理图 2. 示例代码 需要权限 <uses-permission android:name="android.permission.INTERNET"/> &l ...