新聞中心
Java:拋出異常后如何終止執(zhí)行后面的代碼?
在Java中,拋出異常之后,如果不對(duì)異常進(jìn)行處理,代碼會(huì)一直往調(diào)用的上層拋,直到線程的執(zhí)行器,如果在這里異常仍然未得到處理,線程將停止執(zhí)行。所以拋出異常后如果不對(duì)異常進(jìn)行處理,后面的代碼將不會(huì)執(zhí)行。
目前創(chuàng)新互聯(lián)公司已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、貴德網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
比如以下代碼:
public void testException throws Exception(){
System.out.println("start");
throw new Exception("test exception");
System.out.println("execute ended?");
}
最后一行代碼在異常拋出之后,這行代碼是不會(huì)執(zhí)行的。
java中 方法中拋出異常處理方法
Java語(yǔ)言提供兩種異常處理機(jī)制:捕獲異常和聲明拋棄異常。
1、捕獲異常:
(1)在Java程序運(yùn)行過(guò)程中系統(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)捕獲異常是通過(guò)try-catch-finally語(yǔ)句實(shí)現(xiàn)的。語(yǔ)法為:
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ì)語(yǔ)言的異常機(jī)制:
1、多數(shù)語(yǔ)言的異常機(jī)制的語(yǔ)法是類似的:用throw或raise拋出一個(gè)異常對(duì)象(Java或C++等)或一個(gè)特殊可擴(kuò)展的枚舉類型的值(如Ada語(yǔ)言);
2、異常處理代碼的作用范圍用標(biāo)記子句(try或begin開始的語(yǔ)言作用域)標(biāo)示其起始,以第一個(gè)異常處理子句(catch, except, resuce等)標(biāo)示其結(jié)束;可連續(xù)出現(xiàn)若干個(gè)異常處理子句,每個(gè)處理特定類型的異常。
3、某些語(yǔ)言允許else子句,用于無(wú)異常出現(xiàn)的情況。更多見(jiàn)的是finally, ensure子句,無(wú)論是否出現(xiàn)異常它都將執(zhí)行,用于釋放異常處理所需的一些資源。
(1)C++異常處理是資源獲取即初始化(Resource-Acquisition-Is-Initialization)的基礎(chǔ)。
(2)C語(yǔ)言一般認(rèn)為是不支持異常處理的。Perl語(yǔ)言可選擇支持結(jié)構(gòu)化異常處理(structured exception handling)。
(3)Python語(yǔ)言對(duì)異常處理機(jī)制是非常普遍深入的,所以想寫出不含try, except的程序非常困難。
參考資料來(lái)源:
百度百科-異常處理
java 有沒(méi)有什么方法不讓sleep()被中斷,即不拋出異常
如果要比較精確地sleep,應(yīng)該是把sleep放在循環(huán)里。
在進(jìn)入循環(huán)前,設(shè)定好目標(biāo)時(shí)長(zhǎng)target,并記錄當(dāng)前時(shí)間s作為起始時(shí)間。
循環(huán)的條件是當(dāng)前時(shí)間t - s target 。
循環(huán)體就是加了try catch的sleep(),sleep的時(shí)間要根據(jù)實(shí)際睡過(guò)的時(shí)間與目標(biāo)時(shí)長(zhǎng)的差來(lái)動(dòng)態(tài)設(shè)定;catch里不做什么。
Java中如果不拋出異常,catch代碼段是否被執(zhí)行? 而且catch方法后面的參數(shù)列表怎么辦?為什么不會(huì)報(bào)錯(cuò)呢?
不拋異常,代碼里有捕獲異常,當(dāng)捕獲異常的代碼塊出現(xiàn)異常的時(shí)候catch代碼自然執(zhí)行,不發(fā)生異常則不執(zhí)行。有捕獲異常的話,catch后的代碼會(huì)正常執(zhí)行,有異常卻沒(méi)記錄,可能是你捕獲了異常卻沒(méi)打印出來(lái)也沒(méi)記錄日志自然會(huì)看不到
網(wǎng)頁(yè)題目:java不讓代碼拋異常,java拋出異常后會(huì)不會(huì)執(zhí)行程序
瀏覽路徑:http://fisionsoft.com.cn/article/dscisjs.html