throw 僅用于方法定義后面,指示該方法可能會(huì)拋出什么異常,使用該方法的方法必須處理該異常,或者再次拋出。
創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、成華網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、成都商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為成華等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
throws 用于當(dāng)程序判斷發(fā)生異常時(shí),用該語句拋出異常,或處理異常時(shí)再次拋出異常。
//下面三個(gè)關(guān)鍵字就是處理異常
try {
//這里放可能會(huì)發(fā)生異常的語句
} catch(Exception e) {
//這里處理異常
} finally {
//這里的語句必然會(huì)得到執(zhí)行,不管異常發(fā)省與否,
//用于關(guān)閉數(shù)據(jù)庫,關(guān)閉連接等收尾操作(非必要)
}
java異常的一個(gè)簡(jiǎn)單例子,比如我有一個(gè)除法方法
public int divide(int a, int b) {
return a / b;
}
但是這就有一個(gè)問題,當(dāng)b是0時(shí),程序會(huì)報(bào)錯(cuò)。
如果引入異常,改成這樣
public int divide(int a, int b) throws Exception {
if (b == 0) {
throw new Exception("b = 0");
}
return a / b;
}
那么調(diào)用端該怎么用呢
public class ExceptionTest {
public static void main(String[] args) {
ExceptionTest et = new ExceptionTest();
try {
System.out.println(et.divide(12, 0));
} catch (Exception e) {
System.out.println("0不能做被除數(shù)");
}
}
public int divide(int a, int b) throws Exception {
if (b == 0) {
throw new Exception("b = 0");
}
return a / b;
}
}
程序可以繼續(xù)執(zhí)行,不會(huì)中斷。
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(ExceptionName1 e){
...
}catch(ExceptionName2 e){
...
}
...
}finally{
...
}
2、聲明拋棄異常:
(1)當(dāng)Java程序運(yùn)行時(shí)系統(tǒng)得到一個(gè)異常對(duì)象時(shí),如果一個(gè)方法并不知道如何處理所出現(xiàn)的異常,則可在方法聲明時(shí),聲明拋棄異常。
(2)聲明拋棄異常是在一個(gè)方法聲明中的throws子句中指明的。如:
public int read()() throws IOException{
...
}
其中throws IOException就是聲明拋棄異常,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)化異常處理(structured exception handling)。
(3)Python語言對(duì)異常處理機(jī)制是非常普遍深入的,所以想寫出不含try, except的程序非常困難。
參考資料來源:
百度百科-異常處理
import java.util.Scanner;
public class ExceptionDemo {
public static void main(String[] args) {
double op1,op2,r;
Scanner sc=new Scanner(System.in);
System.out.println("請(qǐng)輸入兩個(gè)double型的參數(shù)");
op1=sc.nextDouble();
op2=sc.nextDouble();
try {
r=div(op1,op2);
}
catch(MyException ex) {
System.out.println(ex.getMessage());
do {
System.out.println("除數(shù)為0,請(qǐng)重新輸入操作數(shù)2的值!");
op2=op2=sc.nextDouble();
}while(0==op2);
}
finally {
System.out.println(""+op1+"/"+op2+"的結(jié)果是:"+(op1/op2));
}
sc.close();
}
static double div(double op1,double op2) throws MyException {
if(0==op2) {
throw new MyException("自定義異常,除數(shù)為0異常");
}
return op1/op2;
}
}
class MyException extends Exception {
MyException(String msg) {
super(msg);
}
}
public class DevideZeroException extends RuntimeException// (1)//自定義異常類DevideZeroException來表示除數(shù)為0錯(cuò)誤
{
public DevideZeroException() {
super("除數(shù)不能為零!");// (2)("除數(shù)不能為零!");
}
public DevideZeroException(String message) {
super(message);// ( 3 )
}
}
public class Test {
public static void main(String[] args) {
try {
int a = 10;
int b = 0;
if (b == 0 /* (4) */) {/* (5) */
throw new DevideZeroException();
} else {
System.out.println(a / b);
}
} catch (DevideZeroException e) {
System.out.println(e.getMessage()/* (6) */);
} finally {
System.out.println("end");
}
}
}
運(yùn)行結(jié)果:
除數(shù)不能為零!
end
文章題目:java除法異常處理代碼 java除法語句
網(wǎng)頁網(wǎng)址:http://www.rwnh.cn/article10/dopjido.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)站收錄、標(biāo)簽優(yōu)化、建站公司、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)