龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

谈谈Java:Checked Exception与Runtime Exception 的区别

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
Java里有个很重要的特色是Exception ,也就是说答应程序产生例外状况。而在学Java 的时候,我们也只知道Exception 的写法,却未必真能了解不同种类的Exception 的区别。 !-- frame contents -- !
  Java里有个很重要的特色是Exception ,也就是说答应程序产生例外状况。而在学Java 的时候,我们也只知道Exception 的写法,却未必真能了解不同种类的Exception 的区别。
  
   <!-- frame contents -->
<!-- /frame contents -->   首先,您应该知道的是Java 提供了两种Exception 的模式,一种是执行的时候所产生的Exception (Runtime Exception),另外一种则是受控制的Exception (Checked Exception)。
  
     所有的Checked Exception 均从java.lang.Exception 继续而来,而Runtime Exception 则继续java.lang.RuntimeException 或java.lang.Error (实际上java.lang.RuntimeException 的上一层也是java.lang.Exception)。
  
     当我们撰写程序的时候,我们很可能会对选择某种形式的Exception 感到困扰,到底我应该选择Runtime Exception 还是Checked Exception ?
  
     其实,在运作上,我们可以通过Class 的Method 如何产生某个Exception以及某个程序如何处理这个被产生来的Exception 来了解它们之间的差异。
   首先我们先建立一个Exception
  
   public class CException extends Exception
   {
   public CException() {}
   public CException(String message)
   {
   super(message);
   }
   }
  
   然后我们撰写一个可能产生 CException 的 Class
  
   public class testException
   {
   public void method1() throws CException
   {
   throw new CException("Test Exception");
   }
  
   public void method2(String msg)
   {
   if(msg == null)
   {
   throw new NullPointerException("Message is null");
   }
   }
  
   public void method3() throws CException
   {
   method1();
   }
  
   // 以下省略
   // ...
   }
  
     在这三个method 中,我们看到了method1 和method2 的程序码内都会产生Exception,但method3 的程序码中(大括号内),并没产生Exception,但在method3 的定义中,暗示了这个method 可能产生CException。
     呼叫method1() 的程序,必须将method1() 包含在try 与catch 中,如:
  
   public class runtest
   {
   // ....
   public static void main(String argv[])
   {
   testException te = new testException();
   <!-- frame contents -->
<!-- /frame contents --> try
   {
   te.method1();
   }
   catch(CException ce)
   {
   // ....
   }
   }
   // ...
   }
  
     虽然包含在try 与catch 中,并不表示这段程序码一定会收到CException,但它的用意在于提醒呼叫者,执行这个method 可能产生的意外,而使用者也必须要能针对这个意外做出相对应的处理方式。
  
     当使用者呼叫method2() 时,并不需要使用try 和catch 将程序码包起来,因为method2 的定义中,并没有throws 任何的Exception ,如:
  
   public class runtest
  
  
精彩图集

赞助商链接