亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2015年11月13日 08:50:07   投稿:goldensun  
這篇文章主要介紹了Java異常處理中的一些特殊情況舉例,分別是只用try和finally不用catch,以及finally語(yǔ)句不被執(zhí)行的情況,需要的朋友可以參考下

只使用try和finally不使用catch的原因和場(chǎng)景
JDK并發(fā)工具包中,很多異常處理都使用了如下的結(jié)構(gòu),如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()
 }
  }
}

為什么要使用這種結(jié)構(gòu)?有什么好處呢?先看下面的代碼

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

傳遞null該方法的執(zhí)行結(jié)果是:在控制臺(tái)打印aa,并拋出NullPointerException。執(zhí)行流程是先執(zhí)行try塊,出現(xiàn)異常后執(zhí)行finally塊,最后向調(diào)用者拋出try中的異常。這種執(zhí)行結(jié)果是很正常的,因?yàn)闆]有catch異常處理器,所有該方法只能將產(chǎn)生的異常向外拋;因?yàn)橛衒inally,所以會(huì)在方法返回拋出異常之前,先執(zhí)行finally代碼塊中的清理工作。

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


finally語(yǔ)句不會(huì)被執(zhí)行的情況
Java的finally語(yǔ)句不會(huì)被執(zhí)行的唯一情況是:先執(zhí)行了用于終止程序的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");  
    }  
} 

輸出結(jié)果為:

Start

 
當(dāng)然,如果在執(zhí)行一般的沒有System.exit()語(yǔ)句的try語(yǔ)句時(shí),突然斷電了,這時(shí)所有進(jìn)程都會(huì)終止,也不會(huì)執(zhí)行finally語(yǔ)句。

相關(guān)文章

  • Java中Set集合轉(zhuǎn)為L(zhǎng)ist集合常見的兩種方式

    Java中Set集合轉(zhuǎn)為L(zhǎng)ist集合常見的兩種方式

    List是Java中比較常用的集合類,指一系列存儲(chǔ)數(shù)據(jù)的接口和類,可以解決復(fù)雜的數(shù)據(jù)存儲(chǔ)問題,這篇文章主要給大家介紹了關(guān)于Java中Set集合轉(zhuǎn)為L(zhǎng)ist集合常見的兩種方式,需要的朋友可以參考下
    2023-12-12
  • 淺談Java反射與代理

    淺談Java反射與代理

    下面小編就為大家?guī)硪黄獪\談Java反射與代理。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • 基于swagger參數(shù)與實(shí)體中參數(shù)不一致的原因分析

    基于swagger參數(shù)與實(shí)體中參數(shù)不一致的原因分析

    這篇文章主要介紹了基于swagger參數(shù)與實(shí)體中參數(shù)不一致的原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • spring boot 配置Filter過濾器的方法

    spring boot 配置Filter過濾器的方法

    本篇文章主要介紹了spring boot 配置Filter過濾器的方法,實(shí)例分析了spring boot 配置Filter過濾器的技巧,有興趣的可以了解一下。
    2017-03-03
  • Spring源碼解密之默認(rèn)標(biāo)簽的解析

    Spring源碼解密之默認(rèn)標(biāo)簽的解析

    這篇文章主要給大家介紹了關(guān)于Spring源碼解密之默認(rèn)標(biāo)簽的解析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶登錄與注冊(cè)

    JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶登錄與注冊(cè)

    這篇文章主要介紹了JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶登錄與注冊(cè),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很大的幫助,需要的朋友可以參考下
    2021-04-04
  • JAVA WSIMPORT生成WEBSERVICE客戶端401認(rèn)證過程圖解

    JAVA WSIMPORT生成WEBSERVICE客戶端401認(rèn)證過程圖解

    這篇文章主要介紹了JAVA WSIMPORT生成WEBSERVICE客戶端401認(rèn)證過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • @PostConstruct在項(xiàng)目啟動(dòng)時(shí)被執(zhí)行兩次或多次的原因及分析

    @PostConstruct在項(xiàng)目啟動(dòng)時(shí)被執(zhí)行兩次或多次的原因及分析

    這篇文章主要介紹了@PostConstruct在項(xiàng)目啟動(dòng)時(shí)被執(zhí)行兩次或多次的原因及分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 關(guān)于IDEA MybatisX插件的使用小技巧

    關(guān)于IDEA MybatisX插件的使用小技巧

    這篇文章主要介紹了關(guān)于MybatisX插件的使用小技巧,MybatisX是IDEA的一款第三方插件,可以極大地提升我們的開發(fā)效率,一起來看看吧
    2023-03-03
  • Java中Exception和Error的區(qū)別詳解

    Java中Exception和Error的區(qū)別詳解

    這篇文章主要介紹了Java中Exception和Error的區(qū)別詳解,通過類的關(guān)系分析兩者的區(qū)別與應(yīng)用場(chǎng)景,包含代碼實(shí)例,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論