try{
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)土默特右旗免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
//代碼
代碼中通常會(huì)出現(xiàn)不知情卻在情理中的錯(cuò)誤
int
age
=
a.getAge();//如果a對(duì)象為空,你卻調(diào)用它的方法就會(huì)報(bào)NullPointerException異常
}catch(//異常類型
NullPointerException
ne){//獲取你可以預(yù)知的異常
//異常處理就是你捕獲了這個(gè)異常你要這個(gè)異常進(jìn)行哪種操作
//一般的操作就是記錄到日志里
//然后拋出去或者返回狀態(tài)
}catch(Exception
ex){//這個(gè)是所有異常的父類
//因?yàn)楹芏喈惓J遣豢深A(yù)知的
//記錄到日志里
//然后拋出去或者返回狀態(tài)
}
比如你又一個(gè)方法叫a,調(diào)用了一個(gè)方法b(b方法throws了一個(gè)異常),那么在a里面使用try-catch捕獲這個(gè)異常,在catch塊里面,使用jsp的request,或者session將異常對(duì)象e.getMessage的內(nèi)容存儲(chǔ)到制定的變量里面(例如request.setAttribute("errorMessage",e.getMessage));
然后到頁面使用EL表達(dá)式${errorMessage}取出來就好了。
如果不拋出異常則是在catch塊里,拋出則由調(diào)用方法的類處理。
為了避免調(diào)用的人不知道有異常,才拋出異常的,所以是誰掉用的久在哪里處理。說的對(duì)嗎
對(duì).
1、throws關(guān)鍵字通常被應(yīng)用在聲明方法時(shí),用來指定可能拋出的異常。多個(gè)異常可以使用逗號(hào)隔開。當(dāng)在主函數(shù)中調(diào)用該方法時(shí),如果發(fā)生異常,就會(huì)將異常拋給指定異常對(duì)象。如下面例子所示:
public
class
Shoot
{
創(chuàng)建類
static
void
pop()
throws
NegativeArraySizeException
{
//定義方法并拋出NegativeArraySizeException異常
int
[]
arr
=
new
int[-3];//創(chuàng)建數(shù)組
}
public
static
void
main(String[]
args)
{//主方法
try
{
pop();
//調(diào)用pop()方法
}
catch
(NegativeArraySizeException
e)
{
System.out.println("pop()方法拋出的異常");//輸出異常信息
}
}
}
2、throw關(guān)鍵字通常用在方法體中,并且拋出一個(gè)異常對(duì)象。程序在執(zhí)行到throw語句時(shí)立即停止,它后面的語句都不執(zhí)行。通過throw拋出異常后,如果想在上一級(jí)代碼中來捕獲并處理異常,則需要在拋出異常的方法中使用throws關(guān)鍵字在方法聲明中指明要跑出的異常;如果要捕捉throw拋出的異常,則必須使用try—catch語句。舉例如下:
class
MyException
extends
Exception
{
//創(chuàng)建自定義異常類
String
message;
//定義String類型變量
public
MyException(String
ErrorMessagr)
{
//父類方法
message
=
ErrorMessagr;
}
public
String
getMessage(){
//覆蓋getMessage()方法
return
message;
}
}
public
class
Captor
{
//創(chuàng)建類
static
int
quotient(int
x,int
y)
throws
MyException{//定義方法拋出異常
if(y
0){
//判斷參數(shù)是否小于0
throw
new
MyException("除數(shù)不能是負(fù)數(shù)");//異常信息
}
return
x/y;//返回值
}
public
static
void
main(String
args[]){
//主方法
try{
//try語句包含可能發(fā)生異常的語句
int
result
=
quotient(3,-1);//調(diào)用方法quotient()
}catch
(MyException
e)
{
//處理自定義異常
System.out.println(e.getMessage());
//輸出異常信息
}
catch
(ArithmeticException
e)
{
//處理ArithmeticException異常
System.out.println("除數(shù)不能為0");//輸出提示信息
}
catch
(Exception
e)
{
//處理其他異常
System.out.println("程序發(fā)生了其他的異常");
//輸出提示信息
}
}
}
Java語言提供兩種異常處理機(jī)制:捕獲異常和聲明拋棄異常。
1、捕獲異常:
(1)在Java程序運(yùn)行過程中系統(tǒng)得到一個(gè)異常對(duì)象是,它將會(huì)沿著方法的調(diào)用棧逐層回溯,尋找處理這一異常的代碼。
(2)找到能夠處理這種類型異常的方法后,運(yùn)行時(shí)系統(tǒng)把當(dāng)前異常交給這個(gè)方法處理;如果找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。
(3)捕獲異常是通過try-catch-finally語句實(shí)現(xiàn)的。語法為:
try{
...
}catch(ExceptionName1e){
...
}catch(ExceptionName2e){
...
}
...
}finally{
...
}
2、聲明拋棄異常:
(1)當(dāng)Java程序運(yùn)行時(shí)系統(tǒng)得到一個(gè)異常對(duì)象時(shí),如果一個(gè)方法并不知道如何處理所出現(xiàn)的異常,則可在方法聲明時(shí),聲明拋棄異常。
(2)聲明拋棄異常是在一個(gè)方法聲明中的throws子句中指明的。如:
publicintread()throwsIOException{
...
}
其中throwsIOException就是聲明拋棄異常,throws后可以跟多個(gè)異常類型。
擴(kuò)展資料:
程序設(shè)計(jì)語言的異常機(jī)制:
1、多數(shù)語言的異常機(jī)制的語法是類似的:用throw或raise拋出一個(gè)異常對(duì)象(Java或C++等)或一個(gè)特殊可擴(kuò)展的枚舉類型的值(如Ada語言);
2、異常處理代碼的作用范圍用標(biāo)記子句(try或begin開始的語言作用域)標(biāo)示其起始,以第一個(gè)異常處理子句(catch,except,resuce等)標(biāo)示其結(jié)束;可連續(xù)出現(xiàn)若干個(gè)異常處理子句,每個(gè)處理特定類型的異常。
3、某些語言允許else子句,用于無異常出現(xiàn)的情況。更多見的是finally,ensure子句,無論是否出現(xiàn)異常它都將執(zhí)行,用于釋放異常處理所需的一些資源。
(1)C++異常處理是資源獲取即初始化(Resource-Acquisition-Is-Initialization)的基礎(chǔ)。
(2)C語言一般認(rèn)為是不支持異常處理的。Perl語言可選擇支持結(jié)構(gòu)化異常處理(structuredexceptionhandling)。
(3)Python語言對(duì)異常處理機(jī)制是非常普遍深入的,所以想寫出不含try,except的程序非常困難。
參考資料來源:
百度百科-異常處理