国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java異常處理中的一些特殊情況舉例

2019-11-26 14:51:15
字體:
來源:轉載
供稿:網友

只使用try和finally不使用catch的原因和場景
JDK并發工具包中,很多異常處理都使用了如下的結構,如AbstractExecutorService,即只有try和finally沒有catch。

class X { private final ReentrantLock lock = new ReentrantLock(); // ...  public void m() { lock.lock(); // block until condition holds try  {  // ... method body } finally {  lock.unlock() }  }}

為什么要使用這種結構?有什么好處呢?先看下面的代碼

public void testTryAndFinally(String name) {  try  {   name.length();// NullPointerException  }  finally  {   System.out.println("aa");  } }

傳遞null該方法的執行結果是:在控制臺打印aa,并拋出NullPointerException。執行流程是先執行try塊,出現異常后執行finally塊,最后向調用者拋出try中的異常。這種執行結果是很正常的,因為沒有catch異常處理器,所有該方法只能將產生的異常向外拋;因為有finally,所以會在方法返回拋出異常之前,先執行finally代碼塊中的清理工作。

這種做法的好處是什么呢?對于testTryAndFinally來說,它做了自己必須要做的事(finally),并向外拋出自己無法處理的異常;對于調用者來說,能夠感知出現的異常,并可以按照需要進行處理。也就是說這種結構實現了職責的分離,實現了異常處理(throw)與異常清理(finally)的解耦,讓不同的方法專注于自己應該做的事。那什么時候使用try-finally,什么時候使用try-catch-finally呢?很顯然這 取決于方法本身是否能夠處理try中出現的異常 。如果自己可以處理,那么直接catch住,不用拋給方法的調用者;如果自己不知道怎么處理,就應該將異常向外拋,能夠讓調用者知道發生了異常。即在方法的簽名中聲明throws可能出現而自己又無法處理的異常,但是在方法內部做自己應該的事情。


finally語句不會被執行的情況
Java的finally語句不會被執行的唯一情況是:先執行了用于終止程序的System.exit()方法
 

public class Test  {      public static void main(String[] args)     {         try        {             System.out.println("Start");             System.exit(0);          }finally        {             System.out.println("Finally");         }          System.out.println("End");      }  } 

輸出結果為:

Start

 
當然,如果在執行一般的沒有System.exit()語句的try語句時,突然斷電了,這時所有進程都會終止,也不會執行finally語句。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上林县| 桂林市| 德化县| 大邑县| 徐汇区| 闻喜县| 丰原市| 邢台县| 汕头市| 石河子市| 黎平县| 樟树市| 镇雄县| 东台市| 含山县| 栾川县| 兴宁市| 博爱县| 荔浦县| 南平市| 金寨县| 娱乐| 岗巴县| 兰州市| 九龙城区| 大足县| 商南县| 绿春县| 吉木乃县| 内乡县| 宝丰县| 辉南县| 突泉县| 丹东市| 达日县| 柞水县| 阿拉尔市| 满城县| 通州市| 博罗县| 鹤庆县|