日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 异常处理机制(java 编程思想)

發(fā)布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 异常处理机制(java 编程思想) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、概念 

  • “異常”這個詞有“我對此感到意外”的意思。問題出現(xiàn)了,你也許并不清楚該如何處理,但你的確知道不應(yīng)該置之不理;你要停下來,看看是不是有別人或在別的地方,能夠處理這個問題。只是在當(dāng)前的環(huán)境中還沒有足夠的信息來解決這個問題,所以就把這個問題提交到一個更高級別的環(huán)境中,在這里將作出正確的決定。

二、基本知識

2.1 基本異常

  • 當(dāng)拋出異常后,首先,同Java中其它的對象創(chuàng)建一樣,將使用 new在堆上創(chuàng)建異常對象。然后,當(dāng)前的執(zhí)行路徑(它不能繼續(xù)下去了)被終止,并且從當(dāng)前環(huán)境中彈出對異常對象的引用。此時,異常處理機制接管程序,并開始尋找一個恰當(dāng)?shù)牡胤絹砝^續(xù)執(zhí)行程序。這個恰當(dāng)?shù)牡胤骄褪钱惓L幚沓绦?#xff0c;它的任務(wù)是將程序從錯誤狀態(tài)中恢復(fù),以使程序能要么換一種方式運行,要么繼續(xù)運行下去。異常允許我們(如果沒有其它手段)強制程序停止運行,并告訴我們出現(xiàn)了什么問題,或者(理想狀態(tài)下)強制程序處理問題,并返回到穩(wěn)定狀態(tài)。

  在基本異常的基礎(chǔ)之上,我們還需要知道異常的參數(shù):

  • 我們總是用 new 在堆上創(chuàng)建異常對象,這也伴隨著存儲空間的分配和構(gòu)造器的調(diào)用。所有標(biāo)準(zhǔn)異常類都有兩個構(gòu)造器:一個是默認構(gòu)造器;另一個是接受字符串作為參數(shù),以便能把相關(guān)信息放入異常對象的構(gòu)造器:?

      throw new NullpointerException("t = null ");?

  • 在使用 new 創(chuàng)建異常對象之后,此對象的引用將傳給 throw。將會返回一個異常對象然后退出方法或作用域。
  • 能夠拋出任意類型的Throwable對象,它是異常類型的根類。通常,對于不同類型的錯誤,要拋出相應(yīng)的異常。錯誤信息可以保存在異常對象內(nèi)部或者使用異常類的名稱來暗示。上一層環(huán)境通過這些信息來決定如何處理異常。(通常,異常對象中僅有的信息就是異常類型,除此之外不包含任何有意義的內(nèi)容。)

2.2 捕獲異常

  try 塊捕獲異常

  如果在方法內(nèi)部拋出了異常(或者在方法內(nèi)部調(diào)用的其他方法拋出了異常),這個方法將在拋出異常的過程中結(jié)束。要是不希望方法就此結(jié)束,可以在方法內(nèi)設(shè)置一個特殊的塊來捕獲異常。

  catch塊處理異常

  當(dāng)然,拋出的異常必須在某處得到處理。這個“地點”就是異常處理程序,而且針對每個要捕獲的異常,得準(zhǔn)備相應(yīng)的處理程序。異常處理程序緊跟在 try 塊之后,以關(guān)鍵字 catch 表示:

try{//Code that might generate exceptions }catch(Type1 id1){//handle exceptions of Type1 }catch(Type2 id2){//handle exceptions of Type2 } //etc...

  異常處理程序必須緊跟在 try 塊之后。當(dāng)異常被拋出時,異常處理機制將負責(zé)搜尋參數(shù)與異常類型相匹配的第一個處理程序。然后進入 catch 子句執(zhí)行,此時認為異常得到了處理。一旦 catch 子句結(jié)束,則處理程序的查找過程結(jié)束。注意,只有匹配的 catch 子句才能得到執(zhí)行。

  兩種異常處理模型: 終止模型、恢復(fù)模型

  終止模型: 一旦異常被拋出,就表明錯誤已經(jīng)無法挽回,也不能回來繼續(xù)執(zhí)行。

  恢復(fù)模型: 異常處理程序的工作是修正錯誤,然后重新嘗試調(diào)出問題的方法,并認為第二次能成功。 該種模型時,不能再遇見錯誤時就拋出異常,而是調(diào)用方法來修正,或者把try塊放在while循環(huán)里,這樣不斷的進入try塊直到得到滿意的結(jié)果。

2.3 創(chuàng)建自定義異常

  通過自定義MyException繼承自Exception來創(chuàng)建自定義的異常。

class MyException extends Exception{public MyException(){}public MyException(String in){super(in);} }

  并在catch中通過:

      e.printStackTrace()

將異常寫入到System.err(標(biāo)準(zhǔn)錯誤流),在debug的時候會顯示錯誤的函數(shù)和行號(這是對System.out的優(yōu)勢)。

(它將打印“從方法調(diào)用處直到異常拋出處”的方法調(diào)用序列)

棧軌跡:

  printStackTrace方法也可以通過getStackTrace()方法來訪問,這個方法將返回一個由棧軌跡中的元素構(gòu)成的數(shù)組,其中每一個元素都將表示棧中的一幀。

元素0是棧頂元素,并且是調(diào)用序列中的最后一個方法調(diào)用。

  通過如下代碼打印 棧軌跡:

try {f();} catch (MyException e) {// e.printStackTrace();for(StackTraceElement ste : e.getStackTrace()){Log.d(TAG, "onClick: "+ste.getMethodName());}}

得到的結(jié)果如下:

  

?

2.4 異常說明

  如果調(diào)用某個方法,方法里的代碼產(chǎn)生了異常卻沒有進行處理,編譯器會發(fā)現(xiàn)這個問題: 要么處理這個異常,要么在函數(shù)異常說明中表明此方法將產(chǎn)生異常。

如下圖所示: 1、函數(shù)聲明加: throws MyException? ? 2、函數(shù)中 增加 try catch 處理異常。?

2.5 try catch中有return,final?

  當(dāng)try/catch代碼中有return語句,那么此時的final是否還會繼續(xù)執(zhí)行?

? ? ? ?1、 當(dāng)try catch中有return 語句,在執(zhí)行return之前將需要return的結(jié)果保存在一個臨時變量中,然后去執(zhí)行finally代碼塊,執(zhí)行完之后再執(zhí)行return。

? ? ? ?2、 1中情況有個前提條件是finally中沒有return語句,如果finally代碼塊中也有return,那么會執(zhí)行finally中的return,不會執(zhí)行try/catch中的。

int testFinallyReturn(){int x = 1;try{x++;return x;}catch (Exception e){return x;}finally {++x;return x;}}

運行結(jié)果:
if(exist("return x") in finally){
return result : 2 ;
}else{
  return result : 3 ;
}

轉(zhuǎn)載于:https://www.cnblogs.com/NeilZhang/p/7639546.html

總結(jié)

以上是生活随笔為你收集整理的java 异常处理机制(java 编程思想)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。