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

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

Checked Exception與Runtime Exception 的區別

2019-11-17 05:58:21
字體:
來源:轉載
供稿:網友

java里有個很重要的特色是Exception ,也就是說答應程序產生例外狀況。而在學Java 的時候,我們也只知道Exception 的寫法,卻未必真能了解不同種類的Exception 的區別。

  首先,您應該知道的是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();
try
{
te.method1();
}
catch(CException ce)
{
// ....
}
}
// ...
}

  雖然包含在try 與catch 中,并不表示這段程序碼一定會收到CException,但它的用意在于提醒呼叫者,執行這個method 可能產生的意外,而使用者也必須要能針對這個意外做出相對應的處理方式。

  當使用者呼叫method2() 時,并不需要使用try 和catch 將程序碼包起來,因為method2 的定義中,并沒有throws 任何的Exception ,如:

public class runtest
{
// ....
public static void main(String argv[])
{

testException te = new testException();

// 不會產生 Exception
te.method2("Hello");

// 會產生 Exception
te.method2(null);
}
// ...
}

  程序在執行的時候,也不見得會真的產生NullPointerException ,這種Exception 叫做runtime exception 也有人稱為unchecked exception ,產生Runtime Exception 的method (在這個范例中是method2) 并不需要在宣告method 的時候定義它將會產生哪一種Exception 。

在testException 的method3() 中,我們看到了另外一種狀況,也就是method3里呼叫了method1() ,但卻沒有將method1 包在try 和catch 之間。相反,在method3() 的定義中,它定義了CException,實際上就是假如method3 收到了CException ,它將不處理這個CException ,而將它往外丟。當然,由于method3 的定義中有throws CException ,因此呼叫method3 的程序碼也需要有try catch 才行。

  因此從程序的運作機制上看,Runtime Exception與Checked Exception 不一樣,然而從邏輯上看,Runtime Exception 與Checked Exception 在使用的目的上也不一樣。

  一般而言,Checked Exception 表示這個Exception 必須要被處理,也就是說程序設計者應該已經知道可能會收到某個Exception(因為要try catch住) ,所以程序設計者應該能針對這些不同的Checked Exception 做出不同的處理。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高台县| 镇坪县| 鹤岗市| 晋江市| 聂拉木县| 玛沁县| 黄浦区| 江川县| 昌邑市| 渝北区| 内乡县| 师宗县| 和顺县| 图们市| 长顺县| 自贡市| 巴东县| 玉屏| 拉孜县| 麻城市| 搜索| 西安市| 孟村| 岑溪市| 澳门| 四子王旗| 响水县| 济源市| 兴义市| 禹州市| 长春市| 辽中县| 安平县| 鲁甸县| 东兴市| 尼勒克县| 博客| 许昌市| 诸城市| 阳信县| 许昌市|