【透彻理解异常并合理使用异常】

回顾异常处理机制:

  异常机制使程序中异常处理代码和正常业务代码分离,也就是把某些异常交给异常处理器去处理,不让JVM直接处理。

  JMV的处理方式时打印异常跟踪栈的信息,并终止程序运行,比如:

  [java]

  public static void main(String[] args) {

  System.out.println(1 / 0); // 程序抛出java.lang.ArithmeticException: / by zero 然后程序结束。

  ... // 下面的代码无法得到执行。

  }

  public static void main(String[] args) {

  System.out.println(1 / 0); // 程序抛出java.lang.ArithmeticException: / by zero 然后程序结束。

  ... // 下面的代码无法得到执行。

  }

  于是乎,我来捕捉一下这个异常好了:

  [java]

  public static void main(String[] args) {

  try {

  System.out.println(1 / 0); // 如果捕捉到异常,生成对应的异常类的对象

  }catch(ArithmeticException ae) { // 如果捕捉到异常对象,进行自定义异常处理

  ae.printStackTrace(); // 简单的异常处理,打印异常的跟踪栈信息

  }

  System.out.println("main方法结束"); // 这就是异常处理代码和正常业务代码分离的好处,逻辑上清晰,并且单独处理被捕获的异常。

  }

  public static void main(String[] args) {

  try {

  System.out.println(1 / 0); // 如果捕捉到异常,生成对应的异常类的对象

  }catch(ArithmeticException ae) { // 如果捕捉到异常对象,进行自定义异常处理

  ae.printStackTrace(); // 简单的异常处理,打印异常的跟踪栈信息

  }

  System.out.println("main方法结束"); // 这就是异常处理代码和正常业务代码分离的好处,逻辑上清晰,并且单独处理被捕获的异常。

  }

  问,上面的异常需要被捕捉吗?算术异常.

  如果按照平常思维来思考,程序运行时有异常退出就行了。还捕捉啥呢?还干嘛分为checked异常跟runtime异常呢?

  1:捕捉异常是为了让程序单独处理被捕获的异常。

  2:区分checked异常跟runtime异常,是为了增强程序健壮性。

  checked(知道编译时可能会有问题,我能处理,或者你来处理,最后必须处理(抛向JVM)),编译时就必须给我说清楚怎么处理。

  runtime(知道运行时可能会有问题,我愿意处理就处理,你爱处理不处理),运行期出了错你负责。

  无论是哪种异常,都不一定100%发生异常,100%发生异常的代码?你会写吗?你会写编译器让你写吗?

posted @ 2013-09-09 15:24  豆豆逗逗  阅读(122)  评论(0编辑  收藏  举报