爱问知识人 爱问教育 医院库

Java异常处理的陋习展播是什么?

首页

Java异常处理的陋习展播是什么?

Java异常处理的陋习展播是什么?

提交回答

全部答案

    2017-07-28 08:18:25
  •   2007年3月16日     来源: 233网校 
    反例之四:不说明异常的详细信息   代码:3行-18行。   仔细观察这段代码:如果循环内部出现了异常,会发生什么事情?我们可以得到足够的信息判断循环内部出错的原因吗?不能。我们只能知道当前正在处理的类发生了某种错误,但却不能获得任何信息判断导致当前错误的原因。
         printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程,但只提供了一些最基本的信息,未能说明实际导致错误的原因,同时也不易解读。   因此,在出现异常时,最好能够提供一些文字信息,例如当前正在执行的类、方法和其他状态信息,包括以一种更适合阅读的方式整理和组织printStackTrace提供的信息。
         结论四:在异常处理模块中提供适量的错误原因信息,组织错误信息使其易于理解和阅读。   反例之五:过于庞大的try块   代码:3行-14行。   经常可以看到有人把大量的代码放入单个try块,实际上这不是好习惯。这种现象之所以常见,原因就在于有些人图省事,不愿花时间分析一大块代码中哪几行代码会抛出异常、异常的具体类型是什么。
      把大量的语句装入单个巨大的try块就象是出门旅游时把所有日常用品塞入一个大箱子,虽然东西是带上了,但要找出来可不容易。   一些新手常常把大量的代码放入单个try块,然后再在catch语句中声明Exception,而不是分离各个可能出现异常的段落并分别捕获其异常。
      这种做法为分析程序抛出异常的原因带来了困难,因为一大段代码中有太多的地方可能抛出Exception。   结论五:尽量减小try块的体积。   反例之六:输出数据不完整   代码:7行-11行。   不完整的数据是Java程序的隐形杀手。仔细观察这段代码,考虑一下如果循环的中间抛出了异常,会发生什么事情。
      循环的执行当然是要被打断的,其次,catch块会执行??就这些,再也没有其他动作了。已经输出的数据怎么办?使用这些数据的人或设备将收到一份不完整的(因而也是错误的)数据,却得不到任何有关这份数据是否完整的提示。对于有些系统来说,数据不完整可能比系统停止运行带来更大的损失。
         较为理想的处置办法是向输出设备写一些信息,声明数据的不完整性;另一种可能有效的办法是,先缓冲要输出的数据,准备好全部数据之后再一次性输出。   结论六:全面考虑可能出现的异常以及这些异常对执行流程的影响。   改写后的代码   根据上面的讨论,下面给出改写后的代码。
      也许有人会说它稍微有点?嗦,但是它有了比较完备的异常处理机制。   OutputStreamWriter out = 。。。   java。sql。Connection conn = 。。。   try {    Statement stat = conn。
      createStatement();    ResultSet rs = stat。executeQuery(    "select uid, name from user");    while (rs。next())    {     out。
      println("ID:" + rs。getString("uid") + ",姓名: " + rs。getString("name"));    }   }   catch(SQLException sqlex)   {    out。println("警告:数据不完整");    throw new ApplicationException("读取数据时出现SQL错误", sqlex);   }   catch(IOException ioex)   {    throw new ApplicationException("写入数据时出现IO错误", ioex);   }   finally   {    if (conn != null) {     try {      conn。
      close();     }     catch(SQLException sqlex2)     {      System。err(this。getClass()。getName() + "。mymethod - 不能关闭数据库连接: " + sqlex2。
      toString());     }    }    if (out != null) {     try {      out。close();     }     catch(IOException ioex2)     {      System。
      err(this。getClass()。getName() + "。mymethod - 不能关闭输出文件" +   ioex2。toString());     }    }   }    本文的结论不是放之四海皆准的教条,有时常识和经验才是最好的老师。
      如果你对自己的做法没有百分之百的信心,务必加上详细、全面的注释。   另一方面,不要笑话这些错误,不妨问问你自己是否真地彻底摆脱了这些坏习惯。即使最有经验的程序员偶尔也会误入歧途,原因很简单,因为它们确确实实带来了“方便”。所有这些反例都可以看作Java编程世界的恶魔,它们美丽动人,无孔不入,时刻诱惑着你。
      也许有人会认为这些都属于鸡皮蒜毛的小事,不足挂齿,但请记住:勿以恶小而为之,勿以善小而不为。 。

    徐***

    2017-07-28 08:18:25

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):