public class bean7 {
public bean7(String s) throws myException {
if(s.equals("Error"))
  throw new myException("It's myException!");
else
  throw new myException("It isn't myException!");
}public static void main(String[] args) throws myException {
new bean7(args[0]);
}
}class myException extends Exception {
  public myException(String aName) {
    super(aName);
  }
}

解决方案 »

  1.   

    按照Java语言的定义,所谓异常(Exception)指的就是向调用方法(calling method)表示发生非正常情况的习惯方式。本文讨论两种在处理异常时可兹利用的技术:异常嵌套和捕获适当的异常。异常嵌套
     
    你在试图捕获异常并打算扔出异常时该采取什么措施呢?同时,你希望原始的异常信息可用吗? 要回答以上的问题你不妨尝试一下NestedException类。具体的编程并不难,唯一要做的无非是利用构造器并且重载printStackTrace()以便显示出正确的数据。此外,你还应当考虑封装Throwable而非Exception类来创建更具有重用性的组件。之后,你可以创建NestedRuntimeException变量封装Throwable但无需对其进行声明。清单A显示了完整的示例。捕获适当的异常
    正确地处理异常并不是一项轻松的任务,这是因为异常的处理有时会导致程序出现其他不明行为。不过,以下三条规则可以帮助你避免错误处理异常所可能遭遇的风险。规则 #1: 总是捕获扔出异常的类型而不要理睬异常的超类。 清单B中的代码片断以示例的方式从错误编码和正确编码两个角度进行了说明。为了遵守通常的代码习惯,你可以采用Exception类的大写字母作为变量名,如下所示: 
        catch(FileNotFoundException fnfe)以及
        catch(SQLException sqle)规则 # 2: 决不让catch块留空。在很多情况下虽然确实编写了try/catch块但在代码的catch部分却什么都没有做。或者,如果采用了日志API(Logging API),那么请编写代码把异常写到日志中。清单C 显示了以上编码的错误方式和正确方式。规则 # 3: 决不扔出Exception基类的实例。开发人员应当总是扔出自己创建的异常类。扔出异常的API很难处理。在声明方法扔出java.lang.Exception的情况下,清单A中所有的问题都会强加在API用户的头上,这样他们就无法以一种专业的编程方式来处理异常。通过为扔出API声明Exception类的子类这一举措,API开发人员就可以减轻用户的负担。小结
    以上提到的两种技术在处理异常时还可能用得更好、更适当。嵌套技术令异常扔到另一异常的内部,而捕获适当的异常令程序调试大大简化。
      

  2.   

    我对java异常的一点使用经验:
    java异常可以分成两大类:Exception和RuntimeException(虽然RuntimeException是从Exception继承的)。exception异常代表“无法避免的异常” 如io异常  往往这类异常是由于外部原因造成的,程序本身无法保证他们不发生,所以这类异常必须捕获。如果在函数内部无法处理这个异常必须再次抛出(在函数后面用throws语句),如果什么都不做就出现编译错误。
    runtimexception是指“可以避免的异常”,如 null引用异常,这类异常都是由程序内部原因造成的,是可以避免的。对于这类异常可以忽略他们,但一旦发生程序就会异常终止。这类异常对debug非常有帮助,当然,如果需要也可以catch