Java中的異常處理

來源:互聯網
上載者:User

標籤:

1:異常(Exception)的概念

  Java異常時Java提供的用於處理常式中錯誤的一種機制

2:處理方式

  Java是採用物件導向的方式來處理異常的。

  • 拋出異常:在執行一個方法是,如果發生異常,則這個方法產生代表該異常的一個對象,停止當前執行路徑,並把異常對象提交給JRE
  • 捕獲異常:JRE得到該異常後,尋找相應的代碼來處理該異常,JRE在方法的調用棧尋找,從產生的異常方法中開始回溯,直到找到相應的異常處理代碼為止。

3:異常分類:

  JDK中定義了很多異常類,這些類對應了各種各樣可能出現的例外狀況事件,所有異常對象都是派生於Thorwable類的一個執行個體。如果內建的異常類不能夠滿足需要,還可以建立自己的異常類

  

  Error(錯誤)類 --- 不需要我們管 --- 唯一的辦法:重啟

  Exception 中    Checked Exception是編譯器會檢查的

           RuntimeException編譯器不會檢查,比如:

            1:int a = 1/0;  

            2: null 指標異常(NullPointerException):,一般是對象為空白

            3:數組越界(ArrayIndexOutOfBoundsException)

            4:對象轉化出錯(ClassCastException)  可以想判斷  e.g: obj instanceof

            5:數字格式異常(NumberFormatException)

              e.g  String str = "153153ag";

                 Integer i = new Integer(str);

4:異常的處理辦法第一種:      捕獲異常(try catch finally)

  try:

  • 一個try語句必須帶有至少一個catch語句塊或一個finally語句塊..
  • 當異常處理的代碼執行結束以後,是不會回到try語句去執行尚未執行的代碼

  catch:

  • 每個try語句塊可以伴隨一個或多個catch語句,用於處理可能產生的不同類型的異常對象
  • 常用方法:

     toString()方法:顯示異常的類名和產生異常的原因

     getMessage()方法: 只顯示產生異常的原因,但不顯示類名。

     PrintStackTrace()方法: 用來跟蹤例外狀況事件發生時堆棧的內容。

      -- 這些方法均繼承自Throwable類

  • 如果異常類之間有繼承關係,在順序安排上需注意,越是頂層的類,越放在下面,再不然就直接把多餘的catch省略掉

  finally

  • 通常在finally中關閉程式塊已開啟的資源,比如:檔案流,釋放資料庫連接等。

  執行個體:

  檔案操作:

    

   這個問題是因為檔案可能不存在

 

     

代碼:

import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;public class TestFileReader {    public static void main(String args[]) {        FileReader reader = null;        try {            reader = new FileReader("d:/lp.txt");            char c = (char) reader.read();            char c2 = (char) reader.read();            System.out.println("" + c + c2);        } catch (FileNotFoundException e) {            e.printStackTrace();        }        //這裡的兩個catch不能換位置  因為IOException是FileNotFoundException的父類        catch (IOException e) {            e.printStackTrace();        } finally {            try {                reader.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}
檔案操作

 

  try - catch - finally - return 的執行順序:    

  代碼:

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class TestFileReader {    public static void main(String args[]) {        String str = new TestFileReader().openFile();        System.out.println(str);    }    private String openFile() {        System.out.println("aaa");        try {            FileInputStream fis = new FileInputStream("d:/lp.txt");            int a = fis.read();            System.out.println("bbb");            return "step1";                    } catch (FileNotFoundException e) {            System.out.println("catching!!");            e.printStackTrace();            return "step2";        } catch (IOException e) {            e.printStackTrace();            return "step3";        }finally{            System.out.println("finally");        }    }    }
無異常代碼

 

  結果:

      

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class TestFileReader {    public static void main(String args[]) {        String str = new TestFileReader().openFile();        System.out.println(str);    }    private String openFile() {        System.out.println("aaa");        try {            FileInputStream fis = new FileInputStream("d:/wu.txt");            int a = fis.read();            System.out.println("bbb");            return "step1";                    } catch (FileNotFoundException e) {            System.out.println("catching!!");            e.printStackTrace();            return "step2";        } catch (IOException e) {            e.printStackTrace();            return "step3";        }finally{            System.out.println("finally");        }    }    }
有異常代碼

 

  結果:

  

  結論:1:執行try catch   給傳回值賦值

      2:執行finally

      3:return 

 5:異常處理辦法第二種:   throws字句

       

 

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.