java核心技術(shù)第08講自定義異常_第1頁(yè)
java核心技術(shù)第08講自定義異常_第2頁(yè)
java核心技術(shù)第08講自定義異常_第3頁(yè)
java核心技術(shù)第08講自定義異常_第4頁(yè)
java核心技術(shù)第08講自定義異常_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Java程序設(shè)計(jì)主講:第異常的概念異常的分類聲明異常拋出異常捕獲并處理異常自定義異常類在有些情況下,一個(gè)方法并不需要處理它所生成的異常,而是向上傳遞,由調(diào)用它的方法來(lái)處理這些異常,這時(shí)就要用到throws子句,它包含在方法的聲明中,其格式如下:void

compute(int

x)

throws

ArithmeticException

{…}返回類型

方法名(參數(shù)列表)

throws

異常列表間由逗號(hào)隔開public

class

Test7

{pJuablvicas語(yǔ)tatic言vo中id

d通ivid過(guò)e()tthhrroowws

Esx聲cep明tion某{個(gè)方法可能拋出的各種異常Scanner

in

=

newScanner(System.in);可以Sy同ste時(shí)m.o聲ut.p明rin多t("請(qǐng)個(gè)輸入異被常除數(shù),:"之);intnum1=in.nextInt();System.out.print("請(qǐng)輸入除數(shù):");int

num2=in.nextInt();int

result

=

num1

/

num2;System.out.println("計(jì)算結(jié)果為"+result);}public

staticvoid

main(String[]args){try

{divide();}

catch(Exception

e)

{e.printStackTrace();}}// public

staticvoid

main(String[]

args)

throws

Exception

{//

divide();//

}}divide()方法沒(méi)有處理異常,而是聲明異常方式1:調(diào)用者通過(guò)try-catch捕獲并處理異常方式2:調(diào)用者通過(guò)throws繼續(xù)聲明異常演示示例:使用throws聲明異常class

ThrowTest{throws

Exceptionvoid

compute(String[]

args){int

num1

=

0,num2

=

0;int

result

=

0;num1=Integer.parseInt(args[0]);num2=Integer.parseInt(args[1]);System.out.println("開始計(jì)算");if(num2==0)throw

new

Exception();result

=

num1/num2;System.out.println("計(jì)算完畢:結(jié)果為"+result);System.out.println("計(jì)算過(guò)程結(jié)束");}}拋出異常向上拋出異常public

class

ThrowDemo{public

static

void

main(String[]

args){ThrowTest

tt

=new

ThrowTest();pute(args);try{}catch(Exception

e){e.printStackTrace();}創(chuàng)建對(duì)象-

compute方法可以拋出異常當(dāng)參數(shù)arg[1]為0compute方法拋出異常發(fā)現(xiàn)異常通知catch塊捕獲并處理異常System.out.println("運(yùn)行結(jié)束");}}除了系統(tǒng)自動(dòng)拋出異常外,有些問(wèn)題需要程序員自行拋出異常public

class

Person

{private

String

name="";//姓名

private

int

age=0;//

年齡

private

String

sex="男";//性別public

void

setSex(Stringsex)

throws

Exception

{if("男".equals(sex)||"女".equals(sex))this.sex=sex;else

{}}}public

class

Test8

{public

staticvoid

main(String[]args){throw

new

Exception("性別必須是“Pe男rs”on或p者ers“on女=”n!ew");Person();try

{person.setSex("Male");person.print();;m.out.println(

+

"("

+

this.sex}

catch(Exception

e)

{+

","+this.age

+

"歲)");

e.printStackTrace()}}}}

拋出異常public

void

print(){Syste捕獲異常,或者throws異常演示示例:使用throw拋出異常在捕獲一個(gè)異常前,必須有一段Java代碼生成一個(gè)異常對(duì)象并把它拋出。拋出異常的代碼可以是你的Java程序,或者是JDK中某個(gè)類,或者是

Java運(yùn)行時(shí)系統(tǒng)。它們都是通過(guò)throw語(yǔ)句來(lái)實(shí)現(xiàn)的。格式為:throw

ThrowableObject;throw

new

ArithmeticException();Public

class

JavaThrow{public

static

void

main(String

args[]){try{throw

new

ArithmeticException();//拋出算術(shù)異常}catch(ArithmeticException

ae){System.out.println(ae);}try{throw

new

ArrayIndexOutOfBoundsException();//拋出數(shù)組下標(biāo)越界異常}catch(ArrayIndexOutOfBoundsException

ai){System.out.println(ai);}……}}}public

class

ThrowDemo{public

static

void

main(String[]

args){…

…num1

=

Integer.parseInt(args[0]);num2

=

Integer.parseInt(args[1]);System.out.println("開始計(jì)算");throw

new

ArithmeticException();ult);:結(jié)果為"+restry{if

(num2

==

0)result=num1/num2;System.out.println("計(jì)算完畢}catch(Exception

e){e.printStackTrace();}…

…}}ArithmeticException異常拋出異常捕獲并處理異常發(fā)現(xiàn)異常通知catch塊throw是語(yǔ)句拋出一個(gè)異常;throws是方法拋出一個(gè)異常;throws可以單獨(dú)使用,但throw不能;throw要么和try-catch-finally語(yǔ)句配套使用,要么與throws配套使用;throws可以單獨(dú)使用,是聲明這個(gè)方法會(huì)拋出這種類型的異常,然后再由處理異常的方法捕獲;throw是具體向外拋異常的動(dòng)作,所以它是拋出一個(gè)異常實(shí)例也就是對(duì)象;

JavaAPI提供的內(nèi)置異常不一定總能捕獲程序中發(fā)生的所有錯(cuò)誤。有時(shí)會(huì)需要?jiǎng)?chuàng)建用戶自定義異常。對(duì)于自定義的異常類,通常把它作為類Exception的子類,而不作為類Error的子類,因?yàn)镋rror類通常用于系統(tǒng)內(nèi)嚴(yán)重的硬件錯(cuò)誤。并且在多數(shù)情況下,不要把自定義的異常類作為運(yùn)行時(shí)異常類RuntimeException子類。另外,自定義異常類的類名常常以Exception結(jié)尾。在繼承任何異常時(shí),將自動(dòng)繼承Throwable類的一些標(biāo)準(zhǔn)特性,如:錯(cuò)誤消息棧跟蹤異常包裝class

MyException

extends

Exceptionclass

UserExceptionDemo

extends

ArithmeticException{UserExceptionDemo(){super("除數(shù)為零");}}第一步:創(chuàng)建異常類創(chuàng)建自定義異常類若要建立自己的異常類型,只要定義Exception的一個(gè)子類就可以了,子類不需要實(shí)際執(zhí)行什么——它們?cè)陬愋拖到y(tǒng)中的存在允許把它們當(dāng)成異常使用。第二步:使用異常類為了使用自定義異常,必須通知調(diào)用代碼的類:要準(zhǔn)備處理這個(gè)異常類型。為此,聲明一個(gè)或多個(gè)方法拋出異常。class

UseUserException{void

compute(String[]

args)

throws

UserExceptionDemo{…

…num2

=

Integer.parseInt(args[1]);if(num2==0)throw

new

UserExceptionDemo();result

=

num1

/

num2;System.out.println("計(jì)算完畢:結(jié)果為"+result);}UseUserException(String[]

args){try{compute(args);}catch(UserExceptionDemo

e){e.printStackTrace();}}}手動(dòng)拋出自定義異常參數(shù)args[1]=0拋出自定義異常public

class

UserException{public

static

void

main(String

args[]){UseUserException

uue=new

UseUserException(args);System.out.println("程序運(yùn)行結(jié)束");}}創(chuàng)建捕獲自定義異常的對(duì)象第三步:測(cè)試異常類需求說(shuō)明:創(chuàng)建一個(gè)自定義的年齡異常類在setAge(intage)中對(duì)年齡進(jìn)行判斷,如果年齡介于1到100直接賦值,否則拋出異常在測(cè)試類中創(chuàng)建對(duì)象并調(diào)用setAge(int age)方法,使用try-catch捕獲并處理異常完成時(shí)間:15分鐘異常是運(yùn)行時(shí)發(fā)生的錯(cuò)誤。所有異常類的基類是Exception??梢允褂胻ry、catch、和finally來(lái)管理

Java異常處理。要監(jiān)控的程序語(yǔ)句包含在try塊內(nèi),catch塊中的代碼用于捕獲和處理異常。在方法返回之前絕對(duì)必須執(zhí)行的代碼應(yīng)放置在finally塊中。要手動(dòng)引發(fā)異常,使用關(guān)鍵字throw。任何被拋到方法外部的異常都必須用throws子句指定。對(duì)于自定義的異常類,通常把它作為類

Exception的子類在繼承任何異常時(shí),將自動(dòng)繼承

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論