1.當(dāng)Java程序執(zhí)行try塊、catch塊時(shí)遇到return語句,return語句會(huì)導(dǎo)致該方法立即結(jié)束。系統(tǒng)執(zhí)行完return語句之后,并不會(huì)立即結(jié)束該方法,而是去尋找該異常處理流程中是否包含finally塊,若沒有finally塊,則方法終止,返回相應(yīng)的返回值;
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比克拉瑪依網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式克拉瑪依網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋克拉瑪依地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站制作、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出華州免費(fèi)做網(wǎng)站回饋大家。
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的懷遠(yuǎn)網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
創(chuàng)新互聯(lián)于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元烏魯木齊做網(wǎng)站,已為上家服務(wù),為烏魯木齊各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
新巴爾虎右ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了尼河口免費(fèi)建站歡迎大家使用!
若有finally塊,則立即開始執(zhí)行finally塊,此時(shí)若finally塊中沒有return語句,則系統(tǒng)才會(huì)再次跳回來根據(jù)try塊或catch塊中的return語句結(jié)束方法(但是,不會(huì)再次執(zhí)行return語句體,還是第一次執(zhí)行的那個(gè)結(jié)果);若finally塊中有return語句,則finally塊已經(jīng)結(jié)束了方法,系統(tǒng)不會(huì)跳回去執(zhí)行try塊或catch塊里的任何代碼。
沒有finally塊的比較簡(jiǎn)單,這里只看有finally塊的,看如下代碼:
[java] view plaincopy
package com.mys.test;??
??
public class Test {??
??
? ? /**?
? ? ?* @param args?
? ? ?*/??
? ? public static void main(String[] args) {??
? ? ? ? Test test = new Test();??
? ? ? ? int a = 0;??
? ? ? ? try {??
? ? ? ? ? ? a = test.test();??
? ? ? ? } catch (Exception e) {??
? ? ? ? ? ? // TODO Auto-generated catch block??
? ? ? ? ? ? e.printStackTrace();??
? ? ? ? }??
? ? ? ? System.out.println("調(diào)用test()后a="+a);??
? ? ? ? ??
? ? }??
??
? ? @SuppressWarnings("finally")??
? ? private int test()throws Exception {??
? ? ? ? int count = 5;??
? ? ? ? try{??
? ? ? ? ? ? System.out.println("try塊,count="+count);??
? ? ? ? ? ? return ++count;//main()中輸出6??
//? ? ? ? ? return count++;//main()中輸出5??
? ? ? ? }finally{??
? ? ? ? ? ? count=100000;??
? ? ? ? ? ? System.out.println("finally塊,count++="+count++ +"? ,count="+count);??
? ? ? ? }??
? ? }??
??
}??
第一種finally塊中沒有return語句,則上面代碼輸入如下:
try塊,count=5
finally塊,count++=100000? ,count=100001
調(diào)用test()后a=6
其中調(diào)用test()后a=6就說明了執(zhí)行完finally塊后代碼雖然立刻返回了,但不會(huì)再次執(zhí)行try或catch塊中的return語句體,還是第一次執(zhí)行的那個(gè)結(jié)果(由局部變量決定的)
[java] view plaincopy
package com.mys.test;??
??
public class Test {??
??
? ? /**?
? ? ?* @param args?
? ? ?*/??
? ? public static void main(String[] args) {??
? ? ? ? Test test = new Test();??
? ? ? ? int a = 0;??
? ? ? ? try {??
? ? ? ? ? ? a = test.test();??
? ? ? ? } catch (Exception e) {??
? ? ? ? ? ? // TODO Auto-generated catch block??
? ? ? ? ? ? e.printStackTrace();??
? ? ? ? }??
? ? ? ? System.out.println("調(diào)用test()后a="+a);??
? ? ? ? ??
? ? }??
??
? ? @SuppressWarnings("finally")??
? ? private int test()throws Exception {??
? ? ? ? int count = 5;??
? ? ? ? try{??
? ? ? ? ? ? System.out.println("try塊,count="+count);??
? ? ? ? ? ? return ++count;??
? ? ? ? }finally{??
? ? ? ? ? ? count=100000;??
? ? ? ? ? ? System.out.println("finally塊,count++="+count++ +"? ,count="+count);??
? ? ? ? ? ? return ++count;??
? ? ? ? }??
? ? }??
??
}??
第二種finally塊中有return語句,則上面代碼輸入如下:
try塊,count=5
finally塊,count++=100000? ,count=100001
調(diào)用test()后a=100002
2.再來看另一種情況,
[java] view plaincopy
package com.mys.test;??
??
public class Test {??
??
? ? /**?
? ? ?* @param args?
? ? ?*/??
? ? public static void main(String[] args) {??
? ? ? ? Test test = new Test();??
? ? ? ? int a = 0;??
? ? ? ? try {??
? ? ? ? ? ? a = test.test();??
? ? ? ? } catch (Exception e) {??
? ? ? ? ? ? // TODO Auto-generated catch block??
? ? ? ? ? ? e.printStackTrace();??
? ? ? ? }??
? ? ? ? System.out.println("調(diào)用test()后a="+a);??
? ? ? ? ??
? ? }??
??
? ? @SuppressWarnings("finally")??
? ? private int test(){??
? ? ? ? int count = 5;??
? ? ? ? try{??
? ? ? ? ? ? System.out.println("try塊,count="+count);??
? ? ? ? ? ? throw new RuntimeException("測(cè)試異常");??
? ? ? ? }finally{??
? ? ? ? ? ? count=100000;??
? ? ? ? ? ? System.out.println("finally塊,count++="+count++ +"? ,count="+count);??
? ? ? ? ? ? return ++count;??
? ? ? ? }??
? ? }??
??
}??
上面代碼輸入如下:
try塊,count=5
finally塊,count++=100000? ,count=100001
調(diào)用test()后a=100002
try塊中拋出了RuntimeException異常,同時(shí)程序中并未使用catch塊來捕獲這個(gè)異常,正常情況下,該異常應(yīng)導(dǎo)致test()方法非正常終止,test()應(yīng)該沒有返回值。但實(shí)際情況是,test()完全可以正常結(jié)束.這也符合finally塊執(zhí)行的流程:
當(dāng)程序執(zhí)行try塊、catch塊時(shí)遇到throw語句,throw語句會(huì)導(dǎo)致該方法立即結(jié)束。系統(tǒng)執(zhí)行完throw語句之后,并不會(huì)立即結(jié)束該方法,而是去尋找該異常處理流程中是否包含finally塊,若沒有finally塊,則程序立即拋出異常;
若有finally塊,則立即開始執(zhí)行finally塊,此時(shí)若finally塊中沒有return語句,則系統(tǒng)才會(huì)再次跳回來拋出異常;若finally塊中有return語句,則finally塊已經(jīng)結(jié)束了方法,系統(tǒng)不會(huì)跳回去執(zhí)行try塊或catch塊去拋出異常。
由于上面的例子是使用的RuntimeException異常,該異常屬于非受查異常,編譯器不要求強(qiáng)制處置的異常
(強(qiáng)制處理的需要用try...catch...或者往上拋出(test() throws Exception),所以,能夠正常輸出.
即沒有異常,如果,把 上例中finally塊中的return ++count;去掉就會(huì)拋出異常了?。?!