java的健壯性


健壯性的體現
健壯性體現在java異常處理機制
java把c++里面很多警告變成錯誤 ,這樣設計的原則是為了讓劣質代碼不能寫出來
健壯性程序,1/9是核心代碼 2/9是注釋 2/3是處理可能的異常。
 

異常的3個種類 ,檢查異常,運行時異常,錯誤


異常,當異常發生時,JVM會在終止程序前,把調用棧跟蹤信息打印出來,上面記錄了錯誤的發生順序,
例如:如果主方法調用了 方法1 ,方法1 調用了方法2 ,方法2有異常,那么程序將會
執行主方法,到方法1,執行方法1,到方法2,執行方法2,到異常
然后方法2 如果不能處理異常 則方法2彈出,如果方法1不能處理異常,則方法1 彈出 ,如果主方法不恩給你處理異常 則主方法彈出。
 
 
  對於可能出現異常的代碼,有兩種處理辦法:
        第一、在方法中用try...catch語句捕獲並處理異常,catach語句可以有多個,用來匹配多個異常例如:
public void p(int x){
 try{
  ...
 }catch(Exception e){
  ...
 }finally{
  ...
 }
}
 
第二、對於處理不了的異常或者要轉型的異常,在方法的聲明處通過throws語句拋出異常例如:
public void test1() throws MyException{
 ...
 if(....){
  throw new MyException();
 }
        如果每個方法都是簡單的拋出異常,那么在方法調用方法的多層嵌套調用中,Java虛擬機會從出現異常的方法代碼塊中往回找,直到找到處理該異常的代碼塊為止。然后將異常交給相應的catch語句處理。如果Java虛擬機追溯到方法調用棧最底部main()方法時,如果仍然沒有找到處理異常的代碼塊,將按照下面的步驟處理:
        第一、調用異常的對象的printStackTrace()方法,打印方法調用棧的異常信息。
        第二、如果出現異常的線程為主線程,則整個程序運行終止;如果非主線程,則終止該線程,其他線程繼續運行。
        通過分析思考可以看出,越早處理異常消耗的資源和時間越小,產生影響的范圍也越小。因此,不要把自己能處理的異常也拋給調用者。
        還有一點,不可忽視:finally語句在任何非虛擬機關閉的情況下都必須執行的代碼,這樣可以保證一些在任何情況下都必須執行代碼的可靠性。比如,在數據庫查詢異常的時候,應該釋放JDBC連接等等。finally語句先於return語句執行,而不論其先后位置,也不管是否try塊出現異常。finally語句唯一不被執行的情況是方法執行了System.exit()方法。System.exit()的作用是終止當前正在運行的 Java 虛擬機。finally語句塊中不能通過給變量賦新值來改變return的返回值,也建議不要在finally塊中使用return語句,沒有意義還容易導致錯誤。
 
        最后還應該注意一下異常處理的語法規則:
        第一、try語句不能單獨存在,可以和catch、finally組成 try...catch...finally、try...catch、try...finally三種結構,catch語句可以有一個或多個,finally語句最多一個,try、catch、finally這三個關鍵字均不能單獨使用。
        第二、try、catch、finally三個代碼塊中變量的作用域分別獨立而不能相互訪問。如果要在三個塊中都可以訪問,則需要將變量定義到這些塊的外面。
        第三、多個catch塊時候,Java虛擬機會匹配其中一個異常類或其子類,就執行這個catch塊,而不會再執行別的catch塊。
        第四、throw語句后不允許有緊跟其他語句,因為這些沒有機會執行。
        第五、如果一個方法調用了另外一個聲明拋出異常的方法,那么這個方法要么處理異常,要么聲明拋出。
 
        那怎么判斷一個方法可能會出現異常呢?一般來說,方法聲明的時候用了throws語句,方法中有throw語句,方法調用的方法聲明有throws關鍵字。
 
        throw和throws關鍵字的區別
        throw用來拋出一個異常,在方法體內。語法格式為:throw 異常對象。
        throws用來聲明方法可能會拋出什么異常,在方法名后,語法格式為:throws 異常類型1,異常類型2...異常類型n。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM