java異常的處理
A. 在java中哪些異常需要處理
可以選擇三種方法來進行異常處理1對代碼塊用try..catch進行異常捕獲處理;
2在 該代碼的方法體外用throws進行拋出聲明,告知此方法的調用者這段代碼可能會出現這些異常,你需要謹慎處理。此時有兩種情況:如果聲明拋出的異常是非運行時異常,此方法的調用者必須顯示地用try..catch塊進行捕獲或者繼續向上層拋出異常。如果聲明拋出的異常是運行時異常,此方法的調用者可以選擇地進行異常捕獲處理。
3在代碼塊用throw手動拋出一個異常對象,此時也有兩種情況,跟2)中的類似:如果拋出的異常對象是非運行時異常,此方法的調用者必須顯示地用try..catch塊進行捕獲或者繼續向上層拋出異常。如果拋出的異常對象是運行時異常,此方法的調用者可以選擇地進行異常捕獲處理。(如果最終將異常拋給main方法,則相當於交給jvm自動處理,此時jvm會簡單地列印異常信息)
常處理和設計的建議
只在必要使用異常的地方才使用異常,不要用異常去控製程序的流程
切忌使用空catch塊
檢查異常和非檢查異常的選擇
注意catch塊的順序
不要將提供給用戶看的信息放在異常信息里
避免多次在日誌信息中記錄同一個異常
異常處理盡量放在高層進行
在finally中釋放資源
B. Java是怎樣處理異常問題的
第一:try{}catch{}捕捉異常處理。
try語句裡面實現的是主事件流,而catch裡面實現的是異常流。
自定義大量的Exception類,只是代表非主事件流的發生的,用來進行那些分支流程的流程式控制制的。
在異常捕獲後返回一個變數,該變數參與正常的業務流程。
第二:業務層處理業務時拋出異常,下次處理。(會影響性能)
返回變數是一種做法;拋出異常是一種做法。
而不是兩者都用,返回變數是面向過程的編程方法;拋出異常更OO。
C. 詳細描述java是如何處理異常的
當出現程序無法控制的外部環境問題(用戶提供的文件不存在,文件內容損壞,網路不可用...)時,JAVA就會用異常對象來描述。
JAVA中用2種方法處理異常:
1.在發生異常的地方直接處理;
2.將異常拋給調用者,讓調用者處理。
JAVA異常可分為3種:
(1)檢查性異常:java.lang.Exception
(2)運行期異常:java.lang.RuntimeException
(3)錯誤:java.lang.Error
頂層是java.lang.Throwable類,檢查性異常,運行期異常,錯誤都是這個類的子孫類。
java.lang.Exception和java.lang.Error繼承自java.lang.Throwable,而java.lang.RuntimeException繼承自java.lang.Exception.
檢查性異常------程序正確,但因為外在的環境條件不滿足引發。例如:用戶錯誤及I/O問題----程序試圖打開一個並不存在的遠程Socket埠。這不是程序本身的邏輯錯誤,而很可能是遠程機器名字錯誤(用戶拼寫錯誤)。對商用軟體系統,程序開發者必須考慮並處理這個問題。JAVA編譯器強制要求處理這類異常,如果不捕獲這類異常,程序將不能被編譯。
運行期異常------這意味著程序存在bug,如數組越界,0被除,入參不滿足規范.....這類異常需要更改程序來避免,JAVA編譯器強制要求處理這類異常。
錯誤------一般很少見,也很難通過程序解決。它可能源於程序的bug,但一般更可能源於環境問題,如內存耗盡。錯誤在程序中無須處理,而有運行環境處理。
如何處理異常?
1.try...catch
程序運行產生異常時,將從異常發生點中斷程序並向外拋出異常信息。
Java代碼
int x = (int)(Math.random()*5);
int y = (int)(Math.random()*10);
int[] z =new int[5];
try
{
System.out.println("y/x="+(y/x));
System.out.println("y="+y+"z[y]="+z[y]);
}
catch (ArithmeticException exc1)
{
System.out.println("算術運算異常:"+exc1.getMessage());
}
catch ( exc2)
{
System.out.println("數據越界異常:"+exc2.getMessage());
}
說明:ArithmeticException和都屬運行期異常:java.lang.RuntimeException,如果不用try...catch捕獲,程序也是可通過編譯的,但如果屬於檢查性異常:java.lang.Exception,必須而且一定要用try...catch...對其進行處理。
2.finally
如果把finally塊置try...catch...語句後,finally塊一般都會得到執行,它相當於一個萬能的保險,即使前面的try塊發生異常,而又沒有對應異常的catch塊,finally塊將馬上執行。
以下情形,finally塊將不會被執行:
(1)finally塊中發生了異常;
(2)程序所在線程死亡;
(3)在前面的代碼中用了System.exit();
(4)關閉CPU。
3.多個異常的處理規則:
定義多個catch可精確地定位異常。如果為子類的異常定義了特殊的catch塊,而父類的異常則放在另外一個catch塊中,此時,必須滿足以下規則:子類異常的處理塊必須在父類異常處理塊的前面,否則會發生編譯錯誤。所以,越特殊的異常越在前面處理,越普遍的異常越在後面處理。這類似於制訂防火牆的規則次序:較特殊的規則在前,較普通的規則在後。
自己也可以定義並拋出異常,方法是2步:創建異常,拋出異常(首先實例化一個異常對象,然後用thow拋出)合在一起就是----
thow new IOException("異常說明信息")。將創建異常,拋出異常合在一起的好處是:創建異常時,會包含異常創建處的行信息,異常被捕獲時可以通過堆棧跡(stack Trace)的形式報告這些信息。如果在同一行代碼創建和拋出異常,對於程序的調試將非常有用。
所以,thow new XXX()已經成為一個標準的異常拋出範式。
在定義一個方法時,方法塊中調用的方法可能會拋出異常,可用上面的thow new XXX()處理,如果不處理,那麼必須在方法定義時,用thows聲明這個方法會拋出的異常。
對異常的處理,有一條行之有效的默認規則:向上拋出-----被調用類在運行過程中對遇到的異常一概不作處理,而是直接向上拋出,一直到最上層的調用類,調用類根據應用系統的需求和特定的異常處理規則進行處理,如向控制台輸出異常堆棧信息,列印在日誌文件中。用一句形象的話來說,就是誰使用,誰(最上層的調用類)處理。
D. java拋出異常在哪裡處理
異常在哪裡處理也沒法說在哪裡處理好,只能是根據實際情況來進行相應的處理。
捕獲異常:通常在運行之前java不報錯,但是運行後可能會出現某些未知的錯誤,但是還不想直接拋出到上一級,那麼就需要通過」try{}catch「的形式進行異常捕獲,之後根據不同的異常情況來進行相應的處理。
傳遞異常:通常用在多級方法調用上,最終想將異常返回到最上層進行處理的時候,那麼就把異常向上拋出,知道調用的方法處,進行異常捕獲。
E. 通常Java是如何處理異常的
Java處理異常的方式和C++等語言類似,使用try-catch-finally語句,例子如下:
try{ //產生異常的回語句編寫在try語句塊中。
int[] num={1,2,3,4};
System.out.println(num[4]);
}catch(Exception e){ //處理具答體異常的代碼編寫在catch語句塊中。
e.printStackTrace();
}finally{ //資源釋放代碼編寫在finally語句塊中。
System.out.println(「總是運行!」);
}
更加具體的異常處理方法,你可以參考秒秒學的相關課程。上面列舉了異常的用法,和相關的異常類。
F. JAVA語言中,異常處理有哪幾種方式
有兩中方式:1.捕獲異常,自己處理.
2.throw出去,讓別人處理.
舉個例子:
public class A{
try{
可能放生異常的語句...
}catch(Exception e){
e.getMessage();//自己處理
}
}
public class A throws Exception{
可能放生異常的語句...
}//throw出去,讓別人處理
注意這里用的是throws
如果在方法裡面則用throw
舉例:
public class A{
try{
可能放生異常的語句...
}catch(Exception e){
e.getMessage();//自己處理
throw new Exception ("");
}
}
G. Java中,如何進行異常處理
異常
exception
不是
錯誤
error
異常又分為運行時異常(runtimeexception)和編譯時異常(checkedexception)
checkedexception
是非人為原因的而造成的不可避免的異常,比如
ioexception
和
sqlexception
等。
這些必須要用
thr{}catch
來捕獲或者
throws。必須拋出,因為在編譯的時候jvm會檢查,如果不拋出,則編譯不能通過。
簡單舉例來說,我用了
java.io.*
用了java
文件流的輸入輸出,就會產生不可預見的異常,假如,文件不存在,假如,流,讀寫失敗等,這些不可預見的問題,如果不捕獲並且忽略這些異常或者對異常進行相應的處理,也許會造成整個程序的崩潰,甚至有可能造成jvm的崩潰。所以,在編譯時,jvm就會檢查這些可能會造成異常的代碼,是否對異常進行了捕獲和處理。
而運行時異常,是程序員自己的錯誤而造成的,比如下標越界,這些問題在寫代碼的時候程序員自己就可以處理,是可預見的異常。編譯時
jvm不會檢查
H. Java中的異常處理是什麼意思
Java中的異常處理機制是由try
/catch/finally語句控制的,一個try語句後面可以跟多個catch語句對try區塊中拋出內的異常進容行處理。finally語句多catch中沒有進行處理的異常進行掃尾工作。
具體的語句的寫法格式如下
try{
expr
}
catch(exception
e){
expr
}
finally{
expr
}
expr代表處理語句。
在try語句中寫入我們准備要嘗試運行的代碼,在運行中try語句只負責拋出運行代碼時發生的異常。
在catch語句中我們寫入的是對try語句運行中拋出異常的處理代碼,catch語句需要傳入異常類型作為參數,一旦catch捕獲對應類型的異常就執行catch中的代碼。在一個try語句後面可以跟多個catch語句,對try語句中拋出的異常進行針對性的處理。但是要注意try語句中產生的是異常還是錯誤。
finally語句主要進行的是掃尾工作,無論try語句中是否拋出異常,都執行finally中的代碼。例如在try語句中拋出了一個異常,被一個catch語句捕獲,首先執行catch中的代碼,執行完畢後轉入finally語句中執行其中代碼。
I. JAVA異常處理的意義何在為什麼要做異常處理,作用是什麼
代替日漸衰落的error code方法的新法,提供error code所未能具體的優勢。
異常處理分離了接收和處理錯誤代碼。這個功能理清了編程者的思緒,也幫助代碼增強了可讀性,方便了維護者的閱讀和理解。
異常處理(又稱為錯誤處理)功能提供了處理程序運行時出現的任何意外或異常情況的方法。異常處理使用try、catch 和 finally關鍵字來嘗試可能未成功的操作,處理失敗,以及在事後清理資源。
(9)java異常的處理擴展閱讀
程序設計的要求之一就是程序的健壯性。希望程序在運行時能夠不出或者少出問題。但是,在程序的實際運行時,總會有一些因素導致程序不能正常運行。
在設計演算法時,往往對演算法的正常邏輯處理流程設計得比較准確,對異常情況的處理反而不容易設計全面,導致程序在出現異常情況時崩潰。如果軟體出現這種情況會給用戶帶來極不友好的體驗。
例如:試設計一個程序,運行後提示用戶輸入兩個整數。兩個整數用空格隔開,用戶輸入後,程序顯示出兩個數字的和。這個程序正常的邏輯處理非常簡單,但普用戶輸入的兩個字元串不是整數,程序應該給出提示,否則程序有可能會崩潰。因此針對異常情況的處理也是非常重要的,當然有時這種處理會比較復雜。
J. java異常處理的機制有哪幾種
有兩中方抄式:1.捕獲異常襲,自己處理.
2.throw出去,讓別人處理.
舉個例子:
public class A{
try{
可能發生異常的語句...
}catch(Exception e){
e.getMessage();//自己處理
}
}
public class A throws Exception{
可能發生異常的語句...
}//throw出去,讓別人處理
注意這里用的是throws
如果在方法裡面則用throw
舉例:
public class A{
try{
可能放生異常的語句...
}catch(Exception e){
e.getMessage();//自己處理
throw new Exception ("");
}
}