正文

Exception用法2005-09-16 19:00:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hurongliang/4829.html

分享到:

/*
在Java程序的执行过程中,如果出现了异常事件,就会生成一个例外对象。

java中的例外类可分为两大类:
 
 Error:
  动态链接失败,虚拟机错误等,通常Java程序不应该捕获这类例外,也不会抛弃这种例外。
 
 Exception:
  1)运行时例外:
   继承于RuntimeException的类都属于运行时例外,
   由于这些例外产生的位置是未知的,Java 编译器允许程序员在程序中不对它们做出处理.

  2)非运行时例外:
   除了运行时例外之外的其他由Exception 继承来的例外类都是非运行时的例外,
   Java编译器要求在程序中必须处理这种例外.


两种处理例外的机制:

 捕获例外:
  简言之,就是try-catch语句.

 声明抛弃例外:
  如果一个方法并不知道如何处理所出现的例外,则可在方法声明时,
  声明抛弃(throws)例外。这是一种消极的例外处理机制。
  简言之,就是在方法前加throws Xxx.

例外类的层次见HELP

try-catch-finally:
  try{
  ......
   }catch( ExceptionName1 e ){//没一个catch语句称为一个异常处理器
   ......
   }catch( ExceptionName2 e ){
   ......
   }
   ......
   }finally{
   ......
  }

在执行try语句块期间的任何时刻抛出异常是,如果存在相应的异常处理器,程序控制会立即转到它
上面。就是说,程序控制会转到其异常类与所抛出的异常类对应的第一个catch句子上。执行完catch
子句后,程序控制会转到整个try语句后的语句
finally语句必须在catch 子句后面
try必须, catch和fianlly可选。
*/
//Programme 1:
public class TestException
{
 public static void main(String[] args)
 {
  //处理例外机制1:捕获例外
  try
  {
   int a=0, b=0;
   a /=b;
  }
  /*在catch块中是对例外对象进行处理的代码,与访问其它对象一样,
  可以访问一个例外对象的变量或调用它的方法。getMessage( )是类
  Throwable所提供的方法,用来得到有关异常事件的信息,类Throwable
  还提供了方法printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容
  */
  
  /*捕获例外的顺序和catch语句的顺序有关,当捕获到一个例外时,
  剩下的catch语句就不再进行匹配。因此,在安排catch语句的顺序时,
  首先应该捕获最特殊的例外,然后再逐渐一般化。也就是一般先安排子类,
  再安排父类。
  */

  catch (ArithmeticException e)
  {
   e.printStackTrace(System.out);
  }
  /*当捕获到一个例外时,剩下的catch语句就不再进行匹配,
  所以下面的catch语句不执行
  */
  catch(RuntimeException e)
  {
   System.out.println(e.getMessage());
  }
 }
}
/*result:
java.lang.ArithmeticException: / by zero
        at TestException.main(TestException.java:9)

*/

 

//Programme 2:
class Test
{
 public int devide(int x, int y) throws DevideByMinusException/*处理例外机制2:抛出例外.
           声明抛弃例外是在一个方法声明中的throws子句中指明的.
           throws子句中同时可以指明多个例外,之间由逗号隔开。
           此处的DevideByMinusException也可以改成其父类
           Exception,没有影响.*/
 {
  if (y < 0)
  /*抛出例外就是产生例外对象的过程,首先要生成例外对象,例外或者由虚拟机生成,
  或者由某些类的实例生成,也可以在程序中生成。在方法中,抛出例外对象通过throw语句实现。*/
   throw new DevideByMinusException ("cannot devided by minus");
  int result = x/y;
  return result;
 }
}

class DevideByMinusException extends Exception//自定义例外类必须是Throwable的直接或间接子类。
{
 public DevideByMinusException(String msg)
 {
  super(msg);
 }
}

class TestException
{
 public static void main(String[] args)
 {
  Test test = new Test();
  //方法的调用者必须了解这些例外,并确定如何正确的处理他们。
  try
  {
   test.devide(3, -1);
  }
  catch (Exception e)
  {
   System.out.println (e.getMessage());
  }
  
  System.out.println ("Programme is running here!");
 }
}
/*result:
cannot devided by minus
Programme is running here!

*/

阅读(3302) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册