国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java語言中兩種異常的差別

2019-11-18 15:38:53
字體:
來源:轉載
供稿:網友

  java提供了兩類主要的異常:runtime exception和checked exception。所有的checked exception是從java.lang.Exception類衍生出來的,而runtime exception則是從java.lang.RuntimeException或java.lang.Error類衍生出來的。

  它們的不同之處表現在兩方面:機制上和邏輯上。

  一、機制上

  它們在機制上的不同表現在兩點: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則用來指示一種調用方本身無法處理或恢復的程序錯誤。

  checked exception迫使你捕捉它并處理這種異常情況。以java.net.URL類的構建器(constrUCtor)為例,它的每一個構建器都會拋出MalformedURLException。MalformedURLException就是一種checked exception。設想一下,你有一個簡單的程序,用來提示用戶輸入一個URL,然后通過這個URL去下載一個網頁。假如用戶輸入的URL有錯誤,構建器就會拋出一個exception。既然這個exception是checked exception,你的程序就可以捕捉它并正確處理:比如說提示用戶重新輸入。

  再看下面這個例子:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 夏河县| 当阳市| 车险| 西吉县| 阿城市| 潼南县| 黄梅县| 伊吾县| 旬邑县| 江城| 石景山区| 永修县| 上杭县| 永康市| 盘山县| 伊通| 临洮县| 浮梁县| 探索| 大竹县| 牙克石市| 岫岩| 沈丘县| 旺苍县| 漾濞| 镇宁| 三江| 泸西县| 中西区| 沁水县| 宝山区| 常熟市| 射阳县| 互助| 贵阳市| 杭锦旗| 临沭县| 和静县| 鹿邑县| 宝丰县| 河池市|