程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 淺析Java語言中兩種異常的差別

淺析Java語言中兩種異常的差別

編輯:JAVA編程入門知識

  Java提供了兩類主要的異常:runtime exception和checked exception。所有的checked exception是從java.lang.Exception類衍生出來的,而runtime exception則是從java.lang.RuntimeException或java.lang.Error類衍生出來的。
  
   <!-- frame contents --> <!-- /frame contents -->   它們的不同之處表現在兩方面:機制上和邏輯上。
  

      一、機制上
  
  它們在機制上的不同表現在兩點:1.如何定義方法;2. 如何處理拋出的異常。請看下面CheckedException的定義:
  
  public class CheckedException extends Exception
  {
  
   public CheckedException() {}
   public CheckedException( String message )
   {
  super( message );
   }
  }

  以及一個使用exception的例子:
  
  public class ExceptionalClass
  {
  
   public void method1()
  throws CheckedException
  {
   // ... throw new CheckedException( “...出錯了“ );
  }
   public void method2( String arg )
  {
   if( arg == null )
   {
  throw new NullPointerException( “method2的參數arg是null!” );
   }
  }
   public void method3() throws CheckedException
  {
   method1();
  }
  }

  你可能已經注重到了,兩個方法method1()和method2()都會拋出exception,可是只有method1()做了聲明。另外,method3()本身並不會拋出exception,可是它卻聲明會拋出CheckedException。在向你解釋之前,讓我們先來看看這個類的main()方法:
  
  public static void main( String[] args )
  {
  
   ExceptionalClass example = new ExceptionalClass();
   try
   {
  example.method1();
  example.method3();
   }
   catch( CheckedException ex ) { } example.method2( null );
  }

  在main()方法中,假如要調用method1(),你必須把這個調用放在try/catch程序塊當中,因為它會拋出Checked exception。
  
  相比之下,當你調用method2()時,則不需要把它放在try/catch程序塊當中,因為它會拋出的exception不是checked exception,而是runtime exception。會拋出runtime exception的方法在定義時不必聲明它會拋出exception。
  
  現在,讓我們再來看看method3()。它調用了method1()卻沒有把這個調用放在try/catch程序塊當中。它是通過聲明它會拋出method1()會拋出的exception來避免這樣做的。它沒有捕捉這個exception,而是把它傳遞下去。實際上main()方法也可以這樣做,通過聲明它會拋出Checked exception來避免使用try/catch程序塊(當然我們反對這種做法)。
  
  小結一下:
  
  * Runtime exceptions:
  
  在定義方法時不需要聲明會拋出runtime exception;
  
  在調用這個方法時不需要捕捉這個runtime exception;
  
  runtime exception是從java.lang.RuntimeException或java.lang.Error類衍生出來的。
  
  * Checked exceptions:
  
  定義方法時必須聲明所有可能會拋出的checked exception;
  
  在調用這個方法時,必須捕捉它的checked exception,不然就得把它的exception傳遞下去;
  
  checked exception是從java.lang.Exception類衍生出來的。
  
  二、邏輯上
  
  從邏輯的角度來說,checked exceptions和runtime exception是有不同的使用目的的。checked exception用來指示一種調用方能夠直接處理的異常情況。而runtime exception則用來指示一種調用方本身無法處理或恢復的程序錯誤。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved