java異常學習

來源:互聯網
上載者:User

標籤:

一、從根部異常可以分為Erro和Exception兩大類他們都繼承自Thorwable: 

 Error一般指的是一些無法挽回的錯誤,當這些錯誤發生後,程式就會直接死掉,無法繼續運行。

 Exception : 一般分為:運行時異常和非運行時異常,

    運行時異常:指的是程式已經通過編譯,在程式運行時產生了異常,這個是由於程式自己編寫的代碼不夠健壯,考慮不夠完善導致的。如果程式員足夠認真這些是完全可以避免的。

    非運行時異常:是程式碼語法錯誤 ,在程式編譯時間就不能通過而拋出的異常。

public class Test {        public static void main(String[] args) {          String filename = "d:\\test.txt";          try {              FileReader reader = new FileReader(filename);              Scanner in = new Scanner(reader);              String input = in.next();              int value = Integer.parseInt(input);              System.out.println(value);          } catch (FileNotFoundException e) {              e.printStackTrace();          } finally {              System.out.println("this is finally block!");          }      }  } 

如果d盤根目錄下沒有test.txt的話,該程式拋出異常:

this is finally block!
java.io.FileNotFoundException: d:\test.txt (系統找不到指定的檔案。)
 at java.io.FileInputStream.open(Native Method)
 at java.io.FileInputStream.<init>(FileInputStream.java:106)
 at java.io.FileInputStream.<init>(FileInputStream.java:66)
 at java.io.FileReader.<init>(FileReader.java:41)
 at Test.main(Test.java:10)
可以看出上面的異常拋出時沒有指名異常的具體發生出處。

我們將test.txt中的2322改成abc,看看結果:

this is finally block!
Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"
 at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
 at java.lang.Integer.parseInt(Integer.java:447)
 at java.lang.Integer.parseInt(Integer.java:497)
 at Test.main(Test.java:13)

這時我們會發現,該異常指明了異常的內容和發生的出處,那時因為該異常我們沒有對它進行聲明,而FileNotFoundException我們對它進行了聲明所以,在此異常拋出時沒有指名它的出處。

總結: 異常的一般處理,如果我們聲明一個異常秉承並處理它,則在該異常發生時會進行相應的處理。如果對於一個異常我們沒有對它進行聲明處理,那麼在異常發生時,回去調用相關的方法,如果該方法也沒有聲明處理,則它會一直回溯直至main函數。

二、常見的異常:

  NullPointerException null 指標、ClassNotFoundException  找不到類 、ClassCastException   類型轉換、ArithmeticException   算數條件

  ArrayIndexOutOfBoundsException  數組越界

三、自訂異常:

  使用自訂異常的原因:一、java不可能封裝所有我們在程式可能用到的異常。二、java封裝的異常提示資訊部明了。基於這兩點我們可以進行自訂異常的建立,來改善異常的處理。

pbulic  class MyException  extends RuntimeException{    public MyException(){    }      pubic MyException(String message){         super(message);      }  }

四、try/catch/finally的使用方式:

在進行異常處理時,盡量不要將catch 和 finally放在一起使用。

public class  FinallyTest{    public static main(String[] agrs){         boolean file = open();    }    public static boolean open(){      string  filename = "d://test.txt";          try{            try{                  FileReader  file = new FileReader(filename);                 Scanner  sn = new Scanner(file);                  String  str = sn.next();                   int   num = Integer.paseInt(str);                    System.out.println(num);            }finally{                //關閉一些資源            }        }catch(exception e){            Systme.out.println("檔案內容輸出異常");        }    }}                                            

  盡量將catch和finally分開處理,catch進行異常的捕捉,finally進行一些流的關閉。。。

 

java異常學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.