?? 72.txt
字號(hào):
//
Java異常
Java程序運(yùn)行過程中所發(fā)生的異常事件可分為兩類:
錯(cuò)誤(Error):JVM系統(tǒng)內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況
違例(Exception): 其它因編程錯(cuò)誤或偶然的外在因素導(dǎo)致的一般性問題,例如:
對負(fù)數(shù)開平方根
空指針訪問
試圖讀取不存在的文件
網(wǎng)絡(luò)連接中斷
//
常見異常
RuntimeException
錯(cuò)誤的類型轉(zhuǎn)換
數(shù)組下標(biāo)越界
空指針訪問
IOExeption
從一個(gè)不存在的文件中讀取數(shù)據(jù)
越過文件結(jié)尾繼續(xù)讀取
連接一個(gè)不存在的URL
//
異常處理機(jī)制
Java程序的執(zhí)行過程中如出現(xiàn)異常,會(huì)自動(dòng)生成一個(gè)異常類對象,該異常對象將被提交給Java運(yùn)行時(shí)系統(tǒng),這個(gè)過程稱為拋出(throw)異常。
當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到異常對象時(shí),會(huì)尋找能處理這一異常的代碼并把當(dāng)前異常對象交給其處理,這一過程稱為捕獲(catch)異常。
如果Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。
程序員通常只能處理違例(Exception),而對錯(cuò)誤(Error)無能為力
//
捕獲違例
捕獲異常是通過try-catch-finally語句實(shí)現(xiàn)的。
try{
...... //可能產(chǎn)生違例的代碼
}catch( ExceptionName1 e ){
...... //當(dāng)產(chǎn)生ExceptionName1型違例時(shí)的處置措施
}catch( ExceptionName2 e ){
...... //當(dāng)產(chǎn)生ExceptionName2型違例時(shí)的處置措施
} [ finally{
...... //無條件執(zhí)行的語句
} ]
//
捕獲違例
try
捕獲違例的第一步是用try{…}語句塊選定捕獲違例的范圍。
catch
在catch語句塊中是對違例對象進(jìn)行處理的代碼,每個(gè)try語句塊可以伴隨一個(gè)或多個(gè)catch語句,用于處理可能產(chǎn)生的不同類型的違例對象。與其它對象一樣,可以訪問一個(gè)違例對象的成員變量或調(diào)用它的方法。
getMessage( ) 方法,用來得到有關(guān)異常事件的信息
printStackTrace( )用來跟蹤異常事件發(fā)生時(shí)執(zhí)行堆棧的內(nèi)容
//
捕獲違例
finally
捕獲例外的最后一步是通過finally語句為例外處理提供一個(gè)統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常事件,finally塊中的語句都會(huì)被執(zhí)行。
finally語句是任選的
//
聲明拋棄違例
聲明拋棄違例是Java中處理違例的第二種方式
如果一個(gè)方法(中的語句執(zhí)行時(shí))可能生成某種違例,但是并不能確定如何處理這種違例,則此方法應(yīng)聲明拋棄違例,表明該方法將不對這些違例進(jìn)行處理,而由該方法的調(diào)用者負(fù)責(zé)處理
聲明拋棄舉例:
public void readFile(String file) throws FileNotFoundException {
……
// 讀文件的操作可能產(chǎn)生FileNotFoundException類型的違例
FileInputStream fis = new FileInputStream(file);
..……
}
//
重寫方法聲明拋棄違例原則
重寫方法不能拋出比被重寫方法范圍更大的違例類型
//
拋棄例外
Java異常類對象除在程序執(zhí)行過程中出現(xiàn)異常時(shí)由系統(tǒng)自動(dòng)生成并拋出,也可根據(jù)需要需要人工創(chuàng)建并拋出
首先要生成例外對象,然后通過throw語句實(shí)現(xiàn)拋出操作(提交給Java運(yùn)行環(huán)境)。
IOException e =new IOException();
throw e;
可以拋棄的例外必須是Throwable或其子類的實(shí)例。下面的語句在編譯時(shí)將會(huì)產(chǎn)生語法錯(cuò)誤:
throw new String("want to throw");
//
創(chuàng)建用戶自定義例外類
用戶自定義例外類MyException,用于描述數(shù)據(jù)取值范圍錯(cuò)誤信息:
class MyException extends Exception {
private int idnumber;
public MyException(String message, int id) {
super(message);
this.idnumber = id;
}
public int getId() {
return idnumber;
}
}
//
// 實(shí)例
public class ExceptionTest{
public void regist(int num) throws MyException {
if (num < 0) {
throw new MyException("人數(shù)為負(fù)值,不合理",3);
}
System.out.println("登記人數(shù)" + num );
}
public void manager() {
try {
regist(-100);
} catch (MyException e) {
System.out.print("登記失敗,出錯(cuò)種類"+e.getId());
}
System.out.print("本次登記操作結(jié)束");
}
public static void main(String args[]){
ExceptionTest t = new ExceptionTest();
t.manager();
}
}
class MyException extends Exception {
private int idnumber;
public MyException(String message, int id) {
super(message);
this.idnumber = id;
}
public int getId() {
return idnumber;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -