Board logo

标题: Java编程中异常处理的优劣之道 [打印本页]

作者: qingqing3721    时间: 2011-8-3 08:45     标题: Java编程中异常处理的优劣之道

Java编程中的异常处置是一个很常见的话题了,简直任何一门引见性的Java课程都会提到异常处置。不过,我认为很多人其实并没有真正掌握正确处置异常状况的方法和策略,最多也就不过了解个大概,晓得点概念。本文就对三种不同程度和质量的Java异常处置停止了讨论,所阐述的处置异常的方式按手法的上下分为:   好,不好和恶劣三种。
  同时向你提供了一些解决这些成果的技巧。
  首先解释一些java异常处置中必需搞清楚的定义和机制。Java语言规范将自Error类或RuntimeException类衍生出来的任何违例都称作“不可检查”(Unchecked)异常;其他所有异常则称作“可检查”(Checked)异常。
  所谓可检查异常,是指我们应该自行处置的异常。至于处置的手腕,要么加以控制(try catch),要么通告(throws)他们有能够发生。通常,应捕捉那些已知如何处置的异常,而通告那些不知如何处置的异常。
  而对那些不可检查异常来说,他们要么在我们的控制之外(Error),要么是我们首先就不该允许的状况(RuntimeException).
  至于异常的指定,Java的规则十分简单:一个方法必需通告本人能够发生的所有可检查异常。编写本人的方法时,并不一定要通告出方法实际能够发生的每一个异常对象,要想了解什么时候必需要方法的throws丛句来通告异常,就必需晓得对一个异常来说,他只有能够在下面四种状况下才会发生:
  1.调用了能够发生异常的方法。比如BufferedReader类的readLine方法。该方法通告java.io.IOException异常
  2.侦测到一个错误,斯波帝卡并用throw语句发生异常。
  3.出现一个编程错误。比如a[-1] = 0。
  4.Java发生内部错误。
  假设出现头两种状况之一,必需告诉计划运用本人方法的人:假设运用这个方法,能够造成一个异常的发生(即在方法头上运用throws),一个简单的记忆方法:
   只需含有throw,就要通告throws。假设一个方法必需同时处置多个异常,就必需在头内指出所有异常。就像下例展示的那样,用逗号对他们停止联系:
1234567 class Animation {   public Image loadImage(Strint s) throws EOFException,MalformedURLException   {    …………   } }
  然而,我们不需要通告内部java错误,也不应该通告自RuntimeException衍生出来的异常。
  好的异常处置
  好异常处置提供了处置程序错误的统一机制。现实上,Java语言通过向调用者提出异常正告的方式而分明地提升了软件开发中的异常处置能力。这种方式把Java语言中的“方法(method)”停止了扩展和加强,使之包括了自身的错误条件。下面就让我们看一个例子,这个例子说明了这种状况。
  以下是FileInputStream构造器之一的原型:
public FileInputStream(String name) throws FileNotFoundException Java
  的方法和构造器必需声明他们在被调用时能够“扔出”的异常,采用的关键字就是“throws”。这种在方法原型中出现的异常提示添加了编程的牢靠性。
  不言而喻,这种方式是向方法的调用者提示了能够出现的异常条件,这样调用者就可以对这些异常作出适当的相应处置。以下代码表示我们是如何捕捉并且处置FileNotFoundException 这一异常的:
try {  FileInputStream fis = new FileInputStream(args[0]);  // other code here ... } catch (FileNotFoundException fnfe) {  System.out.println("File: " + args[0] + " not found. Aborting.");  System.exit(1); }
  Java异常处置还有其他一些优秀的特性,这就是可检查异常、用户定义异常和在JDK 1.4中推出的新型Java记载API(Java Logging API)。java.lang.Exception的所有子类都属于可检查异常。可检查异常(checked exception)是扔出该异常的方法所必需提示的异常,这种异常必需被捕捉或者向调用者提示。用户定义异常(User-defined exceptions)是定制的异常类,这种异常类扩展了java.lang.Exception类。优秀的Java程序规定定制异常封装、报告和处置他们本人独有的状况。最新的Java记载API(logging API)则可以集中记载异常。




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0